? 基于Sentinel實現redis主從自動切換

Sentinel(哨兵)是用于監控redis集群中Master狀態的工具,它可以實現對redis的監控、通知、自動故障轉移。

Sentinel作用:

  1. Master狀態檢測

  2. 當被監控的某個 Redis Master異常無法連接時 Sentinel 可以向系統管理員發送通知, 也可以通過 API 向其他程序發送通知,并且進行Master-Slave切換,將其中一個Slave作為Master,將之前的Master作為Slave

  3. Master-Slave切換后,masterredis.conf、slaveredis.conf和sentinel.conf的內容都會發生改變,即master_redis.conf中會多一行slaveof的配置,sentinel.conf的監控目標會隨之調換。當應用程序連接Redis 服務器時, Redis Sentinel會告之新的主服務器地址和端口。

Redis 主從部署:

192.168.11.12:6379  master              
192.168.11.12:6381  slave          
192.168.11.13:6379  slave           
192.168.11.13:6381  slave            
192.168.11.14:6379  slave           
192.168.11.14:6381  slave

Sentinel:

192.168.11.12                 
192.168.11.13           
192.168.11.14

具體部署(簡寫) mkdir -p /opt/redis6379/{bin,etc,var,log} 
mkdir -p /opt/redis6381/{bin,etc,var,log}

tar zxmf redis-2.8.19.tar.gz               
cd redis-2.8.19               
make             
make PREFIX=/opt/redis6379 install     
make PREFIX=/opt/redis6381 install

master config:

cat redis6379.conf
daemonize yes
pidfile /opt/redis6379/redis6379.pid
port 6379
tcp-backlog 10240
maxclients 10000
bind 0.0.0.0
timeout 0
tcp-keepalive 0
loglevel notice
logfile /opt/redis6379/log/redis6379.log
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir /export/redis6379/
slave-priority 100
maxmemory 2500mb
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly01.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

slave config:

cat redis6379.conf
daemonize yes
pidfile /opt/redis6379/redis6379.pid
port 6379
tcp-backlog 10240
maxclients 10000
bind 0.0.0.0
timeout 0
tcp-keepalive 0
loglevel notice
logfile /opt/redis6379/log/redis6379.log
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir /export/redis6379/
slave-priority 100
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
slaveof 192.168.11.12 6379
maxmemory 2500mb
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly01.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
save 900 1
save 300 100
save 60 10000
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

啟動:

/opt/redis6379/bin/redis-server /opt/redis6379/etc/redis6379.conf 

/opt/redis6381/bin/redis-server /opt/redis6381/etc/redis6381.conf  

# ps aux | grep redis
root       6379  0.2  0.7 137368  7520 ?        Ssl  08:19   0:00 /opt/redis6379/bin/redis-server 0.0.0.0:6379                     
root       6457  0.1  0.7 137368  7504 ?        Ssl  08:19   0:00 /opt/redis6381/bin/redis-server 0.0.0.0:6381

查看主從狀態:

# /opt/redis6379/bin/redis-cli -h 127.0.0.1 -p 6379 INFO Replication
# Replication
role:master
connected_slaves:5
slave0:ip=192.168.11.12,port=6381,state=online,offset=449,lag=1
slave2:ip=192.168.11.13,port=6379,state=online,offset=449,lag=1
slave4:ip=192.168.11.13,port=6381,state=online,offset=449,lag=1
slave2:ip=192.168.11.14,port=6379,state=online,offset=449,lag=1
slave4:ip=192.168.11.14,port=6381,state=online,offset=449,lag=1
master_repl_offset:449
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:448

查看同步:

192.168.11.12:6379
127.0.0.1:6379> set aa 123
OK

192.168.11.13:6379
127.0.0.1:6379> get aa
"123"

192.168.11.14:6381
127.0.0.1:6381> get aa
"123"

數據以同步

配置sentinel:

mkdir -p /opt/redis6379/sentinel

sentinel.conf:

port 26379
dir "/opt/redis6379/sentinel"
sentinel monitor master 192.168.11.12 6379 2
sentinel down-after-milliseconds master 60000
sentinel config-epoch master 1
sentinel leader-epoch master 1
sentinel known-slave master 192.168.11.12 6381
sentinel known-slave master 192.168.11.14 6381
# Generated by CONFIG REWRITE
sentinel known-slave master 192.168.11.112 6379
sentinel known-slave master 192.168.11.112 6381
sentinel known-slave master 192.168.11.14 6379
sentinel known-sentinel master 192.168.11.112 26379 459b949dd141a301f93d764d92bb04af9450870b
sentinel known-sentinel master 192.168.11.14 26379 9638d9c07c83c8cf6b3cac0b419867d9a4eeb17c
sentinel current-epoch 1

