redis3.0开始支持cluster
搭建环境:centos7,redis4.0.6
服务器ip
192.168.135.23 (7001、7002)
192.168.135.196(7004、7005)
192.168.135.229(7007、7008)
redis cluster安装
1、下载,解压,编译安装
官网下载需要的版本:http://download.redis.io/releases/
#我的安装包存放路径
cd /www/package/
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
tar -zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make
二进制文件编译完成后在src
目录下.
创建集群目录,并将相关文件复制到该目录下(三个服务器相同操作)
mkdir /usr/local/redis_cluster
mkdir /usr/local/redis_cluster/conf
2、三台服务器每台创建两个redis节点
192.168.135.23 (7001、7002)192.168.135.196(7004、7005)192.168.135.229(7007、7008)复制成不同端口的配置文件好做记录
[root@localhost redis-4.0.6]# cp redis.conf /usr/local/redis_cluster/conf/redis_7001.conf
[root@localhost redis-4.0.6]# cp redis.conf /usr/local/redis_cluster/conf/redis_7002.conf
[root@localhost src]# cp redis-cli redis-server redis-trib.rb redis-benchmark /usr/local/redis_cluster/
3、修改配置文件,分别对redis_7001.conf,redis_7002.conf做以下修改
daemonize yes //redis后台运行
pidfile ./redis_7001.pid //pidfile文件对应7001,7002
port 7001 //端口7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7001.conf //集群的配置 首次启动自动生成 7001,7002,记录了集群节点对应关系
cluster-node-timeout 5000 //请求超时 5秒
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
bind 0.0.0.0 //bind用于指定本机网卡对应的IP地址(任意)
192.168.135.196(7004、7005)192.168.135.229(7007、7008)这两台配置文件和上面一样,只需改下端口
4、启动三台服务器的6个节点,启动方式相同
[root@localhost redis-4.0.6]# cd /usr/local/redis_cluster/conf
[root@localhost redis-4.0.6]# ../redis-server redis_7001.conf
[root@localhost redis-4.0.6]# ../redis-server redis_7002.conf
192.168.135.196(7004、7005)192.168.135.229(7007、7008)同上操作
5、查看是否启动成功
ps -ef | grep redis #查看是否启动成功
netstat -tnlp | grep redis #可以看到redis监听端口
6、创建集群
上面已经创建好了集群要用的6个节点,把上面这些节点串起来就好了,用官方提供的工具redis-trib.rb (/usr/local/redis_cluster/redis-trib.rb)
它是用ruby写的一个程序,所以我们还得安装ruby
请看这里:https://blog.csdn.net/u010533511/article/details/89389906
确认上面6个节点都启动了,也有了Ruby执行环境,可以开始将之前的6个实例组建成集群了。
/usr/local/redis_cluster/redis-trib.rb create --replicas 1 192.168.135.23:7001 192.168.135.23:7002 192.168.135.196:7004 192.168.135.196:7005 192.168.135.229:7007 192.168.135.229:7008
--replicas 1表示为集群的master节点创建1个slave。那么6个实例里,有三个master,有三个是slave。
验证集群状态
登录集群客户端,-c标识以集群方式登录,查看集群信息:
[root@localhost redis]# ./redis-cli -h 192.168.135.23 -p 7001 -c
192.168.135.23:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:12
cluster_my_epoch:11
cluster_stats_messages_sent:29237
cluster_stats_messages_received:28685
192.168.135.23:7001> cluster nodes
0e6af5f2237483cb06626219ace5bbef8b5544c5 192.168.135.23:7002 slave eaf8a9d52111c0c93fcdf8647d8746ea8e0c894c 0 1535963996415 5 connected
e25f82935f7d3b6438e275b3094ad24be21f6865 192.168.135.229:7008 slave 21adc6fe7665a0870ea4cd4b7167dda58cdb3f2c 0 1535963997424 12 connected
21adc6fe7665a0870ea4cd4b7167dda58cdb3f2c 192.168.135.229:7007 master - 0 1535963999443 12 connected 10923-16383
c9f4679d64279d2241c61767718ac43621fab1c0 192.168.135.23:7001 myself,master - 0 0 11 connected 0-5460
eaf8a9d52111c0c93fcdf8647d8746ea8e0c894c 192.168.135.196:7004 master - 0 1535963994400 2 connected 5461-10922
bf6a7566b6a2ab50549d22bd6cf627055bce9419 192.168.135.196:7005 slave c9f4679d64279d2241c61767718ac43621fab1c0 0 1535963998434 11 connected
至此,本以为redis集群配置完成了.测试直接关掉229上的所有redis服务,结果集群挂了,原因是
redis默认会交叉配置master和slave,但是我这样创建,一直都是只有前两个交叉第三个服务器(229)上面一直是单独的master->slave
redis集群 通过选举方式进行容错,保证一台Server挂了还能跑,这个选举是全部集群超过半数以上的Master发现其他Master挂了后,会将其他对应的Slave节点升级成Master. 但是229上面的slave也一起挂了,这就导致 cluster is down
所以创建这个集群的时候应该先创建3个master 然后再创建3个slave两两交叉指定到对应的master上,如下文