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

连接服务
[root@host56 ~]# redis-cli  -h 192.168.4.56  -p 6056

1.2.2 创建Redis集群

1.装包: 在执行创建集群命令的主机安装ruby软件包(192.168.4.51)

安装解释ruby代码的软件包
[root@host51 ~]# yum  -y  install   ruby   rubygems     

[root@host51 redis-cluster]# rpm  -ivh  --nodeps ruby-devel-2.0.0.648-30.el7.x86_64.rpm

安装ruby连接redis 接口程序 gem
[root@host51 redis-cluster]# which  gem
/usr/bin/gem
[root@host51 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
[root@host51 redis-cluster]#

生成创建集群的脚本redis-trib.rb
[root@host51 src]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@host51 src]# cd
[root@host51 ~]# cp redis-4.0.8/src/redis-trib.rb   /usr/local/bin/

2.创建集群

[root@host51 ~]# 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.

[root@db54 ~]# 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
[root@db54 ~]#

槽位个数是16384
范围0-16383

2.2 重新执行创建集群的命令

[root@host51 ~]# 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 查看集群配置文件
[root@db52 redis-4.0.8]# cat /var/lib/redis/6052/nodes-6052.conf   #集群配置文件
6cdb4c64c48c0ee2ca35bf139660f31ca92821dc 192.168.4.53:6053@16053 master - 0 1526096611374 

3 connected 10923-16383
0ec903c572270a90f3b140fba31aac15aaf5336b 192.168.4.51:6051@16051 master - 0 1526096612000 

1 connected 0-5460
388c33e7128fc961b381ad3b3c27c3c217912666 192.168.4.54:6054@16054 master - 0 1526096611043 

4 connected 9678
a3af3096ee214c92a178eadf6e9299584899e62f 192.168.4.56:6056@16056 slave 

5278df7384edc9774b1a36b0b9d60a813a7424a9 0 1526096611745 6 connected
651f7d99965316c1b8a27a2e9b034a5b14c2be55 192.168.4.55:6055@16055 slave 

0ec903c572270a90f3b140fba31aac15aaf5336b 0 1526096613000 5 connected
5278df7384edc9774b1a36b0b9d60a813a7424a9 192.168.4.52:6052@16052 myself,master - 0 

1526096612000 2 connected 5461-9677 9679-10922
vars currentEpoch 6 lastVoteEpoch 0

3.查看集群信息

每台 redis服务 在本机登录 查看集群信息

[root@host51 ~]# redis-cli  -c -h 192.168.4.51  -p 6051 

-c  连接集群中的主机
[root@host51 ~]# 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库 存储数据,对应的从库 会自动同步数据

[root@host51 ~]# redis-cli  -c -h  master库ip地址  -p 对应的端口号

[root@host51 ~]# redis-cli  -c -h 192.168.4.51  -p 6051 
192.168.4.51:6051> CLUSTER nodes
192.168.4.51:6051>

[root@host51 ~]# 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>

[root@db54 ~]# 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 服务 停止
#redis-cli -h ip -p 端口  shutdown
对应是 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 服务
• 添加从节点
# ./redis-trib.rb add-node --slave --master-id id 值  {如果不指定主节点的 id 的话,会把新节点 随机添加为 从节点 最少的主的从}

从节点 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

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/81290516