docker搭建redis主从复制

1、安装镜像

docker pull redis:6.2.6

2、新建目录

D:\redis-data\node1

3、修改mast 的 redis.conf配置

命令功能
appendonly yes 启动Redis持久化功能
protected-mode no 关闭protected-mode模式,此时外部网络可以直接访问 
bind 0.0.0.0 注释掉,设置所有IP都可以访问 
requirepass 密码 设置密码
dir ./ 输入本地redis数据库存放文件夹

4、创建并启动

docker run -d --name redis-master --restart=always --privileged=true -p 6379:6379 -v /d/redis-data/node1/redis.conf:/etc/redis/redis.conf -v /d/redis-data/node1:/data redis:6.2.6 redis-server /etc/redis/redis.conf

命令描述
-d 后台运行
--restart=always 重启docker时,自动启动相关容器
--privileged=true 以特权方式启动容器,解决报错问题(Permission denied)
--appendonly yes redis持久化
redis-server /etc/redis/redis.conf Redis 容器中设置 redis-server 每次启动读取 /etc/redis/redis.conf 这个配置为准
\ shell 命令换行

5、设置网络

 

 docker network connect newwork redis-master

6、安装slave从库

复制主库的配置文件,然后修改以下项

# 配置连接主库信息 replicaof 172.19.0.2 6379

此处是主库的网络ip地址,通过 docker inspect

docker inspect redis-master

 

 

 

# 从机只读模式默认是开启的: replica-read-only yes

# 配置主库密码 masterauth 123456

执行

docker run -d --name redis-slave-01 --restart=always --privileged=true -p 6380:6379 -v /d/redis-data/node2/redis.conf:/etc/redis/redis.conf redis:6.2.6 redis-server /etc/redis/redis.conf

# 进入容器 docker exec -it redis-slave-01 /bin/bash # 连接redis redis-cli -h 127.0.0.1 -p 6379 -a 123456 # 查看主从配置 info replication

 

 为up表示连接主库成功

7、失败及原因

通过docker logs 容器 查看日志

1、docker run时,docker run repository name must be lowercase.
解决:-v /C/Program Files/Docker/redis/data:/redis/data 路径存在空格,使用"“包裹有空格的部分:-v /C/”Program Files”/Docker/redis/data:/redis/data
2、can’t open config file ‘/etc/redis/redis-6379.con’: No such file or directory
3、注意dir: 快照文件在容器中的存放目录,要与挂载目录一致
4、不要在配置文件写daemonize yes,会与docker run冲突,想后台运行只可以在docker run 里加上-d
5、Error condition on socket for SYNC: Connection refused
slaveof写的不对,master的ip不是127.0.0.1,去master控制台
cat /etc/hosts,下面的才是master的ip
6、Failed trying to load the MASTER synchronization DB from disk
取消data挂载,即取消-v D:\docker\redis\data:/redis/data的挂载,还要注释slave.conf中dir的路径
7、如何在windows登录容器内redis客户端查看redis信息
解决:打开Windows PowerShell,docker exec -it 07de9938cf17 redis-cli -p 端口号,(07de9938cf17是容器id)登录用auth 123,(123是redis密码),执行info replication,查看role:master
感谢:https://blog.csdn.net/qq_33067315/article/details/114995533
8、redis master重启后无法同步
在master的conf里也加上masterauth 123(123是master密码,当master成为slave也需要masterauth)

导出镜像:docker save -o image-id,输出位置在命令行所在路径

 

来源:https://www.cnblogs.com/lvlinguang/p/15120440.html

https://blog.csdn.net/hu_mingwei/article/details/119299018

 

 

 

 

posted @ 2022-04-21 17:08  菜鸟的地盘  阅读(326)  评论(1编辑  收藏  举报