搭建Redis 集群,测试集群:对节点主机重新分片
admin
2023-02-07 15:00:07
0

搭建Redis 集群

准备6台redis服务器,具体要求如下:

ip地址 端口 etho 日志文件名

192.168.4.51 6051 都可以接收连接请求 redis51.log

192.168.4.52 6052 都可以接收连接请求 redis52.log

192.168.4.53 6053 都可以接收连接请求 redis53.log

192.168.4.54 6054 都可以接收连接请求 redis54.log

192.168.4.55 6055 都可以接收连接请求 redis55.log

192.168.4.56 6056 都可以接收连接请求 redis56.log

环境准备

1 在6台redis服务器上运行服务,按照如下要求修改配置文件后,重启redis服务,清。

生成密钥与传密钥

[root@51 ~]# ssh-keygen

[root@51 ~]# for i in 192.168.4.{51..56}

do

ssh-copy-id $i

done

在每一台主机上创建redis

[root@51 ~]# tar -xf redis/redis-4.0.8.tar.gz -C .

[root@51 ~]# cd redis-4.0.8/

[root@51 redis-4.0.8]# yum -y install gcc gcc-c++

[root@51 redis-4.0.8]# make && make install

[root@51 redis-4.0.8]# ./utils/install_server.sh

[root@51 redis-4.0.8]# ln -s /etc/init.d/redis_6379 /bin/

在这大家可以也写个脚本批量安装redis

1.1 清空数据(在51-56上做一样的操作)

[root@51 phpredis-2.2.4]# redis-cli -h 192.168.4.51 -p 6051

192.168.4.51:6051> FLUSHALL

OK

192.168.4.51:6051> keys *

(empty list or set)

192.168.4.51:6051>

[root@51 phpredis-2.2.4]# vim /etc/redis/6379.conf

70 bind 192.168.4.51 //物理接口ip地址

93 port 6051 //端口

daemonize yes   //以守护方式运行

815 cluster-enabled yes //开启集群

823 cluster-config-file nodes-6051.conf // 集群的配置文件不要使用默认的名称

829 cluster-node-timeout 15000 // 请求超时 5 秒

[root@51 phpredis-2.2.4]# redis_6379 stop

[root@51 phpredis-2.2.4]# redis_6379 start

[root@51 ~]# ss -antulp | grep redis

tcp LISTEN 0 128 192.168.4.51:6051 : users:(("redis-server",pid=24771,fd=6))

tcp LISTEN 0 128 192.168.4.51:16051 : users:(("redis-server",pid=24771,fd=8))

装包: 在执行创建集群命令的主机安装ruby软件包

安装解释ruby代码的软件包(在51上安装)

[root@51 redis]# yum -y install ruby ruygems

[root@51 redis]# rpm -q rubygems ruby

rubygems-2.0.14.1-30.el7.noarch

ruby-2.0.0.648-30.el7.x86_64

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

安装ruby连接redis 接口程序 gem

[root@51 redis-cluster]# gem install redis-3.2.1.gem

生成创建集群的脚本redis-trib.rb

[root@51 redis]# tar -xf redis-4.0.8.tar.gz

[root@51 redis]# cd redis-4.0.8/

[root@51 redis-4.0.8]# ln -s /root/redis/redis-4.0.8/src/redis-trib.rb /sbin/

创建集群:

[root@51 redis-4.0.8]# 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

Creating cluster

Performing hash slots allocation on 6 nodes...

Using 3 masters:

192.168.4.51:6051

192.168.4.52:6052

192.168.4.53:6053

Adding replica 192.168.4.55:6055 to 192.168.4.51:6051

Adding replica 192.168.4.56:6056 to 192.168.4.52:6052

Adding replica 192.168.4.54:6054 to 192.168.4.53:6053

M: c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 192.168.4.51:6051

slots:0-5560 (5561 slots) master

M: 2c9ee556add7e5187621efd64e4a9fc54bc99489 192.168.4.52:6052

slots:5561-10922 (5562 slots) master

M: bcb32a6d6b9e988789e654c32856c8c478ef253e 192.168.4.53:6053

slots:10923-16383 (5561 slots) master

S: 799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0 192.168.4.54:6054

replicates bcb32a6d6b9e988789e654c32856c8c478ef253e

S: 18b86bca8fa9c9d36f3cad927a1c75c825bee9a4 192.168.4.55:6055

replicates c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01

S: 6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:6056

replicates 2c9ee556add7e5187621efd64e4a9fc54bc99489

Can I set the above configuration? (type 'yes' to accept): yes

Nodes configuration updated

Assign a different config epoch to each node

Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join....

Performing Cluster Check (using node 192.168.4.51:6051)

M: c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 192.168.4.51:6051

slots:0-5560 (5561 slots) master

1 additional replica(s)

S: 6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:6056

slots: (0 slots) slave

replicates 2c9ee556add7e5187621efd64e4a9fc54bc99489

............................................

..............................................

replicates bcb32a6d6b9e988789e654c32856c8c478ef253e

[OK] All nodes agree about slots configuration.

Check for open slots...

Check slots coverage...

[OK] All 16384 slots covered.

[root@51 redis-4.0.8]# cat /var/lib/redis/6379/nodes-6051.conf #集群配置文件

6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:6056@16056 slave 2c9ee556add7e5187621efd64e4a9fc54bc99489 0 1530777397000 6 connected

。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。

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

[root@51 redis-4.0.8]# redis-cli -c -h 192.168.4.51 -p 6051

