Redis主從、sentinel故障自動切換

來源:互聯網
上載者:User

標籤:redis主從 sentinel


一、什麼是redis主從複製?

主從複製,當使用者往Master端寫入資料時,通過Redis Sync機制將資料檔案發送至Slave,Slave也會執行相同的操作確保資料一致;且實現Redis的主從複製非常簡單。

 

二、redis主從複製特點

1、同一個Master可以擁有多個Slaves。

2、Master下的Slave還可以接受同一架構中其它slave的連結與同步請求,實現資料的級聯複製,即Master->Slave->Slave模式;

3、Master以非阻塞的方式同步資料至slave,這將意味著Master會繼續處理一個或多個slave的讀寫請求;

4、Slave端同步資料也可以修改為非阻塞是的方式,當slave在執行新的同步時,它仍可以用舊的資料資訊來提供查詢;否則,當slave與master失去聯絡時,slave會返回一個錯誤給用戶端;

5、主從複製具有可擴充性,即多個slave專門提供唯讀查詢與資料的冗餘,Master端專門提供寫操作;

6、通過配置禁用Master資料持久化機制,將其資料持久化操作交給Slaves完成,避免在Master中要有獨立的進程來完成此操作。

三、redis主從複製原理

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/38/6A/wKiom1Ozz5OThc6NAAGUIzDDlQs366.jpg" title="13.png" alt="wKiom1Ozz5OThc6NAAGUIzDDlQs366.jpg" width="650" style="padding:0px;margin:0px;vertical-align:top;border:none;" />      當啟動一個Slave進程後,它會向Master發送一個SYNC Command,請求同步串連。無論是第一次串連還是重新串連,Master都會啟動一個後台進程,將資料快照儲存到資料檔案中,同時Master會記錄所有修改資料的命令並緩衝在資料檔案中。後台進程完成快取作業後,Master就發送資料檔案給Slave,Slave端將資料檔案儲存到硬碟上,然後將其在載入到記憶體中,接著Master就會所有修改資料的操作,將其發送給Slave端。若Slave出現故障導致宕機,恢複正常後會自動重新串連,Master收到Slave的串連後,將其完整的資料檔案發送給Slave,如果Mater同時收到多個Slave發來的同步請求,Master只會在後台啟動一個進程儲存資料檔案,然後將其發送給所有的Slave,確保Slave正常。


四、配置過程

Jemalloc安裝

#yum install -y tcl gcc gcc-c++  make bzip2

#wgethttp://www.canonware.com/download/jemalloc/jemalloc-4.2.0.tar.bz2

#tar -xjf jemalloc-4.2.0.tar.bz2

#cd jemalloc-4.2.0

#./configure --prefix=/usr/local/jemalloc --libdir=/usr/local/lib

#make && make install

#make clean

#echo "/usr/local/lib" >/etc/ld.so.conf.d/usr_local_lib.conf

#/sbin/ldconfig

 

Redis安裝

#cd ../

#wget http://download.redis.io/releases/redis-3.2.0.tar.gz

#cd redis-3.2.0

#make MALLOC=jemalloc

#make install

#cd utils/

#./install_server.sh

 

安裝配置和資料路徑可以定義:

Selected config:

Port           :6379

Config file    : /etc/redis/6379.conf

Log file       :/var/log/redis_6379.log

Data dir       : /data/redis

Executable     : /usr/local/bin/redis-server

Cli Executable : /usr/local/bin/redis-cli

Is this ok? Then press ENTER to go on or Ctrl-C to abort.

Copied /tmp/6379.conf =>/etc/init.d/redis_6379

 

Redis設定記憶體大小

開啟redis設定檔

#vim /etc/redis/6379.conf

增加如下兩行

maxmemory 12g              
maxmemory-policy volatile-lru   

第一行:Redis設定最大佔用記憶體,一般推薦Redis設定記憶體為最大實體記憶體的四分之三。

第二行:如果設定了maxmemory,一般都要設定到期策略。

Redis有六種到期策略:

1、volatile-lru -> 根據LRU演算法產生的到期時間來刪除。

2、allkeys-lru -> 根據LRU演算法刪除任何key。

3、volatile-random-> 根據到期設定來隨機刪除key。

4、allkeys->random-> 無差別隨機刪。

5、volatile-ttl -> 根據最近到期時間來刪除(輔以TTL)

6、noeviction -> 誰也不刪,直接在寫操作時返回錯誤。

 

配置完成重啟redis

查看配置是否生效

#redis-cli info

 

 

主從

192.168.1.76  主

192.168.1.77  從

兩台分別安裝redis

安裝好之後,在從192.168.1.77的redis設定檔修改bind並增加一行參數

#vim /etc/redis/6379.conf

bind 0.0.0.0

slaveof 192.168.1.76  6379

啟動兩台redis

在主192.168.1.76執行

#redis-cli

>set name ceshi

>get name

在從192.168.1.77執行

#redis-cli

>get name

如果可以get到ceshi,代表主從成功

 

Sentinel哨兵:

在其中一台redis上或者隨便找一台伺服器安裝,如果只安裝一個sentinel並要安裝在redis伺服器上,建議在從上搭建sentinel,這樣保證了主宕機之後不會影響主從切換,從宕機不會影響主的運行

#vim /etc/redis/sentinel.conf

port 26379   
daemonize yes
sentinel monitor mymaster 192.168.1.76 6379 1
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 900000
logfile "/var/log/sentinel.log"

注釋:

第一行:指定sentinel連接埠號碼

第二行:指定sentinel為後台啟動

第三行:指定sentinel去監視一個名為mymaster的Master,Master的IP地址為192.168.1.76,

連接埠為6379,最後的1表示當有1個Sentinel檢測到Master異常時會判定其失效,如果為2,即只有當2個Sentinel都判定Master失效了才會自動遷移,如果Sentinel的數量不達標,則不會執行自動故障遷移。

第四行:指定Sentinel判定Master斷線的時間。(單位為毫秒,判定為主觀下線SDOWN)

第五行:指定在執行容錯移轉時,最多可以有多少個Slave同時對新的Master進行同步。這個數字設定為1,雖然完成容錯移轉所需的時間會變長,但是可以保證每次只有1個Slave處於不能處理命令請求的狀態。

第六行:如果在該時間(ms)內未能完成failover(即故障時master/slave自動切換

)操作,則認為該failover失敗。

第七行:指定Sentinel記錄檔。

 

啟動

#redis-sentinel /etc/redis/sentinel.conf

 

測試:

使用如下命令查看

#redis-cli -h 192.168.1.76 -p 6379 info

將主192.168.1.76的redis停掉,會發現從192.168.1.77切換為主了

將主192.168.1.76的redis啟動,會發現自動添加為從伺服器了

 

Redis資料移轉

1、在舊redis執行redis-clisave將資料儲存到磁碟檔案dump.rdb

2、停止新redis

3、將舊的redis儲存後的磁碟檔案dump.rdb拷貝到新的redis資料目錄下

4、啟動新的redis


Redis主從、sentinel故障自動切換

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.