中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis如何實現主從復制

發布時間:2022-01-05 17:55:42 來源:億速云 閱讀:141 作者:小新 欄目:云計算

這篇文章主要為大家展示了“Redis如何實現主從復制”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Redis如何實現主從復制”這篇文章吧。

  前面介紹Redis,我們都在一臺服務器上進行操作的,也就是說讀和寫以及備份操作都是在一臺Redis服務器上進行的,那么隨著項目訪問量的增加,對Redis服務器的操作也越加頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,那么為了解決訪問量大的問題,通常會采取的一種方式是主從架構Master/Slave,Master 以寫為主,Slave 以讀為主,Master 主節點更新后根據配置,自動同步到從機Slave 節點。

  接下來我們就來介紹如何進行主從架構的搭建。

  ps:這里我是在一臺機器上模擬多個Redis服務器,與實際生產環境中相比,基本配置都是一樣,僅僅是IP地址和端口號變化。

  Redis如何實現主從復制

1、修改配置文件

  首先將redis.conf 配置文件復制三份,通過修改端口分別模擬三臺Redis服務器。

  Redis如何實現主從復制

  然后我們分別對這三個redis.conf 文件進行修改。

  ①、修改 daemonize yes

  Redis如何實現主從復制

  表示指定Redis以守護進程的方式啟動(后臺啟動)

  ②、配置PID文件路徑 pidfile

  Redis如何實現主從復制

  表示當redis作為守護進程運行的時候,它會把 pid 默認寫到 /var/redis/run/redis_6379.pid 文件里面

  ③、配置端口 port

  Redis如何實現主從復制

  ④、配置log 文件名字

  Redis如何實現主從復制

  ⑤、配置rdb文件名

  Redis如何實現主從復制

  依次將 6380redis.conf 、6381redis.conf 配置一次,則配置完畢。

  接下來我們分別啟動這三個服務。

  Redis如何實現主從復制

  通過命令查看Redis是否啟動:

  Redis如何實現主從復制

  接下來通過如下命令分別進入到這三個Redis客戶端:

1

2

3

redis-cli -p 6379

redis-cli -p 6380

redis-cli -p 6381

2、設置主從關系

  ①、通過  info replication 命令查看節點角色

  Redis如何實現主從復制    Redis如何實現主從復制

  Redis如何實現主從復制

  我們發現這三個節點都是扮演的 Master 角色。那么如何將 6380 和 6381 節點變為 Slave 角色呢?

  ②、選擇6380端口和6381端口,執行命令:SLAVEOF 127.0.0.1 6379

  Redis如何實現主從復制    Redis如何實現主從復制

  我們再看 6379 節點信息:

  Redis如何實現主從復制

  這里通過命令來設置主從關系,一旦服務重啟,那么角色關系將不復存在。想要永久的保存這種關系,可以通過配置redis.conf 文件來配置。

3、測試主從關系

  ①、增量復制

  主節點執行 set k1 v1 命令,從節點 get k1 能獲取嗎?

  Redis如何實現主從復制

  Redis如何實現主從復制

  Redis如何實現主從復制

  由上圖可知是可以獲取的。

  ②、全量復制

  通過執行 SLAVEOF 127.0.0.1 6379,如果主節點 6379 以前還存在一些 key,那么執行命令之后,從節點會將以前的信息也都復制過來嗎?

  答案也是肯定的,這里我就不貼測試結果了。

  ③、主從讀寫分離

  主節點能夠執行寫命令,從節點能夠執行寫命令嗎?

  Redis如何實現主從復制

  這里的原因是在配置文件 6381redis.conf 中對于 slave-read-only 的配置

  Redis如何實現主從復制

  如果我們將其修改為 no 之后,執行寫命令是可以的。

  Redis如何實現主從復制

  但是從節點寫命令的數據從節點或者主節點都不能獲取的。

  ④、主節點宕機

  主節點 Maste 掛掉,兩個從節點角色會發生變化嗎?

  Redis如何實現主從復制

  Redis如何實現主從復制

  上圖可知主節點 Master 掛掉之后,從節點角色還是不會改變的。

  ⑤、主節點宕機后恢復

  主節點Master掛掉之后,馬上啟動主機Maste,主節點扮演的角色還是 Master 嗎?

  Redis如何實現主從復制

  也就是說主節點掛掉之后重啟,又恢復了主節點的角色。

4、哨兵模式

  通過前面的配置,主節點Master 只有一個,一旦主節點掛掉之后,從節點沒法擔起主節點的任務,那么整個系統也無法運行。如果主節點掛掉之后,從節點能夠自動變成主節點,那么問題就解決了,于是哨兵模式誕生了。

  哨兵模式就是不時地監控redis是否按照預期良好地運行(至少是保證主節點是存在的),若一臺主機出現問題時,哨兵會自動將該主機下的某一個從機設置為新的主機,并讓其他從機和新主機建立主從關系。

  Redis如何實現主從復制

  哨兵模式搭建步驟:

  ①、在配置文件目錄下新建 sentinel.conf 文件,名字絕不能錯,然后配置相應內容

  Redis如何實現主從復制 

