redis Cluster模式集群 多机器 docker 部署

 

基础架构图如下所示:

1.png

 

 

先不设置密码,后改配置,加密码,重启就可以了

 参考

https://www.jianshu.com/p/339549138e07

 

 

我们先新建一个目录

mkdir -p /data/redis-cluster && cd /data/redis-cluster

三台设备,每台机器一个master 一个slave

 

ip

port

remark

192.168.3.201

6379

主节点master-1

192.168.3.201

6380

从节点slave-2

192.168.3.202

6379

主节点master-2

192.168.3.202

6380

从节点slave-3

192.168.3.203

6379

主节点master-3

192.168.3.203

6380

从节点slave-1

 

机器1结构

image.png

机器2结构

image.png

机器3结构

 

 

编辑 master结点配置文件 redis-master.conf

port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
# requirepass 123456
# masterauth 123456
pidfile /var/run/redis.pid
cluster-announce-ip 192.168.3.201

 

主结点配置说明:

port: 指定了启动的端口号

cluster-enabled: yes启动允许集群

cluster-config-file: 集群配置文件(自动创建)

cluster-node-timeout: 集群超时时间(毫秒)

appendonly: 持久化 yes

daemonize: 后台运行 no

protected-mode: no 允许外部IP访问

requirepass 密码

masterauth 主从节点访问密码

cluster-announce-ip: 集群节点 IP,如果想要集群可以供外网访问,这里直接填宿主机的IP

 

slave结点配置文件 redis-slave.conf

port 6380
cluster-enabled no
appendonly yes
daemonize no
protected-mode no
pidfile /var/run/redis.pid
slaveof 192.168.3.202 6379

slave结点配置说明:

cluster-enabled: no 不参与集群分配

appendonly: 持久化 yes

daemonize: 后台运行 no

slaveof 192.168.3.203 7001: 直接指定成为对应master的从节点

主机1执行

docker run -d --privileged=true --restart always -p 6379:6379 -p 16379:16379 \
-v /data/redis-cluster/master-1/:/etc/redis/ \
-v /data/redis-cluster/master-1/:/data \
--name redis-master-1 redis:7.0 redis-server /etc/redis/redis-master.conf --appendonly yes
docker run
-d --privileged=true --restart always -p 6380:6380 \ -v /data/redis-cluster/slave-2/:/etc/redis/ \ -v /data/redis-cluster/slave-2/:/data \ --name redis-slave-2 redis:7.0 redis-server /etc/redis/redis-slave.conf --appendonly yes

 


主机2执行

docker run -d --privileged=true --restart always -p 6379:6379 -p 16379:16379 \
-v /data/redis-cluster/master-2/:/etc/redis/ \
-v /data/redis-cluster/master-2/:/data \
--name redis-master-2 redis:7.0 redis-server /etc/redis/redis-master.conf --appendonly yes

docker run -d --privileged=true --restart always -p 6380:6380 \
-v /data/redis-cluster/slave-3/:/etc/redis/ \
-v /data/redis-cluster/slave-3/:/data \
--name redis-slave-3 redis:7.0 redis-server /etc/redis/redis-slave.conf --appendonly yes

 

主机3执行

docker run -d --privileged=true --restart always -p 6379:6379 -p 16379:16379 \
-v /data/redis-cluster/master-3/:/etc/redis/ \
-v /data/redis-cluster/master-3/:/data \
--name redis-master-3 redis:7.0 redis-server /etc/redis/redis-master.conf --appendonly yes

docker run -d --privileged=true --restart always -p 6380:6380 \
-v /data/redis-cluster/slave-1/:/etc/redis/ \
-v /data/redis-cluster/slave-1/:/data \
--name redis-slave-1 redis:7.0 redis-server /etc/redis/redis-slave.conf --appendonly yes

 

注意3个主结点的容器,需要同时映射6379端口和16379端口。每个Redis Cluster节点都需要打开两个TCP连接。用于服务客户端的普通Redis TCP端口(如6379),以及数据端口加上10000得到的端口(例如16379)。第二个高端口用于集群总线,是使用二进制协议的节点到节点通信通道。节点使用集群总线进行故障检测、配置更新、故障转移授权等。

 

创建集群并分配slots

此时仅仅创建了三对主从节点,但是三个主节点(7001, 7002, 7003)是孤立的,并且还未分配slots。

进入任意一个主结点:

docker exec -it redis-master-1 /bin/bash

 

然后执行下面的命令:

redis-cli --cluster create 192.168.3.201:6379 192.168.3.202:6379 192.168.3.203:6379 --cluster-replicas 0
redis-cli -a 123456 --cluster create 192.168.2.201:6379 192.168.2.202:6379 192.168.2.203:6379 --cluster-replicas 0

在提示后输入 yes:

 

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.100.101:7001)
M: f936070976e483985e9fa0ac904268e952e4bae3 192.168.100.101:7001
slots:[0-5460] (5461 slots) master
M: 9e6435cc51704ef543e60c186fec4e38277c3a88 192.168.2.240:7003
slots:[10923-16383] (5461 slots) master
M: e4f2be7cb9321058e84bc482db0c59b9d1213faa 192.168.2.240:7002
slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 


这时候这个三主三从的redis集群就创建好了。

 

测试连接

使用集群模式(-c)连接主结点:

 redis-cli -h 192.168.100.101 -p 7001 -c

有密码加 -a 密码

然后随便设置一个值:

192.168.100.101:7001> set k1 v1

 

如果计算出来这个 key的 slot不在当前结点,则会提示:

-> Redirected to slot [12706] located at 192.168.242.93:7003 OK

 

表示通过计算 slot分配到 192.168.242.93:7003结点去了。

我们通过普通模式连接到主结点 192.168.242.93:7003和从结点 192.168.100.106:6379,都能查到这个 k1

posted @ 2024-04-28 11:25  文艺流浪汉  阅读(213)  评论(0编辑  收藏  举报