redis集群学习2-docker搭建redis-cluster高可用集群

环境版本

  • Ubuntu20
  • docker-ce
  • redis5.05

搭建步骤

1、创建模板文件

首先需要创建一个文件夹用来存放模板文件和各redis节点的配置文件,我这里存放在/home/redis-cluster下
以此模板为源文件,生成不同端口的redis.conf文件
文件名 redis-cluster.tmpl
创建好后上传到/home/redis-cluster

port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.44.136
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

2、生成redis集群配置文件

注:不通的服务器,要在不通的服务器上执行

for port in `seq 7001 7006`; do \
  mkdir -p ./${port}/conf \
  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
done

2、生成redis集群配置文件

配置文件生成后,为各配置文件执行创建docker容器

for port in `seq 7001 7006`; do \
  docker run -d -ti \
  -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /home/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net host \
  --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done

3、用redis-cli创建整个redis集群

redis5之前的搭建是依靠ruby,redis5以后redis-cli脚本已经内置于redis /user/local/bin/目录下
1、随便进入一个redis容器内部

docker exec -it redis-7001 /bin/bash

2、找见redis-cli文件目录
/user/local/bin/
3、执行如下命令创建集群

redis-cli --cluster create \
192.168.44.140:7001 \
192.168.44.140:7002 \
192.168.44.140:7003 \
192.168.44.140:7004 \
192.168.44.139:7001 \
192.168.44.139:7002 \
192.168.44.139:7003 \
192.168.44.139:7004 \
--cluster-replicas 1

注:

  • IP地址为你创建redis容器的IP,端口为各容器开放端口,不同服务期可以端口一样,前提IP不通
  • 参数–cluster-replicas 1表示给每个主节点配置一个从节点 0 代表不创建从节点

到此集群搭建完成。

集群验证

# 进入某一容器
docker exec -it redis-7001 /bin/bash
# 以集群模式登录 Redis -c 集群模式 -h 节点ip -p 端口
redis-cli -c  -h 192.168.44.140 -p 7001
# 查看集群信息
cluster info 
#查看集群节点信息
cluster nodes 
#查看集群插槽
cluster slots 

在这里插入图片描述

添加节点

节点添加顺序,先添加redis容器->添加主节点->为主节点分配插槽->添加从节点

1、添加redis容器

将上面的机器暂命名为机器A,另外准备一台机器暂命名为机器B。

我在机器B上按照以上方法准备了两个redis容器(注意机器B的防火墙)
启动之后,这两个redis节点为孤立的节点

2、添加主节点

进入机器A中任意一个已运行的redis容器

docker exec -it renode1 /bin/bash

执行以下命令

redis-cli --cluster add-node 机器B:7011 机器A:7011 -a 123456

前面的机器B 为要添加的节点
前面的机器A 为已经存在的节点

输出如下:
在这里插入图片描述

注意:此时该节点只是作为主节点添加到了集群中,但是没有分配槽点,是不可存储数据的,如果要存储数据,在key被分配时参与槽点计算,需要进行分配槽点操作。

查看新加入的这个节点的信息

redis-cli -c -a 123456 -h 192.168.10.168 -p 7011 cluster nodes

在这里插入图片描述
可以发现和其他主节点相比,新加入的主节点没有数据槽

3、为主节点添加槽点

redis-cli --cluster reshard 需要分配槽的ip:需要分配槽的port

执行以下命令分配数据槽

redis-cli --cluster reshard 192.168.10.166:7011 -a 123456

192.168.10.166:7011为需要分配的槽IP和端口,-a后面的是密码

注意点:

#表示分配多少个槽给192.168.10.166:7011,这里4096表示分配4096个
How many slots do you want to move (from 1 to 16384)? 4096
#表示需要填写接收节点的node id的值,此处为192.168.10.166:7011节点的值
#这个值就是上图中画红线前面的值
What is the receiving node ID? 515fc836d7f6349e3278c43d665f449c6818720f
#all:表示随机从一些主节点中抽取槽分配给192.168.10.166:7011节点
#done:表示从那一个主节点分配槽给192.168.10.166:7011节点
Source node #1: all
添加一个从节点
经过上面的操作192.168.10.166:7011成为了一个主节点
但是目前还没有从节点,现在给它增加一个从节点192.168.10.166:7012。

4、添加从节点

执行以下命令

redis-cli --cluster add-node 192.168.10.166:7012 192.168.10.166:7011 -a 123456
#192.168.10.166:7012为需要添加的节点信息
#192.168.10.166:7011为已经存在的节点信息
# 进入 192.168.10.166:7012 这个节点
redis-cli -c -a 123456 -h 192.168.10.166 -p 7012
# 将从节点添加到主节点上
cluster replicate 515fc836d7f6349e3278c43d665f449c6818720f

这里的515fc836d7f6349e3278c43d665f449c6818720f是192.168.10.166:7011的节点id
至此7012就作为了7011节点的从节点,可以执行 cluster nodes 命令查看

删除节点

1、删除一个从节点

删除从从节点:192.168.10.166:7012

执行命令

redis-cli --cluster del-node 192.168.10.166:7012 bde834ee8a1e3f19f671a2f71fdd4d9a03127453 -a 123456

这个bde834ee8a1e3f19f671a2f71fdd4d9a03127453是从节点:192.168.10.166:7012的节点id值

2、删除一个主节点

删除主节点稍微麻烦一点,如果主节点中存在槽,那么需要先将槽分配给其它的主节点。
如果主节点被删除从节点将会自动代替主节点,如果主节点有分配的槽点(slot)那么先去掉分配的槽点(slot),然后再删除节点;
以下是删除主节点:192.168.10.166:7011的步骤

1、移除槽
redis-cli --cluster reshard 192.168.10.166:7011 -a 123456

可以在集群检查信息中看到7011的插槽数量

这里的4999代表了7011插槽的数量

slots:[0-1665],[5461-7127],[10923-12588] (4999 slots) master

2、删除主节点

执行以下命令删除节点

redis-cli --cluster del-node 192.168.10.166:7011 515fc836d7f6349e3278c43d665f449c6818720f -a 123456

这个515fc836d7f6349e3278c43d665f449c6818720f是主节点:192.168.10.166:7011的节点id值

查看是否成功删除节点

redis-cli -c -a 123456 -h 192.168.10.168 -p 7011 cluster nodes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值