1

sentinel monitor 被監控機器的名字(自己起名字) ip地址 端口號 得票數

  Redis如何實現主從復制

  分別配置被監控的名字,ip地址,端口號,以及得票數。上面的得票數為1表示表示主機掛掉后salve投票看讓誰接替成為主機,得票數大于1便成為主機

  ②、啟動哨兵

1

redis-sentinel /etc/redis/sentinel.conf

  啟動界面:

  Redis如何實現主從復制

  接下來,我們干掉主機 6379,然后看從節點有啥變化。

  Redis如何實現主從復制

  干掉主節點之后,我們查看后臺打印日志,發現 6381投票變為主節點了。

  Redis如何實現主從復制

  這時候我們查看從節點 6381的節點信息:

  Redis如何實現主從復制

  6381 節點自動變為主節點了。

  PS:哨兵模式也存在單點故障問題,如果哨兵機器掛了,那么就無法進行監控了,解決辦法是哨兵也建立集群,Redis哨兵模式是支持集群的。

5、主從復制原理

  Redis的復制功能分為同步(sync)和命令傳播(command propagate)兩個操作。

  ①、舊版同步

  當從節點發出 SLAVEOF 命令,要求從服務器復制主服務器時,從服務器通過向主服務器發送 SYNC 命令來完成。該命令執行步驟:

  1、從服務器向主服務器發送 SYNC 命令

  2、收到 SYNC 命令的主服務器執行 BGSAVE 命令,在后臺生成一個 RDB 文件,并使用一個緩沖區記錄從開始執行的所有寫命令

  3、當主服務器的 BGSAVE 命令執行完畢時,主服務器會將 BGSAVE 命令生成的 RDB 文件發送給從服務器,從服務器接收此 RDB 文件,并將服務器狀態更新為RDB文件記錄的狀態。

  4、主服務器將緩沖區的所有寫命令也發送給從服務器,從服務器執行相應命令。

  ②、命令傳播

  當同步操作完成之后,主服務器會進行相應的修改命令,這時候從服務器和主服務器狀態就會不一致。

  為了讓主服務器和從服務器保持狀態一致,主服務器需要對從服務器執行命令傳播操作,主服務器會將自己的寫命令發送給從服務器執行。從服務器執行相應的命令之后,主從服務器狀態繼續保持一致。

  總結:通過同步操作以及命令傳播功能,能夠很好的保證了主從一致的特性。

  但是我們考慮一個問題,如果從服務器在同步主服務器期間,突然斷開了連接,而這時候主服務器進行了一些寫操作,這時候從服務器恢復連接,如果我們在進行同步,那么就必須將主服務器從新生成一個RDB文件,然后給從服務器加載,這樣雖然能夠保證一致性,但是其實斷開連接之前主從服務器狀態是保持一致的,不一致的是從服務器斷開連接,而主服務器執行了一些寫命令,那么從服務器恢復連接后能不能只要斷開連接的哪些寫命令,而不是整個RDB快照呢?

  同步操作其實是一個非常耗時的操作,主服務器需要先通過 BGSAVE 命令來生成一個 RDB 文件,然后需要將該文件發送給從服務器,從服務器接收該文件之后,接著加載該文件,并且加載期間,從服務器是無法處理其他命令的。

  為了解決這個問題,Redis從2.8版本之后,使用了新的同步命令 PSYNC 來代替 SYNC 命令。該命令的部分重同步功能用于處理斷線后重復制的效率問題。也就是說當從服務器在斷線后重新連接主服務器時,主服務器只將斷開連接后執行的寫命令發送給從服務器,從服務器只需要接收并執行這些寫命令即可保持主從一致。

6、主從復制的缺點

  主從復制雖然解決了主節點的單點故障問題,但是由于所有的寫操作都是在 Master 節點上操作,然后同步到 Slave 節點,那么同步就會有一定的延時,當系統很繁忙的時候,延時問題就會更加嚴重,而且會隨著從節點slave的增多而愈加嚴重。

以上是“Redis如何實現主從復制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄冈市| 敖汉旗| 河间市| 白城市| 根河市| 综艺| 丰都县| 八宿县| 岳池县| 福安市| 桑植县| 聂拉木县| 都昌县| 佳木斯市| 七台河市| 安阳县| 绥德县| 通州市| 伊川县| 宜城市| 吴忠市| 寻甸| 古蔺县| 右玉县| 融水| 双城市| 五指山市| 丰原市| 松潘县| 波密县| 岑巩县| 外汇| 疏附县| 红河县| 五大连池市| 娱乐| 岚皋县| 肥西县| 丹凤县| 古蔺县| 中卫市|