快速掌握Redis——第七招:營運必學 主從和監控sentinel(未排版)

來源:互聯網
上載者:User

標籤:

1 主從同步 Replication
  • 過程
    slave 配置複製(Replication)策略後,會向master 主動發送一個SYNC命令。Master將啟動後台存檔進程,同時收集所有接收到的用於修改資料集的命令,在後台進程執行完畢後,Master將傳送整個資料庫檔案到Slave,以完成一次完全同步。而Slave伺服器在接收到資料庫檔案資料之後將其存檔並載入到記憶體中。此後,Master繼續將所有已經收集到的修改命令,和新的修改命令依次傳送給Slaves,Slave將在本次執行這些資料修改命令,從而達到最終的資料同步。如果Master和Slave之間的連結出現斷連現象,Slave可以自動重連Master,但是在串連成功之後,又會完全同步資料,不是"增量"的。

  • 配置
    redis的主從很簡單,master 幾乎不用配置,主要配置 slave ,1個mater 可以有N個slave(若干個) ,而且當master遇到問題時,可以切換某一個slave 為master ,避免單點故障 ,保證資料完整性。
    筆記本虛擬機器記憶體有限,我就在不同的連接埠開啟redis服務,達到不同機器(ip)開啟redis的效果。
    master port: 6379
    slave 1 port: 6380
    slave 2 port: 6381

    [[email protected] redis]# lltotal 160drwxr-xr-x. 2 root root   4096 Mar 26 20:57 bin-rw-r--r--. 1 root root 120602 Mar 29 22:36 dump.rdb-rw-r--r--. 1 root root  36028 Mar 29 22:35 redis.conf[[email protected] redis]# ps -ef |grep redisroot      2141     1  0 Mar29 ?        00:00:56 ./bin/redis-server *:6379root      4986  4959  0 18:40 pts/0    00:00:00 grep redis[[email protected] redis]# kill -9 2141[[email protected] redis]# cp redis.conf redis6380.conf[[email protected] redis]# vim redis6380.conf          ##   將        # slaveof <masterip> <masterport>        改為        slaveof 127.0.0.1 6379        儲存退出。[[email protected] redis]# bin/redis-server ./redis6380.conf[[email protected] redis]# bin/redis-server ./redis.conf[[email protected] redis]# bin/redis-cli127.0.0.1:6379> keys * 1) "name" 2) "fasdff" 3) "fasdfasf" 4) "counter:__rand_int__" 5) "faffffff" 6) "age" 7) "key:__rand_int__" 8) "faff" 9) "fafffssssdfafff"10) "mylist"

    這是上次的資料,6379有資料了,重開個終端,串連 6380連接埠。

    [[email protected] redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380127.0.0.1:6380> keys * 1) "name" 2) "faffffff" 3) "counter:__rand_int__" 4) "fasdfasf" 5) "fasdff" 6) "key:__rand_int__" 7) "age" 8) "mylist" 9) "faff"10) "fafffssssdfafff"

資料太亂了,我在6379 連接埠執行flushdb ,在6380連接埠的資料也沒了。

  • 主從好處:
  • 實際部署時,這麼分配,原先的master(s) 主要做資料收集,slave(s)做備份,其他工作,分擔主壓力。
  • 讀寫分離:為了分載Master的讀操作壓力,Slave伺服器可以為用戶端提供唯讀操作的服務,寫服務仍然必須由Master來完成。即便如此,系統的伸縮性還是得到了很大的提高。
  • Master 是以非阻塞的方式為Slaves提供服務。所以在Master-Slave同步期間,用戶端仍然可以提交查詢或修改請求。
  • Slave 同樣是以非阻塞的方式完成資料同步。在同步期間,如果有用戶端提交查詢請求,Redis則返回同步之前的資料。
2

人工更改設定檔很 low , 請出哨兵( sentinel )
複製sentinel.conf

        [[email protected] redis]# cp /usr/local/src/redis-2.8.19/sentinel.conf /usr/local/redis/        [[email protected] redis]# ls        bin  dump.rdb  redis6380.conf  redis.conf  sentinel.conf        [[email protected] redis]# vim sentinel.conf        [[email protected] redis]# grep -v ^# sentinel.conf | tee sentinel.conf #不顯示配置的說明檔案,重新導向到sentinel.conf        port 26379        dir /tmp          sentinel monitor mymaster 127.0.0.1 6379 2           sentinel down-after-milliseconds mymaster 30000           sentinel parallel-syncs mymaster 1         sentinel failover-timeout mymaster 180000接下來配置下。
  1. 6380 和 6381 都是6379的slave:將各自設定檔slaveof設定為 slaveof 127.0.0.1 6379 並且連接埠改為各自連接埠。

  2. sentinel.conf 我們這裡只設定和6379(master)連接埠對應的哨兵sentinel,每個連接埠都可以設定哨兵。

    [[email protected] redis]# lltotal 120drwxr-xr-x. 2 root root  4096 Mar 26 20:57 bin-rw-r--r--. 1 root root    40 Mar 30 21:37 dump.rdb-rw-r--r--. 1 root root 36085 Mar 30 21:37 redis6380.conf-rw-r--r--. 1 root root 36109 Mar 30 21:37 redis6381.conf-rw-r--r--. 1 root root 36028 Mar 29 22:35 redis.conf-rw-r--r--. 1 root root   824 Mar 30 21:37 sentinel.conf[[email protected] redis]# cat sentinel.conf#sentinel的連接埠 port 26379

    dir “/tmp”

    自訂伺服器名 mymater 控制的機器ip 連接埠 最後的”1”為當至少有1個從贊同sentinel的監控結果,判為主失效

    sentinel monitor mymaster 127.0.0.1 6380 1

    10000ms後串連不到master就認為斷開了

    sentinel down-after-milliseconds mymaster 10000

    sentinel can-failover mymaster yes 是否允許sentinel修改slave->master. 如為no,則只能監控,無權修改 允許一次性有幾台slave串連新的master(建議一個)

    sentinel config-epoch mymaster 1

3.啟動各個連接埠服務。

            [[email protected] redis]# bin/redis-server ./redis6380.conf            [[email protected] redis]# bin/redis-server ./redis6381.conf            [[email protected] redis]# bin/redis-server ./redis.conf

  1. 啟動哨兵

        [[email protected] redis]# bin/redis-server ./sentinel.conf --sentinel

5.重新開啟個終端,殺死6379連接埠的服務,或者shutdown,這樣等會兒就能切換優先順序搞得slave作為master了。

        [5780] 31 Mar 00:52:31.266 # +try-failover master mymaster 127.0.0.1 6380        [5780] 31 Mar 00:52:31.269 # +vote-for-leader 86d663c9700709770705bdb758337364eb82a102 3        [5780] 31 Mar 00:52:31.269 # +elected-leader master mymaster 127.0.0.1 6380

6380成為master了。

快速掌握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.