docker安裝Redis高可用實現(xiàn)一主二從三哨兵
本次教程使用docker swarm安裝
準備三臺機器
host | IP | 用途 |
---|---|---|
node1 | 192.168.31.130 | redis-master01,redis哨兵節(jié)點01 |
node2 | 192.168.31.131 | redis-slave01, redis哨兵節(jié)點02 |
node3 | 192.168.31.132 | redis-slave02 redis哨兵節(jié)點02 |
注意事項:
1:需要保證三臺機器在一個網(wǎng)絡(luò)或一個服務(wù)器安全組內(nèi)(相互能ping通)
2: 為了演示需要將哨兵節(jié)點與redis節(jié)點安裝在同一個機器,實際線上需要哨兵與redis分開部署以達到高可用性。
1:創(chuàng)建redis數(shù)據(jù)掛載卷
#node1機器上執(zhí)行 docker volume create --name redis_cluster_data1 #node2機器上執(zhí)行 docker volume create --name redis_cluster_data2 #node3機器上執(zhí)行 docker volume create --name redis_cluster_data3
2: 創(chuàng)建redis專用的網(wǎng)絡(luò)
#--driver overlay --attachable 表示創(chuàng)建swarm集群網(wǎng)絡(luò)且不是service的容器也能加入此網(wǎng)絡(luò) docker network create --driver overlay \ --attachable --subnet=192.169.0.0/24 redis_cluster_network
3:下載/配置redis配置文件
本文使用redis6.2.6版本,所以下載redis6.2.6版本中的配置文件
解壓下載的文件,找到redis.conf文件
修改默認配置文件
- bind 127.0.0.1 #注釋掉這部分,這是限制redis只能本地訪問
- protected-mode no #默認yes,開啟保護模式,限制為本地訪問
- daemonize no#默認no,改為yes意為以守護進程方式啟動,可后臺運行,除非kill進程(可選),改為yes會使配置文件方式啟動redis失敗
- dir ./ #輸入本地redis數(shù)據(jù)庫存放文件夾(可選)
- appendonly yes #redis持久化(可選)
然后將此配置文件復(fù)制到docker數(shù)據(jù)卷所在位置(如果你不使用swarm就正常掛載文件就行)
4:創(chuàng)建redis集群service
新增node標簽
docker node update --label-add redis=cluster node1 docker node update --label-add redis=cluster node2 docker node update --label-add redis=cluster node3
創(chuàng)建service
docker service create --name redis_cluster \ --network redis_cluster_network \ --mount type=volume,src=redis_cluster_data,dst=/data \ --replicas 3 --constraint 'node.labels.redis == cluster' \ redis:6.2.6 --appendonly yes
5:配置主從關(guān)系
選擇要成為主節(jié)點的IP比如:192.168.31.130
進入從節(jié)點01,從節(jié)點02
docker exec -it redis_cluster1 redis-cli docker exec -it redis_cluster2 redis-cli
輸入以下命令加入主節(jié)點
#固定語法 slaveof 主節(jié)點IP 主節(jié)點端口 slaveof 192.168.1.10 6379
進入主節(jié)點查看節(jié)點數(shù)量是否成功加入
docker exec -it redis_cluster_master redis-cli info
6:創(chuàng)建redis哨兵數(shù)據(jù)掛載卷
#node1機器上執(zhí)行 docker volume create --name redis_sentinel_data1 #node2機器上執(zhí)行 docker volume create --name redis_sentinel_data2 #node3機器上執(zhí)行 docker volume create --name redis_sentinel_data3
下載/配置redis哨兵配置文件由于上面已經(jīng)下載了redis6.2.6所以我們接著使用文件夾的中的sentinel.conf文件
修改第84行的sentlnel參數(shù),改為redis主節(jié)點的ip,端口
然后將此配置文件復(fù)制到docker數(shù)據(jù)卷所在位置(如果你不使用swarm就正常掛載文件就行)
7:創(chuàng)建redis哨兵集群service
docker service create --name redis_sentinel_cluster \ --network redis_cluster_network \ #掛載數(shù)據(jù)卷redis_sentinel_data到容器的/etc/redis目錄下 \ --mount type=volume,src=redis_sentinel_data,dst=/etc/redis \ # 開放tcp端口且網(wǎng)絡(luò)不走集群路由網(wǎng)絡(luò)(如果不加mode=host,則默認每個docker節(jié)點的7369端口都會強制跳轉(zhuǎn)到這些service中無論節(jié)點是否在此ndoe中) \ --publish published=7369,target=26379,protocol=tcp,mode=host \ # 制作3個副本 并指定符合條件的node節(jié)點中生成。\ --replicas 3 --constraint 'node.labels.redis == cluster' \ # 指定redis鏡像版本,指定哨兵模式按指定配置文件啟動 redis:6.2.6 redis-sentinel /etc/redis/sentinel.conf
查看哨兵節(jié)點信息
#進入哨兵節(jié)點 docker exec -it sentinel /bin/bash #輸入命令 redis-cli -h 127.0.0.1 -p 26379 #查看sentinel集群信息 info sentinel
到此這篇關(guān)于docker安裝Redis高可用實現(xiàn)一主二從三哨兵的文章就介紹到這了,更多相關(guān)docker Redis一主二從三哨兵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用docker的python基礎(chǔ)鏡像時要指定patch版本原理
這篇文章主要為大家介紹了使用docker的python基礎(chǔ)鏡像時要指定patch版本原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境
這篇文章主要介紹了詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Docker Registry搭建私有鏡像倉庫的實現(xiàn)方法
這篇文章主要介紹了Docker Registry搭建私有鏡像倉庫的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10常用的8個應(yīng)用和中間件的Docker運行示例詳解
Portainer是一個輕量級的管理 UI ,可讓你輕松管理不同的 Docker 環(huán)境(Docker 主機或 Swarm 群集),這篇文章主要介紹了常用的8個應(yīng)用和中間件的Docker運行示例,需要的朋友可以參考下2024-03-03