本文主要是博主在搭建环境的时候遇见不少坑,就记录一下,环境不同,可能遇见的问题会不一样,大家参考一下。
环境:
虚拟机 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
我再网上看见这位大哥写的这篇配置很详细,但是我按照他的步骤做下来,哨兵不生效,不清楚原因是什么,大家也可以借鉴一下这个。