天天看點

redis 一主一從三哨兵

1.伺服器規劃(示例)

  伺服器: (要求redis主從能使用的記憶體容量一緻,并且均配置maxmemory)

             192.168.127.8  redis-7003 主節點  redis-sentinel-7013 redis哨兵1

             192.168.127.7  redis-7002 主節點  redis-sentinel-7012 redis哨兵2

             192.168.127.6  redis-sentinel-7011 redis哨兵3

  說明:當主節點下線後,三個哨兵并投票決定誰是leader,2個以上的哨兵認為主節點下線了(主觀下線),leader會去做故障轉移的工作

  問題:1.當進行了一次主從切換後,隻有一個reids節點還在運作,如果需要再次切換主從,需要把原來當機的redis節點啟動起來

             2.主從節點切換後,用戶端需要切換請求的IP位址,jedis用戶端無法實作IP位址的轉換,使用原來的jedis用戶端就無法正常通路,需要使用 sharded-jedis-sentinel-pool 

2.在一台機器上安裝redis

3.複制redis安裝後的檔案夾到其它機器,并重命名為redis-${port}

4.在各台機器上複制一個redis安裝檔案夾 , 并重命名為redis-sentinel-${port} 

5.配置redis主節點

port 

7003

dir 

"/usr/local/redis4/data"

logfile 

"7003.log"

daemonize yes

pidfile 

"/var/run/redis_7003.pid"

#關閉redis保護模式,保護模式關閉後,能通路到伺服器的用戶端都能夠連接配接到此redis

protected

-mode no

#主節點密碼

requirepass 

"2329257"

#最大記憶體使用量

maxmemory 1gb

6.配置redis從節點

port 

7002

dir 

"/usr/local/redis4/data"

logfile 

"7002.log"

daemonize yes

pidfile 

"/var/run/redis_7002.pid"

#關閉redis保護模式,保護模式關閉後,能通路到伺服器的用戶端都能夠連接配接到此redis

protected

-mode no

#從節點連接配接主節點的密碼

masterauth 

"2329257"

#最大記憶體使用量

maxmemory 1gb

7.配置redis哨兵節點(有三個哨兵,配置僅僅是端口不同,這裡隻配置一個作為示例)

port 

7012

dir 

"/usr/local/redis4-sentinel/data"

logfile 

"7012.log"

daemonize yes

pidfile 

"/var/run/redis_7012.pid"

#關閉redis保護模式,保護模式關閉後,能通路到伺服器的用戶端都能夠連接配接到此redis

protected

-mode no

sentinel deny-scripts-reconfig yes

#配置主節點的IP和端口 并設定需要

2

個以上的哨兵認為主節點當機才會切換主從

sentinel monitor mymaster 

192.168

.

127.8

7003

2

#sentinel 定期通過ping通路主節點,如果超過150s未響應,就認為主節點當機了

sentinel down-after-milliseconds mymaster 

150000

#主節點的通路密碼

sentinel auth-pass mymaster 

2329257

#故障轉移時最多可以有

2

從節點同時對新主節點進行資料同步

sentinel config-epoch mymaster 

2

sentinel leader-epoch mymaster 

2

#故障轉移時間,當決定故障轉移後到轉移完成的最大時間

sentinel failover-timeout mymaster 

180000

8.啟動redis主節點

bin/redis-server conf/redis-7003.conf

9.啟動redis從節點

bin/redis-server conf/redis-7002.conf

10.啟動redis哨兵節點

bin/redis-sentinel conf/redis-7013.conf

bin/redis-sentinel conf/redis-7012.conf

bin/redis-sentinel conf/redis-7011.conf

11.在主節點和從節點觀察主從狀态(目前主節點有一個從節點 192.128.127.7:7002)

    在主節點檢視

# Replication

role:master

connected_slaves:

1

slave0:ip=

192.168

.

127.7

,port=

7002

,state=online,offset=

444947

,lag=

master_replid:f526d934f5f315888731e918f97f0d14ad2724e2

master_replid2:4c6db5630cb19eeebea9796fde82f80188bf1926

master_repl_offset:

445101

second_repl_offset:

25084

repl_backlog_active:

1

repl_backlog_size:

1048576

repl_backlog_first_byte_offset:

1

repl_backlog_histlen:

445101

  在從節點檢視(目前從節點有一個主節點 192.128.127.8:7003)

# Replication

role:slave

master_host:

192.168

.

127.8

master_port:

7003

master_link_status:up

master_last_io_seconds_ago:

1

master_sync_in_progress:

slave_repl_offset:

435231

slave_priority:

100

slave_read_only:

1

connected_slaves:

master_replid:f526d934f5f315888731e918f97f0d14ad2724e2

master_replid2:

0000000000000000000000000000000000000000

master_repl_offset:

435231

second_repl_offset:-

1

repl_backlog_active:

1

repl_backlog_size:

1048576

repl_backlog_first_byte_offset:

429707

repl_backlog_histlen:

5525

12.将主節點下線,觀察自動故障轉移的過程

   檢視sentinel的日志會發現有一句日志,顯示主從節點切換的情況

+

switch

-master mymaster 

192.168

.

127.8

7003

192.168

.

127.7

7002

   在從節點查詢info replication,發現原來的從節點變成了主節點,沒有從節點

# Replication

role:master

connected_slaves:

master_replid:f526d934f5f315888731e918f97f0d14ad2724e2

master_replid2:4c6db5630cb19eeebea9796fde82f80188bf1926

master_repl_offset:

399326

second_repl_offset:

25084

repl_backlog_active:

1

repl_backlog_size:

1048576

repl_backlog_first_byte_offset:

1

repl_backlog_histlen:

399326

繼續閱讀