一, 准 Redis 源码包及环境
- ~]# ls /root / 桌面 / Redis/
- Redis-3.2.1.Gem Redis.zip(Redis 源码压缩包) Ruby-devel-2.0.0.648-30.el7.x86_64.rpm(Redis 集群管理功能软件包依赖 ps:Ruby RubyGems)
- zj~]# for i in {
- 50..56
- }
- \>do
\>scp -rp /root / 桌面 / Redis/ 192.168.4.$i:/root/
\>done
搭建 Redis 集群, 拓扑规划
IP, 端口规划
步骤
-1 为 6 台主机安装并运行热第三服务
- ]#yum -y install gcc
- ]#cd Redis/
- ]#unzip Redis.zip
- ]#cd Redis/
- ]#tar -xf Redis-4.0.8.tar.gz
- ]#cd Redis-4.0.8/
- ]#make && make install
- ]#./utils/install_server.sh
调整配置文件
]#VIM /etc/Redis/Redis.conf
bind IP 地址 // 只写物理接口 IP 地址
- daemonize yes // 守护进程方式运行
- port XXXX // 端口号不要使用默认的 6379
- cluster-enabled yes // 启用集群
- cluster-config nodes-XXXX-.conf // 指定集群信息文件
- cluster-node-timeout 5000 // 请求超时 5 秒
查看服务信息
- ]#netstat -anputl | grep Redis-server
- 192.168.4.51:6351
192.168.4.51:16351[集群通信端口, 默认服务端口 + 10000]
查看集群信息
- ]#Redis-cli -h 192.168.4.51 -p 6351
- 192.168.4.51>cluster info
- 192.168.4.51>cluster nodes
创建集群
(在任意一台上执行创建集群的脚本都可以) 这里在 51 上面执行
- ]# cd /root/Redis
- ]# ls
- Redis-3.2.1.Gem Ruby-devel-2.0.0.648-30.el7.x86_64.rpm
- ]# yum -y install Ruby RubyGems
- ]#rpm -ivh -nodeps Ruby-devel-2.0.0.648-30.el7.x86_64.rpm
- ]# which Gem
- /usr/bin/Gem
生成创建集群的脚本
- ]# cd /root/Redis/Redis-4.0.8/src/
- ]# cp Redis-trib.rb /usr/local/bin/
- ]# ll /usr/local/bin/Redis-trib.rb
- -rwxr-xr-x. 1 root root 65991 Sep 27 16:12 /usr/local/bin/Redis-trib.rb
创建
- [root@mysqlA ~]# Redis-trib.rb create --replicas 1 \
- \> 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 \
- \> 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356
- \>>> Creating cluster
\>>> Performing hash slots allocation on 6 nodes...
- Using 3 masters:
- 3Master 3Slave
[OK] All nodes agree about slots configuration.
\>>> Check for open slots...
\>>> Check slots coverage...
[OK] All 16384 slots covered.
--replicas 1 , 自动为每一个 master 节点分配一个 slave 节点
查看集群信息, 任意一台主机访问本机的 Redis 服务查看即可
cluster info 查看集群信息
cluster nodes 查看集群节点信息
- ]# Redis-cli -h 192.168.4.52 -p 6352
- 192.168.4.52:6352> CLUSTER INFO
- cluster_state:ok // 状态
- cluster_slots_assigned:16384
- 192.168.4.52:6352> CLUSTER NODES // 查看集群节点信息
测试集群
命令:
Redis-cli -c -h ip 地址 -p 端口
- ]# Redis-cli -c -h 192.168.4.51 -p 6351
- 192.168.4.51:6351> set name jim
- -> Redirected to slot [5798] located at 192.168.4.52:6352
- OK
- 192.168.4.52:6352> get name
- "jim"
- 192.168.4.52:6352> set class Linux
- OK
- 192.168.4.52:6352> get class
- "linux"
- 192.168.4.52:6352> set pay 26800
- -> Redirected to slot [4013] located at 192.168.4.51:6351
- OK
- 192.168.4.51:6351> get pay
- "26800"
集群不能用的情况:
有半数或者半数以上的主库机器挂掉, 集群就不能用了
把一个从库升级成主, 没有从库, 集群不能用 (前提是: 有半数或者半数以上的主库机器挂掉)
一个主库挂掉, 它的从库自动顶替为主库, 正常使用 (前提是: 有半数或者半数以上的主库机器能用), 挂掉的主库修复好后, 会成为从库, 不会抢占为主
6) 集群节点选举策略 (三主, 三从)
停止某个主库的 Redis 服务, 对应的从库会自动升级为主库
先查看节点信息的主从情况
看谁是谁的从库, 如:
看节点前后的编号 id 是否有相同的
如: 8568fbd73cb296cad6915d524e34761b2114af47
发现 52 的从库为 56
停止主库 52
- 192.168.4.51:6351> CLUSTER NODES
- ...
- 8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352@16352 master,fail - 1538041052349 1538041051000 2 disconnected //52 的主库坏掉
- 28e06c5f24a2b6c6412f81369e09bc9653cc51ff 192.168.4.56:6356@16356 master - 0 1538041066000 7 connected 5461-10922 //56 成为主库
开启 52, 发现 52 成为从库
- 92.168.4.51:6351> CLUSTER NODES
- 8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352@16352 slave 28e06c5f24a2b6c6412f81369e09bc9653cc51ff 0 1538041254000 7 connected
管理 Redis 集群
- 添加主机
1) 部署一台新 Redis 服务器, ip 为 192.168.4.58, 装包, 初始化, 启用集群配置, 重启服务
2) 添加集群 4.58(添加 master 节点)
格式: Redis-trib.rb 选项 参数
## 选项: add-nade 添加主机 (不指定角色为主 Master)
>< 由于之前是在 51 上面创建 Ruby 脚本, 所以只有 51 上面有 Redis-trib.rb 命令, 在 51 上面执行 >
~]# Redis-trib.rb add-node 192.168.4.58:6358 192.168.4.51:6351
3) 检查集群主机的状态信息
选项: check 检查权限
~]# Redis-trib.rb check 192.168.4.58:6358 // 查看状态
4) 手动对集群进行分片迁移
选项: reshard 重新分配 hash 槽
- ~]# Redis-trib.rb reshard 192.168.4.58:6358
- How many slots do you want to move (from 1 to 16384)?4096
- // 拿出多少个 hash 槽给主机 192.168.4.58
- What is the receiving node ID? c5e0da48f335c46a2ec199faa99b830f537dd8a0
- // 主机 192.168.4.58 的 id 值
- Source node #1:all // 从当前所有的主里面获取 hash 槽
- Do you want to proceed with the proposed reshard plan (yes/no)?yes
再次查看发现 4.58 有 4096 个 hash slo
~]# Redis-trib.rb check 192.168.4.58:6358
5) 删除 master 角色的主机
先删除主机占用的 hash 槽
- ~]# Redis-trib.rb reshard 192.168.4.58:6358
- How many slots do you want to move (from 1 to 16384)?4096
- // 移除 hash 槽的个数
- What is the receiving node ID? bc5c4e082a5a3391b634cf433a6486c867cfc44b
- // 要移动给谁的 id 即目标主机 (这里可以随机写一个 master 的 ID)
- Source node #1: c5e0da48f335c46a2ec199faa99b830f537dd8a0
- // 从谁那移动即源主机 (这里写 4.58 的 ID)
- Source node #2:done // 设置完毕
- (yes/no)?yes // 提交
删除集群主机 4.58(删除之后 Redis 服务自动关闭)
- ~]# Redis-trib.rb del-node 192.168.4.58:6358 \
- c5e0da48f335c46a2ec199faa99b830f537dd8a0 // 删除谁 + 删除的 id
6) 添加从节点主机, 随机添加 (默认添加到从节点最少的 Master) PS - 通过 [--master-id id 可指定为那个 master 的从节点 ]
格式:./Redis-trib.rb add-node --slave [--master-id id 值] ip 地址: 端口 192.168.4.51:6351
- ~]# Redis-trib.rb add-node --slave \
- 192.168.4.57:6357 192.168.4.51:6351
7) 移除从节点, 从节点主机没有槽位范围, 直接移除即可
命令格式:
Redis-trib.rb del-node 192.168.4.57:6357 主机 id 值
- ~]# Redis-trib.rb del-node 192.168.4.57:6357 \
- f6649ea99b2f01faca26217691222c17a385438
Redis-trib.rb 具有以下功能:
1,create: 创建集群
2,check: 检查集群
3,info: 查看集群信息
4,fix: 修复集群
5,reshard: 在线迁移 slot
6,rebalance: 平衡集群节点 slot 数量
7,add-node: 将新节点加入集群
8,del-node: 从集群中删除节点
9,set-timeout: 设置集群节点间心跳连接的超时时间
10,call: 在集群全部节点上执行命令
11,import: 将外部 Redis 数据导入集群
来源: http://www.bubuko.com/infodetail-2843006.html