Docker搭建Redis主从-哨兵模式

本文主要是博主在搭建环境的时候遇见不少坑,就记录一下,环境不同,可能遇见的问题会不一样,大家参考一下。

环境:

虚拟机 vmplayer15

操作系统 centos7

同一个centos下运行三个redis容器

ip地址分别为:

主:172.17.0.2:6379->6379

从:172.17.0.3:6379->6380

从:172.17.0.4:6379->6381

安装docker(这个要是不会,直接上docker官网看下)。

安装运行redis

1、开始下载redis

docker pull mysql:5.0.5(要啥版本自己决定,我安装的是5.0.5,后面会说明为什么安装这个版本

docker images(查看一下成没成功)

2、建立本地配置文件

三个容器对应三个data文件夹,三个redis.conf文件和一个sentinel.conf(这货共用就可以)

mkdir /usr/redis

cd /usr/redis

到官网上下载对应版本的配置文件,放到/usr/redis文件夹下(一开始我下载最新的redis5.0.9,结果没找到对应的配置文件,后来就换成5.0.5版本)

修改配置文件

redis6379.conf

bind 0.0.0.0 #网络上说注释掉这一行,我试了,结果redis启动不了,后面改成0.0.0.0才能启动
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
appendonly yes #redis持久化(可选)

 

redis6380.conf

bind 0.0.0.0 #网络上说注释掉这一行,我试了,结果redis启动不了,后面改成0.0.0.0才能启动
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方#式启动redis失败
appendonly yes #redis持久化(可选)

在# replicaof <masterip> <masterport>这行下面加:replicaof 172.17.0.2 6379

 

redis6381.conf

bind 0.0.0.0 #网络上说注释掉这一行,我试了,结果redis启动不了,后面改成0.0.0.0才能启动
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方#式启动redis失败
appendonly yes #redis持久化(可选)

在# replicaof <masterip> <masterport>这行下面加:replicaof 172.17.0.2 6379

 

添加sentinel.conf

touch sentinel.conf

vim sentinel.conf

加以下内容:

sentinel monitor mymaster 172.17.0.2 6379 1 

保存退出

 

3、运行redis容器

启动主容器

docker run -d -p 6379:6379 -v /usr/redis/redis6379.conf:/etc/redis/redis.conf -v /usr/redis/sentinel.conf:/etc/redis/sentinel.conf -v /usr/redis/data6379:/data  --name redis6379 redis:5.0.5 redis-server /etc/redis/redis.conf 

启动从容器1
docker run -d -p 6380:6379 -v /usr/redis/redis6380.conf:/etc/redis/redis.conf -v /usr/redis/sentinel.conf:/etc/redis/sentinel.conf -v /usr/redis/data6380:/data  --name redis6380 redis:5.0.5 redis-server /etc/redis/redis.conf

启动从容器2
docker run -d -p 6381:6379 -v /usr/redis/redis6381.conf:/etc/redis/redis.conf -v /usr/redis/sentinel.conf:/etc/redis/sentinel.conf -v /usr/redis/data6381:/data  --name redis6381 redis:5.0.5 redis-server /etc/redis/redis.conf 

注意:这里我本来是想执行

docker run -d -p 6381:6379 -v /usr/redis/redis6381.conf:/etc/redis/redis.conf -v /usr/redis/sentinel.conf:/etc/redis/sentinel.conf -v /usr/redis/data6381:/data  --name redis6381 redis:5.0.5 redis-server /etc/redis/redis.conf  redis-sentinel /etc/redis/sentinel.conf

结果发现不行,容器启动不了,如果知道原因,麻烦给我留言一下。

4、运行哨兵

分别进入三个容器运行

docker exec -it redis6379 /bin/bash  
redis-sentinel /etc/redis/sentinel.conf

 

docker exec -it redis6380 /bin/bash  
redis-sentinel /etc/redis/sentinel.conf

 

docker exec -it redis6381 /bin/bash  
redis-sentinel /etc/redis/sentinel.conf

 

5、测试

启动新终端,在终端运行

docker exec -it redis6379 redids-cli -p 6379

进入redis控制命令行

输入shutdown关闭主容器

过一会就可以看见从机中有一个顺利上位变为主服务。

 

思考:


https://www.cnblogs.com/fan-gx/p/11463400.html

我再网上看见这位大哥写的这篇配置很详细,但是我按照他的步骤做下来,哨兵不生效,不清楚原因是什么,大家也可以借鉴一下这个。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值