在docker中部署redis主从配置
环境说明:
- 阿里云服务器
- 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 <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主从配置的更多相关文章
- nopCommerce 3.9 大波浪系列 之 使用部署在Docker中的Redis缓存主从服务
一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发 ...
- 从零开始学习docker之在docker中搭建redis(集群)
docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...
- docker部署redis主从和哨兵
docker部署redis主从和哨兵 原文地址:https://www.jianshu.com/p/72ee9568c8ea 1主2从3哨兵 一.前期准备工作 1.电脑装有docker 2.假设本地i ...
- Linux中redis主从配置
假设要在6380开启redis 1.添加配置文件:复制redis.conf为redis_6380.conf 2.修改配置文件:修改redis_6380.conf中port.pidfile 3.防火墙: ...
- Docker Compose 部署 Redis 及原理讲解 | 懒人屋
原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解 4.4k 字 16 分钟 2019-10-1 ...
- Docker安装部署redis
借鉴博客:https://my.oschina.net/u/3489495/blog/1825335 待续... >>>>>>>>>docker安 ...
- 在kubernetes集群中创建redis主从多实例
分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...
- docker stack 部署 redis
=============================================== 2019/4/16_第2次修改 ccb_warlock 更新 ...
- SaltStack入门篇(六)之部署Redis主从实现和Job管理
一.部署Redis主从 需求: 192.168.56.11是主,192.168.56.12是从 redis监听自己的ip地址,而不是0.0.0.0 分析: linux-node1 安装 配置 启动 l ...
随机推荐
- (28)ASP.NET Core AutoMapper组件
1.什么是AutoMapper? AutoMapper是一个对象-对象映射器.对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作.使AutoMapper变得有趣的是,它提供了一些有 ...
- ggplot2(4) 用图层构建图像
4.1 简介 qplot()的局限性在于它只能使用一个数据集和一组图形属性映射,解决这个问题的办法就是使用图层.每个图层可以有自己的数据集和图形属性映射,附加的数据元素可通过图层添加到图形中. 一个图 ...
- webpack学习(一):webpack的安装和命令行
本教程可以学习到如下内容: 1.webpack的安装 2.利用webpack命令打包js文件 3.如何在js文件里面引用css并将css文件在页面里面生效 4.学习webpack相关的高级的一些参数, ...
- Spotlight on Unix/Mysql安装使用详解
Spotlight on Unix安装使用详解 1.远程连接linux服务器,查看系统是否已经安装sysstat包,如果没有的话,按照以下方法安装sysstat. (1)检查Linux是否安装sys ...
- Android UI性能测试——使用 Systrace 查找问题
一 官方文档翻译 官文地址:https://developer.android.com/studio/command-line/systrace systrace命令允许您在系统级别上收集和检查所有运 ...
- centOS6.5桌面版用不了中文输入法解决方案
1:centos6.5中 系统->首选项->输入法中选择“使用iBus(推荐)”,点击首选输入法n遍,没有任何效果. 2.我也弄了很多种方式包括用 yum install " ...
- 3.python正则匹配不到内容时消耗大量内存
遇到问题:正常情况获取的网页源码可以通过正则表达式快速匹配到内容,,但是如果出现问题,没有匹配到的内容,正则就会一直回溯,导致内存激增,一直循坏查找. 解决思路: 一.如果能够有特殊内容可以标记,满 ...
- CentOS7系统服务管理systemctl
目录 一.systemctl介绍 二.systemctl常用命令 1.启动服务 2.停止服务 3.重启服务 4.查看服务是否已启动 5.查看服务的状态 6.启用开机自启动服务 7.停用开机自启动服务 ...
- flex弹性盒子实现微博页面
结果图: 源代码: html部分: <!DOCTYPE html><html lang="en"><head> <meta charset ...
- git 更换push 提交地址
git 删除远程地址 1.找到对应项目 右键点击 GIT Bash Here 2.输入命令 git remote rm origin 3.对应项目 右键点击 GIT Sync..... 4.点击Man ...