环境说明:

  • 阿里云服务器
  • Ubuntu 16.04
  • docker

最终生成目录如下:

root@iZ282zj76jqZ:/docker/redis# tree
.
├── redis6379
│   ├── appendonly.aof
│   ├── dump.rdb
│   ├── red2.so
│   └── redis.conf
├── redis6380
│   ├── appendonly.aof
│   ├── dump.rdb
│   └── redis.conf
├── redis6381
│   ├── appendonly.aof
│   ├── dump.rdb
│   └── redis.conf
├── redis6382
│   ├── appendonly.aof
│   ├── dump.rdb
│   └── redis.conf
├── redis.conf
├── sentinel
│   └── sentinel.conf
└── sentinel.conf

1、拉取Redis镜像

docker pull redis

2、配置Redis启动配置文件,此处我创建一个专用目录,存放Redis相关数据及配置

mkdir /docker/redis

在此目录下下载服务启动配置文件

wget http://download.redis.io/redis-stable/redis.conf

下载后,进入文件修改下面3个参数(在非编辑状态下,采用 /bind 来搜索字符串位置 )

vim  /docker/redis/redis.conf 
# 修改下面三个配置参数
#bind 127.0.0.1 #如果bind选项为空的话,则允许所有来自于可用网络接口的连接
protected-mode no #保护模式,若为yes,只允许本地客户端连接
appendonly yes #开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里

3、在此目录下新建Master(redis6379)文件夹,并复制上述conf文件至文件夹中, Master的 conf 文件路径为

/docker/redis/redis6379/redis.conf

4、利用 conf 创建 Master 容器

# --restart always (docker启动时,本镜像也自动启动)
# --name 容器名为 redis-
# -p 映射本地端口 至容器端口
# -v 绑定Master目录 /docker/redis/redis6379 映射至 docker 中的 /data
# -d 后台运行容器,并返回容器ID
# 指定镜像 redis
# 利用 conf 启动服务 redis-server /data/redis.conf docker run --restart always --name redis- -p : -v /docker/redis/redis6379:/data -d redis redis-server /data/redis.conf

5、查看容器启动情况

root@iZ282zj76jqZ:/docker/redis/redis6379# docker ps |grep redis-
792067d225e6 redis "docker-entrypoint.s…" hours ago Up hours 0.0.0.0:->/tcp redis-

查看 Master 容器的IP,用于配置 Salve 中的参数

# 查看 Master 容器 IP,
# docker inspect redis-6379 查看 NetworkSettings 配置中 IPAdress
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis-
# 192.168.0.3

6、创建 Salve 文件夹(redis6380 、redis6381 、 redis6382),复制上述 redis.conf 文件分别至三个夹中,平修改配置

vim  /docker/redis/redis.conf 

# 修改下面四个配置参数
#bind 127.0.0.1 #如果bind选项为空的话,则允许所有来自于可用网络接口的连接
protected-mode no #保护模式,若为yes,只允许本地客户端连接
appendonly yes #开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里 # replicaof <master ip> <master port>
replicaof 192.168.0.3
#Redis主机(Master)IP 端口

启动三个 Salve 服务

docker run --restart always --name redis- -p : -v /docker/redis/redis6380:/data -d redis redis-server /data/redis.conf
docker run --restart always --name redis- -p : -v /docker/redis/redis6381:/data -d redis redis-server /data/redis.conf
docker run --restart always --name redis- -p : -v /docker/redis/redis6382:/data -d redis redis-server /data/redis.conf

7、查看容器服务

root@iZ282zj76jqZ:/docker/redis# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43488a8c668c redis "docker-entrypoint.s…" seconds ago Up second 0.0.0.0:->/tcp redis-
ca3caaa77f4a redis "docker-entrypoint.s…" hours ago Up About an hour 0.0.0.0:->/tcp redis-
792067d225e6 redis "docker-entrypoint.s…" hours ago Up hours 0.0.0.0:->/tcp redis-
979318c633be redis "docker-entrypoint.s…" hours ago Up About an hour 0.0.0.0:->/tcp redis-

1)进入 Master 容器操作 Redis

root@iZ282zj76jqZ:/docker/redis# docker exec -it redis- redis-cli info replication
# Replication
role:master
connected_slaves:
slave0:ip=192.168.0.4,port=,state=online,offset=,lag=
slave1:ip=192.168.0.5,port=,state=online,offset=,lag=
slave2:ip=192.168.0.6,port=,state=online,offset=,lag=
master_replid:97bf611eb2ac66774c98f9e1d6303906de0e72ca
master_replid2:
master_repl_offset:
second_repl_offset:-
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:

2)进入Salve 容器操作Redis

root@iZ282zj76jqZ:/docker/redis# docker exec -it redis- redis-cli info replication
# Replication
role:slave
master_host:192.168.0.3
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_repl_offset:
slave_priority:
slave_read_only:
connected_slaves:
master_replid:97bf611eb2ac66774c98f9e1d6303906de0e72ca
master_replid2:
master_repl_offset:
second_repl_offset:-
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:

