Redis 集羣搭建(二):Docker 部署 Redis主從同步與讀寫分離

Redis 集羣搭建(二):Docker 部署 Redis主從同步與讀寫分離

前言

本文基於:Redis 集羣搭建(一):Docker 部署 Redis 以及相關配置信息

配置說明:
redis-master: redis 主庫,掛載文件都放在 /data/redis/master 下面,端口號 6379

redis-slave: redis 從庫,掛載文件都放在 /data/redis/slave 下面,端口號 6380

原理

Redis官方文檔譯文

Redis主從複製是如何工作的(全量同步)

如果你設置了一個從服務器,在連接時它發送了一個SYNC命令,不管它是第一次連接還是再次連接都沒有關係。然後主服務器開始後臺存儲,並且開始緩存新連接進來的修改數據的命令。當後臺存儲完成後,主服務器把數據文件發送到從服務器,從服務器將其保存在磁盤上,然後加載到內存中。然後主服務器把剛纔緩存的命令發送到從服務器。這是作爲命令流來完成的,並且和Redis協議本身格式相同。

部分重新同步(增量同步)

主服務器端爲複製流維護一個內存緩衝區。主從服務器都維護一個複製偏移量(replication offset)和master run id ,當連接斷開時,從服務器會重新連接上主服務器,然後請求繼續複製,假如主從服務器的兩個master run id相同,並且指定的偏移量在內存緩衝區中還有效,複製就會從上次中斷的點開始繼續。如果其中一個條件不滿足,就會進行完全重新同步。

master 配置文件

與之前相比並沒有什麼太多變化,不過從安全考慮,加了個 bind 來限制訪問 IP

# RDB 持久化,快照保存頻率
# 900秒內,如果超過1個key被修改,則發起快照保存
# 300秒內,如果超過10個key被修改,則發起快照保存
# 60秒內,如果1萬個key被修改,則發起快照保存
save 900 1
save 300 10
save 60 10000

# 在進行數據鏡像備份時,是否啓用rdb文件壓縮手段,默認爲yes。
rdbcompression yes
# 解決 Redis 被配置爲保存數據庫快照,但它目前不能持久化到硬盤。用來修改集合數據的命令不能用。
stop-writes-on-bgsave-error no

# 開啓 AOF 持久化
appendonly yes

# 設置密碼
requirepass 111111

# 限制只接收來自於該IP 地址的請求(安全問題)
bind 0.0.0.0

slave 配置文件

  • slaveof: 配置主庫的 IP 和端口號
  • masterauth: 在主庫設置了密碼的情況下,從庫需要密碼進行授權

關於 AOF,主庫開啓,從庫只需要 1-2 個開啓持久化即可

# RDB 持久化,快照保存頻率
# 900秒內,如果超過1個key被修改,則發起快照保存
# 300秒內,如果超過10個key被修改,則發起快照保存
# 60秒內,如果1萬個key被修改,則發起快照保存
save 900 1
save 300 10
save 60 10000

# 在進行數據鏡像備份時,是否啓用rdb文件壓縮手段,默認爲yes。
rdbcompression yes
# 解決 Redis 被配置爲保存數據庫快照,但它目前不能持久化到硬盤。用來修改集合數據的命令不能用。
stop-writes-on-bgsave-error no

# 開啓 AOF 持久化
appendonly yes

# 設置密碼
requirepass 111111

# 限制只接收來自於該IP 地址的請求(安全問題)
bind 0.0.0.0

# 指定作爲 master 的 redis
slaveof 127.0.0.1 6379

# 設置主庫的密碼
masterauth 111111

# 設置從庫只讀
slave-read-only yes

啓動容器

掛載文件夾,啓動容器

主庫啓動:

docker run -d --name redis-master -p 6379:6379 -v /data/redis/master/conf/redis.conf:/redis.conf -v /data/redis/master/data:/data redis redis-server /redis.conf

從庫啓動:

docker run -d --name redis-slave -p 6380:6379 -v /data/redis/slave/conf/redis.conf:/redis.conf -v /data/redis/slave/data:/data redis redis-server /redis.conf

接下來只需要主庫新增數據,看看從庫是否成功同步即可。

來看一截從庫的日誌 docker logs 容器ID
在這裏插入圖片描述

關於讀寫分離

將從庫設置爲只讀後,即爲讀寫分離,可以說這是爲後續集羣化做鋪墊。

集羣化後在主從庫間進行負載均衡時,由於從庫只讀,因此寫操作只能在主庫上進行。

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