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

我再網上看見這位大哥寫的這篇配置很詳細,但是我按照他的步驟做下來,哨兵不生效,不清楚原因是什麼,大家也可以借鑑一下這個。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章