使用Docker快速搭建Redis主從復制的完整步驟
一、前言
本文介紹如何快速使用Docker搭建Redis主從復制環(huán)境,線上環(huán)境更加推薦直接部署,這里會搭建一主兩從,全部搭建在一臺主機,會使用Redis6.0版本,分別使用端口號 主節(jié)點(6379)、從節(jié)點(6380、6381)。
Redis主從復制作用和優(yōu)缺點
- 作用
- 主從復制是Redis集群中最簡單的一種高可用方案,配置也簡單,從節(jié)點同步主節(jié)點數(shù)據(jù),一般主節(jié)點對外提供讀寫,從節(jié)點只對外提供讀,也就是常說的讀寫分離,一般業(yè)務讀操作占整個Redis請求的90%以上,讀寫分離架構可以有多個從節(jié)點,從節(jié)點分擔主節(jié)點的讀操作壓力,提升整體并發(fā)量。
- 優(yōu)點
- 配置簡單
- 顯著提升整體并發(fā)量
- 能做到數(shù)據(jù)備份的效果,避免主節(jié)點因意外情況損壞緩存全部丟失
- 缺點
- 主節(jié)點宕機會導致整個集群無法寫,需要重新啟動主節(jié)點或者手動重新指定一臺主節(jié)點,針對這點Redis還提供了哨兵模式和Cluster可以解決這個問題
主從復制結構圖:

