本文是在root用户下搭建的,需要关闭防火墙。
1、需要的安装包
zlib-1.2.11
ruby-2.4.2
redis-3.3.1.gem
redis-3.2.8
2、集群构成
总共三台服务器:redis1, redis2, redis3
每台服务器上运行两个 redis 服务,一主一备。 分别运行于 7000 和 7001 端口。
3、安装zlib
解压
tar -zxvf zlib-1.2.11.tar.gz -C ../../software/
安装
进入刚解压的目录:
cd ../../software/
重命名:
mv zlib-1.2.11/ zlib
安装:
./configure(--prefix=/usr/local/ruby) #后面的括号中参数是可选项,保持默认也可以
make
make install
4、安装ruby
解压
tar -zxvf ruby-2.4.2.tar.gz -C ../../software/
安装
进入刚解压的目录:
cd ../../software/
重命名:
mv ruby-2.4.2/ zlib
安装:
./configure(--prefix=/usr/local/ruby) #后面的括号中参数是可选项,保持默认也可以
make
make install
5、安装ruby的redis依赖
gem install -l packages/redis-3.3.1.gem
出现如下信息表示安装成功:
6、安装redis
解压
tar -zxvf redis-3.2.8.tar.gz -C ../../software/
安装
进入刚解压的目录:
cd ../../software/
重命名:
mv redis-3.2.8/ zlib
安装:
./configure(--prefix=/usr/local/ruby) #后面的括号中参数是可选项,保持默认也可以
make
make install
至此,如果输入 redis-server 能看到如下图则表示安装成功:
7、集群配置文件修改
创建 /redis/cluster/7000/ 目录和 /redis/cluster/7001/ 目录。将原解压的 redis 目录里的 redis.conf 文件复制到这两个文件夹下:
cp redis.conf /redis/cluster/7000/
cp redis.conf /redis/cluster/7001/
然后修改这两个文件,以 /redis/cluster/7000/ 目录下的 redis.conf 为例:
bind redis1
port 7000
daemonize yes
pidfile /redis/cluster/7000/redis_7000.pid
appendonly yes
cluster-enabled yes
cluster-config-file /redis/cluster/7000/nodes_7000.conf
cluster-node-timeout 5000
上面修改的配置说明如下:
port 7000 #端口7000
daemonize yes #设置redis后台运行
pidfile /redis/cluster/7000/redis_7000.pid #pidfile文件对应7000
appendonly yes #aof日志打开
cluster-enabled yes #开启集群 把注释#去掉
cluster-config-file /redis/cluster/7000/nodes_7000.conf #集群自动生成的配置文件路径
cluster-node-timeout 5000 #请求超时时间,5秒没问题
而 7001 文件夹下的 redis.conf 文件需要把上面修改的所有 7000 改成 7001 ,改完后把 /redis 目录发送到另外两台机器上:
scp -r /redis/ root@redis2:/
scp -r /redis/ root@redis3:/
另外两台只需要修改的是 7000 和 7001 目录下的 redis.conf 文件里的 bind 就行,将 redis1 改为 redis2,redis3
8、启动redis
在每台 redis 服务器上运行以下命令:
cd /redis/cluster/7000/
redis-server redis.conf
cd /redis/cluster/7001/
redis-server redis.conf
两个 cd 命令最好不要省略,这样可以保证各自生成的临时文件都在对应的文件夹中。
注:重启由于会生成 aof 文件和 nodes.conf 文件导致重启失败,故可以在重启的时候删除那两个文件:
cd /redis/cluster/7000/
rm -rf appendonly.aof
rm -rf nodes_7000.conf
redis-server redis.conf
cd /redis/cluster/7001/
rm -rf appendonly.aof
rm -rf nodes_7001.conf
redis-server redis.conf
9、构建集群
由于官方自带的redis-trib.rb脚本在构建集群的时候会出现同一份数据的主从出现在同一台主机中的现象(且出现概率是100%。这个bug很早之前就有人提出过,但是一直没修复),因此要对构建集群的脚本做一些修改。
打开 /root/software/redis/src/redis-trib.rb,搜索 masters.each{|m| puts m},在后面加上一行 interleaved.push interleaved.shift,关闭保存即可。
执行命令构建集群:
cd /root/software/redis/src/
./redis-trib.rb create --replicas 1 192.168.21.139:7000 192.168.21.140:7000 192.168.21.141:7000 192.168.21.139:7001 192.168.21.140:7001 192.168.21.141:7001
注:在这里没有使用域名,由于我尝试多次使用域名都会导致构建集群失败,所以改用 ip。
执行命令后出现如下图,输入 yes 接受分配:
检查一下同一份数据的主从节点不在同一个主机中即可。
看到如下信息表示集群构建成功:
10、测试
执行:
redis-cli -c -h redis1 -p 7000
在 redis 命令行执行以下命令,查看结果: