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