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 ...
随机推荐
- Anaconda软件安装使用问题
目录 更新源 用conda安装包出现的环境不一致问题 更新源 命令行 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/ ...
- ARTS第四周
补第四周 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文 ...
- 我的Linux发行版选择
Ubuntu CentOS Debian Fedora Slackware Mint Xubuntu Arch OpenSUSE Red Hat Slackel PureOS Mageia PCLin ...
- C语言:缓冲区
缓冲区(Buffer)又称为缓存(Cache),是内存空间的一部分.也就是说,计算机在内存中预留了一定的存储空间,用来暂时保存输入或输出的数据,这部分预留的空间就叫做缓冲区(缓存).有时候,从键盘输入 ...
- ES6新增语法(四)——面向对象
ES6中json的2个变化 简写:名字和值相同时,json可以可以简写 let a=12,b=5; let json = { a, b } console.log(json) // { a:12 , ...
- HTML表单__表单元素属性
看完"HTML表单__表单元素"那一节的同学会发现,同是input标签,type属性值不一样的时候,input类型完全不一样.type就是input的一个属性,除type之外,还有 ...
- [刘阳Java]_MySQL数据优化总结_查询备忘录
数据库优化是在后端开发中必备技能,今天写一篇MySQL数据优化的总结,供大家看看 一.MySQL数据库优化分类 我们通过一个图片形式来看看数据优化一些策略问题 不难看出,优化有两条路可以选择:硬件与技 ...
- ACM金牌选手讲解LeetCode算法《栈和队列的高级应用》
大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链 ...
- Laravel使用artisan快速实现表单的登陆注册
1. 开发环境 macOS Mojave 10.14.6 XAMPP 5.6.38 Laravel 5.2 2. 在终端,先进入到项目根目录并执行执行命令 php artisan make:auth ...
- 13Java进阶——IO、线程
1 字节缓冲流 BufferInputStream 将创建一个内部的缓冲区数组,内部缓冲区数组将根据需要从包含的输入流中重新填充,一次可以读取多个字节 BufferOutputStream 该类实现缓 ...