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
- 防火墙问题
- 密码问题
五、参考网址
docker 实现redis主从复制的更多相关文章
- Linux基于Docker的Redis主从复制、哨兵模式搭建
本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...
- Ubuntu 16.04下使用docker部署Redis主从复制
(以下docker相关的命令,需要在root用户环境下或通过sudo提升权限来进行操作.) 1.拉取Redis镜像到本地 docker pull redis 2. 准备Redis主从配置文件 Redi ...
- 【问题解决】使用docker配置redis主从复制,不生效
不生效,解决 原因1:修改 bind 原因2: Slave即的db save失败,因为没有写权限
- 基于docker/dockerfile实现redis主从复制
今天我们来搭建基于docker实现redis主从复制集群 为什么要使用redis集群模式? Redis可以说是内存数据库,mysql的数据库是真实存储在硬盘里的,因此,redis的读取速度要比mysq ...
- 基于Windows下使用Docker 部署Redis
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 1 去官网下载指定的版本 https:/ ...
- Docker部署Redis容器
从仓库下载镜像 sudo docker pull redis 创建容器(前提:将redis.conf文件放入到/Users/chengang/docker/redis目录里面) docker ru ...
- Docker搭建Redis一主两从三哨兵
作者:oscarwin juejin.im/post/5d26b03de51d454fa33b1960 这次实验准备了三台云主机,系统为Debian,ip分别为:35.236.172.131 ,35. ...
- 搭建Redis主从复制的集群
在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统能切换到从节点去读写数据,这样能提升系统的可用性.而且如果再采用主 ...
- 单台服务器-利用docker搭建Redis哨兵集群模式
前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...
随机推荐
- 从源码角度谈谈MySQL "Too many open files"错误的根本原因
"Too many open files"是一个比较常见的错误,不仅仅是在 MySQL 中.只要是在 Linux 中启动的进程,都有可能遇到这个错误. 究其原因,是进程打开的文件描 ...
- Spring BeanFactory和现实工厂的对比
本文不分析Spring的源码流程,只是介绍一些基础的概念,在阅读源码之前,我们应该首先明确研究的对象是什么,才能有的放矢. Spring作为BeanFactory, 和现实工厂有着许多类似之处. 需要 ...
- excel带格式复制python
openpyxl 复制cell单元格包括所有样式 target_cell.data_type = source_cell.data_type target_cell.fill = copy(sourc ...
- yoyogo v1.7.6 增强程序优雅退出和K8s Readiness检查
YoyoGo (Go语言框架)一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s /Apollo等 . 本次更新增 ...
- Java基础00-内部类23
1. 内部类 内部类 1.1 内部类概述 代码示例: 1.2 成员内部类 代码示例: 创建一个成员内部类:定义时没有小括号是因为类是没有形参的.在类的成员位置,就是成员内部类了 创建测试类:这里发现不 ...
- intouch 开发源程序加密方法
在先前项目中,因为同行竞争被拷贝走了源程序代码,以至于被上司责备,故而亡羊补牢对intouch(10.1老版本进行源代码加密探索)整理方法如下. 1.intouch wondermarker打开源程序 ...
- 关于clear:both;后有固定高度的原因及解决方法
不知道从什么时候开始,拥有clear:both;元素的父元素偶尔会出现固定的高度,之前给父元素加diaolay:hidden;临时处理,一直没搞清楚原因,今天又出现该问题,花费半天时间找出了原因记录一 ...
- JAVA,IDEA下的包机制
IDEA下的包机制 在实际开发中,大型系统往往需要多人合作完成,每个程序员都要命名多个类与接口等类型,难免会定义重复的类与接口.为了避免名字冲突,java提供了包机制只要包名不同,即使类名相同,也能相 ...
- 图文实例解析,InnoDB 存储引擎中行锁的三种算法
前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁.具体来说,InnoDB 采用的是两阶段锁定协议(tw ...
- CTF之隐写总结
目测要更很久,因为今年有一件非常重要的事要完成,希望一切顺利 All The Best.