NoSQL02 - 创建Redis集群、管理集群
一、创建集群
1.1 部署集群环境
1.1.1 集群拓扑结构
1.1.2 IP和端口规划
具体要求如下:
ip地址 端口 etho
192.168.4.51 6051 都可以接收连接请求
192.168.4.52 6052 都可以接收连接请求
192.168.4.53 6053 都可以接收连接请求
192.168.4.54 6054 都可以接收连接请求
192.168.4.55 6055 都可以接收连接请求
192.168.4.56 6056 都可以接收连接请求
1.1.3 集群工作原理
1.2 创建 Redis 集群
1.2.1 装包配置
1.在 6 台主机上做如下配置,并运行 redis 服务
#yum -y install gcc gcc-c++
tar -zxvf redis-4.0.8.tar.gz
cd redis-4.0.8/
make
make install
./utils/install_server.sh //做初始化配置
2.在6台redis服务器上修改配置文件,重启redis服务
]#vim /etc/redis/6379.conf
bind 192.168.4.56 #只指定物理接口ip地址
port 6056 #不允许相同
daemonize yes
cluster-enabled yes
pidfile /var/run/redis_56.pid #不允许相同
cluster-config-file nodes-6056.conf #不允许相同
cluster-node-timeout 5000 #集群节点之间通信超时时间单位秒
停止服务
]# redis-cli -h 192.168.4.56 -p 6056 [ -a 密码 ] shutdown
启动服务
]# /etc/init.d/redis_6379 start
连接服务
[[email protected] ~]# redis-cli -h 192.168.4.56 -p 6056
1.2.2 创建Redis集群
1.装包: 在执行创建集群命令的主机安装ruby软件包(192.168.4.51)
安装解释ruby代码的软件包
[[email protected] ~]# yum -y install ruby rubygems
[[email protected] redis-cluster]# rpm -ivh –nodeps ruby-devel-2.0.0.648-30.el7.x86_64.rpm
安装ruby连接redis 接口程序 gem
[[email protected] redis-cluster]# which gem
/usr/bin/gem
[[email protected] redis-cluster]# gem install redis-3.2.1.gem
Successfully installed redis-3.2.1
Parsing documentation for redis-3.2.1
Installing ri documentation for redis-3.2.1
1 gem installed
[[email protected] redis-cluster]#
生成创建集群的脚本redis-trib.rb
[[email protected] src]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] src]# cd
[[email protected] ~]# cp redis-4.0.8/src/redis-trib.rb /usr/local/bin/
2.创建集群
[[email protected] ~]# redis-trib.rb create –replicas 1 \
192.168.4.51:6051 \
192.168.4.52:6052 \
192.168.4.53:6053 \
192.168.4.54:6054 \
192.168.4.55:6055 \
192.168.4.56:6056
2.1 可能出现如下报错:
[ERR] Node 192.168.4.54:6054 is not empty. Either the node already knows other nodes (check with
CLUSTER NODES) or contains some key in database 0.
[[email protected] ~]# redis-cli -h 192.168.4.54 -p 6054
192.168.4.54:6054> flushall
OK
192.168.4.54:6054> keys *
(empty list or set)
192.168.4.54:6054> flushall
OK
192.168.4.54:6054> save
OK
192.168.4.54:6054> quit
[[email protected] ~]#
槽位个数是16384
范围0-16383
2.2 重新执行创建集群的命令
[[email protected] ~]# redis-trib.rb create –replicas 1 192.168.4.51:6051 192.168.4.52:6052
192.168.4.53:6053 192.168.4.54:6054 192.168.4.55:6055 192.168.4.56:6056 #创建集群
–replicas 1 表示给master 配置1个slave
…
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
2.3 查看集群配置文件
[[email protected] redis-4.0.8]# cat /var/lib/redis/6052/nodes-6052.conf #集群配置文件
6cdb4c64c48c0ee2ca35bf139660f31ca92821dc 192.168.4.53:[email protected] master - 0 1526096611374
3 connected 10923-16383
0ec903c572270a90f3b140fba31aac15aaf5336b 192.168.4.51:[email protected] master - 0 1526096612000
1 connected 0-5460
388c33e7128fc961b381ad3b3c27c3c217912666 192.168.4.54:[email protected] master - 0 1526096611043
4 connected 9678
a3af3096ee214c92a178eadf6e9299584899e62f 192.168.4.56:[email protected] slave
5278df7384edc9774b1a36b0b9d60a813a7424a9 0 1526096611745 6 connected
651f7d99965316c1b8a27a2e9b034a5b14c2be55 192.168.4.55:[email protected] slave
0ec903c572270a90f3b140fba31aac15aaf5336b 0 1526096613000 5 connected
5278df7384edc9774b1a36b0b9d60a813a7424a9 192.168.4.52:[email protected] myself,master - 0
1526096612000 2 connected 5461-9677 9679-10922
vars currentEpoch 6 lastVoteEpoch 0
3.查看集群信息
每台 redis服务 在本机登录 查看集群信息
[[email protected] ~]# redis-cli -c -h 192.168.4.51 -p 6051
-c 连接集群中的主机
[[email protected] ~]# redis-cli -c -h 192.168.4.51 -p 6051
192.168.4.51:6051> CLUSTER info //# 查看集群信息
192.168.4.51:6051> CLUSTER nodes //查看本机信息,输出的数据是 /var/lib/redis/6052/nodes-6051.conf的数据
192.168.4.51:6051> INFO replication //查看主从关系
192.168.4.51:6051> quit
测试集群:连接master库 存储数据,对应的从库 会自动同步数据
[[email protected] ~]# redis-cli -c -h master库ip地址 -p 对应的端口号
[[email protected] ~]# redis-cli -c -h 192.168.4.51 -p 6051
192.168.4.51:6051> CLUSTER nodes
192.168.4.51:6051>
[[email protected] ~]# redis-cli -c -h 192.168.4.51 -p 6051
192.168.4.51:6051> set age 99
OK
192.168.4.51:6051> get age
“99”
192.168.4.51:6051>
[[email protected] ~]# redis-cli -c -h 192.168.4.54 -p 6054
192.168.4.54:6054> get age
-> Redirected to slot [741] located at 192.168.4.51:6051
“99”
192.168.4.51:6051>
二 、管理集群
2.1 管理命令
2.1.1 redis-cli 命令
redis-cli 命令
• 查看命令帮助
– redis-cli -h
• 常用选项
– -h IP 地址
– -p 端口
– -c 访问集群
2.1.2 redis-trib.rb 脚本
• 语法格式
– Redis-trib.rb 选项 参数
• 选项
– add-node 添加新节点
– check 对节点主机做检查
– reshard 对节点主机重新分片
– add-node –slave 添加从节点主机
– del-node 删除节点主机
2.2 集群节点选举测试
2.2.1 如何选举 master 主机
• 把是 master 角色主机上的 Redis 服务 停止
对应是 slave 角色主机 自动升级为 master。原先是master服务启动后 身份是slave
2.3 添加主节点
2.3.1 默认新主机被选为主
• 新主机做集群配置,并运行 redis 服务
• 将新主机添加到集群中
– # ./redis-trib.rb add-node 新主机 Ip: 端口 192.168.4.51:6351
]# redis-trib.rb add-node 192.168.4.57:6357 192.168.4.51:6351
2.3.2 手动重新分配hash slot
]# redis-trib.rb reshard 192.168.4.51:6351
4096 拿出多少个 hash slot 给主机 192.168.4.51
主机 192.168.4.57 id 值
all 从当前所有的master里 获取hash slot 个数
2.3.3 查看分配的槽位
– src]# ./redis-trib.rb check 192.168.4.51:6351
2.4 添加从节点
• 对添加为从节点的主机做如下配置
– 装包 修改配置文件 启动 redis 服务
• 添加从节点
从节点 ip: 端口 192.168.4.51:6351
]# redis-trib.rb add-node –slave 192.168.4.58:6358 192.168.4.51:6351
2.5 移除主节点
1 删除master角色的节点主机
1.1 移除占用的hash槽(slot)
1.2 删除主机
]#redis-trib.rb reshard 192.168.4.51:6351
4096 移除hash槽的个数
主机id 目标主机id
主机id 源主机id
done 设置完毕
yes 提交
]# redis-trib.rb del-node 192.168.4.51:6351 8eecda17577349125df9a6fcc37107c6c5f9bdc5
2.6 移除从节点
删除slave角色的节点主机
]# redis-trib.rb del-node 192.168.4.51:6051 651f7d99965316c1b8a27a2e9b034a5b14c2be55
2.7 如何将已经移除集群的主机重新添加到集群
1.启动redis服务
]# /etc/init.d/redis_6379 start
2.把集群信息删除
192.168.4.53:6353> CLUSTER RESET
3.把主机重新添加到集群中【默认为主库】
redis-trib.rb add-node 192.168.4.53:6353 192.168.4.51:6351
4.重新分配hash slot