當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot 整合 Redis 哨兵机制_01
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot 整合 Redis 哨兵机制_01
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 一、哨兵簡述
- 1. 哨兵能解決和未能解決的問題
- 2. 哨兵的作用
- 3. 哨兵的主要配置
- 4. 哨兵綜述
- 二、搭建哨兵
- 2.1. 思路分析
- 2.2. 節(jié)點分布總覽
- 2.3. 哨兵配置
- 2.4. 啟動主從復(fù)制
- 2.5. 啟動哨兵:
- 三、需求測試
- 3.1. 評估預(yù)測
- 3.2. 分別登錄3個節(jié)點
- 3.3. 破壞性模擬測試
一、哨兵簡述
1. 哨兵能解決和未能解決的問題
| 帶有自動處理故障轉(zhuǎn)移功能的主從架構(gòu) | 無法解決現(xiàn)有系統(tǒng)單節(jié)點并發(fā)壓力和物理上限問題 |
2. 哨兵的作用
| 監(jiān)控 | 不斷地輪訓(xùn)去檢查主服務(wù)器和從服務(wù)器是否正常運行 |
| 提醒 | 當(dāng)監(jiān)控到某個redis服務(wù)器出現(xiàn)問題時,Sentinel提醒 |
| 故障的自動遷移 | 斷開master和人slave連接,選舉一個slave節(jié)點升級為master,將其他slave連接到新的master,并告知客戶端新的地址 |
注意:哨兵配置單數(shù)
3. 哨兵的主要配置
| port 26379 | 哨兵端口,不重復(fù)即可 |
| daemonize yes | 是否開啟后臺運行 ,默認no |
| sentinel monitor {masterName} {masterIp} {masterPort} {quorum} | sentinel monitor是哨兵最核心的配置,其中: masterName指定了主節(jié)點名稱, masterIp和masterPort指定了主節(jié)點地址, quorum是判斷主節(jié)點客觀下線的哨兵數(shù)量閾值: 當(dāng)判定主節(jié)點下線的哨兵數(shù)量達到quorum時,對主節(jié)點進行客觀下線。建議取值為哨兵數(shù)量的一半加1。 3個哨兵就配置2 |
| sentinel down-after-milliseconds {masterName} {time} | sentinel down-after-milliseconds與主觀下線的判斷有關(guān):哨兵使用ping命令對其他節(jié)點進行心跳檢測,如果其他節(jié)點超過down-after-milliseconds配置的時間沒有回復(fù),哨兵就會將其進行主觀下線。該配置對主節(jié)點、從節(jié)點和哨兵節(jié)點的主觀下線判定都有效。 down-after-milliseconds的默認值是30000,即30s;可以根據(jù)不同的網(wǎng)絡(luò)環(huán)境和應(yīng)用要求來調(diào)整:值越大,對主觀下線的判定會越寬松,好處是誤判的可能性小,壞處是故障發(fā)現(xiàn)和故障轉(zhuǎn)移的時間變長,客戶端等待的時間也會變長。例如,如果應(yīng)用對可用性要求較高,則可以將值適當(dāng)調(diào)小,當(dāng)故障發(fā)生時盡快完成轉(zhuǎn)移;如果網(wǎng)絡(luò)環(huán)境相對較差,可以適當(dāng)提高該閾值,避免頻繁誤判。 |
| sentinel parallel - syncs {masterName} {number} | sentinel parallel-syncs與故障轉(zhuǎn)移之后從節(jié)點的復(fù)制有關(guān):它規(guī)定了每次向新的主節(jié)點發(fā)起復(fù)制操作的從節(jié)點個數(shù)。例如,假設(shè)主節(jié)點切換完成之后,有3個從節(jié)點要向新的主節(jié)點發(fā)起復(fù)制;如果parallel-syncs=1,則從節(jié)點會一個一個開始復(fù)制;如果parallel-syncs=3,則3個從節(jié)點會一起開始復(fù)制。 parallel-syncs取值越大,從節(jié)點完成復(fù)制的時間越快,但是對主節(jié)點的網(wǎng)絡(luò)負載、硬盤負載造成的壓力也越大;應(yīng)根據(jù)實際情況設(shè)置。例如,如果主節(jié)點的負載較低,而從節(jié)點對服務(wù)可用的要求較高,可以適量增加parallel-syncs取值。parallel-syncs的默認值是1。 |
| sentinel failover - timeout {masterName} {time} | sentinel failover-timeout與故障轉(zhuǎn)移超時的判斷有關(guān),但是該參數(shù)不是用來判斷整個故障轉(zhuǎn)移階段的超時,而是其幾個子階段的超時,例如如果主節(jié)點晉升從節(jié)點時間超過timeout,或從節(jié)點向新的主節(jié)點發(fā)起復(fù)制操作的時間(不包括復(fù)制數(shù)據(jù)的時間)超過timeout,都會導(dǎo)致故障轉(zhuǎn)移超時失敗。 failover-timeout的默認值是180000,即180s;如果超時,則下一次該值會變?yōu)樵瓉淼?倍。 |
| logfile “/app/master-slave/log/sentinel_log.log” | 這個配置建議配置可以實時監(jiān)控哨兵狀態(tài)及操作軌跡 |
4. 哨兵綜述
哨兵監(jiān)視的是當(dāng)前的master節(jié)點,如果當(dāng)前master節(jié)點宕機了,哨兵會從節(jié)點中選舉的一個從節(jié)點升級為主節(jié)點,即系提供redis服務(wù);
當(dāng)剛才的主節(jié)點恢復(fù)正常了,會成為現(xiàn)在主節(jié)點的新的從節(jié)點。
二、搭建哨兵
2.1. 思路分析
前提:已經(jīng)搭建主從復(fù)制的架構(gòu)1. 在現(xiàn)有主從架構(gòu)的基礎(chǔ)上搭建哨兵 2. 啟動哨兵服務(wù),準備一個哨兵配置文件2.2. 節(jié)點分布總覽
| 192.168.0.114 | 6379 | master節(jié)點 | 26379 |
| 192.168.0.114 | 6380 | slave節(jié)點 | 26380 |
| 192.168.0.114 | 6381 | slave節(jié)點 | 26381 |
2.3. 哨兵配置
為了快捷演示效果,這里采用偽分布式搭建(簡單來說,就是在一臺服務(wù)器上,搭建所有的哨兵)
#在/app/下面創(chuàng)建哨兵目錄master-slave cd /app mkdir master-slave#在master-slave下面創(chuàng)建3個目錄bin、conf、log、data目錄,分別放置腳本、配置文件、日志文件、數(shù)據(jù)文件 cd /app/master-slave/ mkdir bin mkdir conf#在/app/master-slave/log目錄下面創(chuàng)建sentinel_log.log日志文件 touch /app/master-slave/log/sentinel_log.log#進入到解壓的redis目錄中復(fù)制哨兵的腳本文件和配置文件 cp /app/redis-5.0.8/src/redis-sentinel /app/master-slave/bin/#在/app/master-slave/conf/創(chuàng)建sentinel.conf文件 vim sentinel.conf添加如下內(nèi)容: port 26379 daemonize yes logfile "/app/master-slave/log/sentinel_log.log" dir /app/master-slave/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000保存退出 將/app/master-slave/conf/創(chuàng)建sentinel.conf文件復(fù)制2份并重命名 cp /app/master-slave/conf/sentinel.conf /app/master-slave/conf/sentinel-26380.conf cp /app/master-slave/conf/sentinel.conf /app/master-slave/conf/sentinel-26381.conf#編輯sentinel-26380.conf修改端口 vim /app/master-slave/conf/sentinel-26380.conf 端口26379 改為26380 #編輯sentinel-26381.conf修改端口 vim /app/master-slave/conf/sentinel-26381.conf 端口26379 改為263812.4. 啟動主從復(fù)制
#1.啟動redis主從復(fù)制3個節(jié)點 /app/master-slave/bin/redis-server /app/master-slave/conf/redis.conf /app/master-slave/bin/redis-server /app/master-slave/conf/redis-6380.conf /app/master-slave/bin/redis-server /app/master-slave/conf/redis-6381.conf#2.登錄master主節(jié)點,查看主節(jié)點主從復(fù)制節(jié)點信息,是否已經(jīng)生效: /app/master-slave/bin/redis-cli -p 6379 info replication 操作日志如下: [root@localhost conf]# ps -ef |grep redis root 7455 1 0 10:12 ? 00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6379 root 7460 1 0 10:12 ? 00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6380 root 7466 1 0 10:12 ? 00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6381 root 7471 7325 0 10:12 pts/0 00:00:00 grep --color=auto redis [root@localhost conf]# /app/master-slave/bin/redis-cli -p 6379 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.0.114,port=6380,state=online,offset=126,lag=1 slave1:ip=192.168.0.114,port=6381,state=online,offset=126,lag=1 master_replid:21f34dabfd8c5432ca04d9a011f73e26b2a65af6 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:126 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:126 127.0.0.1:6379>2.5. 啟動哨兵:
/app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel.conf /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26380.conf /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26381.conf 操作日志如下: [root@localhost conf]# /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel.conf [root@localhost conf]# /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26380.conf [root@localhost conf]# /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26381.conf [root@localhost conf]# ps -ef |grep redis root 7455 1 0 10:12 ? 00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6379 root 7460 1 0 10:12 ? 00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6380 root 7466 1 0 10:12 ? 00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6381 root 7501 1 0 10:15 ? 00:00:00 /app/master-slave/bin/redis-sentinel *:26379 [sentinel] root 7506 1 0 10:15 ? 00:00:00 /app/master-slave/bin/redis-sentinel *:26380 [sentinel] root 7511 1 0 10:15 ? 00:00:00 /app/master-slave/bin/redis-sentinel *:26381 [sentinel] root 7518 7325 0 10:15 pts/0 00:00:00 grep --color=auto redis [root@localhost conf]#三、需求測試
3.1. 評估預(yù)測
評估預(yù)測: 主從復(fù)制,主節(jié)點負責(zé)寫入操作,從節(jié)點負責(zé)同步冗余數(shù)據(jù),不能執(zhí)行寫入操作。加入哨兵之后,當(dāng)前主節(jié)點宕機后,哨兵會從從從節(jié)點中選舉一個從節(jié)點升級為主節(jié)點,繼續(xù)對外提供redis服務(wù),新選舉的master可以執(zhí)行寫入操作3.2. 分別登錄3個節(jié)點
#登錄master節(jié)點操作日志如下: [root@localhost conf]# /app/master-slave/bin/redis-cli -p 6379 127.0.0.1:6379> set y yyy OK 127.0.0.1:6379> get y "yyy" 127.0.0.1:6379>#登錄slave節(jié)點操作日志如下: [root@localhost app]# /app/master-slave/bin/redis-cli -p 6380 127.0.0.1:6380> get y "yyy" 127.0.0.1:6380> set hhh (error) ERR wrong number of arguments for 'set' command 127.0.0.1:6380>#登錄slave節(jié)點操作日志如下: [root@localhost ~]# /app/master-slave/bin/redis-cli -p 6381 127.0.0.1:6381> get y "yyy" 127.0.0.1:6381> set g ggg (error) READONLY You can't write against a read only replica. 127.0.0.1:6381>3.3. 破壞性模擬測試
打開哨兵監(jiān)控哨兵日志: tail -f /app/master-slave/log/sentinel_log.log模擬master節(jié)點宕機 kill -9 7628 端口為6381的slave節(jié)點升級為新的master,可以執(zhí)行寫入操作 [root@localhost conf]# /app/master-slave/bin/redis-cli -p 6381 127.0.0.1:6381> set f gggg OK 127.0.0.1:6381> 重新啟動6379 [root@localhost conf]# /app/master-slave/bin/redis-server /app/master-slave/conf/redis.conf 重新登錄端口為6379的節(jié)點,成為現(xiàn)有master節(jié)點的新的slave節(jié)點 [root@localhost conf]# /app/master-slave/bin/redis-cli -p 6379 127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.0.114 master_port:6380 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:399050 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:f8d80bc94bab3bee7fddb03234e84cd758ad8958 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:399050 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:399051 repl_backlog_histlen:0 127.0.0.1:6379> set h gghg (error) READONLY You can't write against a read only replica. 127.0.0.1:6379>總結(jié)
以上是生活随笔為你收集整理的SpringBoot 整合 Redis 哨兵机制_01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aop记录轨迹
- 下一篇: SpringBoot 整合Redis 单