redis3.0后出现了redis-cluster集群模式,不同于redis-sentinel模式的是玩全去中心化,没有主从之分,分布式存储,连接任何一个节点都可以,为了避免出现单点故障 所以我们一般都采用主备模式
最简单的集群三对主备,6个节点(这里采用3台机,伪集群)
192.168.172.72:7001 (master1)
192.168.172.72:7002 (slave1)
192.168.172.73:7003 (master)
192.168.172.737004 (slave2)
192.168.172.74:7005 (master3)
192.168.172.74:7006 (slave3)
1、安装环境依赖:
redis集群时需要使用一个ruby的脚本来完成集群,ruby环境安装一台机即可,无需每个节点都安装
(1) 安装ruby环境
命令: yum -y install ruby
或去http://www.ruby-lang.org/zh_cn/downloads下载,源码安装
解压后进入解压目录
#./configure
#make
#make install
(2) 安装ruby的包管理器
命令:yum -y install rubygems
或去https://rubygems.org/gems/rubygems-update下载,gem安装
命令:gem install rubygems-update-2.7.6.gem
(3) 安装ruby的gem包
去https://rubygems.org/gems/redis/下载
命令:gem install redis-3.3.3.gem
2、redis安装与配置
(1)redis基本安装
以192.168.172.72为例安装,去https://redis.io/下载稳定版,上传至服务器
例如:/opt/soft/redis/ 下,进行解压
# cd /opt/soft/redis
# tar zxvf redis-4.0.9.tar.gz
然后进入到解压的目录src下,make进行编译
#make
编译无误后make install进行安装,这里安装到了/usr/local/redis-cluster
# make install PREFIX=/usr/local/redis-cluster
(2)redis文件夹配置
安装后会在/usr/local/redis-cluster 目录下出现bin文件夹,里边包含了redis的基本命令
在redis-cluster下创建data目录,用作数据存储位置
#mkdir /usr/local/redis-cluster/7001/data
#mkdir /usr/local/redis-cluster/7002/data
把/usr/local/redis-cluster/bin文件夹分别复制到7001、7002文件夹下
#cp -r/usr/local/redis-cluster/bin/ /usr/local/redis-cluster/7001/
#cp -r/usr/local/redis-cluster/bin/ /usr/local/redis-cluster/7002/
进入到redis的安装目录下的src目录下找到到 redis-trib.rb这个文件, 这是创建集群时需要的脚本,
将其复制到/usr/local/redis-cluster/7001/bin/下
#cp redis-trib.rb /usr/local/reids-cluster/7001/bin/
分别在7001,7002下创建conf文件夹
#mkdir /usr/local/redis-cluster/7001/conf
#mkdir /usr/local/redis-cluster/7002/conf
分别把redis配置文件复制到conf下
#cp redis.conf /usr/local/reids-cluster/7001/conf
#cp redis.conf /usr/local/reids-cluster/7002/conf
(3)配置redis
在redis-cluster下vim 7001/conf/redis.conf 编辑进行配置
daemonize yes #默认no,把no改为yes,yes表示守护进程启动redis
pidfile /var/run/redis/redis-7001.pid #redis进程路径
port 7001 #默认端口6379,可自行修改
cluster-enabled yes #去掉注释,开启集群
cluster-config-file nodes_7001.conf #去掉注释,集群信息存放文件
cluster-node-timeout 15000 #去掉注释,集群节点通信时,超过这个时间,即节点失联,就视为节点故障
bind 192.168.172.72 #默认127.0.0.1 修改后可远程登录
dir /usr/local/redis-cluster/7001/data/ #redis数据存储路径,rdb、aof文件也会写在这个目录appendonly no
7002进行同样操作,vim 7002/conf/redis.conf ,只需修改对应地方端口为7002即可
(4)文件分发
把配置好的redis-cluster文件夹分别复制到另外两台机上
#scp -r /usr/local/reids-cluster/ 192.168.172.73:`pwd`
#scp -r /usr/local/reids-cluster/ 192.168.172.74:`pwd`
复制时若之前没有ssh免密钥操作,需输入密码才能进行复制
复制成功后,分别编辑每个节点conf下的redis.conf,修改对应地方端口即可
3、 创建集群
(1) 创建一个能够批量启动的脚本程序
命令:vim start-cluster.sh(要开启节点间ssh免登录)
#!/bin/sh
ssh 192.168.172.72 "cd /usr/local/reids-cluster/redis7001/bin;./redis-server ../conf/redis.conf;exit"
ssh 192.168.172.72 "cd /usr/local/reids-cluster/redis7002/bin;./redis-server ../conf/redis.conf;exit"
ssh 192.168.172.73 "cd /usr/local/reids-cluster/redis7003/bin;./redis-server ../conf/redis.conf;exit"
ssh 192.168.172.73 "cd /usr/local/reids-cluster/redis7004/bin;./redis-server ../conf/redis.conf;exit"
ssh 192.168.172.74 "cd /usr/local/reids-cluster/redis7005/bin;./redis-server ../conf/redis.conf;exit"
ssh 192.168.172.74 "cd /usr/local/reids-cluster/redis7006/bin;./redis-server ../conf/redis.conf;exit"
echo "the redis-cluster start is OK!"
添加启动脚本可执行权限
命令:chmod +x start-cluster.sh
执行这个批量启动的脚本,启动各个节点
命令:[root@localhost redis-cluster]# ./start-cluster.sh
(2)开始创建集群,每个主节点创建一个从节点,命令:
./redis-trib.rb create --replicas 1 192.168.172.72:7001 192.168.172.72:7002 192.168.172.73:7003 192.168.172.73:7004 192.168.172.74:7005 192.168.172.74:7006
控制台会显示如下信息 输入 yes
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.172.72:7001
192.168.172.73:7003
192.168.172.74:7005
Adding replica 192.168.172.73:7004 to 192.168.172.72:7001
Adding replica 192.168.172.74:7006 to 192.168.172.73:7003
Adding replica 192.168.172.72:7002 to 192.168.172.74:7005
M: b5b8f0576fb874978b60e5c1bf15474510389d05 192.168.172.72:7001
slots:0-5460 (5461 slots) master
S: 5326c627de6e98985e574f1749dda8cb02db4bd8 192.168.172.72:7002
replicates 003b04d7bb9c85ccc7e37223e86cea9d1bd8272a
M: 48af5d0273eae9ceeb7cb660cadc18c9bb093f9c 192.168.172.73:7003
slots:5461-10922 (5462 slots) master
S: 4c6f0b5ec319210e7e5ed7f6592e4bfb01b4aa2f 192.168.172.73:7004
replicates b5b8f0576fb874978b60e5c1bf15474510389d05
M: 003b04d7bb9c85ccc7e37223e86cea9d1bd8272a 192.168.172.74:7005
slots:10923-16383 (5461 slots) master
S: 577601ffa7d989f4399debe4803af04f222c38f3 192.168.172.74:7006
replicates 48af5d0273eae9ceeb7cb660cadc18c9bb093f9c
Can I set the above configuration? (type 'yes' to accept): yes
如果控制台输出如下信息表集群创建成功
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.172.72:7001)
M: b5b8f0576fb874978b60e5c1bf15474510389d05 192.168.172.72:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 48af5d0273eae9ceeb7cb660cadc18c9bb093f9c 192.168.172.73:7003
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 577601ffa7d989f4399debe4803af04f222c38f3 192.168.172.74:7006
slots: (0 slots) slave
replicates 48af5d0273eae9ceeb7cb660cadc18c9bb093f9c
M: 003b04d7bb9c85ccc7e37223e86cea9d1bd8272a 192.168.172.74:7005
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 5326c627de6e98985e574f1749dda8cb02db4bd8 192.168.172.72:7002
sl
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
(3) 停止集群,编写停止脚本
命令:vim stop-cluster.sh
#!/bin/sh
echo "redis-cluster is stopping....."
/usr/local/reids-cluster/redis7002/bin/redis-cli -h 192.168.172.72 -p 7001 shutdown
/usr/local/reids-cluster/redis7002/bin/redis-cli -h 192.168.172.72 -p 7002 shutdown
/usr/local/reids-cluster/redis7002/bin/redis-cli -h 192.168.172.73 -p 7003 shutdown
/usr/local/reids-cluster/redis7002/bin/redis-cli -h 192.168.172.73 -p 7004 shutdown
/usr/local/reids-cluster/redis7002/bin/redis-cli -h 192.168.172.74 -p 7005 shutdown
/usr/local/reids-cluster/redis7002/bin/redis-cli -h 192.168.172.74 -p 7006 shutdown
echo "Ok!redis-cluster have been stopped!"
添加启动脚本可执行权限
命令:chmod +x start-cluster.sh
执行脚本,停止集群
命令:[root@localhost redis-cluster]# ./stop-cluster.sh
(4)重新启动集群
[root@localhost redis-cluster]# ./start-cluster.sh
(5)查看Redis集群
可以连接集群中的任意一个节点进行查看
命令:[root@localhost redis-cluster]# ./redis01/redis-cli -h 192.168.172.71 -p 7001 -c(-c表示集群)
连接成功后
cluster info 打印集群的信息
192.168.172.72: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:7
cluster_my_epoch:7
cluster_stats_messages_sent:9873
cluster_stats_messages_received:9860
cluster nodes 列出集群当前已知的所有节点(node),以及这些节点的相关信息
192.168.172.72:7001> cluster nodes
3c143f98ab241692f997ea0275be7e3d357640d8 192.168.172.72:7001 myself,master - 0 1525126958253 2 connected 5461-10922 0 0 1 connected
927272450f6d014af7116de6ab4aa8b3fe873282 192.168.172.72:7004 slave a01bff6a9416a9f0ce77c55cfc3ccc78d24afb5b
a01bff6a9416a9f0ce77c55cfc3ccc78d24afb5b 192.168.172.73:7002 master - 0 1525126961341 7 connected 0-5460
03ecc83b53dfa1419ce830a09457a0c746ad3d95 192.168.172.73:7003 master - 0 1525126957212 3 connected 10923-16383
9c0b0f2564ee476aaf1a2ecacffd9790e7afb972 192.168.172.74:7006 slave 03ecc83b53dfa1419ce830a09457a0c746ad3d95 0 1525126956185 6 connected
cbf1baa11eb49552b35d937dedee76f16db8b8be 192.168.172.74:7005 slave 3c143f98ab241692f997ea0275be7e3d357640d8 0 1525126960308 5 connected