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