Docker实战之Redis集群搭建
作者 |上海滩虎哥
来源 | 今日头条
Redis集群搭建主要有Sentinel(哨兵)、Cluster(分片)两种模式。哨兵模式就是利用哨兵监听Redis的master节点,若master宕机则从集群中选举出其它节点作为master继续工作。Cluster模式,实现了Redis的分布式存储,对数据进行分片存储,每个redis节点存储的数据不同,cluster采用哈希槽slot来处理数据和实例之间的关系,一个集群有16384个slot,每个节点负责的slot数=16384/节点数
redis分片集群
在三台主机做集群,3个master,3个slave。实战中最少6台服务器,3个master节点和3个slave节点,由于资源有限,采用三台独立主机来做案例。
1、在三台服务器分别执行一下命令,创建配置文件目录
$ mkdir -p /redis/node-1/conf
$ mkdir -p /redis/node-2/conf$ mkdir -p /redis/node-3/conf
$ mkdir -p /redis/node-4/conf$ mkdir -p /redis/node-5/conf
$ mkdir -p /redis/node-6/conf
2、在配置文件目录写入配置信息,shell脚本批量写入
$ for node in $(seq 1 2); \
do \
touch /redis/node-${node}/conf/redis.conf
cat << EOF >/redis/node-${node}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 173.30.0.1${node}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
$ for node in $(seq 3 4); \
do \
touch /redis/node-${node}/conf/redis.conf
cat << EOF >/redis/node-${node}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 173.30.0.1${node}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
$ for node in $(seq 5 6); \
do \
touch /redis/node-${node}/conf/redis.conf
cat << EOF >/redis/node-${node}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 173.30.0.1${node}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
3、在3台服务器分别启动6个redis服务
(1) 第一台服务器创建并启动2个redis容器,分别是redis-1,redis-2
$ docker run -p 63791:6379 -p 16379:16379 --name redis-1 \
-v /redis/node-1/data:/data \
-v /redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
--restart always \
-d --net microservice-net --ip 173.30.0.11 redis:5.0.10-alpine3.13 \
redis-server /etc/redis/redis.conf
$ docker run -p 63792:6379 -p 26379:16379 \
-v /redis/node-2/data:/data \
-v /redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
--name redis-2 \
--restart always \
-d --net microservice-net --ip 173.30.0.12 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf
(2) 第二台服务器创建并启动2个redis容器,分别是redis-3,redis-4
$ docker run -p 63793:6379 -p 36379:16379 \
-v /redis/node-3/data:/data \
-v /redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
--name redis-3 \
--restart always \
-d --net microservice-net --ip 173.30.0.13 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf
$ docker run -p 63794:6379 -p 46379:16379 \
-v /redis/node-4/data:/data \
-v /redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
--name redis-4 \
--restart always \
-d --net microservice-net --ip 173.30.0.14 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf
(3) 第三台服务器创建并启动2个redis容器,分别是redis-5,redis-6
$ docker run -p 63795:6379 -p 56379:16379 \
-v /redis/node-5/data:/data \
-v /redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
--name redis-5 \
--restart always \
-d --net microservice-net --ip 173.30.0.15 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf
$ docker run -p 63796:6379 -p 16376:16379 \
-v /redis/node-6/data:/data \
-v /redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
--name redis-6 \
--restart always \
-d --net microservice-net --ip 173.30.0.16 \
redis:5.0.10-alpine3.13 redis-server /etc/redis/redis.conf
4、进入第一个节点redis-1容器,创建集群
$ docker exec -it redis-1 /bin/sh
创建集群,并为每个master节点创建一个salve节点
$ docker exec -it redis-1 /bin/shredis-cli --cluster create 173.30.0.11:6379 173.30.0.12:6379 173.30.0.13:6379 \
173.30.0.14:6379 173.30.0.15:6379 173.30.0.16:6379 --cluster-replicas 1
5、设置主节点,1、3、5节点设为主节点,主备不要在同一台服务器,防止服务器宕机后主备都不可用,如果主备都是独立服务器,不用考虑此问题
$ redis-cli --cluster create 173.30.0.11:6379 173.30.0.13:6379 173.30.0.15:6379
6、添加slave节点
slave节点绑定到master节点,需要master-id
查看节点信息
$ cluster nodes
slave绑定到master
node1->node4, node3->node6, node5->node2
$ redis-cli --cluster add-node 173.30.0.14:6379 173.30.0.11:6379 --cluster-slave --cluster-master-id 6260af5d88db48c892c69646229fdbb4410ae7d7
$ redis-cli --cluster add-node 173.30.0.16:6379 173.30.0.13:6379 --cluster-slave --cluster-master-id 705110bc6a1d432f4274ab4726751c6d079b36a9
$ redis-cli --cluster add-node 173.30.0.12:6379 173.30.0.15:6379 --cluster-slave --cluster-master-id 6ded0048f1af943e6e526a4243a6129e27232372
7、访问集群
可以进入任意节点访问集群
$ redis-cli -c