docker实现redis主从复制
一、概览
- 主库:192.168.3.13:6380
- 从库一:192.168.3.14:6381
- 从库二:192.168.3.14:6382
2、开放上以端口
- 查看所有打开的端口: firewall-cmd --zone=public --list-ports
- 分别添加以上端口:firewall-cmd --zone=public --add-port=6380/tcp --permanent
- 刷新防火墙:firewall-cmd --reload
二、安装master库
1、安装镜像
docker pull redis:6.2.5
2、新建目录
mkdir -p /home/apps/redis-master/{conf,data}
3、创建/修改配置文件
cd /home/apps/redis-master/conf
wget http://download.redis.io/redis-stable/redis.conf
-- 修改配置文件,参考第5步
vim redis.conf
4、创建并启动
docker run \
-d \
--name redis-master \
--restart=always \
--privileged=true \
-p 6380:6379 \
-v /home/apps/redis-master/conf/redis.conf:/etc/redis/redis.conf \
-v /home/apps/redis-master/data:/data \
redis:6.2.5 \
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、修改redis.conf配置
命令 | 功能 |
---|---|
appendonly yes | 启动Redis持久化功能 |
protected-mode no | 关闭protected-mode模式,此时外部网络可以直接访问 (docker貌似自动开启了) |
bind 0.0.0.0 | 注释掉,设置所有IP都可以访问 (docker貌似自动开启了) |
requirepass 密码 | 设置密码 |
dir ./ | 输入本地redis数据库存放文件夹 |
三、安装slave从库
- 参考上面的建法,新建redis-slave-01、redis-slave-02
-- 新建目录
mkdir -p /home/apps/redis-slave-01/{conf,data}
mkdir -p /home/apps/redis-slave-02/{conf,data}
--从主库那里复制配置文件
# cp /home/apps/redis-master/conf/redis.conf /home/apps/redis-slave-01/conf/
# cp /home/apps/redis-master/conf/redis.conf /home/apps/redis-slave-02/conf/
-- 修改从库配置
vim /home/apps/redis-slave-01/conf/redis.conf
# 配置连接主库信息
replicaof 192.168.3.13 6380
# 从机只读模式默认是开启的:
replica-read-only yes
# 配置主库密码
masterauth 123456
-- 启动slave1
docker run -d --name redis-slave-01 --restart=always --privileged=true -p 6381:6379 -v /home/apps/redis-slave-01/conf/redis.conf:/etc/redis/redis.conf -v /home/apps/redis-slave-01/data:/data redis:6.2.5 redis-server /etc/redis/redis.conf
-- 启动slave2
docker run -d --name redis-slave-02 --restart=always --privileged=true -p 6382:6379 -v /home/apps/redis-slave-02/conf/redis.conf:/etc/redis/redis.conf -v /home/apps/redis-slave-02/data:/data redis:6.2.5 redis-server /etc/redis/redis.conf
--查看redis主从配置
# 进入容器
docker exec -it redis-slave-01 /bin/bash
# 连接redis
redis-cli -h 127.0.0.1 -p 6379 -a 123456
# 查看主从配置
info replication
# Replication
role:slave
master_host:192.168.3.13
master_port:6380
master_link_status:up
四、错误分析
在从库中出现:master_link_status:down
- 防火墙问题
- 密码问题