docker 部署redis集群 配置

发布于:2025-06-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

docker的网络模式

网桥模式每次重启容器都有可能导致容器ip地址变化,需要固定ip的自己自定义网络,这里介绍的是默认网络模式

docker创建容器

docker run --name redis6379 -p 6379:6379 -p 16379:16379  -v  /etc/redis/redis6379:/etc/redis -d  --restart=always  redisContainerID redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

docker run --name redis6378-p 6378:6379 -p 16378:16379  -v  /etc/redis/redis6378:/etc/redis -d  --restart=always  redisContainerID redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

docker run --name redis6377-p 6377:6379 -p 16377:16379  -v  /etc/redis/redis6377:/etc/redis -d  --restart=always  redisContainerID  redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
手动创建目录:

进入宿主主机/etc/redis/目录下分别创建redis6379 redis6378 redis6377文件夹

mkdir redis6379 redis6378 redis6377

由于这里没有配置网络三个redis容器ip是docker局域网内部随机分配的,列如IP分配的是
redis6379 172.17.0.9
redis6378 172.17.0.8
redis6377 172.17.0.7

参数:

–name:设置容器名称,如 --name redis6379 当容器创建成功docker ps -a 就能找到名字为redis6379的容器
-p:端口映射 宿主机端口:容器端口
-v:文件目录映射 宿主机目录:容器目录 这样不用每次进入容器去操作文件,可以直接再宿主主机目录下操作 注意(坑): redis.conf有些配置项需要填写路径不能写宿主主机的路径 ,仍要写容器的路径
-d:容器启动 --restart=always 每次随着docker启动而启动
redis-server /etc/redis/redis.conf :redis启动以/etc/redis/redis.conf路径下的配置文件启动
–appendonly :开启持久化
–requirepass:设置密码

配置文件:

分别进入redis6379 redis6378 redis6377目录执行一下命令

wget http://download.redis.io/redis-stable/redis.conf

下载配置文件
如果文件过多,可以先下载一个然后执行一下命令(awk,xargs二选一,根据自己喜好)

awk:
echo 6378:6377| awk 'BEGIN{RS="[:]";} {cmd="cp /etc/redis/redis6379/redis.conf /etc/redis/redis"$0;system(cmd)}'
xargs:
echo {6377..6378}|xargs -n1 | xargs -I{} cp /etc/redis/redis6379/redis.conf /etc/redis/redis{}/

设计

redis6379 172.17.0.9 主节点
redis6378 172.17.0.8 从节点
redis6377 172.17.0.7 从节点

主节点(redis6379 172.17.0.9)配置文件:

主要修改:

cluster-enabled yes
protected-mode yes  如果没有设置密码则只能本地主机能访问
port 6379 容器端口
bind 172.17.0.9
#daemonize yes 这个不知道为什么我开启 redis容器启动不起来,这里我是关闭的,这个如果开启需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 记录后台自起进程PID
logfile "/etc/redis/redis.log" 这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建redis.log文件或者进入该容器在/etc/redis/下创建redis.log
dir /etc/redis/data    这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建data目录或者进入该容器在/etc/redis/下创建data目录
#replicaof 172.17.0.9 6379 由于这里是主节点所欲不需要配置该项
#masterauth 123456 由于这里是主节点所欲不需要配置该项
requirepass 123456 
appendonly yes
cluster-config-file /etc/redis/nodes-6379.conf
cluster-node-timeout 15000

从节点1(redis6378 172.17.0.8)配置文件:

主要修改:

cluster-enabled no (坑)这里从节点不能开启
protected-mode yes  如果没有设置密码则只能本地主机能访问
port 6379 容器端口
bind 172.17.0.8
#daemonize yes 这个不知道为什么我开启 redis容器启动不起来,这里我是关闭的,这个如果开启需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 记录后台自起进程PID
logfile "/etc/redis/redis.log" 这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建redis.log文件或者进入该容器在/etc/redis/下创建redis.log
dir /etc/redis/data    这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建data目录或者进入该容器在/etc/redis/下创建data目录
replicaof 172.17.0.9 6379 由于这里是主节点所欲不需要配置该项
masterauth 123456 由于这里是主节点所欲不需要配置该项
requirepass 123456 
appendonly yes
cluster-config-file /etc/redis/nodes-6378.conf
cluster-node-timeout 15000

从节点2(redis6377 172.17.0.7)配置文件:

主要修改:

cluster-enabled yes
protected-mode yes  如果没有设置密码则只能本地主机能访问
port 6379 容器端口
bind 172.17.0.9
#daemonize yes 这个不知道为什么我开启 redis容器启动不起来,这里我是关闭的,这个如果开启需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 记录后台自起进程PID
logfile "/etc/redis/redis.log" 这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建redis.log文件或者进入该容器在/etc/redis/下创建redis.log
dir /etc/redis/data    这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建data目录或者进入该容器在/etc/redis/下创建data目录
#replicaof 172.17.0.9 6379 由于这里是主节点所欲不需要配置该项
#masterauth 123456 由于这里是主节点所欲不需要配置该项
requirepass 123456 
appendonly yes
cluster-config-file /etc/redis/nodes-6379.conf
cluster-node-timeout 15000

从节点1(redis6378 172.17.0.8)配置文件:

主要修改:

cluster-enabled no (坑)这里从节点不能开启
protected-mode yes  如果没有设置密码则只能本地主机能访问
port 6379 容器端口
bind 172.17.0.7
#daemonize yes 这个不知道为什么我开启 redis容器启动不起来,这里我是关闭的,这个如果开启需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 记录后台自起进程PID
logfile "/etc/redis/redis.log" 这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建redis.log文件或者进入该容器在/etc/redis/下创建redis.log
dir /etc/redis/data    这里要写容器的路径不是宿主主机,但是要在映射的宿主主机目录下创建data目录或者进入该容器在/etc/redis/下创建data目录
replicaof 172.17.0.9 6379 由于这里是主节点所欲不需要配置该项
masterauth 123456 由于这里是主节点所欲不需要配置该项
requirepass 123456 
appendonly yes
cluster-config-file /etc/redis/nodes-6377.conf
cluster-node-timeout 15000

具体配置参数:请查看
https://blog.csdn.net/sunboylife/article/details/108464722

重启容器:

docker  restart redis6379  redis6378 redis6377

进入主节点

docker exec -ti redis6379 /bin/bash

登录客户端
redis-cli -h 172.17.0.9 -a 123456
查看节点信息

 info replication

效果:

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到