redis的主從機制 master&slave


轉載自:https://www.cnblogs.com/qwangxiao/p/9733480.html

 

一:master&slave的解釋?

master&slave就是主從復制,主機數據更新后根據配置和策略,自動同步到備機的master/slaver機制,master以寫為主,slave以讀為主

二:作用

   1:讀寫分離

   2:容災恢復

三:怎么使用

   1:配從(庫)不配主(庫);

    2:從庫配置:slaveof[主庫IP][主庫端口]

         每次slave與master斷開后,都需要重新連接,除非配置進redis.conf文件;

         鍵入info replication 可以查看redis主從信息

    3:修改配置文件細節操作

           - 拷貝多個redis.conf文件

               

             - 指定端口

               

             - 開啟daemonize yes

               

             - Pid文件名字

               

             - Log文件名字

               

             - Dump.rdb名字

               

       4:常用

            

              - 一主二仆

     

                  一個Master,兩個Slave,Slave只能讀不能寫;當Slave與Master斷開后需要重新slave of連接才可建立之

           前的主從關系;Master掛掉后,Master關系依然存在,Master重啟即可恢復。

           - 薪火相傳

   

                 上一個Slave可以是下一個Slave的Master,Slave同樣可以接收其他slaves的連接和同步請求,那么該slave作為了

           鏈條中下一個slave的Master,如此可以有效減輕Master的寫壓力。如果slave中途變更轉向,會清除之前的數據,重新

           建立最新的。

           - 反客為主

                       當Master掛掉后,Slave可鍵入命令 slaveof no one使當前redis停止與其他Master redis數據同步,轉成

              Master redis。

   四、復制原理

           1、slave啟動成功連接到master后會發送一個sync命令

           2、master接到命令啟動后的存盤進程,同事收集所有接收到的用於修改數據集命令,在后台進程執行完                     畢之后,master  將傳送整個數據文件到slave,以完成一次完全同步;

           3、全量復制:而slave服務在數據庫文件得到數據后,將其存盤並加載到內存中;

           4、增量復制:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步;

           5、但是只要是重新連接master,一次完全同步(全量復制)將被自動執行。

五、哨兵模式(sentinel)

       反客為主的自動版,能夠后台監控Master庫是否故障,如果故障了根據投票數自動將slave庫轉換為主庫。一組sentinel能

       同時監控多個Master。

       使用步驟:

       1、在Master對應redis.conf同目錄下新建sentinel.conf文件,名字絕對不能錯;

       2、配置哨兵,在sentinel.conf文件中填入內容:

             sentinel monitor 被監控數據庫名字(自己起名字) ip port 1

             說明:上面最后一個數字1,表示主機掛掉后slave投票看讓誰接替成為主機,得票數多少后成為主機。

      3、啟動哨兵模式:

            命令鍵入:redis-sentinel  /myredis/sentinel.conf

 

template <typename T> void selectionSort(T arr[]www.yundingyuLe.cn, int n)www.baidu620.com/ { int www.tygj178.com  minIndex = -1; for(int i = 0; i < n; i++) { minIndex = i; for(int j = i+1; j < n; ++j) { if(arr[j] < arr[minIndex]) { minIndex = j; } } swap(arr[i], arr[minIndex]);www.dashuju178.com } }

           注:上述sentinel.conf路徑按各自實際情況配置

六、復制的缺點

            延時,由於所有的寫操作都是在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定

       的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使得這個問題更加嚴重。

 

Memcached集群實現了開頭提到的兩個特性:

  • 高吞吐量:通過負載均衡算法(通常是借助一致性Hash和虛擬節點),我們把Client的請求均勻分配到三台Memcached服務器上,不至於只讓一台Memcached疲於處理全部請求。
  • 高可用:一旦一台Memcached節點掛了,比如說Memcached1,那借助一致性Hash算法和它的虛擬節點機制,我們可以將原本發給Client的Memcached1的請求均勻分配到Memcached2和3上,緩存功能依舊可用。


分布式是一種策略,集群是一種解決高並發的手段。分布式分布二字的標准更多是由業務主導,將高頻業務和低頻業務區分開來,將集中作業模塊化,從策略上先進行優化;集群是將高頻請求分流,避免請求阻塞的一種手段,
nginx做負載是一種集群,數據庫的主從設計也是一種集群,集群說白了就是堆硬件,一台機器搞不定,那就用十台,簡單粗暴。


   


免責聲明!

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



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