詳解Redis主從及哨兵模式
一、哨兵模式的實現場景
在主從模式的Redis系統中,從資料庫在整個系統中起到了資料 冗餘備份和 讀寫分離的作用,但是當資料庫遇到異常中斷服務後,我們只能通過手動的方式選擇一個從資料庫來升格為主資料庫,顯然這種方式很麻煩需要人工介入,這時通過哨兵模式可以實現自動化的系統監控和故障恢復。
二、哨兵模式
2.1、哨兵模式原理
哨兵(sentinel) 是一個分散式系統,用於對主從結構中的每臺伺服器進行監控,當出現故障時通過投票機制選擇新的master並將所有slave連線到新的master。所以整個執行哨兵的叢集的數量不得少於3個節點。
2.2、哨兵模式的作用
① 監控
不斷的檢查master和slave是否正常執行。
master存活檢測、master與slave執行情況檢測
② 通知(提醒)
當被監控的伺服器出現問題時,向其他(哨兵間,客戶端)傳送通知。
③ 自動故障轉移
斷開master與slave連線,選取一個slave作為master,將其他slave連線到新的master,並告知客戶端新的伺服器地址
PS:哨兵也是一臺redis伺服器,只是不提供資料服務
哨兵的啟動依賴於主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節點上都需要部署哨兵模式,哨兵模式會監控所有的redis工作節點是否正常,當master出現問題的時候,因為其他節點與主節點失去聯絡,因此會投票,投票過半就認為這個master的確出現問題,然後會通知哨兵間,然後從slaves中選取一個作為新的master
2.3、主從具體配置
1、配置主伺服器
1、編譯安裝redis資料庫
[root@Master ~]# tar zxf redis-5.0.7.tar.gz
[root@Master ~]# cd redis-5.0.7/
[root@Master redis-5.0.7]# make
[root@Master redis-5.0.7]# make PREFIX=/usr/local/redis install
[root@Master redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin
[root@Master redis-5.0.7]# cd utils/
[root@Master utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
2、修改配置檔案
[root@Slave1 ~]# vi /etc/redis/6379.conf
#master、slave節點都需要修改
#69行 修改監聽地址為0.0.0.0(在實驗環境使用),現網環境建議繫結從伺服器IP地址
#136行 開啟守護程式
daemonize yes
#171行 修改日誌檔案目錄
logfile /var/log/redis_6379.log
#263行 修改工作目錄
dir /var/lib/redis/6379
#699行 開啟AOF持久化功能
appendonly yes
[root@Slave1 ~]# /etc/init.d/redis_6379 restart ###重啟服務
2、配置從伺服器
[root@Slave1 ~]# vi /etc/redis/6379.conf
#slave節點
#與master節點修改一直,多修改一個同步master節點IP和埠
replicaof 192.168.73.10 6379
3、驗證
1、進入主資料庫檢視
[root@Master ~]# redis-cli -h 192.168.73.10
192.168.73.10:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.73.30,port=6379,state=online,offset=308,lag=1
slave1:ip=192.168.73.20,port=6379,state=online,offset=308,lag=1
2、檢視日誌檔案(master)
[root@Master ~]# cat /var/log/redis_6379.log
53684:M 11 Nov 2020 11:45:51.838 * Replica 192.168.73.30:6379 asks for synchronization
53684:M 11 Nov 2020 11:45:51.838 * Full resync requested by replica 192.168.73.30:6379
53684:M 11 Nov 2020 11:45:51.913 * Synchronization with replica 192.168.73.30:6379 succeeded
53684:M 11 Nov 2020 11:45:52.415 * Replica 192.168.73.20:6379 asks for synchronization
53684:M 11 Nov 2020 11:45:52.415 * Full resync requested by replica 192.168.73.20:6379
53684:M 11 Nov 2020 11:45:52.416 * Synchronization with replica 192.168.73.20:6379 succeeded
2.4、配置哨兵模式
1、修改配置檔案(所有節點都需要修改)
[root@Master ~]# vi redis-5.0.4/sentinel.conf
17/protected-mode no #關閉保護模式
26/daemonize yes #指定sentinel為後臺啟動
36/logfile "/var/log/sentinel.log" #指定日誌存放路徑
65/dir "/var/lib/redis/6379" #指定資料庫存放路徑
84/sentinel monitor mymaster 192.168.73.10 6379 2 #至少幾個哨兵檢測到主伺服器故障了,才會進行故障遷移
113/sentinel down-after-milliseconds mymaster 3000 #判定伺服器down掉的時間週期,預設30000毫秒(30秒)
146/sentinel failover-timeout mymaster 180000 #故障節的的最大超時時間為180000(180秒)
2、啟動哨兵模式
先啟master,再啟slave
redis-sentinel redis-5.0.7/sentinel.conf &
3、檢視哨兵資訊
[root@Master ~]# redis-cli -h 192.168.73.10 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.73.10:6379,slaves=2,sentinels=3
4、故障模擬
1、檢視redis-server程式號
[root@Master ~]# ps -ef | grep redis
root 53684 1 0 11:45 ? 00:00:01 /usr/local/bin/redis-server 0.0.0.0:6379
root 53970 1 0 12:03 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 53997 48404 0 12:06 pts/1 00:00:00 grep --color=auto redis
2、殺死master上redis-server的程式號
[root@Master ~]# kill -9 53684
5、驗證結果
方法一
[root@Master ~]# tail -f /var/log/sentinel.log
53970:X 11 Nov 2020 12:03:26.182 * +slave slave 192.168.73.20:6379 192.168.73.20 6379 @ mymaster 192.168.73.10 6379
53970:X 11 Nov 2020 12:03:56.651 * +sentinel sentinel 5a871a66301a42ef6a7f69ae3b173779a569c6ab 192.168.73.20 26379 @ mymaster 192.168.73.10 6379
53970:X 11 Nov 2020 12:04:01.455 * +sentinel sentinel b6593c5b0ec71b7395a4aa1ac4ba97613f4fdf94 192.168.73.30 26379 @ mymaster 192.168.73.10 6379
53970:X 11 Nov 2020 12:07:33.897 # +sdown master mymaster 192.168.73.10 6379
53970:X 11 Nov 2020 12:07:34.011 # +new-epoch 1
53970:X 11 Nov 2020 12:07:34.012 # +vote-for-leader 5a871a66301a42ef6a7f69ae3b173779a569c6ab 1
53970:X 11 Nov 2020 12:07:34.394 # +config-update-from sentinel 5a871a66301a42ef6a7f69ae3b173779a569c6ab 192.168.73.20 26379 @ mymaster 192.168.73.10 6379
53970:X 11 Nov 2020 12:07:34.394 # +switch-master mymaster 192.168.73.10 6379 192.168.73.20 6379
53970:X 11 Nov 2020 12:07:34.394 * +slave slave 192.168.73.30:6379 192.168.73.30 6379 @ mymaster 192.168.73.20 6379
53970:X 11 Nov 2020 12:07:34.394 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.20 6379
方法二
[root@Master ~]# redis-cli -p 26379 INFO Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.73.20:6379,slaves=2,sentinels=3
相關文章
- Redis docker 主從模式與哨兵sentinelRedisDocker模式
- Redis持久化、主從與哨兵架構詳解Redis持久化架構
- 淺談:redis的主從複製 + 哨兵模式Redis模式
- Docker配置redis主從哨兵DockerRedis
- Redis 哨兵模式實現主從故障互切換Redis模式
- Redis三種高可用模式:主從、哨兵、叢集Redis模式
- 圖解Redis,Redis主從複製與Redis哨兵機制圖解Redis
- Redis 主從複製與哨兵Redis
- docker Redis單機主從哨兵模式切換失敗DockerRedis模式
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- 用 docker 學習 redis 主從複製3 redis-sentinel(哨兵模式)DockerRedis模式
- Redis Sentinel哨兵模式原理及配置Redis模式
- redis哨兵模式的原理及部署Redis模式
- Redis高可用-主從,哨兵,叢集Redis
- helm 安裝redis的主從、哨兵Redis
- 【Redis 系列】redis 學習十一,redis 的哨兵模式詳解和實戰Redis模式
- Redis哨兵模式(sentinel)學習總結及部署記錄(主從複製、讀寫分離、主從切換)Redis模式
- CentOS7.8 環境搭建 Redis 主從複製和哨兵模式CentOSRedis模式
- Redis哨兵模式Redis模式
- Redis搭建主從複製、哨兵叢集Redis
- 【redis】使用redis benchmark評估哨兵模式主節點效能Redis模式
- 【Redis學習專題】- Redis主從+哨兵叢集部署Redis
- .net core使用CSRedisCore訪問Redis主從+哨兵Redis
- 實踐 - 搭建Redis一主兩從三哨兵Redis
- 【Redis】Sentinel 哨兵模式Redis模式
- redis哨兵模式搭建Redis模式
- Redis 哨兵模式搭建Redis模式
- Redis哨兵模式高可用解決方案Redis模式
- 一文掌握Redis主從複製、哨兵、Cluster三種叢集模式Redis模式
- 用 docker 學習 redis 主從複製3.2 redis-sentinel「哨兵模式」核心配置-命令-原理DockerRedis模式
- Redis哨兵叢集:哨兵掛了,主從庫還能切換嗎?Redis
- Redis主從模式部署Redis模式
- Redis 主從複製與哨兵優化部署解析Redis優化
- 三千字介紹Redis主從+哨兵+叢集Redis
- 一文讀懂Redis的四種模式,單機、主從、哨兵、叢集Redis模式
- redis-26.哨兵模式Redis模式
- Redis Sentinel哨兵模式部署Redis模式