本教程基於CentOS7,開始本教程前,請確保您的Linux系統已安裝Docker。
1.使用docker下載redis鏡像
docker pull redis
安裝完成后,使用docker images
命令,查看是否安裝成功
2.redis集群搭建
(1)使用以下命令啟動3個Redis
docker run --name redis-node1 -p 6379:6379 -d docker.io/redis docker run --name redis-node2 -p 6380:6380 -d docker.io/redis docker run --name redis-node3 -p 6381:6381 -d docker.io/redis
(2)使用docker ps
命令,查看是否啟動成功
(3)分別使用 docker inspect 容器名字
命令,查看3個Redis的Docker內網IP地址
在Networks欄,可以看見該容器的Docker內網IP地址
同理,查看redis-node2和redis-node3的Docker內網IP
(4)進入三個redis容器的內部
進入容器內部命令:docker exec -it 容器id/容器名稱 /bin/bash
進入redis-node1內部:
(5)進入redis客戶端
redis-cli
(6)測試對單個redis進行set值或get值
如果能set、get能成功,那么單個redis是沒有問題的
接下來開始搭建主從復制的redis集群
3.主從復制搭建
(1)進入redis客戶端后,使用 info replication 查看當前機器的角色
info replication
發現現在的redis-node1是master(主人),同理redis-node2和redis-node3也是master
現在我要將redis-node2和redis-node3變為slave(仆從)
(2)進入redis-node2容器,並進入客戶端
1 docker exec -it redis-node2 /bin/bash 2 redis-cli
使用 SLAVEOF 172.17.0.1 6379 命令將redis-node2變為redis-node1的從結點,172.17.0.1是前面獲取的redis-node1的容器內IP,6379是redis-node1的端口號
再使用 info replication查看當前機器角色
可以發現redis-node2已經變成redis-node1從結點了。
同理,進入redis-node3容器,並進入客戶端,使用 SLAVEOF 172.17.0.1 6379 命令將redis-node3變為redis-node1的從結點。
我們再次進入redis-node1容器查看機器角色:
此時的redis-node1當中顯示有兩個從結點了。
(3)測試主從復制
我們在redis-node1 set一個數據,測試redis-node2和redis-node3能否獲取該數據。
redis-node1容器中:
redis-node2容器中:
我們發現redis-node1的數據成功同步到了redis-node2中!我們再看redis-node3
redis-node3容器中:
同樣成功了。
注意:主結點可以讀寫,從結點只能讀不能寫!
如圖所示,從結點寫數據會報錯。
這樣我們redis的主從復制就搭建完畢了。
主從復制雖然可以一定程度上增加resdis集群的可用性,但是如果主結點宕機我們需要手動為從結點指定新的主結點,這很不方便也不符合生產環境的需要,所以我們引入了哨兵模式。
4.配置redis哨兵
分別進入3台Redis容器內部,執行以下操作
首先,進入Docker容器內部:
進入三台redis容器:docker exec -it 容器id/容器名稱 /bin/bash
更新依賴命令:apt-get update
安裝vim命令:apt-get install -y vim
然后,編寫Redis哨兵配置文件:
使用 cd / 命令,進入根目錄 使用 vim sentinel.conf命令,創建哨兵配置文件 添加以下內容 sentinel monitor host6379 172.17.0.1 6379 1
最后,啟動Redis哨兵:
使用 redis-sentinel /sentinel.conf 啟動Redis哨兵監控
使用 ps –ef |grep redis 命令,可以看到redis-server和redis-sentinel正在運行
注意:三個redis容器都要執行上面的操作
完成后,哨兵會監視主結點狀態,如果主結點宕機,30s后會從從結點當中選擇一個作為主結點,如果后面原主結點重新連接,原主結點會變為新主結點的從結點。
至此,Linux基於Docker的Redis主從復制、哨兵模式搭建完畢。