大家好,我是testerzhang, 上次跟大家分享了非Docker版Redis的搭建,这次来写写Docker版Redis集群版的简单教程。
本文以CentOS7为例进行教程说明,搭建单机版的三主三从集群Redis。
Docker
这里就不展开如何安装Docker,但是这里会使用Docker-compose,这里你需要下载配置下。
# wget https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-x86_64
# chmod +x docker-compose-linux-x86_64
# cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
操作
1.在某个目录建立如下文件夹
# mkdir 7001 7002 7003 7004 7005 7006
2.提前创建好6个文件
redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf
redis-7006.conf
以redis-7001.conf为例
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile ./7001/pid/redis_7001.pid
# 集群节点IP地址,这里填宿主机的IP
cluster-announce-ip 172.17.102.36
# 节点映射端口
cluster-announce-port 7001
#节点总线端
cluster-announce-bus-port 17001
#masterauth testerzhang@redis
#requirepass testerzhang@redis
其他配置文件主要是端口和路径修改下即可。
3.创建docker-compose.yml文件
# cat docker-compose.yml
version: '3.7'
x-image:
&default-image
redis:latest
networks:
redis-cluster-net:
external:
name: redis-cluster-net
services:
redis-master-1:
image: *default-image
container_name: redis-master-1
command:
["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis-7001.conf:/home/redis/cluster/redis.conf
- ./7001/data:/data
ports:
- 7001:7001
- 17001:17001
redis-master-2:
image: *default-image
container_name: redis-master-2
command:
["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis-7002.conf:/home/redis/cluster/redis.conf
- ./7002/data:/data
ports:
- 7002:7002
- 17002:17002
redis-master-3:
image: *default-image
container_name: redis-master-3
command:
["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis-7003.conf:/home/redis/cluster/redis.conf
- ./7003/data:/data
ports:
- 7003:7003
- 17003:17003
redis-salve-1:
image: *default-image
container_name: redis-salve-1
command:
["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis-7004.conf:/home/redis/cluster/redis.conf
- ./7004/data:/data
ports:
- 7004:7004
- 17004:17004
redis-salve-2:
image: *default-image
container_name: redis-salve-2
command:
["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis-7005.conf:/home/redis/cluster/redis.conf
- ./7005/data:/data
ports:
- 7005:7005
- 17005:17005
redis-salve-3:
image: *default-image
container_name: redis-salve-3
command:
["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis-7006.conf:/home/redis/cluster/redis.conf
- ./7006/data:/data
ports:
- 7006:7006
- 17006:17006
为了提高速度,先行下载镜像
# docker pull redis:latest
4.在docker-compose.yml文件的目录下执行。
# docker-compose up -d
可以看到容器正常运行
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e582837b5458 redis:latest "docker-entrypoint.s…" 8 seconds ago Up 4 seconds 0.0.0.0:7003->7003/tcp, :::7003->7003/tcp, 6379/tcp, 0.0.0.0:17003->17003/tcp, :::17003->17003/tcp redis-master-3
ddabad0d1191 redis:latest "docker-entrypoint.s…" 8 seconds ago Up 4 seconds 0.0.0.0:7001->7001/tcp, :::7001->7001/tcp, 6379/tcp, 0.0.0.0:17001->17001/tcp, :::17001->17001/tcp redis-master-1
42774b5f3843 redis:latest "docker-entrypoint.s…" 8 seconds ago Up 4 seconds 0.0.0.0:7006->7006/tcp, :::7006->7006/tcp, 6379/tcp, 0.0.0.0:17006->17006/tcp, :::17006->17006/tcp redis-salve-3
16a571521bd9 redis:latest "docker-entrypoint.s…" 8 seconds ago Up 4 seconds 0.0.0.0:7004->7004/tcp, :::7004->7004/tcp, 6379/tcp, 0.0.0.0:17004->17004/tcp, :::17004->17004/tcp redis-salve-1
2c618f3ac583 redis:latest "docker-entrypoint.s…" 8 seconds ago Up 4 seconds 0.0.0.0:7005->7005/tcp, :::7005->7005/tcp, 6379/tcp, 0.0.0.0:17005->17005/tcp, :::17005->17005/tcp redis-salve-2
1fb08d8d1f27 redis:latest "docker-entrypoint.s…" 8 seconds ago Up 4 seconds 0.0.0.0:7002->7002/tcp, :::7002->7002/tcp, 6379/tcp, 0.0.0.0:17002->17002/tcp, :::17002->17002/tcp redis-master-2
5.进入某个容器节点
# docker exec -it redis-master-1 /bin/bash
进入容器后执行
# redis-cli --cluster create 172.17.102.36:7001 172.17.102.36:7002 172.17.102.36:7003 172.17.102.36:7004 172.17.102.36:7005 172.17.102.36:7006 --cluster-replicas 1
过程中遇到询问输入:yes
Can I set the above configuration? (type 'yes' to accept): yes
然后会提示:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
6.查看集群信息
继续在该容器上连接redis服务
# redis-cli -h 172.17.102.36 -p 7001
172.17.102.36:7001> cluster nodes
7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 172.17.102.36:7003@17003 master - 0 1638716147000 3 connected 10923-16383
2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 172.17.102.36:7001@17001 myself,master - 0 1638716146000 1 connected 0-5460
4224159b844de4ba90c115080cc97f1654a863c4 172.17.102.36:7002@17002 master - 0 1638716146000 2 connected 5461-10922
50452b57f8910da35a1642c5bef99e96c4fa1bd4 172.17.102.36:7004@17004 slave 2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 0 1638716146000 1 connected
d1574bf283c009f4dccc1846e7f9143e1a2d0d7f 172.17.102.36:7005@17005 slave 4224159b844de4ba90c115080cc97f1654a863c4 0 1638716147879 2 connected
b05a16e93fb848be701d8a46e1ab6f1c9680808b 172.17.102.36:7006@17006 slave 7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 0 1638716147000 3 connected
7.停止redis容器集群
退出容器,然后执行关闭容器命令
# docker-compose down
8.将每个配置文件上面的密码打开
masterauth testerzhang@redis
requirepass testerzhang@redis
9.再次启动Redis容器
# docker-compose up -d
10.再次进入容器验证是否需要密码
# redis-cli -h 172.17.102.36 -p 7001
172.17.102.36:7001> cluster nodes
NOAUTH Authentication required.
172.17.102.36:7001> auth testerzhang@redis
OK
172.17.102.36:7001> cluster nodes
b05a16e93fb848be701d8a46e1ab6f1c9680808b 172.17.102.36:7006@17006 slave 7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 0 1638716360588 3 connected
7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 172.17.102.36:7003@17003 master - 0 1638716359000 3 connected 10923-16383
2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 172.17.102.36:7001@17001 myself,master - 0 1638716358000 1 connected 0-5460
4224159b844de4ba90c115080cc97f1654a863c4 172.17.102.36:7002@17002 master - 0 1638716360085 2 connected 5461-10922
50452b57f8910da35a1642c5bef99e96c4fa1bd4 172.17.102.36:7004@17004 slave 2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 0 1638716360588 1 connected
d1574bf283c009f4dccc1846e7f9143e1a2d0d7f 172.17.102.36:7005@17005 slave 4224159b844de4ba90c115080cc97f1654a863c4 0 1638716360000 2 connected
本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!
欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。