一、概览

  • 主库: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

  • 防火墙问题
  • 密码问题

五、参考网址

docker 实现redis主从复制的更多相关文章

  1. Linux基于Docker的Redis主从复制、哨兵模式搭建

    本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...

  2. Ubuntu 16.04下使用docker部署Redis主从复制

    (以下docker相关的命令,需要在root用户环境下或通过sudo提升权限来进行操作.) 1.拉取Redis镜像到本地 docker pull redis 2. 准备Redis主从配置文件 Redi ...

  3. 【问题解决】使用docker配置redis主从复制,不生效

    不生效,解决 原因1:修改 bind 原因2: Slave即的db save失败,因为没有写权限

  4. 基于docker/dockerfile实现redis主从复制

    今天我们来搭建基于docker实现redis主从复制集群 为什么要使用redis集群模式? Redis可以说是内存数据库,mysql的数据库是真实存储在硬盘里的,因此,redis的读取速度要比mysq ...

  5. 基于Windows下使用Docker 部署Redis

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 1 去官网下载指定的版本 https:/ ...

  6. Docker部署Redis容器

    从仓库下载镜像 sudo docker pull redis   创建容器(前提:将redis.conf文件放入到/Users/chengang/docker/redis目录里面) docker ru ...

  7. Docker搭建Redis一主两从三哨兵

    作者:oscarwin juejin.im/post/5d26b03de51d454fa33b1960 这次实验准备了三台云主机,系统为Debian,ip分别为:35.236.172.131 ,35. ...

  8. 搭建Redis主从复制的集群

    在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统能切换到从节点去读写数据,这样能提升系统的可用性.而且如果再采用主 ...

  9. 单台服务器-利用docker搭建Redis哨兵集群模式

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

随机推荐

  1. Dart学习记录(一)——对象

    1. 静态成员.方法 1.1 static 声明 1.2 静态.非静态方法可访问静态成员.调用方法:静态方法不可访问静态成员.调用方法: 1.3 静态成员.方法,属于类的 ,不用实例化对象就可使用,不 ...

  2. cke编辑器插入&ZeroWidthSpace占位字符的问题记录

    背景 本博文主要记录在使用cke编辑器时,遇到的一系列的问题 问题1:在执行某些业务操作后,编辑器会偶现在页面头部或者尾部插入&ZeroWidthSpace占位符(编辑器好像就爱干这事~) 解 ...

  3. Pytest学习笔记12-配置文件pytest.ini

    前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. 常用的配置项 marks 作用:测试用例中添加了自定义标记( ...

  4. python 读取 查询 更新 删除 sql2008 类及应用

    import pymssql class MSSQL: def __init__(self,host,user,pwd,db): self.host = host self.user = user s ...

  5. ES6新增语法(五)——Promise详解

    Promise介绍 promise是一个对象,从它可以获取异步操作的消息.有all.race.reject.resolve这几个方法,原型上有then.catch等方法. Promise的两个特点: ...

  6. 记录Jackson和Lombok的坑

    记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...

  7. Java基础之反射总结

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  8. MapReduce学习总结之架构

    一.MapReduce1.x架构 1)jobTracker:JT 作业的管理者 将作业分解成一堆任务:Task(MapTask和ReduceTask) 将任务分派给TaskTracker(TT)运行 ...

  9. [考试总结]noip模拟26

    首先看到这样中二的题目心头一震.... 然而发现又是没有部分分数的一天. 然而正解不会打.... 那还是得要打暴力. 但是这套题目有两个题目只有一个参数. 所以... (滑稽).jpg 然后我就成功用 ...

  10. 第二篇 -- Django写一个接口并用Jmeter进行测试

    第一节学习了Jmeter的下载和安装,那么第二节就来看看具体怎么使用. 本篇介绍的是使用Jmeter进行http接口测试,那么接口程序使用Django开发的一个小接口. 一.Django编写接口 这一 ...