创建集群 、 管理集群
一、部署Redis集群
1.1、准备6台Redis服务器
创建6台虚拟机
Ip地址 主机名
192.168.4.51 host51
192.168.4.52 host52
192.168.4.53 host53
192.168.4.54 host54
192.168.4.55 host55
192.168.4.56 host56
分别做如下配置
第1步 安装redis软件并做初始化配置
第2步 停止按照初始化配置启动的Redis服务
第3步 修改主配置文件(启用集群功能)
第4步 启动redis服务 并查看端口号
重要说明:内存里不允许有数据 不能设置连接密码
配置服务器192.168.4.51 (删除已有51 重新创建新虚拟机 做如下配置)
[root@host51 ~]# yum -y install gcc [root@host51 ~]# tar -xf redis-4.0.8.tar.gz [root@host51 ~]# cd redis-4.0.8/ [root@host51 ~]# make && make install [root@host51 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host51 ~]# /etc/init.d/redis_6379 stop [root@host51 ~]# vim /etc/redis/6379.conf bind 192.168.4.51 port 6379 cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf 保存集群信息的配置文件 cluster-node-timeout 5000 集群中主机的连接超时时间 [root@host51 ~]# [root@host51 ~]# /etc/init.d/redis_6379 start [root@host51 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.51:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.51:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置服务器192.168.4.52
[root@host52 ~]# yum -y install gcc [root@host52 ~]# tar -xf redis-4.0.8.tar.gz [root@host52 ~]# cd redis-4.0.8/ [root@host52 ~]# make && make install [root@host52 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host52 ~]# /etc/init.d/redis_6379 stop [root@host52 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf bind 192.168.4.52 port 6379 cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf 保存集群信息的配置文件 cluster-node-timeout 5000 集群中主机的连接超时时间 [root@host52 ~]# [root@host52 ~]# /etc/init.d/redis_6379 start [root@host52 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.52:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.52:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置服务器192.168.4.53
[root@host53 ~]# yum -y install gcc [root@host53 ~]# tar -xf redis-4.0.8.tar.gz [root@host53 ~]# cd redis-4.0.8/ [root@host53 ~]# make && make install [root@host53 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host53 ~]# /etc/init.d/redis_6379 stop [root@host53 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf bind 192.168.4.53 port 6379 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 [root@host53 ~]# [root@host53 ~]# /etc/init.d/redis_6379 start [root@host53 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.53:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.53:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置服务器192.168.4.54
[root@host54 ~]# yum -y install gcc [root@host54 ~]# tar -xf redis-4.0.8.tar.gz [root@host54 ~]# cd redis-4.0.8/ [root@host54 ~]# make && make install [root@host54 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host54 ~]# /etc/init.d/redis_6379 stop [root@host54 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf bind 192.168.4.54 port 6379 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 [root@host54 ~]# [root@host54 ~]# /etc/init.d/redis_6379 start [root@host54 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.54:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.54:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置服务器192.168.4.55
[root@host55 ~]# yum -y install gcc [root@host55 ~]# tar -xf redis-4.0.8.tar.gz [root@host55 ~]# cd redis-4.0.8/ [root@host55 ~]# make && make install [root@host55 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host55 ~]# /etc/init.d/redis_6379 stop [root@host55 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf bind 192.168.4.55 port 6379 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 [root@host55 ~]# [root@host55 ~]# /etc/init.d/redis_6379 start [root@host55 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.55:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.55:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置服务器192.168.4.56
[root@host56 ~]# yum -y install gcc [root@host56 ~]# tar -xf redis-4.0.8.tar.gz [root@host56 ~]# cd redis-4.0.8/ [root@host56 ~]# make && make install [root@host56 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host56 ~]# /etc/init.d/redis_6379 stop [root@host56 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf bind 192.168.4.56 port 6379 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 [root@host56 ~]# [root@host56 ~]# /etc/init.d/redis_6379 start [root@host56 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.56:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.56:6379 0.0.0.0:* LISTEN 4249/redis-server 1
分别启用6台Redis服务的集群功能
[root@host51 ~]# vim /etc/redis/6379.conf cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf 保存集群信息的配置文件 cluster-node-timeout 5000 集群中主机的连接超时时间
[root@host51 ~]# /etc/init.d/redis_6379 restart [root@host51 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.51:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.51:6379 0.0.0.0:* LISTEN 4249/redis-server 1
#配置52
[root@host52 ~]# vim /etc/redis/6379.conf cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf #保存集群信息的配置文件 cluster-node-timeout 5000 #集群中主机的连接超时时间 [root@host52 ~]# /etc/init.d/redis_6379 restart [root@host52 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.52:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.52:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置53
[root@host53 ~]# vim /etc/redis/6379.conf cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf #保存集群信息的配置文件 cluster-node-timeout 5000 #集群中主机的连接超时时间 [root@host53 ~]# /etc/init.d/redis_6379 start [root@host53 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.53:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.53:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置54
[root@host54 ~]# vim /etc/redis/6379.conf cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf 保存集群信息的配置文件 cluster-node-timeout 5000 #集群中主机的连接超时时间 [root@host54 ~]# /etc/init.d/redis_6379 restart [root@host54 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.54:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.54:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置55
[root@host55 ~]# vim /etc/redis/6379.conf cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf #保存集群信息的配置文件 cluster-node-timeout 5000 #集群中主机的连接超时时间 [root@host55 ~]# /etc/init.d/redis_6379 restart [root@host55 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.55:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.55:6379 0.0.0.0:* LISTEN 4249/redis-server 1
配置56
[root@host56 ~]# vim /etc/redis/6379.conf cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf #保存集群信息的配置文件 cluster-node-timeout 5000 #集群中主机的连接超时时间 [root@host56 ~]# /etc/init.d/redis_6379 restart [root@host56 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.56:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.56:6379 0.0.0.0:* LISTEN 4249/redis-server 1
1.2 配置管理主机 192.168.4.57
第一步:准备ruby脚本的运行环境
第二步:创建脚本
第三步:查看脚本帮助信息
]#yum -y install rubygems ruby ]#gem install redis-3.2.1.gem ]#mkdir /root/bin //创建命令检索目录 ]#tar -xf redis-4.0.8.tar.gz ]#cp redis-4.0.8/src/redis-trib.rb /root/bin/ ]#chmod +x /root/bin/redis-trib.rb 设置执行权限 ]#redis-trib.rb help (能看到帮助信息为成功)
1.3 创建集群
#在管理主机mgm57 执行创建集群的命令
创建集群的命令格式
[root@mgm57 ~]# redis-trib.rb create --replicas 数字 ip地址:端口 ip地址:端口 ip地址:端口 ....
说明,创建集群时,会把前3台服务器 配置为主服务器,剩下的其他主机全做从服务器
--replicas 从服务器的台数(指定每个主服务器有几台从服务器)
[root@mgm57 ~]# redis-trib.rb create --replicas 1 192.168.4.51:6379 192.168.4.52:6379 192.168.4.53:6379 192.168.4.54:6379 192.168.4.55:6379 192.168.4.56:6379 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.4.51:6379 192.168.4.52:6379 192.168.4.53:6379 Adding replica 192.168.4.55:6379 to 192.168.4.51:6379 Adding replica 192.168.4.56:6379 to 192.168.4.52:6379 Adding replica 192.168.4.54:6379 to 192.168.4.53:6379 M: 0eb3b7aa0493a19189cba35b0c658202cc20884b 192.168.4.51:6379 slots:0-5460 (5461 slots) master M: a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 192.168.4.52:6379 slots:5461-10922 (5462 slots) master M: f2c1bdb78d8d224c3666fa6440bdf80ba563c581 192.168.4.53:6379 slots:10923-16383 (5461 slots) master S: bdba77868965371680fa825badff59bf8ef95a81 192.168.4.54:6379 replicates f2c1bdb78d8d224c3666fa6440bdf80ba563c581 S: 11510f42bfd9cf667bab5f31c01476d94984200a 192.168.4.55:6379 replicates 0eb3b7aa0493a19189cba35b0c658202cc20884b S: fe572ce003ee634c52adc4b42d92d15f847937d7 192.168.4.56:6379 replicates a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 Can I set the above configuration? (type 'yes' to accept): yes 同意 .... .... [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. 创建成功的提示 [root@mgm57 ~]#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
创建集群失败:
1 如果所有的Redis服务都启用的集群功能 内存里也没有数据 也没设置连接密码 还是创建失败
可能是物理内存不足 导致创建失败 把没用的虚拟机删除
2 在集群中所有主机执行清除集群信息的命令 > cluster reset
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.4 查看集群信息
#查看集群统计信息
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 0 keys | 5461 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 0 keys | 5461 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
#查看集群详细信息
[root@mgm57 ~]# redis-trib.rb check 192.168.4.51:6379 >>> Performing Cluster Check (using node 192.168.4.51:6379) M: 0eb3b7aa0493a19189cba35b0c658202cc20884b 192.168.4.51:6379 slots:0-5460 (5461 slots) master 1 additional replica(s) M: f2c1bdb78d8d224c3666fa6440bdf80ba563c581 192.168.4.53:6379 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: bdba77868965371680fa825badff59bf8ef95a81 192.168.4.54:6379 slots: (0 slots) slave replicates f2c1bdb78d8d224c3666fa6440bdf80ba563c581 M: a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 192.168.4.52:6379 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 11510f42bfd9cf667bab5f31c01476d94984200a 192.168.4.55:6379 slots: (0 slots) slave replicates 0eb3b7aa0493a19189cba35b0c658202cc20884b S: fe572ce003ee634c52adc4b42d92d15f847937d7 192.168.4.56:6379 slots: (0 slots) slave replicates a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@mgm57 ~]#
二、访问集群存取数据
命令格式
]# redis-cli -c -h redis服务器的ip -p 端口号
说明:
连接集群中的任意一台服务器都可以查询数据和存储数据)
-c 连接集群中的主机 使用集群算法存储数据
2.1 在客户端连接集群中的主机
说明:
统一在Host51主机演示存储数数据
向集群中的主机存储数据一次只能存储一个变量集群算法每次只有一个计算结果
#存储数据
[root@host51 ~]# redis-cli -c -h 192.168.4.51 192.168.4.51:6379> keys * (empty list or set) 192.168.4.51:6379> set name plj -> Redirected to slot [5798] located at 192.168.4.52:6379 OK 192.168.4.52:6379> keys * 1) "name" 192.168.4.52:6379> set age 19 -> Redirected to slot [741] located at 192.168.4.51:6379 OK 192.168.4.51:6379> keys * 1) "age" 192.168.4.51:6379> set school tarena -> Redirected to slot [8455] located at 192.168.4.52:6379 OK 192.168.4.52:6379> exit
#查询数据
root@host51 ~]# redis-cli -c -h 192.168.4.56 192.168.4.56:6379> keys * 1) "school" 2) "name" 192.168.4.56:6379> get name -> Redirected to slot [5798] located at 192.168.4.52:6379 "plj" 192.168.4.52:6379> keys * 1) "name" 2) "school" 192.168.4.52:6379> get age -> Redirected to slot [741] located at 192.168.4.51:6379 "19" 192.168.4.51:6379> keys * 1) "age" 192.168.4.51:6379> exit [root@host51 ~]#
2.2 集群存储数据的工作原理 (!!!重点难点!!!)
Redis集群是如何实现数据的分布式存储的?
存储数据和查询数据时 调用集群算法 集群算法会计算出1个数字, 数字
在哪个主服务占用的范围内 ,就连接对应的主服务器存储数据或查询数据。
三、管理集群
环境准备:
创建2台新的虚拟机 ip 192.168.4.58 和 192.168.4.59
分别运行redis 服务且启用了集群功能
192.168.4.58主机redis服务的端口 6379 服务使用的地址 192.168.4.58
192.168.4.59主机redis服务的端口 6379 服务使用的地址 192.168.4.59
[root@host58 ~]# yum -y install gcc [root@host58 ~]# tar -xf redis-4.0.8.tar.gz [root@host58 ~]# cd redis-4.0.8/ [root@host58 ~]# make && make install [root@host58 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host58 ~]# /etc/init.d/redis_6379 stop [root@host58 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf [root@host58 ~]# vim /etc/redis/6379.conf bind 192.168.4.58 port 6379 cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf 保存集群信息的配置文件 cluster-node-timeout 5000 集群中主机的连接超时时间
[root@host58 ~]# /etc/init.d/redis_6379 restart [root@host58 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.58:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.58:6379 0.0.0.0:* LISTEN 4249/redis-server 1 [root@host59 ~]# yum -y install gcc [root@host59 ~]# tar -xf redis-4.0.8.tar.gz [root@host59 ~]# cd redis-4.0.8/ [root@host59 ~]# make && make install [root@host59 ~]# ./utils/install_server.sh 遇到提示就回车 [root@host59 ~]# /etc/init.d/redis_6379 stop [root@host59 ~]# sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf [root@host59 ~]# vim /etc/redis/6379.conf bind 192.168.4.59 port 6379 cluster-enabled yes #启用集群功能 cluster-config-file nodes-6379.conf 保存集群信息的配置文件 cluster-node-timeout 5000 集群中主机的连接超时时间 [root@host59 ~]# /etc/init.d/redis_6379 restart [root@host59 ~]# netstat -utnlp | grep redis-server tcp 0 0 192.168.4.59:16379 0.0.0.0:* LISTEN 4249/redis-server 1 tcp 0 0 192.168.4.59:6379 0.0.0.0:* LISTEN 4249/redis-server 1
3.1 向集群里添加新服务器
说明:什么情况下需要向集群里添加新主机(添加master角色服务器)
扩大内存空间(添加master角色服务器)。
为了保证服务的可靠性(给主服务器添加多个从服务器)
1)添加master角色的服务器
诉求把新的Redis服务器Host58 添加到集群里做master 服务器
具体配置如下:
1) Host58运行redis 服务且启用了集群功能
redis服务的端口 6379 服务使用的地址 192.168.4.58
2) 在管理主机mgm57 如下操作:
2.1 把host58主机添加到集群里
命令格式
[root@mgm57 ~]# redis-trib.rb add-node 新主机Ip:端口 集群中已有主机的ip:端口
[root@mgm57 ~]# redis-trib.rb add-node 192.168.4.58:6379 192.168.4.51:6379 ..... ..... [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 192.168.4.58:6379 to make it join the cluster. [OK] New node added correctly. 添加成功的提示 [root@mgm57 ~]#
#新添加的master角色主机没有hash slots
[root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6379 192.168.4.51:6379 (0eb3b7aa...) -> 2 keys | 5461 slots | 1 slaves. 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 5461 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 3 keys | 5462 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 0 keys | 0 slots | 0 slaves. 零个hash slots [OK] 6 keys in 4 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
2.2 分配hast slots (master角色的服务器没有hast slots得不到存储数据机会)
命令格式
[root@mgm57 ~]# redis-trib.rb reshard 集群中已有主机的ip:端口
[root@mgm57 ~]# redis-trib.rb reshard 192.168.4.56:6379
第1个问题 移除多少个hast slots
How many slots do you want to move (from 1 to 16384)? 4096
第2个问题 把4096个槽给哪台主数据库服务器 (host58主机的id)
What is the receiving node ID?87cc1c128166e08a16cc294758611453bbc71437
第3个问题 提供4096个槽 主机的id (all 表示当前所有主服务器一起提供4096个槽给host58)
Source node #1:all
第4个问题 确认前3步的配置 yes 同意 no 退出
Do you want to proceed with the proposed reshard plan (yes/no)? yes
2.3 查看集群信息 (查看到多新的主服务器且有hast slots 为成功)
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 2 keys | 4096 slots | 0 slaves. [OK] 6 keys in 4 masters. 0.00 keys per slot on average. [root@mgm57 ~]# #具体查看host58 占用4096个槽的范围 [root@mgm57 ~]# redis-trib.rb check 192.168.4.56:6379 .... .... M: 87cc1c128166e08a16cc294758611453bbc71437 192.168.4.58:6379 slots:0-1364,5461-6826,10923-12287 (4096 slots) master 0 additional replica(s)
2)添加slave角色的服务器
说明:从角色服务器的数据是master服务器同步过来的数据
所以slave角色的服务器不需要分配hash slots
只要把主机添加到集群了做slave服务器就可以了。
命令格式
[root@mgm57 ~]# redis-trib.rb add-node --slave 新主机Ip:端口 集群中已有主机的ip:端口
诉求: 把Redis服务器host59 添加到集群里做host58 的slave 服务器
具体操作如下:
1) 在host59 主机运行redis服务 且启用了集群功能
2) 在管理主机做如下操作:
2.1 把host59 添加到集群里 做slave服务器
2.2 查看集群统计信息 (发现host58 有一个slave服务器)
2.3 连接host59 查看数据 (会自动同步主服务器host58 的数据)
!!!!会自动做从服务器个数最少的 master服务器的从服务器。!!!
[root@mgm57 ~]# redis-trib.rb add-node --slave 192.168.4.59:6379 192.168.4.56:6379 .... .... [OK] All 16384 slots covered. Automatically selected master 192.168.4.58:6379 >>> Send CLUSTER MEET to node 192.168.4.59:6379 to make it join the cluster. Waiting for the cluster to join. >>> Configure node as replica of 192.168.4.58:6379. [OK] New node added correctly. [root@mgm57 ~]# [root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 2 keys | 4096 slots | 1 slaves. host58主机的从 [OK] 6 keys in 4 masters. 0.00 keys per slot on average. [root@mgm57 ~]# [root@mgm57 ~]# redis-trib.rb check 192.168.4.56:6379 .... ..... S: d50aa7c1acebe69af0834f1838c8b17b2348472e 192.168.4.59:6379 slots: (0 slots) slave replicates 87cc1c128166e08a16cc294758611453bbc71437 主服务器的id [root@host56 ~]# redis-cli -c -h 192.168.4.59 -p 6379 连接host59 查看数据 192.168.4.59:6379> keys * 1) "name" 2) "age" 192.168.4.59:6379>
3.2 把服务器移除集群
3.2.1 移除slave角色的主机
命令格式 [root@mgm57 ~]# redis-trib.rb del-node 集群中任意主机的Ip:端口 被移除主机的id
说明:slave角色的主机的没有hash slots 直接移除即可
主机被移除集群后redis服务会自动停止
诉求: 把Host59 slave 服务器移除集群,在管理主机做如下操作
1) 查看host59主机的id , 执行移除主机host59的命令
2) 查看集群信息 (发现host58 主机slave 服务个数是 0台)
具体操作如下 :
root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 没删除之前查看信息 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 2 keys | 4096 slots | 1 slaves. [OK] 6 keys in 4 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
[root@mgm57 ~]# redis-trib.rb check 192.168.4.56:6379 | grep 192.168.4.59 S: d50aa7c1acebe69af0834f1838c8b17b2348472e 192.168.4.59:6379 [root@mgm57 ~]#
[root@mgm57 ~]# redis-trib.rb del-node 192.168.4.56:6379 d50aa7c1acebe69af0834f1838c8b17b2348472e >>> Removing node d50aa7c1acebe69af0834f1838c8b17b2348472e from cluster 192.168.4.56:6379 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. 把服务给停止了 [root@mgm57 ~]# [root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 2 keys | 4096 slots | 0 slaves. 零台从服务器 [OK] 6 keys in 4 masters. 0.00 keys per slot on average. [root@mgm57 ~]# #host59主机查看Redis状态 (看不到了) [root@host59 ~]# netstat -utnalp | grep redis-server [root@host59 ~]#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
3.2.2 移除master角色的主机
说明:master角色的服务器会占用hash slots 要先释放hash slots 再执行移除主机的命令
具体操作步骤:
第一步:释放 hash slots (再次执行reshard命令)
第二步:移除主机 (执行删除主机的命令)
诉求把master角色 主机 host58移除集群,在管理主机mgm57 做如下操作:
#释放 hash slots (再次执行reshard命令)
[root@mgm57 ~]# redis-trib.rb reshard 192.168.4.56:6379
第1个问题:释放hash slots 的个数
How many slots do you want to move (from 1 to 16384)? 4096 (host58主机占用hash slots 的个数)
第2个问题:接收4096的个hash slots的主数据库服务器的ID (随便给那个主服务器都可以)
What is the receiving node ID?0eb3b7aa0493a19189cba35b0c658202cc20884b (host51主机的id ,就是把释放的4096个hash slots给主数据库服务器host51)
第3个问题:从那台主服务器移除4096个hash slots
Source node #1:87cc1c128166e08a16cc294758611453bbc71437 (host58主机的id)
Source node #2:done 结束指定
第4个问题:确认配置 yes同意 no 退出
Do you want to proceed with the proposed reshard plan (yes/no)? yes 同意
查看集群信息(发现host51 主服务器hash slots变多了 )
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 3 keys | 8192 slots | 1 slaves. 槽多了 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 0 keys | 0 slots | 0 slaves. 一个槽也没有了 [OK] 6 keys in 4 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
查看host58主机的id 然后删除主机 Host58
[root@mgm57 ~]# redis-trib.rb check 192.168.4.56:6379 | grep 192.168.4.58 M: 87cc1c128166e08a16cc294758611453bbc71437 192.168.4.58:6379 [root@mgm57 ~]# [root@mgm57 ~]# redis-trib.rb del-node 192.168.4.56:6379 87cc1c128166e08a16cc294758611453bbc71437 >>> Removing node 87cc1c128166e08a16cc294758611453bbc71437 from cluster 192.168.4.56:6379 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. [root@mgm57 ~]#
再次查看集群信息 (没有host58 主机了 )
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 3 keys | 8192 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. [OK] 6 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
扩展知识
1) 平均分配当前所有主服务器的hash slots
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 槽不平均 192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 3 keys | 8192 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves. [OK] 6 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
平均分配hash slots
[root@mgm57 ~]# redis-trib.rb rebalance 192.168.4.56:6379
再次查看平均了
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 2 keys | 5462 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 2 keys | 5461 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 5461 slots | 1 slaves. [OK] 6 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
2) 把移除的主机再次添加到集群里的步骤
第一步: 启动Redis服务并清除前世记忆(在Redis服务器本机操作)
第二步: 清空内存里的数据(在Redis服务器本机操作)
第三步: 在管理主机执行执行添加命令(在管理主机执行)
第四步: 查看是否添加成功(在管理主机执行)
把移除host58再添加到集群里做master服务器
#58主机启动服务并清除前世记忆
[root@host58 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host58 ~]# netstat -utnlp | grep -i redis-server tcp 0 0 192.168.4.58:6379 0.0.0.0:* LISTEN 4480/redis-server 1 tcp 0 0 192.168.4.58:16379 0.0.0.0:* LISTEN 4480/redis-server 1 [root@host58 ~]# [root@host58 ~]# redis-cli -h 192.168.4.58 -p 6379 192.168.4.58:6379> cluster reset清除前世记忆 OK 192.168.4.58:6379> 192.168.4.58:6379> keys * (empty list or set) 192.168.4.58:6379> #在管理主机把5添加到集群里 [root@mgm57 ~]# redis-trib.rb add-node 192.168.4.58:6379 192.168.4.51:6351 #查看集群信息 [root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6351 发现多了主服务器58
把 移除的59 再次添加到集群 做53主机的slave数据库服务器
命令格式
redis-trib.rb add-node --slave --master-id 主服务器的id 新服务器的ip:端口 集群中已有机器的Ip:端口
#启动53主机的redis服务并清除前世记录
]# /etc/init.d/redis_6379 start ]# redis-cli -h 192.168.4.59 -p 6379 > cluster reset > exit
#在管理主机查看host53主机的id
[root@mgm57 ~]# redis-trib.rb check 192.168.4.51:6351 | grep 192.168.4.53 M: d9c9ef29c07ad740a05fa7aaa4d96ce25fa089b5 192.168.4.53:6353 [root@mgm57 ~]# #添加59主机做主服务器53的 slave服务器 [root@mgm57 ~]# redis-trib.rb add-node --slave --master-id d9c9ef29c07ad740a05fa7aaa4d96ce25fa089b5 192.168.4.59:6379 192.168.4.51:6351
#查看集群信息
[root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6351 192.168.4.51:6351 (4cf556bc...) -> 1 keys | 5461 slots | 1 slaves. 192.168.4.52:6352 (94cbe47c...) -> 3 keys | 5462 slots | 1 slaves. 192.168.4.53:6353 (d9c9ef29...) -> 2 keys | 5461 slots | 2 slaves. 53 有2台从服务器 [OK] 6 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
3)把集群中的主机恢复为独立的数据库服务器(host51~host56)
在数据库服务器本机执行如下操作
#停止redis服务
#注释掉配置文件中的集群功能
#清空数据库目录
#启动服务
#连接服务查看不到集群信息 也没有数据
以数据库服务器host51为例演示:
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.53:6379 (f2c1bdb7...) -> 2 keys | 5462 slots | 1 slaves. 192.168.4.51:6379 (0eb3b7aa...) -> 2 keys | 5461 slots | 2 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 5461 slots | 1 slaves. [OK] 6 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
[root@host51 ~]# redis-cli -h 192.168.4.51 shutdown [root@host51 ~]# vim /etc/redis/6379.conf #cluster-enabled yes #cluster-config-file nodes-6379.conf #cluster-node-timeout 5000 [root@host51 ~]# [root@host51 ~]# rm -rf /var/lib/redis/6379/* [root@host51 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host51 ~]# [root@host51 ~]# netstat -utnalp |grep -i redis-server tcp 0 0 192.168.4.51:6379 0.0.0.0:* LISTEN 9082/redis-server 1 [root@host51 ~]# [root@host51 ~]# redis-cli -h 192.168.4.51 -p 6379 192.168.4.51:6379> keys * (empty list or set) 192.168.4.51:6379> cluster info ERR This instance has cluster support disabled 没有启用集群功能 192.168.4.51:6379>
#在管理主机查看集群信息看不到host51主机了
[root@mgm57 ~]# redis-trib.rb info 192.168.4.56:6379 192.168.4.54:6379 (bdba7786...) -> 2 keys | 5462 slots | 1 slaves. 192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 5461 slots | 1 slaves. 192.168.4.58:6379 (87cc1c12...) -> 2 keys | 5461 slots | 0 slaves. [OK] 6 keys in 3 masters. 0.00 keys per slot on average. [root@mgm57 ~]#
over