8、也可以直接用docker命令操作Redis

# -it 为容器重新分配一个伪输入终端,以交互模式运行容器
# 容器名 redis-
# redis-cli set Key Value
docker exec -it redis- redis-cli set name tomkluas

9、设置哨兵,配置哨兵文件

创建 sentinel.conf 配置文件
# 主节点信息,格式:sentinel <master-name> <ip> <redis-port> <quorum>;
# <master-name> 自定义主节点名称;
# <ip> <redis-port> 主节点的ip和端口;
# <quorum> 多少个主节点检测到主节点有问题就进行故障转移
sentinel monitor mygroup 192.168.0.3
port

然后在启动一个容器监听服务 (应该启动3个哨兵,此处为一个,其他同样启动)  

docker run --restart always --name sentinel-0 -p : -v /docker/redis/sentinel0:/data -d redis redis-sentinel /data/sentinel.conf
root@iZ282zj76jqZ:/docker/redis# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ef307e6254b redis "docker-entrypoint.s…" seconds ago Up seconds /tcp, 0.0.0.0:->/tcp sentinel-1
root@iZ282zj76jqZ:/docker/redis# docker logs sentinel-
:X Apr ::47.120 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:X Apr ::47.120 # Redis version=5.0., bits=, commit=, modified=, pid=, just started
:X Apr ::47.120 # Configuration loaded
:X Apr ::47.121 * Running mode=sentinel, port=.
:X Apr ::47.121 # WARNING: The TCP backlog setting of cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of .
:X Apr ::47.123 # Sentinel ID is 35ac9959501bbaf6fd40743be0b62e8af6547fec
:X Apr ::47.123 # +monitor master mygroup 192.168.0.3 quorum
:X Apr ::47.124 * +slave slave 192.168.0.4: 192.168.0.4 @ mygroup 192.168.0.3
:X Apr ::47.133 * +slave slave 192.168.0.5: 192.168.0.5 @ mygroup 192.168.0.3
:X Apr ::47.135 * +slave slave 192.168.0.6: 192.168.0.6 @ mygroup 192.168.0.3

10、测试哨兵监听, 主动停止Master

docker stop redis-

查看新的集群情况

root@iZ282zj76jqZ:/docker/redis# docker exec -it redis- redis-cli info replication
# Replication
role:master
connected_slaves:
slave0:ip=192.168.0.5,port=,state=online,offset=,lag=
slave1:ip=192.168.0.4,port=,state=online,offset=,lag=
master_replid:9f4af9b24738305e99aa3fe6b8062e3cabb531f9
master_replid2:97bf611eb2ac66774c98f9e1d6303906de0e72ca
master_repl_offset:
second_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:

查看哨兵log

root@iZ282zj76jqZ:/docker/redis# docker logs sentinel-
:X Apr ::47.120 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:X Apr ::47.120 # Redis version=5.0., bits=, commit=, modified=, pid=, just started
:X Apr ::47.120 # Configuration loaded
:X Apr ::47.121 * Running mode=sentinel, port=.
:X Apr ::47.121 # WARNING: The TCP backlog setting of cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of .
:X Apr ::47.123 # Sentinel ID is 35ac9959501bbaf6fd40743be0b62e8af6547fec
:X Apr ::47.123 # +monitor master mygroup 192.168.0.3 quorum
:X Apr ::47.124 * +slave slave 192.168.0.4: 192.168.0.4 @ mygroup 192.168.0.3
:X Apr ::47.133 * +slave slave 192.168.0.5: 192.168.0.5 @ mygroup 192.168.0.3
:X Apr ::47.135 * +slave slave 192.168.0.6: 192.168.0.6 @ mygroup 192.168.0.3
:X Apr ::52.477 # +sdown master mygroup 192.168.0.3
:X Apr ::52.477 # +odown master mygroup 192.168.0.3 #quorum /
:X Apr ::52.477 # +new-epoch
:X Apr ::52.477 # +try-failover master mygroup 192.168.0.3
:X Apr ::52.498 # +vote-for-leader 35ac9959501bbaf6fd40743be0b62e8af6547fec
:X Apr ::52.498 # +elected-leader master mygroup 192.168.0.3
:X Apr ::52.498 # +failover-state-select-slave master mygroup 192.168.0.3
:X Apr ::52.582 # +selected-slave slave 192.168.0.6: 192.168.0.6 @ mygroup 192.168.0.3
:X Apr ::52.582 * +failover-state-send-slaveof-noone slave 192.168.0.6: 192.168.0.6 @ mygroup 192.168.0.3
:X Apr ::52.648 * +failover-state-wait-promotion slave 192.168.0.6: 192.168.0.6 @ mygroup 192.168.0.3
:X Apr ::53.321 # +promoted-slave slave 192.168.0.6: 192.168.0.6 @ mygroup 192.168.0.3
:X Apr ::53.321 # +failover-state-reconf-slaves master mygroup 192.168.0.3
:X Apr ::53.368 * +slave-reconf-sent slave 192.168.0.5: 192.168.0.5 @ mygroup 192.168.0.3
:X Apr ::54.365 * +slave-reconf-inprog slave 192.168.0.5: 192.168.0.5 @ mygroup 192.168.0.3
:X Apr ::54.365 * +slave-reconf-done slave 192.168.0.5: 192.168.0.5 @ mygroup 192.168.0.3
:X Apr ::54.418 * +slave-reconf-sent slave 192.168.0.4: 192.168.0.4 @ mygroup 192.168.0.3
:X Apr ::55.399 * +slave-reconf-inprog slave 192.168.0.4: 192.168.0.4 @ mygroup 192.168.0.3
:X Apr ::55.399 * +slave-reconf-done slave 192.168.0.4: 192.168.0.4 @ mygroup 192.168.0.3
:X Apr ::55.488 # +failover-end master mygroup 192.168.0.3
:X Apr ::55.488 # +switch-master mygroup 192.168.0.3 192.168.0.6 6379 # 切换Master
:X Apr ::55.489 * +slave slave 192.168.0.5: 192.168.0.5 @ mygroup 192.168.0.6
:X Apr ::55.489 * +slave slave 192.168.0.4: 192.168.0.4 @ mygroup 192.168.0.6
:X Apr ::55.489 * +slave slave 192.168.0.3: 192.168.0.3 @ mygroup 192.168.0.6
:X Apr ::25.545 # +sdown slave 192.168.0.3: 192.168.0.3 @ mygroup 192.168.0.6
 
 
 

