Redis集群搭建

1. 集群搭建需要的环境

  1. Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
  2. 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。

2. 集群搭建具体步骤如下(注意要关闭防火墙)

(1)在/root/redis/目录下新建redis-cluster目录,用于存放集群节点

在这里插入图片描述
(2)在redis-cluster目录下创建7001~7006文件夹

在这里插入图片描述
(3)在/root/redis/redis-5.0.5/src目录下执行make install PREFIX=/root/redis/redis-cluster/7001

在这里插入图片描述
  注意:这一步类似于拷贝单机版安装时,生成的bin目录,到7001目录下。

(4)拷贝redis配置文件到7001目录下

cp /root/redis/redis-5.0.5/redis.conf /root/redis/redis-cluster/7001/bin

(5)修改redis.conf配置文件

  把 redis.conf配置文件中的 protected-mode 设置成no(默认是设置成yes的, 防止了远程访问),以及端口号修改为7001

在这里插入图片描述
  把配置文件中的daemonize属性改为yes(表明需要在后台运行)

在这里插入图片描述
  把 redis.conf配置文件中的 bind 127.0.0.1 这一行给注释掉,这里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了。

在这里插入图片描述
cluster-enabled yes的注释打开

在这里插入图片描述
(6)复制7001,创建7002~7006实例,注意端口修改。

cp -r /root/redis/redis-cluster/7001/* /root/redis/redis-cluster/7002
cp -r /root/redis/redis-cluster/7001/* /root/redis/redis-cluster/7003
cp -r /root/redis/redis-cluster/7001/* /root/redis/redis-cluster/7004
cp -r /root/redis/redis-cluster/7001/* /root/redis/redis-cluster/7005
cp -r /root/redis/redis-cluster/7001/* /root/redis/redis-cluster/7006

(7)创建start.sh,启动所有的实例
在这里插入图片描述

cd 7001/bin
./redis-server redis.conf
cd ..
cd ..
cd 7002/bin
./redis-server redis.conf
cd ..
cd ..
cd 7003/bin
./redis-server redis.conf
cd ..
cd ..
cd 7004/bin
./redis-server redis.conf
cd ..
cd ..
cd 7005/bin
./redis-server redis.conf
cd ..
cd ..
cd 7006/bin
./redis-server redis.conf
cd ..
cd ..

(8)创建Redis集群(创建时Redis里不要有数据)

./redis-cli --cluster create 49.235.242.61:7001 49.235.242.61:7002 49.235.242.61:7003 49.235.242.61:7004 49.235.242.61:7005 49.235.242.61:7006 --cluster-replicas 1

在这里插入图片描述

[root@VM-0-13-centos bin]# ./redis-cli --cluster create 49.235.242.61:7001 49.235.242.61:7002 49.235.242.61:7003 49.235.242.61:7004 49.235.242.61:7005 49.235.242.61:7006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 49.235.242.61:7005 to 49.235.242.61:7001
Adding replica 49.235.242.61:7006 to 49.235.242.61:7002
Adding replica 49.235.242.61:7004 to 49.235.242.61:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cbeeec0a02d7ddbbc55345d3c97a111538e30ec2 49.235.242.61:7001
   slots:[0-5460] (5461 slots) master
M: b6ee6ef683c59b8d77e7f6036f497ea15fbbc077 49.235.242.61:7002
   slots:[5461-10922] (5462 slots) master
M: cd2367d11ae13e077f2f5443cdfc71043eb284e3 49.235.242.61:7003
   slots:[10923-16383] (5461 slots) master
S: 04d945e4f86cf1e78a53d1092a742643301d4337 49.235.242.61:7004
   replicates cbeeec0a02d7ddbbc55345d3c97a111538e30ec2
S: e600e51252e1bdfdad4707db803a2b7d945ee0f0 49.235.242.61:7005
   replicates b6ee6ef683c59b8d77e7f6036f497ea15fbbc077
S: 9d4f2e4dd9d5144d15e13bd6e3f85f9743647a21 49.235.242.61:7006
   replicates cd2367d11ae13e077f2f5443cdfc71043eb284e3
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 49.235.242.61:7001)
M: cbeeec0a02d7ddbbc55345d3c97a111538e30ec2 49.235.242.61:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 04d945e4f86cf1e78a53d1092a742643301d4337 49.235.242.61:7004
   slots: (0 slots) slave
   replicates cbeeec0a02d7ddbbc55345d3c97a111538e30ec2
S: e600e51252e1bdfdad4707db803a2b7d945ee0f0 49.235.242.61:7005
   slots: (0 slots) slave
   replicates b6ee6ef683c59b8d77e7f6036f497ea15fbbc077
M: cd2367d11ae13e077f2f5443cdfc71043eb284e3 49.235.242.61:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: b6ee6ef683c59b8d77e7f6036f497ea15fbbc077 49.235.242.61:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 9d4f2e4dd9d5144d15e13bd6e3f85f9743647a21 49.235.242.61:7006
   slots: (0 slots) slave
   replicates cd2367d11ae13e077f2f5443cdfc71043eb284e3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@VM-0-13-centos bin]#

3. 集群信息查看

(1)命令客户端连接集群

命令:

./redis-cli -h 127.0.0.1 -p 7001 -c

注意:-c 表示是以redis集群方式进行连接

在这里插入图片描述
(2)查看集群的命令

查看集群状态cluster info:
在这里插入图片描述
查看集群中的节点cluster nodes
在这里插入图片描述

4. 集群节点添加

4.1. 添加主节点

(1)先创建7007节点 (无数据)
在这里插入图片描述
  1)在/root/redis/redis-5.0.5/src目录下执行make install PREFIX=/root/redis/redis-cluster/7007
  2)拷贝配置文件到7007目录下:cp /root/redis/redis-5.0.5/redis.conf /root/redis/redis-cluster/7007/bin
  3)修改配置文件

(2)添加7007结点作为新节点,并启动

执行命令./redis-cli --cluster add-node 49.235.242.61:7007 49.235.242.61:7001

在这里插入图片描述
(3)查看集群结点发现7007已添加到集群中
在这里插入图片描述
(4)hash槽重新分配(数据迁移),添加完主节点需要对主节点进行hash槽分配,这样该主节点才可以存储数据。

第一步:连接上集群(连接集群中任意一个可用结点都行)

./redis-cli --cluster reshard 49.235.242.61:7007

第二步:输入要分配的槽数量

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

输入:3000,表示要给目标节点分配3000个槽

第三步:输入接收槽的结点id

What is the receiving node ID?

输入:386897f3973223d891a2d4342d1f205d838f4c18

PS:这里准备给7007分配槽,通过cluster nodes查看7007结点id为:
386897f3973223d891a2d4342d1f205d838f4c18

第四步:输入源结点id

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.

输入:all

第五步:输入yes开始移动槽到目标结点id
在这里插入图片描述
输入:yes

在这里插入图片描述
查看结果
在这里插入图片描述

4.2. 添加从节点

添加7008从结点,将7008作为7007的从结点

命令:

./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave --cluster-master-id 主节点id

例如:

./redis-cli --cluster add-node 49.235.242.61:7008 49.235.242.61:7007 --cluster-slave 
--cluster-master-id 386897f3973223d891a2d4342d1f205d838f4c18

386897f3973223d891a2d4342d1f205d838f4c18是7007结点的id,可通过cluster nodes查看。
在这里插入图片描述
查看集群中的结点,刚添加的7008为7007的从节点:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值