本文主要是博主在搭建環境的時候遇見不少坑,就記錄一下,環境不同,可能遇見的問題會不一樣,大家參考一下。
環境:
虛擬機 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
我再網上看見這位大哥寫的這篇配置很詳細,但是我按照他的步驟做下來,哨兵不生效,不清楚原因是什麼,大家也可以借鑑一下這個。