192.168.4.51:6051> CLUSTER INFO # 查看集群信息

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:3

cluster_current_epoch:6

cluster_my_epoch:1

cluster_stats_messages_ping_sent:934

cluster_stats_messages_pong_sent:1137

cluster_stats_messages_sent:2071

cluster_stats_messages_ping_received:1132

cluster_stats_messages_pong_received:934

cluster_stats_messages_meet_received:5

cluster_stats_messages_received:2071

192.168.4.51:6051> CLUSTER NODES # 查看本机信息

6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:6056@16056 slave 2c9ee556add7e5187621efd64e4a9fc54bc99489 0 1530778521000 6 connected

bcb32a6d6b9e988789e654c32856c8c478ef253e 192.168.4.53:6053@16053 master - 0 1530778520185 3 connected 10923-16383

18b86bca8fa9c9d36f3cad927a1c75c825bee9a4 192.168.4.55:6055@16055 slave c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 0 1530778521000 5 connected

2c9ee556add7e5187621efd64e4a9fc54bc99489 192.168.4.52:6052@16052 master - 0 1530778521187 2 connected 5561-10922

799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0 192.168.4.54:6054@16054 slave bcb32a6d6b9e988789e654c32856c8c478ef253e 0 1530778520000 4 connected

c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 192.168.4.51:6051@16051 myself,master - 0 1530778519000 1 connected 0-5560

测试集群:

连接master库 存储数据,对应的从库 会自动同步数据

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

Master::

[root@51 redis-4.0.8]# redis-cli -c -h 192.168.4.51 -p 6051

192.168.4.51:6051> set age 10

192.168.4.51:6051> set name aa

192.168.4.52:6052> keys *

1) "name"

Slave:

[root@52 phpredis-2.2.4]# redis-cli -c -h 192.168.4.52 -p 6052

192.168.4.52:6052> keys *

1)"name"

选项 参数

– add-node 添加新节点(default master)

– check 对节点主机做检查

– reshard 对节点主机重新分片

– add-node --slave 添加从节点主机

– del-node 删除节点主机

集群选举测试:停止某个主库的redis服务 对应的从会自动升级主库

[root@51 redis-4.0.8]# redis-trib.rb check 192.168.4.51:6051

M: bcb32a6d6b9e988789e654c32856c8c478ef253e 192.168.4.53:6053

slots:10923-16383 (5561 slots) master

1 additional replica(s)

S: 18b86bca8fa9c9d36f3cad927a1c75c825bee9a4 192.168.4.54:6054

slots: (0 slots) slave

replicates c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01

......................

由此可以看出4.53是master ,4.55是slave,现在我们停止53

[root@53 ~]# redis-cli -c -h 192.168.4.53 -p 6053 shutdown

[root@51 redis-4.0.8]# redis-trib.rb check 192.168.4.51:6051

M: 799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0 192.168.4.54:6054

slots:10923-16383 (5561 slots) master

对节点主机重新分片

[root@51 ~]# redis-trib.rb reshard 192.168.4.51:6051

How many slots do you want to move (from 1 to 16384)? 5196

What is the receiving node ID? c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01

Please enter all the source node IDs.

Type 'all' to use all the nodes as source nodes for the hash slots.

Type 'done' once you entered all the source nodes IDs.

Source node #1:799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0

添加主节点主机:

redis-trib.rb add-node 添加的节点:端口号 集群主节点:端口号

[root@51 ~]# redis-trib.rb add-node 192.168.4.48:6048 192.168.4.51:6051

添加从节点

redis-trib.rb add-node --slave 从节点 ip: 端口 192.168.4.51:6351

*如果不指定主节点的 id 的话,会把新节点 随机添加为 从节点 最少的主的从

[root@51 ~]# redis-trib.rb add-node --slave 192.168.4.51:6051 192.168.4.51:6051

删除节点主机

删除从库

[root@51 ~]# redis-trib.rb del-node 192.168.4.51:6051 676c81e55e491ea7d4f9eb9f53d5c72abc1b8513

Removing node 676c81e55e491ea7d4f9eb9f53d5c72abc1b8513 from cluster 192.168.4.51:6051

Sending CLUSTER FORGET messages to the cluster...

SHUTDOWN the node.

如果要想把删除的数据节点重新加入集群需要还原数据库

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

192.168.4.51:6051> CLUSTER INFO

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:9

cluster_size:3

。。。。。。。。

192.168.4.51:6051> CLUSTER RESET

OK

192.168.4.51:6051> CLUSTER INFO

cluster_state:fail

cluster_slots_assigned:0

cluster_slots_ok:0

cluster_slots_pfail:0

这样才可以重新添加

删除主机master

[root@51 ~]# redis-trib.rb reshard 192.168.4.51:6051

How many slots do you want to move (from 1 to 16384)? 2000 #增加的槽数

What is the receiving node ID? 18ad59ca4d756e61a5076ea2f6a93d567e521a5c #增加到哪个节点

Source node #1:6e8a84fdd95193fd53a9386f8b24c24c4e5122ff #重哪个节点上移出

Do you want to proceed with the proposed reshard plan (yes/no)?yes

[root@51 ~]# redis-trib.rb del-node 192.168.4.48 6e8a84fdd95193fd53a9386f8b24c24c4e5122ff

Removing node 6e8a84fdd95193fd53a9386f8b24c24c4e5122ff from cluster 192.168.4.48

Invalid IP or Port (given as 192.168.4.48) - use IP:Port format

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...