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

  • 防火墙问题
  • 密码问题

五、参考网址

posted @ 2022-05-15 19:39  edda_huang  阅读(150)  评论(0编辑  收藏  举报