標籤:
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接下來配置下。
6380 和 6381 都是6379的slave:將各自設定檔slaveof設定為 slaveof 127.0.0.1 6379 並且連接埠改為各自連接埠。
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
啟動哨兵
[[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(未排版)