1 Redis集群的搭建
1.1 redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.通过投票机制
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置set一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
https://redis.io/topics/cluster-spec
1.2 Redis集群的搭建
master --slave
至少3个节点,为了集群的高可用,为每一个节点增加一个备份机。(总共6台服务器)。
搭建伪分布式集群方案:在一台机器里面运行6个redis实例。端口需要不同(7001-7006)
1.2.1 集群搭建环境
1、使用ruby脚本搭建集群。需要ruby的运行环境。
安装ruby:
yum -y install ruby
yum -y install rubygems
2、上传redis-3.0.0.gem到linux中
3、安装ruby运行时所使用的包
[root@localhost ~]# gem install redis-3.0.0.gem
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation forredis-3.0.0...
Installing RDoc documentation forredis-3.0.0...
[root@localhost ~]#
查看redis-trib.rb 脚本所在的目录:
[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb
1.2.2 搭建步骤
需要6台redis服务器。搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口7001-7006
使用之前搭建好的redis实例作为模板。
注意:搭建前如果节点里有数据,需要删除(rdb文件,aof文件)。
第一步:创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。
Ø cd到/usr/local下并创建目录:
[root@localhost local]# mkdir redis-cluster |
Ø copy 之前搭建好的redis 并改名为redis01
[root@localhost local]# cp redis/ redis-cluster/redis01 -r |
Ø 进入redis-cluster目录中cd到redis01的bin目录,删除数据文件
[root@localhost local]# cd redis-cluster/redis01/bin [root@localhost bin]# rm -rf *.rdb *.aof |
Ø 修改redis.conf,取消注释,如图
[root@localhost bin]# vim redis.conf |
按ESC :wq
保存退出。
Ø cd到redis-cluster目录
Ø copy六份并分别命名为redis02,redis03,redis04,redis05,redis06
[root@localhost redis-cluster]# cp redis01 redis02 -r [root@localhost redis-cluster]# cp redis01 redis03 -r [root@localhost redis-cluster]# cp redis01 redis04 -r [root@localhost redis-cluster]# cp redis01 redis05 -r [root@localhost redis-cluster]# cp redis01 redis06 -r |
Ø cd到每一个实例的bin目录,修改每一个redis实例的端口分别改为7001-7006
[root@localhost bin]# vim redis.conf |
第二步:启动每个redis实例。
vim redis-cluster-start-all.sh
添加如下文字到文件中:
cd /usr/local/redis-cluster/redis01/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis02/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis03/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis04/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis05/bin ./redis-server redis.conf
cd /usr/local/redis-cluster/redis06/bin ./redis-server redis.conf |
Ø 修改文件:redis-cluster-start-all.sh的权限,让其可执行。
chmod u+x redis-cluster-start-all.sh |
Ø 执行启动
[root@localhost redis-cluster]#./redis-cluster-start-all.sh
第三步:使用ruby脚本搭建集群。
Ø 从解压目录下的src下的拷贝redis-trib.rb文件到redis-cluster目录中
Ø 执行创建:脚本如下:
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006 |
输入命令执行:
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006 >>> Creating cluster Connecting to node 192.168.25.153:7001: OK Connecting to node 192.168.25.153:7002: OK Connecting to node 192.168.25.153:7003: OK Connecting to node 192.168.25.153:7004: OK Connecting to node 192.168.25.153:7005: OK Connecting to node 192.168.25.153:7006: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 Adding replica 192.168.25.153:7004 to 192.168.25.153:7001 Adding replica 192.168.25.153:7005 to 192.168.25.153:7002 Adding replica 192.168.25.153:7006 to 192.168.25.153:7003 M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001 slots:0-5460 (5461 slots) master M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002 slots:5461-10922 (5462 slots) master M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003 slots:10923-16383 (5461 slots) master S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004 replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005 replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01 S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006 replicates 2935007902d83f20b1253d7f43dae32aab9744e6 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.25.153:7001) M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001 slots:0-5460 (5461 slots) master M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002 slots:5461-10922 (5462 slots) master M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003 slots:10923-16383 (5461 slots) master M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004 slots: (0 slots) master replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005 slots: (0 slots) master replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01 M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006 slots: (0 slots) master replicates 2935007902d83f20b1253d7f43dae32aab9744e6 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@localhost redis-cluster]# |
第四步创建关闭集群的脚本:
首先使用:vim 命令创建一个文件 redis-cluster-stop-all.sh
编辑文件,添加如下:
cd /usr/local/redis-cluster/redis01/bin ./redis-cli -p 7001 shutdown
cd /usr/local/redis-cluster/redis02/bin ./redis-cli -p 7002 shutdown
cd /usr/local/redis-cluster/redis03/bin ./redis-cli -p 7003 shutdown
cd /usr/local/redis-cluster/redis04/bin ./redis-cli -p 7004 shutdown
cd /usr/local/redis-cluster/redis05/bin ./redis-cli -p 7005 shutdown
cd /usr/local/redis-cluster/redis06/bin ./redis-cli -p 7006 shutdown |
修改文件:redis-cluster-stop-all.sh的权限,让其可执行。
chmod u+x redis-cluster-stop-all.sh
1.3 集群的使用方法
Redis-cli连接集群。
[root@localhost redis-cluster]#redis01/bin/redis-cli -p 7002 -c
-c:代表连接的是redis集群
-p:表示连接哪一个端口
-h:表示host 表示连接哪一个台服务器 默认是本地
使用命令操作redis是和单机版的一样。