环境:
6台集群服务器 51-56 :
安装Redis软件 初始化配置
停止Redis服务
修改服务使用的ip地址是eth0接口的地址(不需要设置密码和修改服务使用的端口号)
启动Redis服务
]# yum -y install rubygems ruby
]# gem install redis-3.2.1.gem
]# mkdir /root/bin # 创建命令检索目录
]# tar -zxvf 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 # 查看命令帮助
重要说明:内存里不允许有数据 不能设置连接密码(如果有要清除)
[root@redisA ~]# vim /etc/redis/6379.conf //修改配置文件
bind 192.168.4.51 //修改ip
port 6351 //修改端口(可选配置)
cluster-enabled yes //启用集群功能
cluster-config-file nodes-6379.conf //存储集群信息的配置文件
cluster-node-timeout 5000 //集群节点通信超时时间
]# redis-cli -h 192.168.4.52 -p 6379 shutdown
]# /etc/init.d/redis_6379 start
[root@redisA ~]# netstat -utnlp | grep redis-server
tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 21201/redis-server
tcp 0 0 192.168.4.51:16351 0.0.0.0:* LISTEN 21201/redis-server
创建集群的命令格式
# --replicas 指定从服务器的台数(指定每个主服务器有几台从服务器)
# 创建集群时,会把前3台服务器配置为主服务器,剩下的其他主机全部做从服务器
]# redis-trib.rb create --replicas 数字 ip地址:端口 ip地址:端口 。。。
并给主服务器平均分配hash slots
创建集群失败了 需要删除服务器里面的集群创建信息 每台都要删除
redis-cli -h 192.168.4.51
> cluster reset
如果所有的Redis服务都启用了集群功能 内存里也没有数据 也没设置连接密码 还是创建失败 可能是物理内存不足
# 查看统计信息
[ mgm57 ~]# redis-trib.rb info 192.168.4.51:6351
# 查看详细信息
[ mgm57 ~]# redis-trib.rb check 192.168.4.51:6351
命令格式(连接集群中的任意一台服务器都可以查询数据和存储数据)
-c 连接集群中的主机 使用集群算法存储数据
redis-cli -c -h redis服务器的ip -p 端口号
说明:向集群中的主机存储数据一次只能存储一个 变量 集群算法每次只有一个计算结果
环境准备:创建2台新虚拟机 58 59
分别运行redis服务切启用了集群功能
192.168.4.58 主机redis服务的端口6379 服务使用的地址 192.168.4.58
192.168.4.59 主机redis服务的端口6379 服务使用的地址 192.168.4.59
说明:什么情况下需要向集群里添加新主机 (添加master角色):
扩大内存空间(添加master角色服务器)
为了保证服务的可靠性(给主服务器添加多个从服务器)
1.58运行redis服务 且启用了集群功能,redis服务的端口6379 服务使用的地址192.168.4.58
2.在管理主机mgm57如下操作
把host58主机添加到集群
redis-trib.rb add-node 192.168.4.58:6379 192.168.4.51:6379 (第二个是集群中任意主机)
出现 ok 成功的
分配hash slots(master角色的服务器没有hash slots得不到存储数据机会)
redis-trib.rb reshard 集群中已有主机的ip:端口
第一个问题:移除多少个槽
第二个问题:把这些槽给哪些主数据库服务器
第三个问题:提供这些槽的主机的id all(表示从当前所有主服务器一起提供4096个槽给58主机)
查看集群信息(查看到新的主服务器且有hash slots为成功)
redis-trib.rb info 192.168.4.56:6379
redis-trib.rb add-node --slave 新主机ip:端口 集群中已有的主机ip:端口
# 需求:把redis59添加到集群里 做58的slave服务器
具体操作如下:
1.在59主机运行redis服务且启用了集群功能
2.在管理主机做如下操作:
把59添加到集群里 做slave服务器 会自动做从服务器最少的主服务器的从
redis-trib.rb add-node --slave 192.168.4.59:6379 192.168.4.56:6379
查看集群信息(58有一个slave服务器)
连接59查看数据(会自动同步)
命令格式:redis-trib.rb del-node 集群中任意主机ip:端口 被移除主机的id
说明:slave角色的主机没有hash槽直接移除即可
主机被移除集群后 redis服务会自动停止
[root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.55:6355 (2d343a9d...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (9e44139c...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (324e05df...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (4fe1fa46...) -> 5 keys | 4096 slots | 0 slaves.//58主机,没有从服务器
[OK] 13 keys in 4 masters.
0.00 keys per slot on average.
说明:master角色的服务器会占用hash 要先释放hash 在执行移除主机的命令
第一步:释放hash slots(再次执行reshard命令)
[root@mgm57 ~]# redis-trib.rb reshard 192.168.4.53:6353
How many slots do you want to move (from 1 to 16384)?4096 //移除4096个数槽
What is the receiving node ID? bc5c4e082a5a3391b634cf433a6486c867cfc44b
//要移动给谁的id即目标主机(这里可以随机写一个master的ID)
Source node #1: c5e0da48f335c46a2ec199faa99b830f537dd8a0
//从谁那移动即源主机(这里写4.58的ID)
Source node #2:done //设置完毕
...
Moving slot 12282 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Moving slot 12283 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Moving slot 12284 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Moving slot 12285 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Moving slot 12286 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Moving slot 12287 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Do you want to proceed with the proposed reshard plan (yes/no)?yes //提交
...
[root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6351
192.168.4.55:6355 (2d343a9d...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (9e44139c...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (324e05df...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (4fe1fa46...) -> 0 keys | 0 slots | 0 slaves. //零个槽
[OK] 13 keys in 4 masters.
0.00 keys per slot on average.
第二步:移除主机
[root@mgm57 ~]# redis-trib.rb del-node 192.168.4.53:6353 \
c5e0da48f335c46a2ec199faa99b830f537dd8a0 //删除谁+删除的id
>>> Removing node e081313ec843655d9bc5a17f3bed3de1dccb1d2b from cluster 192.168.4.51:6351
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
平均分配当前所有主服务器的hash slots
redis-trib.rb rebalance 任意主机:端口
把移除的主机再次添加到集群里
1.清除数据 (在redis本机操作)
redis-cli -h 192.168.4.58 -p 6379
> cluster info
> cluster reset # 清空
2.在管理主机执行添加命令
3.查看是否添加成功
把集群中的主机恢复为独立的数据库服务器
1.停止服务
2.注释掉配置文件中的集群功能
3.清空数据库目录
4.启动服务
/etc/init.d/redis_6379 start
5.连接服务查看不到集群信息 也没有数据
redis-cli -h 192.168.4.53 -p 6379