當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot 整合 Redis 哨兵机制_01
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot 整合 Redis 哨兵机制_01
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、哨兵簡述
- 1. 哨兵能解決和未能解決的問題
- 2. 哨兵的作用
- 3. 哨兵的主要配置
- 4. 哨兵綜述
- 二、搭建哨兵
- 2.1. 思路分析
- 2.2. 節點分布總覽
- 2.3. 哨兵配置
- 2.4. 啟動主從復制
- 2.5. 啟動哨兵:
- 三、需求測試
- 3.1. 評估預測
- 3.2. 分別登錄3個節點
- 3.3. 破壞性模擬測試
一、哨兵簡述
1. 哨兵能解決和未能解決的問題
| 帶有自動處理故障轉移功能的主從架構 | 無法解決現有系統單節點并發壓力和物理上限問題 |
2. 哨兵的作用
| 監控 | 不斷地輪訓去檢查主服務器和從服務器是否正常運行 |
| 提醒 | 當監控到某個redis服務器出現問題時,Sentinel提醒 |
| 故障的自動遷移 | 斷開master和人slave連接,選舉一個slave節點升級為master,將其他slave連接到新的master,并告知客戶端新的地址 |
注意:哨兵配置單數
3. 哨兵的主要配置
| port 26379 | 哨兵端口,不重復即可 |
| daemonize yes | 是否開啟后臺運行 ,默認no |
| sentinel monitor {masterName} {masterIp} {masterPort} {quorum} | sentinel monitor是哨兵最核心的配置,其中: masterName指定了主節點名稱, masterIp和masterPort指定了主節點地址, quorum是判斷主節點客觀下線的哨兵數量閾值: 當判定主節點下線的哨兵數量達到quorum時,對主節點進行客觀下線。建議取值為哨兵數量的一半加1。 3個哨兵就配置2 |
| sentinel down-after-milliseconds {masterName} {time} | sentinel down-after-milliseconds與主觀下線的判斷有關:哨兵使用ping命令對其他節點進行心跳檢測,如果其他節點超過down-after-milliseconds配置的時間沒有回復,哨兵就會將其進行主觀下線。該配置對主節點、從節點和哨兵節點的主觀下線判定都有效。 down-after-milliseconds的默認值是30000,即30s;可以根據不同的網絡環境和應用要求來調整:值越大,對主觀下線的判定會越寬松,好處是誤判的可能性小,壞處是故障發現和故障轉移的時間變長,客戶端等待的時間也會變長。例如,如果應用對可用性要求較高,則可以將值適當調小,當故障發生時盡快完成轉移;如果網絡環境相對較差,可以適當提高該閾值,避免頻繁誤判。 |
| sentinel parallel - syncs {masterName} {number} | sentinel parallel-syncs與故障轉移之后從節點的復制有關:它規定了每次向新的主節點發起復制操作的從節點個數。例如,假設主節點切換完成之后,有3個從節點要向新的主節點發起復制;如果parallel-syncs=1,則從節點會一個一個開始復制;如果parallel-syncs=3,則3個從節點會一起開始復制。 parallel-syncs取值越大,從節點完成復制的時間越快,但是對主節點的網絡負載、硬盤負載造成的壓力也越大;應根據實際情況設置。例如,如果主節點的負載較低,而從節點對服務可用的要求較高,可以適量增加parallel-syncs取值。parallel-syncs的默認值是1。 |
| sentinel failover - timeout {masterName} {time} | sentinel failover-timeout與故障轉移超時的判斷有關,但是該參數不是用來判斷整個故障轉移階段的超時,而是其幾個子階段的超時,例如如果主節點晉升從節點時間超過timeout,或從節點向新的主節點發起復制操作的時間(不包括復制數據的時間)超過timeout,都會導致故障轉移超時失敗。 failover-timeout的默認值是180000,即180s;如果超時,則下一次該值會變為原來的2倍。 |
| logfile “/app/master-slave/log/sentinel_log.log” | 這個配置建議配置可以實時監控哨兵狀態及操作軌跡 |
4. 哨兵綜述
哨兵監視的是當前的master節點,如果當前master節點宕機了,哨兵會從節點中選舉的一個從節點升級為主節點,即系提供redis服務;
當剛才的主節點恢復正常了,會成為現在主節點的新的從節點。
二、搭建哨兵
2.1. 思路分析
前提:已經搭建主從復制的架構1. 在現有主從架構的基礎上搭建哨兵 2. 啟動哨兵服務,準備一個哨兵配置文件2.2. 節點分布總覽
| 192.168.0.114 | 6379 | master節點 | 26379 |
| 192.168.0.114 | 6380 | slave節點 | 26380 |
| 192.168.0.114 | 6381 | slave節點 | 26381 |
2.3. 哨兵配置
為了快捷演示效果,這里采用偽分布式搭建(簡單來說,就是在一臺服務器上,搭建所有的哨兵)
#在/app/下面創建哨兵目錄master-slave cd /app mkdir master-slave#在master-slave下面創建3個目錄bin、conf、log、data目錄,分別放置腳本、配置文件、日志文件、數據文件 cd /app/master-slave/ mkdir bin mkdir conf#在/app/master-slave/log目錄下面創建sentinel_log.log日志文件 touch /app/master-slave/log/sentinel_log.log#進入到解壓的redis目錄中復制哨兵的腳本文件和配置文件 cp /app/redis-5.0.8/src/redis-sentinel /app/master-slave/bin/#在/app/master-slave/conf/創建sentinel.conf文件 vim sentinel.conf添加如下內容: 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/創建sentinel.conf文件復制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. 啟動主從復制
#1.啟動redis主從復制3個節點 /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主節點,查看主節點主從復制節點信息,是否已經生效: /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. 評估預測
評估預測: 主從復制,主節點負責寫入操作,從節點負責同步冗余數據,不能執行寫入操作。加入哨兵之后,當前主節點宕機后,哨兵會從從從節點中選舉一個從節點升級為主節點,繼續對外提供redis服務,新選舉的master可以執行寫入操作3.2. 分別登錄3個節點
#登錄master節點操作日志如下: [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節點操作日志如下: [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節點操作日志如下: [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. 破壞性模擬測試
打開哨兵監控哨兵日志: tail -f /app/master-slave/log/sentinel_log.log模擬master節點宕機 kill -9 7628 端口為6381的slave節點升級為新的master,可以執行寫入操作 [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的節點,成為現有master節點的新的slave節點 [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>總結
以上是生活随笔為你收集整理的SpringBoot 整合 Redis 哨兵机制_01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aop记录轨迹
- 下一篇: gradle idea java ssm