歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 主從和監控sentinel

主從和監控sentinel

日期:2017/2/27 15:54:07   编辑:Linux教程

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

    [root@localhost redis]# ll
    total 160
    drwxr-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
    [root@localhost redis]# ps -ef |grep redis
    root      2141     1  0 Mar29 ?        00:00:56 ./bin/redis-server *:6379
    root      4986  4959  0 18:40 pts/0    00:00:00 grep redis
    [root@localhost redis]# kill -9 2141
    [root@localhost redis]# cp redis.conf redis6380.conf
    [root@localhost redis]# vim redis6380.conf  
            ##   將
            # slaveof <masterip> <masterport>
            改為
            slaveof 127.0.0.1 6379
            保存退出。
    [root@localhost redis]# bin/redis-server ./redis6380.conf
    [root@localhost redis]# bin/redis-server ./redis.conf
    [root@localhost redis]# bin/redis-cli
    127.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端口。

    [root@localhost redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380
    
    127.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

[root@localhost redis]# cp /usr/local/src/redis-2.8.19/sentinel.conf /usr/local/redis/
[root@localhost redis]# ls
bin  dump.rdb  redis6380.conf  redis.conf  sentinel.conf
[root@localhost redis]# vim sentinel.conf
[root@localhost 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 並且端口改為各自端口。

sentinel.conf 我們這裡只設置和6379(master)端口對應的哨兵sentinel,每個端口都可以設置哨兵。

[root@localhost redis]# ll
total 120
drwxr-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
[root@localhost 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.啟動各個端口服務。

[root@localhost redis]# bin/redis-server ./redis6380.conf
[root@localhost redis]# bin/redis-server ./redis6381.conf
[root@localhost redis]# bin/redis-server ./redis.conf

  1. 啟動哨兵

        [root@localhost 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了。

Copyright © Linux教程網 All Rights Reserved