二、拉取Redis鏡像
docker pull redis:6.0.20
三、創(chuàng)建掛載目錄和添加配置文件
3.1、主節(jié)點(6379)
添加節(jié)點掛載目錄
mkdir -p /home/docker/redis6379/conf
mkdir -p /home/docker/redis6379/data添加配置文件
vi /home/docker/redis6379/conf/redis.conf
將以下配置寫入配置文件
# 服務端口 默認6379 port 6379 # 關閉保護模式,允許遠程連接 protected-mode no # 密碼 requirepass 123456
3.2、從節(jié)點(6380)
添加節(jié)點掛載目錄
mkdir -p /home/docker/redis6380/conf
mkdir -p /home/docker/redis6380/data添加配置文件
vi /home/docker/redis6380/conf/redis.conf
將以下配置寫入配置文件
# 服務端口 默認6379 port 6380 # 關閉保護模式,允許遠程連接 protected-mode no # 密碼 requirepass 123456 # 主節(jié)點密碼 masterauth 123456 # 配置主從復制 從節(jié)點默認只讀 ## redis5.0后新版本配置 replicaof 172.16.8.186 6379 ## redis5.0之前配置,新版本Redis也還可以用,我部署時確定6.0版本還是可用的 # slaveof 172.16.8.186 6379
3.3、從節(jié)點(6381)
添加節(jié)點掛載目錄
mkdir -p /home/docker/redis6381/conf
mkdir -p /home/docker/redis6381/data添加配置文件
vi /home/docker/redis6381/conf/redis.conf
將以下配置寫入配置文件
# 服務端口 默認6379 port 6381 # 關閉保護模式,允許遠程連接 protected-mode no # 密碼 requirepass 123456 # 主節(jié)點密碼 masterauth 123456 # 配置主從復制 從節(jié)點默認只讀 ## redis5.0后新版本配置 replicaof 172.16.8.186 6379 ## redis5.0之前配置,新版本Redis也還可以用,我部署時確定6.0版本還是可用的 # slaveof 172.16.8.186 6379
四、啟動Redis容器
4.1、主節(jié)點(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é)點(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é)點(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、啟動命令參數(shù)介紹
-d:后臺運行
-p 63xx:63xx:指定宿主機端口與容器端口映射關系
–name redis63xx:創(chuàng)建的容器名稱
–restart=always:容器開機自啟
–privileged=true:獲取宿主機root權限
-v /home/docker/redis63xx/conf/redis.conf:/etc/redis/redis.conf:映射配置文件目錄,宿主機:容器
-v /home/docker/redis63xx/data:/data:映射數(shù)據(jù)目錄,宿主機:容器
redis:6.0.20:使用的鏡像
redis-server /etc/redis/redis.conf:指定配置文件啟動redis-server進程
五、查看各節(jié)點主從信息
5.1、主節(jié)點(6379)
連接主節(jié)點redis
redis6379:容器名稱、 redis-cli:redis自帶客戶端命令、 -a 123456:指定redis密碼登錄
docker exec -it redis6379 redis-cli -a 123456
查看節(jié)點replication信息
127.0.0.1:6379> info replication

5.2、從節(jié)點(6380)
連接主節(jié)點redis
redis6380:容器名稱、 redis-cli:redis自帶客戶端命令、-p 6380:指定redis端口、 -a 123456:指定redis密碼登錄
docker exec -it redis6380 redis-cli -p 6380 -a 123456
查看節(jié)點replication信息
127.0.0.1:6380> info replication

5.3、從節(jié)點(6381)
連接主節(jié)點redis
redis6381:容器名稱、 redis-cli:redis自帶客戶端命令、-p 6381:指定redis端口、 -a 123456:指定redis密碼登錄
docker exec -it redis6381 redis-cli -p 6381 -a 123456
查看節(jié)點replication信息
127.0.0.1:6381> info replication
六、測試主從復制效果
主節(jié)點插入數(shù)據(jù)
127.0.0.1:6379> set names kerwin

從節(jié)點查看數(shù)據(jù)
127.0.0.1:6380> get names

127.0.0.1:6381> get names

從節(jié)點寫數(shù)據(jù)測試
127.0.0.1:6380> set names kerwin2
從節(jié)點默認只讀,無法寫入數(shù)據(jù)

七、Redis主從工作原理
如果你為master配置了一個slave,不管這個slave是否是第一次連接上Master,它都會發(fā)送一個PSYNC命令給master請求復制數(shù)據(jù)。
master收到PSYNC命令后,會在后臺進行數(shù)據(jù)持久化通過bgsave生成最新的rdb快照文件,持久化期間,master會繼續(xù)接收客戶端的請求,它會把這些可能修改數(shù)據(jù)集的請求緩存在內(nèi)存中。當持久化進行完畢以后,master會把這份rdb文件數(shù)據(jù)集發(fā)送給slave,slave會把接收到的數(shù)據(jù)進行持久化生成rdb,然后再加載到內(nèi)存中。然后,master再將之前緩存在內(nèi)存中的命令發(fā)送給slave。當master與slave之間的連接由于某些原因而斷開時,slave能夠自動重連Master,如果master收到了多個slave并發(fā)連接請求,它只會進行一次持久化,而不是一個連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送給多個并發(fā)連接的slave。
八、主從復制風暴問題解決
主從復制風暴問題是因為多個從節(jié)點同時復制主節(jié)點導致主節(jié)點壓力過大,可以讓新節(jié)點復制從節(jié)點數(shù)據(jù),類似數(shù)結構,可以分擔主節(jié)點同步壓力。
實際操作只需要將主從復制的配置調(diào)整成從節(jié)點即可。
# 配置主從復制 從節(jié)點默認只讀 ## redis5.0后新版本配置 replicaof 172.16.8.186 6381

總結
到此這篇關于使用Docker快速搭建Redis主從復制的文章就介紹到這了,更多相關Docker快速搭建Redis主從復制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 用docker實現(xiàn)Redis主從配置的示例代碼
- 基于docker的redis主從及哨兵配置方式
- Docker搭建Redis主從復制的實現(xiàn)步驟
- Docker Compose搭建Redis主從復制環(huán)境的實現(xiàn)步驟
- docker搭建redis主從哨兵集群的實現(xiàn)步驟
- 基于Docker搭建Redis主從集群的實現(xiàn)
- 詳解使用Docker進行Redis主從復制實踐
- 使用docker搭建redis主從的方法步驟
- 使用Docker搭建Redis主從復制的集群
- Docker下redis的主從配置教程詳解
- docker-compose啟動redis主從的實現(xiàn)
相關文章
docker-compose+nginx部署前后端分離的項目實踐
本文主要介紹了docker-compose?+?nginx部署前后端分離的項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
docker安裝部署jumpserver?2.25.5的方法
這篇文章主要介紹了docker安裝部署jumpserver?2.25.5的方法,本文通過圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09
docker?部署hbase并且java?Api連接的操作過程
這篇文章主要介紹了docker?部署hbase并且java?Api連接的操作過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實現(xiàn)
這篇文章主要介紹了Docker 部署 Django+Mysql+Redis+Gunicorn+Nginx,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解
這篇文章主要介紹了Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)
這篇文章主要介紹了解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08