說明: port 監聽端口 
dir Sentinel服務運行時使用的臨時文件夾 sentinel monitor master IP 端口 x 監控的 redis master ip 端口 判斷為失效至少需要2個 Sentinel進程的同意,只要同意Sentinel的數量不達標,自動failover就不會執行

一下配置啟動之后無法看到 sentinel failover-timeout master 180000 : 如果在該時間(ms)內未能完成failover操作,則認為該failover失敗 sentinel parallel-syncs master 1:指定了在執行故障轉移時,最多可以有多少個從Redis實例在同步新的主實例,在從Redis實例較多的情況下這個數字越小,同步的時間越長,完成故障轉移所需的時間就越長

啟動 redis-sentinel :

/opt/redis6379/bin/redis-sentinel /opt/redis6379/sentinel/sentinel.conf  2>&1 /opt/redis6379/sentinel.log &

模擬故障:

192.168.11.12:6379
/opt/redis6379/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown

查看:

192.168.11.12:6381
/opt/redis6379/bin/redis-cli -h 127.0.0.1 -p 6381 info Replication
# Replication
role:slave
master_host:192.168.11.14
master_port:6381
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:4265
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

master 已經主觀轉移

本文進行簡單的sentinel測試 
后面進行redis參數優化講解以及測試線上master方案 
twemproxy 
codis 
redis cluster

原創文章,作者:可樂,如若轉載,請注明出處:http://www.www58058.com/10499

(0)
可樂可樂
上一篇 2016-02-14
下一篇 2016-02-14

相關推薦

  • 【超全整理】《Linux云計算從入門到精通》系列實戰筆記全放送

    ? ? ? 為了方便Linux云計算愛好者的學習查看,馬哥Linx云計算團隊特別整理了《Linux云計算從入門到精通》年度重磅大放送,囊括了整個學習過程的學習精華,內容全部由馬哥Linux云計算學員撰寫,歡迎大家支持!??! ? ? ? 詳情請看: ?一、Linux運維基礎實戰入門 從Linux0基礎入門開始,全面講解作為新手如何學習Linux,以及學習方法和…

    2017-09-14
  • 在馬幫的宣言

    好好學習,在這半年時間讓自己的道路上再邁出一大步

    Linux干貨 2016-10-28
  • Mariadb數據庫備份恢復系列(一):mysqldump邏輯備份工具實戰

    實驗一:利用mysqldump+二進制日志實現備份恢復數據庫 1、查看原始數據 2、mysqldump執行備份 3、模擬在備份后修改數據,模擬利用二進制日志還原的場景 4、還原mysqldump備份的數據 5、導出二進制日志的事件 6、還原二進制日志事件   

    Linux干貨 2016-11-24
  • find、locate、Gnome文件查找工具

    查找命令: ? ? ? ? locate:非實時查找 ? ? ? ? find:實時查找 ? ? ? ? Gnome:圖形化搜索工具 locate: 描述:查詢系統上預建的文件索引數據庫/var/lib/mlocate/mlocate.db,一天更新一次更新數據庫:updatedb特點:依賴于事先構建的索引。索引的構建是在系統較為空閑時自動進行(周期性任務)…

    Linux干貨 2017-11-26
  • RHEL6.9換源記

    RHEL是提供給企業使用的,雖然我們在網絡上也能下載到它的鏡像,但是我們無法使用它的服務。最近由于系統比較卡,重裝了一次系統,裝完之后,我用VMware Workstation Pro 12 加載了之前的RHEL 6.9-000002.vmdk文件之后居然發現不能掛載CD/DVD,這就不能愉快的玩了。在VMware的設置里折騰好久也沒能搞定,光盤安裝RPM包…

    2017-07-20
  • 磁盤運作方式及分區,掛載等操作

    磁盤運作方式及分區,掛載等操作 磁盤是我們存儲數據的空間,而為了方便我們對數據的管理,我們需要對磁盤進行分區。而在我們創建過分區之后 ,我們為了能 夠訪問磁盤 ,需要對磁盤進行掛載 。文件系統通過為每個文件在分區上分配文件塊的方式把數據存儲在硬盤上。所以,就是使用文件系統在 硬盤分區上對數據塊的各種信息的操作。這樣就需要我們了解磁盤的運作方式,學會磁盤的分區…

    Linux干貨 2016-08-29

評論列表(1條)

  • stanley
    stanley 2016-02-14 10:23

    樣式略亂,內容詳盡

欧美性久久久久