redis-主從復制、讀寫分離


1、為什么要主從復制(一主多仆),讀寫分離:redis在作為緩存的時候,隨着數據的不斷增加,是有可能出現宕機的,這時候就出現了“單點故障”,解決方案就是進行主從復制,讀寫分離。

原理圖:Master是主,Slave是從,Master具有讀寫權限,Slave只有讀權限(以下還會介紹redis分布式鎖,即當Master死機之后,利用“sentinel監控”把Slave其中一個提升為Master,讓系統繼續執行,直至原Master重啟后恢復)

 
 
企業一般用redis都是”高可用“的,以下為原理圖

 

   

2、為了方便測試,把開啟redis服務的四個關鍵文件統一放在單獨的文件夾中 :redis-server、redis-benchmark、redis-cli和redis.conf(redis.conf在redis的文件根目錄下,其余三個在根目錄的/src目錄下)

# mkdir /usr/redis
# cp redis-server  /usr/redis
# cp redis-benchmark /usr/redis
# cp redis-cli  /usr/redis
# cp redis.conf  /usr/redis
# cd /usr/redis

 3、在/usr/redis中把redis-conf進行Copy兩次:redis1-conf、redis2-conf

依次修改redis-conf(主)、redis1-conf(仆)、redis2-conf(仆).

vi redis.conf
vi redis1.conf
vi redis2.conf

(/'字符串'    可以進行快速Find 查找位置,鍵盤“N”可以Find Next 查找下一個)

redis-conf  (daemonize no  (守護進程)改為  daemonize yes ):

port 6379

requirepass 123456

 daemonize yes
 

 

redis1-conf  -->:

port 6380
 
slaveof 127.0.0.1 6379
 
masterauth 123456
 
requirepass 123456

 

redis2-conf  -->:

port 6381
 
slaveof 127.0.0.1 6379
 
masterauth 123456
 
requirepass 123456

 

4、保存之后運行相對應的服務和客戶端

 注意:當使用 命令:/redis-server redis-conf ,提示redis-conf無效時,只要把redis-conf放在redis-server同一個目錄下即可。

服務:

./redis-server redis.conf


./redis-server redis1.conf


./redis-server redis2.conf

 

主(Master):

 

仆1(slave):

 

仆2(slave):

(slove是不具備寫權限的,會提示:(error) READONLY You can't write against a read only slave.)

可以看到主機執行寫命令,從機能同步主機的值,主從復制,讀寫分離就實現了。

但是萬一主機掛了怎么辦,這是個麻煩事情,所以redis提供了一個sentinel(哨兵),以此來實現主從切換的功能,類似與zookeeper.

5、一般“高可用”我們需要建立三個sentinel(哨兵)構成“sentinel集群”,即三個:sentinel.conf、sentinel1.conf、sentinel2.conf

sentinel.conf:

 一般默認的就行,但是我們之前設置了認證密碼,所以需要加一個命令(在對應的位置添加,直接看注釋就知道在哪里添加了):

sentinel auth-pass mymaster 123456

之后Copy兩份:sentinel1.conf、sentinel2.conf,改其端口號即可(我用的:26379、26479、26579)。

6、分別啟動三哨兵:

./redis-sentinel sentinel.conf

./redis-sentinel sentinel1.conf

./redis-sentinel sentinel2.conf

接着啟動三個服務:

./redis-server redis.conf

./redis-server redis1.conf

./redis-server redis2.conf

查詢線程情況:

自此已經完成redis的狀態:“三哨兵”、“一主”、“二從”

7、測試下:

我們kill其中一個主服務:

 (注意:sentinel是怎么進行主從切換的呢?就是以下這條命令:

    sentinel monitor mymaster 127.0.0.1 6379 2     最后面的2就是當兩個以上的sentinel確定6379端口的“主服務”已經“主觀下線”的時候,就把“從服務“自動切換成主服務

其中的sentinel服務產生變化:

自動把端口號6380的服務切換成主服務,當然sentinel會修改我們的配置文件:

sentinel.conf、sentinel1.conf、sentinel2.conf--》(原來的mymaster 由6379 換為了 6380)

 

 此時切換已經完成,但是我們還需要啟動之前的主redis,但是這個時候我們已經進行過插入、刪除等操作,以前的主redis並沒有記錄這些,那么就需要將之前從redis的dump.rdb替換之前redis 的dump.rdb文件。

          首先進入redis-master 啟動 ./redis-server redis.conf

    在新生成的主master操作(設置為主服務)

         

127.0.0.1:6380> slaveof no one

 

然后設置重啟的6379服務為從服務,映射主服務:

127.0.0.1:6379> slaveof 127.0.0.1 6380

 

順便把6381也重新指向6380為主服務,映射主服務

127.0.0.1:6381> slaveof 127.0.0.1 6380

 

如果還沒有回到原來的狀態,就關掉sentinel(哨兵)在設置。

8、總結:

       1、”主從復制、讀寫分離、主從切換“的原理和步驟和集群

       2、擴展:企業一般使用redis都是使用”高可用“的,最基本的就是”三哨兵、二主、三從“,我們這邊博文寫的是”三哨兵、一主、三從“,自己加一個主服務就可以了

       3、”高可用”作用:防止“Master主服務宕機”、“sentinel監控宕機”,要知道,數據的丟失是致命的。

       4、redis的作用:Redis以內存作為數據存儲介質,所以讀寫數據的效率極高,遠遠超過數據庫。當然,redis也會自動把內存的數據保存到磁盤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM