Docker搭建Redis主從復(fù)制的實(shí)現(xiàn)步驟
一、前言
本文介紹如何快速使用Docker搭建Redis主從復(fù)制環(huán)境,線上環(huán)境更加推薦直接部署,這里會(huì)搭建一主兩從,全部搭建在一臺(tái)主機(jī),會(huì)使用Redis6.0版本,分別使用端口號(hào) 主節(jié)點(diǎn)(6379)、從節(jié)點(diǎn)(6380、6381)。
Redis主從復(fù)制作用和優(yōu)缺點(diǎn)
- 作用
- 主從復(fù)制是Redis集群中最簡(jiǎn)單的一種高可用方案,配置也簡(jiǎn)單,從節(jié)點(diǎn)同步主節(jié)點(diǎn)數(shù)據(jù),一般主節(jié)點(diǎn)對(duì)外提供讀寫,從節(jié)點(diǎn)只對(duì)外提供讀,也就是常說的讀寫分離,一般業(yè)務(wù)讀操作占整個(gè)Redis請(qǐng)求的90%以上,讀寫分離架構(gòu)可以有多個(gè)從節(jié)點(diǎn),從節(jié)點(diǎn)分擔(dān)主節(jié)點(diǎn)的讀操作壓力,提升整體并發(fā)量。
- 優(yōu)點(diǎn)
- 配置簡(jiǎn)單
- 顯著提升整體并發(fā)量
- 能做到數(shù)據(jù)備份的效果,避免主節(jié)點(diǎn)因意外情況損壞緩存全部丟失
- 缺點(diǎn)
- 主節(jié)點(diǎn)宕機(jī)會(huì)導(dǎo)致整個(gè)集群無法寫,需要重新啟動(dòng)主節(jié)點(diǎn)或者手動(dòng)重新指定一臺(tái)主節(jié)點(diǎn),針對(duì)這點(diǎn)Redis還提供了哨兵模式和Cluster可以解決這個(gè)問題
主從復(fù)制結(jié)構(gòu)圖:
二、拉取Redis鏡像
docker pull redis:6.0.20
三、創(chuàng)建掛載目錄和添加配置文件
3.1、主節(jié)點(diǎn)(6379)
- 添加節(jié)點(diǎn)掛載目錄
mkdir -p /home/docker/redis6379/conf mkdir -p /home/docker/redis6379/data
- 添加配置文件
vi /home/docker/redis6379/conf/redis.conf
將以下配置寫入配置文件
# 服務(wù)端口 默認(rèn)6379 port 6379 # 關(guān)閉保護(hù)模式,允許遠(yuǎn)程連接 protected-mode no # 密碼 requirepass 123456
3.2、從節(jié)點(diǎn)(6380)
- 添加節(jié)點(diǎn)掛載目錄
mkdir -p /home/docker/redis6380/conf mkdir -p /home/docker/redis6380/data
- 添加配置文件
vi /home/docker/redis6380/conf/redis.conf
將以下配置寫入配置文件
# 服務(wù)端口 默認(rèn)6379 port 6380 # 關(guān)閉保護(hù)模式,允許遠(yuǎn)程連接 protected-mode no # 密碼 requirepass 123456 # 主節(jié)點(diǎn)密碼 masterauth 123456 # 配置主從復(fù)制 從節(jié)點(diǎn)默認(rèn)只讀 ## redis5.0后新版本配置 replicaof 172.16.8.186 6379 ## redis5.0之前配置,新版本Redis也還可以用,我部署時(shí)確定6.0版本還是可用的 # slaveof 172.16.8.186 6379
3.3、從節(jié)點(diǎn)(6381)
- 添加節(jié)點(diǎn)掛載目錄
mkdir -p /home/docker/redis6381/conf mkdir -p /home/docker/redis6381/data
- 添加配置文件
vi /home/docker/redis6381/conf/redis.conf
將以下配置寫入配置文件
# 服務(wù)端口 默認(rèn)6379 port 6381 # 關(guān)閉保護(hù)模式,允許遠(yuǎn)程連接 protected-mode no # 密碼 requirepass 123456 # 主節(jié)點(diǎn)密碼 masterauth 123456 # 配置主從復(fù)制 從節(jié)點(diǎn)默認(rèn)只讀 ## redis5.0后新版本配置 replicaof 172.16.8.186 6379 ## redis5.0之前配置,新版本Redis也還可以用,我部署時(shí)確定6.0版本還是可用的 # slaveof 172.16.8.186 6379
四、啟動(dòng)Redis容器
4.1、主節(jié)點(diǎn)(6379)
docker run -d \ -p 6379:6379 \ --name redis6379 \ --restart always \ --privileged=true \ -v /home/docker/redis6379/conf/redis.conf:/etc/redis/redis.conf \ -v /home/docker/redis6379/data:/data \ redis:6.0.20 \ redis-server /etc/redis/redis.conf
4.2、從節(jié)點(diǎn)(6380)
docker run -d \ -p 6380:6380 \ --name redis6380 \ --restart always \ --privileged=true \ -v /home/docker/redis6380/conf/redis.conf:/etc/redis/redis.conf \ -v /home/docker/redis6380/data:/data \ redis:6.0.20 \ redis-server /etc/redis/redis.conf
4.3、從節(jié)點(diǎn)(6381)
docker run -d \ -p 6381:6381 \ --name redis6381 \ --restart always \ --privileged=true \ -v /home/docker/redis6381/conf/redis.conf:/etc/redis/redis.conf \ -v /home/docker/redis6381/data:/data \ redis:6.0.20 \ redis-server /etc/redis/redis.conf
4.4、啟動(dòng)命令參數(shù)介紹
-d:后臺(tái)運(yùn)行
-p 63xx:63xx:指定宿主機(jī)端口與容器端口映射關(guān)系
–name redis63xx:創(chuàng)建的容器名稱
–restart=always:容器開機(jī)自啟
–privileged=true:獲取宿主機(jī)root權(quán)限
-v /home/docker/redis63xx/conf/redis.conf:/etc/redis/redis.conf:映射配置文件目錄,宿主機(jī):容器
-v /home/docker/redis63xx/data:/data:映射數(shù)據(jù)目錄,宿主機(jī):容器
redis:6.0.20:使用的鏡像
redis-server /etc/redis/redis.conf:指定配置文件啟動(dòng)redis-server進(jìn)程
五、查看各節(jié)點(diǎn)主從信息
5.1、主節(jié)點(diǎn)(6379)
- 連接主節(jié)點(diǎn)redis
# redis6379:容器名稱、 redis-cli:redis自帶客戶端命令、 -a 123456:指定redis密碼登錄 docker exec -it redis6379 redis-cli -a 123456
- 查看節(jié)點(diǎn)replication信息
127.0.0.1:6379> info replication
5.2、從節(jié)點(diǎn)(6380)
- 連接主節(jié)點(diǎn)redis
# redis6380:容器名稱、 redis-cli:redis自帶客戶端命令、-p 6380:指定redis端口、 -a 123456:指定redis密碼登錄 docker exec -it redis6380 redis-cli -p 6380 -a 123456
- 查看節(jié)點(diǎn)replication信息
127.0.0.1:6380> info replication
5.3、從節(jié)點(diǎn)(6381)
- 連接主節(jié)點(diǎn)redis
# redis6381:容器名稱、 redis-cli:redis自帶客戶端命令、-p 6381:指定redis端口、 -a 123456:指定redis密碼登錄 docker exec -it redis6381 redis-cli -p 6381 -a 123456
- 查看節(jié)點(diǎn)replication信息
127.0.0.1:6381> info replication
六、測(cè)試主從復(fù)制效果
- 主節(jié)點(diǎn)插入數(shù)據(jù)
127.0.0.1:6379> set names kerwin
從節(jié)點(diǎn)查看數(shù)據(jù)
127.0.0.1:6380> get names
127.0.0.1:6381> get names
從節(jié)點(diǎn)寫數(shù)據(jù)測(cè)試
127.0.0.1:6380> set names kerwin2
從節(jié)點(diǎn)默認(rèn)只讀,無法寫入數(shù)據(jù)
七、Redis主從工作原理
如果你為master配置了一個(gè)slave,不管這個(gè)slave是否是第一次連接上Master,它都會(huì)發(fā)送一個(gè)PSYNC命令給master請(qǐng)求復(fù)制數(shù)據(jù)。
master收到PSYNC命令后,會(huì)在后臺(tái)進(jìn)行數(shù)據(jù)持久化通過bgsave生成最新的rdb快照文件,持久化期間,master會(huì)繼續(xù)接收客戶端的請(qǐng)求,它會(huì)把這些可能修改數(shù)據(jù)集的請(qǐng)求緩存在內(nèi)存中。當(dāng)持久化進(jìn)行完畢以后,master會(huì)把這份rdb文件數(shù)據(jù)集發(fā)送給slave,slave會(huì)把接收到的數(shù)據(jù)進(jìn)行持久化生成rdb,然后再加載到內(nèi)存中。然后,master再將之前緩存在內(nèi)存中的命令發(fā)送給slave。當(dāng)master與slave之間的連接由于某些原因而斷開時(shí),slave能夠自動(dòng)重連Master,如果master收到了多個(gè)slave并發(fā)連接請(qǐng)求,它只會(huì)進(jìn)行一次持久化,而不是一個(gè)連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送給多個(gè)并發(fā)連接的slave。
八、主從復(fù)制風(fēng)暴問題解決
主從復(fù)制風(fēng)暴問題是因?yàn)槎鄠€(gè)從節(jié)點(diǎn)同時(shí)復(fù)制主節(jié)點(diǎn)導(dǎo)致主節(jié)點(diǎn)壓力過大,可以讓新節(jié)點(diǎn)復(fù)制從節(jié)點(diǎn)數(shù)據(jù),類似數(shù)結(jié)構(gòu),可以分擔(dān)主節(jié)點(diǎn)同步壓力。
實(shí)際操作只需要將主從復(fù)制的配置調(diào)整成從節(jié)點(diǎn)即可。
# 配置主從復(fù)制 從節(jié)點(diǎn)默認(rèn)只讀 ## redis5.0后新版本配置 replicaof 172.16.8.186 6381
到此這篇關(guān)于Docker搭建Redis主從復(fù)制的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker搭建Redis主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker安裝Jenkins-2.249.3-1.1的詳細(xì)過程
這篇文章主要介紹了Docker安裝Jenkins-2.249.3-1.1,通過編寫docke安裝腳本來實(shí)現(xiàn)安裝目的,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10Docker將鏡像文件發(fā)布到阿里云的詳細(xì)過程
這篇文章主要介紹了Docker將鏡像文件發(fā)布到阿里云的操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05使用Portainer部署Docker容器的項(xiàng)目實(shí)踐
這篇文章主要介紹了使用Portainer部署Docker容器的項(xiàng)目實(shí)踐,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04啟動(dòng)docker錯(cuò)誤systemctl status docker.service問題及解決
文章討論了啟動(dòng)Docker和執(zhí)行docker ps命令失敗的問題,但docker -v顯示成功,解決辦法包括在阿里云容器鏡像中找到鏡像加速器或使用公共鏡像地址,默認(rèn)情況下,Docker使用官方地址2025-01-01docker基礎(chǔ)知識(shí)之掛載本地目錄的方法
本篇文章主要介紹了docker基礎(chǔ)知識(shí)之掛載本地目錄的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04第一次構(gòu)建、運(yùn)行、發(fā)布、獲取docker鏡像的步驟詳解
今天小編就為大家分享一篇關(guān)于第一次構(gòu)建、運(yùn)行、發(fā)布、獲取docker鏡像的步驟詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03深入了解docker(docker鏡像、容器、倉庫的基本概念)
本文重點(diǎn)給大家介紹docker鏡像、容器、倉庫的基本概念,感興趣的朋友跟著小編一起學(xué)習(xí)吧2016-10-10解讀docker運(yùn)行時(shí)-itd參數(shù)是什么意思
在Docker中,-itd參數(shù)組合用于在后臺(tái)運(yùn)行一個(gè)交互式容器,同時(shí)保持標(biāo)準(zhǔn)輸入和分配偽終端,這種方式適合需要在后臺(tái)運(yùn)行容器并保持交互能力的場(chǎng)景2025-03-03