docker下redis集群搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker下redis集群搭建相关的知识,希望对你有一定的参考价值。

docker 下redis集群配置:

1.获取官方redis镜像:

docker pull redis:

2.编辑配置文件:配置文件可自行处理

vi redis1.cong

bind 0.0.0.0 #绑定地址
protected-mode yes
port 6392 #端口
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no #守护进程
supervised no
pidfile /var/run/redis_6379.pid

rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
cluster-enabled yes #启用集群
cluster-config-file nodes-6379.conf #
cluster-node-timeout 15000

#复制配置文件六分,修改端口

3#启用节点 docker的网络模式为net:使用宿主机的网络模式 --net=host
docker run -d --name redis_136_6391 --net=host -v /home/wolfplus/docker/redis/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6392 --net=host -v /home/wolfplus/docker/redis/redis2.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6393 --net=host -v /home/wolfplus/docker/redis/redis3.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6394 --net=host -v /home/wolfplus/docker/redis/redis4.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6395 --net=host -v /home/wolfplus/docker/redis/redis5.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
docker run -d --name redis_136_6396 --net=host -v /home/wolfplus/docker/redis/redis6.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf

4.#redis 集群感知:节点握手——是指一批运行在集群模式的节点通过Gossip协议彼此通信,达到感知对方的过程。

进入某个节点
[email protected]:~/docker/redis/redis-4.0.1/src$ ./redis-cli -h 192.168.0.136 -p 6393
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6379
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6392
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6393
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6394
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6395
192.168.0.136:6393> CLUSTER MEET 192.168.0.136 6396

#查看节点
192.168.0.136:6393> CLUSTER NODES
54cb5c2eb8e5f5aed2d2f7843f75a9284ef6785c 192.168.0.136:[email protected] master - 0 1528697195600 1 connected
f45f9109f2297a83b1ac36f9e1db5e70bbc174ab 192.168.0.136:[email protected] master - 0 1528697195600 0 connected
ae86224a3bc29c4854719c83979cb7506f37787a 192.168.0.136:[email protected] master - 0 1528697195600 5 connected
98aebcfe42d8aaa8a3375e4a16707107dc9da683 192.168.0.136:[email protected] master - 0 1528697194000 4 connected
0bbdc4176884ef0e3bb9b2e7d03d91b0e7e11f44 192.168.0.136:[email protected] master - 0 1528697194995 3 connected
760e4d0039c5ac13d04aa4791c9e6dc28544d7c7 192.168.0.136:[email protected] myself,master - 0 1528697195000 2 connected

5.#前已经使这六个节点组成集群,但是现在还无法工作,因为集群节点还没有分配槽(slot)。
分配槽位: CLUSTER ADDSLOTS 槽位,一个槽位只能分配一个节点,16384个槽位必须分配完,不同节点不能冲突。
所以通过脚本进行分配
#分配槽信息
192.168.0.136:6393> CLUSTER INFO #查看集群信息

[email protected]:~/docker/redis$ cat addslots.sh
#!/bin/bash

node2 192.168.0.136 6379

n=0
for ((i=n;i<=5461;i++));
do
/home/wolfplus/docker/redis/redis-4.0.1/src/redis-cli -h 192.168.0.136 -p 6379 CLUSTER ADDSLOTS $i
done

[email protected]:~/docker/redis$ cat addslots2.sh
#!/bin/bash

node2 192.168.0.136 6392

n=5462
for ((i=n;i<=10922;i++));
do
/home/wolfplus/docker/redis/redis-4.0.1/src/redis-cli -h 192.168.0.136 -p 6392 CLUSTER ADDSLOTS $i
done

[email protected]:~/docker/redis$ cat addslots3.sh
#!/bin/bash

node3 192.168.0.136 6393

n=10923
#for ((i=n;i<=5461;i++));
for ((i=n;i<=16383;i++));
do
/home/wolfplus/docker/redis/redis-4.0.1/src/redis-cli -h 192.168.0.136 -p 6393 CLUSTER ADDSLOTS $i
done

7.#如何变成高可用性,以上我们已经搭建了一套完整的可运行的redis cluster, 但是每个节点都是单点,这样子可能出现,一个节点挂掉,整个集群因为槽位分配不完全而崩溃,因此,我们需要为每个节点配置副本备用节点。
前面我们已经提前创建了6个备用节点,搭建集群花了三个,因此还有剩下三个直接可以用来做备用副本。

#编写脚本,添加副本节点:

[email protected]:~/docker/redis$ cat addSlaveNodes.sh
#!/bin/bash

/usr/bin/redis-cli -h 192.168.0.136 -p 6394 CLUSTER REPLICATE efe727638186d9727691e01d726f1018adc0fd1e

/usr/bin/redis-cli -h 192.168.0.136 -p 6395 CLUSTER REPLICATE efe45e8653ce8bb3d33fbab91be3d86a471d2075

/usr/bin/redis-cli -h 192.168.0.136 -p 6396 CLUSTER REPLICATE 91327df61073cb1921c85bebafbf71802d7b89d6

8#至此集群搭建完成,注意一下信息
1.查看节点key-value,使用redis-cli -h xxx.xxx.xxx.xxx -p port -c (-c 选项对于redis-cli版本限制)
2.docker运行redis集群,最好使用host的网络模式,默认的网桥模式,各节点的ip端口为容器的皮端口,外网不能访问,因此要使用host的网络模式
3.主节点当机,性节点会升级成master模式,当宕机的主节点恢复,则变成了从节点
4.slave-read-only yes
如果为 yes,代表为只读状态,但并不表示客户端用集群方式以从节点为入口连入集群时,不可以进行 set 操作,且 set 操作的数据不会被放在从节点的槽上,会被放到某主节点的槽上。
避免从“Slave-read-only”字面而错误理解该参数的使用,误认为该参数设置后在从节点连入集群无法在该节点 set 值

参考文件:https://www.cnblogs.com/cxbhakim/p/9151720.html

以上是关于docker下redis集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

docker搭建redis集群

Docker 下 RedisCluster 分片集群搭建

Docker极简入门:使用Docker-Compose 搭建redis集群

Docker 搭建redis集群

Docker搭建Redis Cluster集群及扩容和收容

Redis Cluster基于Docker的集群搭建