在docker中部署redis主从配置的更多相关文章

  1. nopCommerce 3.9 大波浪系列 之 使用部署在Docker中的Redis缓存主从服务

    一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发 ...

  2. 从零开始学习docker之在docker中搭建redis(集群)

    docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...

  3. docker部署redis主从和哨兵

    docker部署redis主从和哨兵 原文地址:https://www.jianshu.com/p/72ee9568c8ea 1主2从3哨兵 一.前期准备工作 1.电脑装有docker 2.假设本地i ...

  4. Linux中redis主从配置

    假设要在6380开启redis 1.添加配置文件:复制redis.conf为redis_6380.conf 2.修改配置文件:修改redis_6380.conf中port.pidfile 3.防火墙: ...

  5. Docker Compose 部署 Redis 及原理讲解 | 懒人屋

    原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解  4.4k  字    16  分钟    2019-10-1 ...

  6. Docker安装部署redis

    借鉴博客:https://my.oschina.net/u/3489495/blog/1825335 待续... >>>>>>>>>docker安 ...

  7. 在kubernetes集群中创建redis主从多实例

    分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...

  8. docker stack 部署 redis

    =============================================== 2019/4/16_第2次修改                       ccb_warlock 更新 ...

  9. SaltStack入门篇(六)之部署Redis主从实现和Job管理

    一.部署Redis主从 需求: 192.168.56.11是主,192.168.56.12是从 redis监听自己的ip地址,而不是0.0.0.0 分析: linux-node1 安装 配置 启动 l ...

随机推荐

  1. 单片机基础——使用GPIO输出点亮一个LED灯

    1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...

  2. django 知识点小结

    以下内容为用django写blog中的一些知识点,权当复习. 一.定义view 1.get_object_or_404()是用get()查询数据,如果不存在就直接返回404 参数: get_objec ...

  3. spark打包详解

    spark打包还是比较复杂的,特别的其中有关R语言的模块.在本章,我就将其中遇到的所有问题为大家一一讲解,为大家提供一点经验. 这里的打包命令是直接从官网中找的,这里我们最后得到的是tgz格式的包.打 ...

  4. 大龄IT人的新的一年

    一转眼,工作十几年了,之前由于有时要出差,孩子偶尔放回老家,有时到处找人看孩子,虽然不出差时都是有我来带,孩子还是和我很亲,但是一直没时间关注她的学习,只是睡前读读绘本,报了个英语培训班,偶尔玩玩识字 ...

  5. 工具之scroolToIndex

    需求定位:导航中实现子元素滚动到父元素的最左侧 解决方案:查找该子元素的offsetLeft值,然后让父元素滚动offsetLeft,parenDom.scrollLeft = childDom.of ...

  6. 聊聊order by rand()

    总结写在前面: 1. 不建议直接使用order by rand(),原因是执行代价比较大 2. 介绍了内存临时表,对于内存临时表,由于回表不需要访问磁盘,所以往往是用rowid排序,可以减少参与排序字 ...

  7. PLINQ 并行操作Linq

    C#并行编程-PLINQ:声明式数据并行   目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-P ...

  8. 【狂神说】JAVA Mybatis 笔记+源码

    简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...

  9. 关于Spring的常见面试题

    1.Spring是什么? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.常见的配置方 ...

  10. 不同label样本画图——颜色分配plt.cm.Spectral

    不同label样本画图——颜色分配plt.cm.Spectralhttps://blog.csdn.net/wang_zuel/article/details/102940092 关于plt.cm.S ...