日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot 整合 Redis 哨兵机制_01

發布時間:2024/9/27 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 節點分布總覽

服務器ipport節點說明哨兵port
192.168.0.1146379master節點26379
192.168.0.1146380slave節點26380
192.168.0.1146381slave節點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 改為26381

2.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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。