创建一个redis源码目录,并转到该目录
mkidr redis
cd redis
下载源码并编译。
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar xzf redis-4.0.11.tar.gz
cd redis-4.0.11
make
PS:如果出现下面的结果:
make[2]: Entering directory `/root/redis/redis-4.0.11/deps/hiredis'
gcc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
make[2]: gcc: Command not found
make[2]: *** [net.o] Error 127
make[2]: Leaving directory `/root/redis/redis-4.0.11/deps/hiredis'
make[1]: *** [hiredis] Error 2
make[1]: Leaving directory `/root/redis/redis-4.0.11/deps'
make: [persist-settings] Error 2 (ignored)
说明没有安装 gcc 编译器。需要安装一下。
yum install gcc
安装gcc后需要重新解压一份新的Redis。再执行 make
编译成功的话会显示:
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/root/redis/redis-4.0.11/src'
至此,我们已经获取到了Redis的安装包。src目录下就是一个完整可用的Redis了。
现在开始搭建一个单机的redis集群。主备模式(三主三从)。
以端口号为名称创建6个文件夹:
mkdir redis-cluster
cd redis-cluster
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
把我们之前编译好的redis拷贝一份到 9001 中,并修改 redis.config
文件中的配置信息
cd 9001
vim redis.config
主要修改下面几个配置:
port 9001(每个节点的端口号)
daemonize yes(开启守护线程)
bind 192.168.119.131(绑定当前机器 IP,需要注释掉,否则外网无法访问)
dir ./data(数据文件存放位置)
pidfile /var/run/redis_9001.pid(pid 9001和port要对应)
cluster-enabled yes(默认是注释掉的,需要开启启动集群模式)
cluster-config-file nodes9001.conf(默认是注释掉的,9001和port要对应)
cluster-node-timeout 15000(默认是注释掉的,超时时间)
appendonly yes (redis数据持久化)
然后把 9001 下的 redis 依次拷贝到其他5个端口的文件夹下。
cp -r ./* ./../9001/
cp -r ./* ./../9002/
cp -r ./* ./../9003/
cp -r ./* ./../9004/
cp -r ./* ./../9005/
cp -r ./* ./../9006/
依次修改每个端口下的redis.config
,把端口改成与文件夹一致。到这一步,我们相当于在本地主机上部署了6个Redis,依次启动每个端口的redis
cd 9001
./src/redis-server redis.conf
... ...(启动其他端口的redis)
由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口。
yum install ruby
yum install rubygems
gem install redis
在执行 gem install redis
的时候出现了下面的错误
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
意思是我们的 Ruby版本太低了,要升级一下Ruby。
执行一下:
curl -L get.rvm.io | bash -s stable
会获取到一个密钥:
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
让这个密钥生效一下
gpg --keyserver hkp://keys.gnupg.net --recv-keys xxx(上一步得到的key)
curl -sSL https://get.rvm.io | bash -s stable
source环境,让rvm可用:
source /etc/profile.d/rvm.sh
source /usr/local/rvm/scripts/rvm
安装 Ruby 2.3.0
rvm install 2.3.0
安装Redis接口
gem install redis
构建Redis集群
cd 9001
[root@localhost 9006]# ./src/redis-trib.rb create --replicas 1 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:9001
127.0.0.1:9002
127.0.0.1:9003
Adding replica 127.0.0.1:9005 to 127.0.0.1:9001
Adding replica 127.0.0.1:9006 to 127.0.0.1:9002
Adding replica 127.0.0.1:9004 to 127.0.0.1:9003
... ...(省略部分显示结果)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
这个时候我们的集群已经搭建好了。找一台redis连接上看一下
./src/redis-cli -c -p 9001
127.0.0.1:9001> cluster info
127.0.0.1:9001> cluster nodes
现在集群是搭建好了,在服务器上测试一下是可以的,如果你要在别的机器上连接发现会发现一直连接失败。这是因为我们的redis集群没有设置密码,而且是保护模式。现在我们对这个集群设置一个密码。
集群的密码需要单独对每个机器设置,这里以 9001 为例
cd 9001
src/redis-cli -c -p 9001 shutdown
vim redis.conf
修改 requirepass 选项
requirepass ******
重启 redis
src/redis-server redis.conf
依次修改完其他的端口,外网就能通过密码访问了。
PS:如果还是不能访问,请检查一下端口是否开放。
linux 下的开放端口命令。下面的命令会开放 8080端口
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
这个时候如果你在服务器上会发现 redis-trib.sh
这个脚本好像没办法连接连接上redis了
cd 9001
./src/redis-trib.rb check 127.0.0.1:9001
[ERR] Sorry, can't connect to node 127.0.0.1:9001
这个是因为我们的Redis集群配置信息没有更新密码配置,需要手动修改。
cd /usr/local/rvm/gems/ruby-2.3.0/gems/redis-4.0.2/lib/redis
vim client.rb
PS: 如果找不到 client.rb
可以用find / -name 'client.rb'命令
查找一下
修改 passord 配置:
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "******",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}
再试一下:
./redis-trib.rb check 127.0.0.1:9001
应该能看到 redis集群的一些信息了
最后,遇到了一个问题,我用IDEA 的 Iedis 连接别的redis集群能正常连接,但是连接刚刚搭建的集群就是连接不上。不知道为什么,一直没有解决。
不过 用 Redis Desktop Manager 是可以连接上的。
PS:为了安装一个redis 我已经重装了10多次系统了。。。