Docke 搭建 Redis 集群〖修正版〗
Docker 安装 Redis集群
前言
使用docker-compose和redis官方镜像和第三方redis-trib镜像组建3主3从的redis集群并设置密码。
构建文件结构
#新建文件夹
mkdir -p /mnt/docker/redis
#在redis文件夹下新建docker-compose.yml文件
cd /mnt/docker/redis
touch docker-compose.yml
#新建一个模板文件
touch redis_cluster.tmpl
构件基础配置
- 输入指令
vim redis_cluster.tmpl
编写redis_cluster.tmpl
文件
# redis端口
port ${PORT}
# 添加访问认证
requirepass 1234
#如果主节点开启了访问认证,从节点访问主节点需要认证;
masterauth 1234
# 关闭保护模式
protected-mode no
# 开启集群
cluster-enabled yes
# 集群节点配置
cluster-config-file nodes.conf
# 超时
cluster-node-timeout 15000
# 集群节点IP host模式为宿主机IP
cluster-announce-ip 127.0.0.1
# 集群节点端口 6061 - 6066
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
# 开启 appendonly 备份模式
appendonly yes
注意:
cluster-announce-ip
处的ip请填写自己服务器的ip。cluster-announce-port
与cluster-announce-bus-port
两处的端口配置为集群所需端口配置。如果需要开启外网访问,请保证将此处各个端口可以正常访问。
- 批量创建配置文件和数据目录,终端运行以下命令:
for port in `seq 6061 6066`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis_cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
注意:此处的
6061-6066
为redis连接端口,可更改为自己定义的端口,此端口对应redis_cluster.tmpl
文件中的${PORT}
端口。
编写docker-compose.yml文件
- 直接贴出,此处使用的网桥是host。
version: '3'
services:
node1:
image: redis:5.0.10
container_name: redis1
restart: always
volumes:
- ./6061/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./6061/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
network_mode: "host"
node2:
image: redis:5.0.10
container_name: redis2
restart: always
volumes:
- ./6062/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./6062/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
network_mode: "host"
node3:
image: redis:5.0.10
container_name: redis3
restart: always
volumes:
- ./6063/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./6063/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
network_mode: "host"
node4:
image: redis:5.0.10
container_name: redis4
restart: always
volumes:
- ./6064/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./6064/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
network_mode: "host"
node5:
image: redis:5.0.10
container_name: redis5
restart: always
volumes:
- ./6065/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./6065/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
network_mode: "host"
node6:
image: redis:5.0.10
container_name: redis6
restart: always
volumes:
- ./6066/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./6066/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
network_mode: "host"
启动运行
- 在redis目录下(即docker-compose.yml同级目录)执行
docker-compose up -d
- 查看容器运行情况
docker-compose ps
连接集群
- 进入其中一个容器
docker exec -it redis1 bash
- 集群配置比较简单,只需一条命令
redis-cli -a 1234 --cluster create ip:6061 ip:6062 ip:6063 ip:6064 ip:6065 ip:6066 --cluster-replicas 1
此处ip替换成实际ip地址,中间需要用yes来同意集群方案
出现选择提示信息,输入 yes,结果如下所示:
- 至此一个高可用的 Redis Cluster 集群搭建完成,如下图所示,该集群中包含 6 个 Redis 节点,3 主 3 从。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。
验证集群
-
在容器内输入指令
redis-cli -c -a 1234 -h 127.0.0.1 -p 6061
-
查看集群信息和节点信息
# 查看集群信息
cluster info
# 查看集群结点信息
cluster nodes
- 源文件:
127.0.0.1:6061> cluster nodes
06851aa134d50096d82a434eced9194233b5204e 127.0.0.1:6063@16063 slave 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1567671901000 4 connected
a42297b65f7101fc9e4941ef8a0e65080d1b6338 127.0.0.1:6065@16065 slave 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1567671901581 6 connected
e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 127.0.0.1:6062@16063 master - 0 1567671902582 3 connected 10923-16383
0aa20378d14e3ef0859815196cbafa67e1001d0e 127.0.0.1:6066@16066 myself,master - 0 1567671901000 1 connected 0-5460
8b33f273386c9504ef8bd10b005e24825b3b9596 127.0.0.1:6061@16061 master - 0 1567671902383 2 connected 5461-10922
fe355eed99100197f43d1216d1de82643dd496a5 127.0.0.1:6064@16064 slave e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1567671901380 5 connected
- 再测试一下set和get,另外可以看到,结点会自己切换,并且6061端口set和数据可以在6062端口get到
集群写入数据简单测试
- 随便登录一个集群节点
redis-cli -c -p 6061 -a 你的密码
- 写入数据
127.0.0.1:6063> set test 1
-> Redirected to slot [7800] located at 127.0.0.1:6061
OK
127.0.0.1:6061> get test
"1"
127.0.0.1:6061> del test
(integer) 1
可以看到,集群中任意节点写入数据,在其他任意节点都能读到。
后记
至此使用多机环境基于 Docker Compose
搭建 Redis Cluster
就到这里。虽然整体搭建过程感觉比起之前并没有简化太多。但是,如果我们想要停止并删除 Redis Cluster
集群环境,之前的方式就需要一个个去操作,而 Docker Compose
只需要一个 docker-compose down
命令的操作即可。
enjoy~