Redis 如何实现主从复制
什么是主從復(fù)制(Master/Slave)?
我們的數(shù)據(jù)一般是存儲(chǔ)在數(shù)據(jù)庫中,為了保證數(shù)據(jù)的高可用,我們一般使用多臺(tái)數(shù)據(jù)庫服務(wù)器做集群。選中其中的一臺(tái)作為主服務(wù)器(Master),其余的作為從服務(wù)器(Slave)。Master 上的數(shù)據(jù)更新后根據(jù)配置文件配置的策略,自動(dòng)同步到 Slave 上,這就是主從復(fù)制。
主從復(fù)制有什么作用?
Redis 如何實(shí)現(xiàn)主從復(fù)制?
想要實(shí)現(xiàn)主從復(fù)制就必須開啟多個(gè) redis 服務(wù),使用不同的 pid,指明不同的端口號(hào),生成不同的 rdb 文件,產(chǎn)生不同的日志文件。
一、配置 redis.conf 配置文件
1. 將 redis 的配置文件復(fù)制多份:
2. 將它們都設(shè)置為后臺(tái)進(jìn)程:
3. 為它們配置不同的 pidfile(pid 文件名):
?
例:6379,6380,6381。
4. 為它們配置不同的 port(端口):
5. 為它們配置不同的 logfile(日志文件):
6. 為它們配置不同的 dbfilename(rdb文件名):
二、啟動(dòng)多個(gè) redis-server 服務(wù)
開啟三個(gè) Linux 遠(yuǎn)程連接客戶端,在每一個(gè)客戶端上開啟一個(gè) redis 服務(wù)。
redis-cli -h 192.168.198.130 -p 6379
redis-cli -h 192.168.198.130 -p 6380
redis-cli -h 192.168.198.130 -p 6381
三、啟動(dòng)多個(gè) redis-cli 客戶端
在每個(gè) Linux 終端上開啟一個(gè) redis-cli 客戶端連接到不同端口號(hào)上的 redis 服務(wù):
redis-cli -h 192.168.198.130 -p 6379
redis-cli -h 192.168.198.130 -p 6380
redis-cli -h 192.168.198.130 -p 6381
注:ip 地址那里輸入的是在配置文件中綁定的 ip。
四、將其中的一個(gè) redis 服務(wù)做為 Master,其余兩個(gè) redis 服務(wù)做為 Slave
已經(jīng)開啟的三個(gè) redis 客戶端:
在 6380 和 6381 兩個(gè)客戶端中輸入 slaveof 192.168.198.130 6379 命令,使這兩個(gè) redis 服務(wù)成為 6379 的 slave。
然后,分別在每個(gè) redis 客戶端輸入 info replication 命令,顯示每個(gè) redis 服務(wù)在這個(gè)小型集群里面扮演的角色:
- 6379 為 master:
- 6380 為 6379 的 slave:
- 6381 為 6379 的 slave:
五、演示主從復(fù)制的過程
我們?cè)?master 上執(zhí)行?set k1 v1,預(yù)期的結(jié)果是在另外兩個(gè) slave 上 通過?get k1?命令可以獲取對(duì)應(yīng)的鍵值:
成功了!當(dāng)然,我們還可以發(fā)現(xiàn)其實(shí)在 master 上也是可以 read 的。
Redis 實(shí)現(xiàn)主從復(fù)制的原理是什么?
知其然還要知其所以然。
一、master 復(fù)制數(shù)據(jù)給 slave 的原理如下:
slave 啟動(dòng)成功之后連接到 master 后會(huì)發(fā)送一個(gè)?sync?命令。
master 接收到這個(gè)同步命令之后啟動(dòng)后臺(tái)的存盤進(jìn)程,即將內(nèi)存的數(shù)據(jù)持久化到 rdb 或 aof。
持久化完畢之后,master 將整個(gè)數(shù)據(jù)文件傳送給 slave。
二、slave 接收 master 復(fù)制過來的數(shù)據(jù)方式有兩種:
? ? ?1. 全量復(fù)制:
? ? ? ? ?slave 剛與 master 建立連接的時(shí)候,會(huì)將接收到的 master 發(fā)來的整個(gè)數(shù)據(jù)庫文件存盤并加載到內(nèi)存。
? ? ?2. 增量復(fù)制:
? ? ? ? ?slave 已經(jīng)與 master 建立好連接關(guān)系的時(shí)候,master 會(huì)將收集到的修改數(shù)據(jù)的命令傳送給 slave,slave 執(zhí)行這些命令,完成同步。而不是再一次重新加載整個(gè)數(shù)據(jù)文件到內(nèi)存。
? ? ? ? ?當(dāng)然,如果 slave 與 master 斷開連接,再次重連的時(shí)候還是要加載整個(gè)數(shù)據(jù)文件的。
Redis 的主從復(fù)制的缺點(diǎn)
當(dāng) master 需要同步發(fā)送到 slave 上的數(shù)據(jù)量非常大的時(shí)候,會(huì)存在一定的時(shí)延。?
當(dāng)系統(tǒng)很繁忙或者?slave 機(jī)器數(shù)量非常多的時(shí)候也會(huì)使這個(gè)問題更加嚴(yán)重。
總結(jié)
以上是生活随笔為你收集整理的Redis 如何实现主从复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是HOOK功能?
- 下一篇: P,NP,NPC,NP-Hard,co-