• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            Redis集群的Sentinel(哨兵)模式的搭建

            一、哨兵模式整體架構(gòu):主從結(jié)構(gòu)+哨兵(sentinel),實現(xiàn)容災(zāi)的自動切換。
                  一個主節(jié)點(master)可擁有多個從節(jié)點(slave),從節(jié)點實現(xiàn)對主節(jié)點的復(fù)制,保證數(shù)據(jù)同步。而哨兵(sentinel)則對各節(jié)點進行監(jiān)控,主要包括主節(jié)點存活檢測、主從運行情況檢測等,一旦主節(jié)點宕機,哨兵可自動進行故障轉(zhuǎn)移 (failover)、主從切換。通常建議至少部署三個哨兵實例,這樣即使一個哨兵實例發(fā)生故障,其他兩個可以繼續(xù)進行故障檢測和轉(zhuǎn)移決策。


            二、主從配置
            :
            1配置文件中的各個參數(shù),詳解
            2、主機(master)配置:
            bind:0.0.0.0   #表示允許所有遠(yuǎn)程訪問。如果想指定限制訪問,可設(shè)置對應(yīng)的 ip。
            port:6379 #關(guān)閉保護模式,可以外部訪問。 
            daemonize:yes # 設(shè)置為后臺啟動。
            logfile:./redis.log # 日志文件。
            requirepass:pwdtest@2019   #設(shè)置 redis 連接密碼。
            masterauth:pwdtest@2019    #slave 服務(wù)連接 master 的密碼

            3、從機(slave)的配置和主機相似,不同的地方是需要使用replicaof指定主機(master)的IP地址和端口,需要注意的是老版本使用的是 slaveof
            當(dāng)本機為 slave 服務(wù)時,設(shè)置 master 服務(wù)的IP地址及端口,在 redis 啟動的時候會自動跟 master 進行數(shù)據(jù)同步
            4、啟動:
            切換到 bin 目錄,使用./redis-server即可啟動 redis 服務(wù),但是這種方式?jīng)]有指明配置文件,redis 將采用默認(rèn)配置,所以我們需要讓 redis 按照我們的配置文件來啟動,啟動時指定剛才我們復(fù)制到 etc 文件夾下的redis.conf
            三、Sentinel(哨兵)模式:
            1、哨兵模式詳解
                Redis Sentinel是Redis 的高可用性解決方案,由一個或多個Sentinel(哨兵)實例組成。它可以監(jiān)視任意多個主服務(wù)器,以及這些主服務(wù)器屬下的所有從服務(wù)器,并在被監(jiān)視的主服務(wù)器進入下線狀態(tài)時,自動將下線主服務(wù)器屬下的某個從服務(wù)器升級為新的主服務(wù)器,它的主要功能如下:
                監(jiān)控(Monitoring):Sentinel會不斷地檢查你的主服務(wù)器和從服務(wù)器是否運作正常。
                通知(Notification):當(dāng)被監(jiān)控的某個 Redis 服務(wù)器出現(xiàn)問題時, Sentinel可以通過API向管理員或者其他應(yīng)用程序發(fā)送通知。
                故障遷移:當(dāng)主服務(wù)器不能正常工作時,Sentinel會自動進行故障遷移,也就是主從切換。
                 統(tǒng)一的配置管理:連接者詢問sentinel取得主從的地址。

            2、原理:
                 Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系統(tǒng),系統(tǒng)容錯,以及Leader選舉,每個Sentinel都需要定期的執(zhí)行以下任務(wù):
                      每個 Sentinel 會自動發(fā)現(xiàn)其他 Sentinel 和從服務(wù)器,它以每秒鐘一次的頻率向它所知的主服務(wù)器、從服務(wù)器以及其他 Sentinel 實例發(fā)送一個 PING 命令。
                      如果一個實例(instance)距離最后一次有效回復(fù) PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 那么這個實例會被 Sentinel 標(biāo)記為主觀下線。 有效回復(fù)可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
                       如果一個主服務(wù)器被標(biāo)記為主觀下線, 那么正在監(jiān)視這個主服務(wù)器的所有Sentinel要以每秒一次的頻率確認(rèn)主服務(wù)器的確進入了主觀下線狀態(tài)。
                       如果一個主服務(wù)器被標(biāo)記為主觀下線, 并且有足夠數(shù)量的Sentinel(至少要達(dá)到配置文件指定的數(shù)量)在指定的時間范圍內(nèi)同意這一判斷, 那么這個主服務(wù)器被標(biāo)記為客觀下線。
                        在一般情況下, 每個Sentinel會以每 10 秒一次的頻率向它已知的所有主服務(wù)器和從服務(wù)器發(fā)送 INFO 命令。 當(dāng)一個主服務(wù)器被Sentinel標(biāo)記為客觀下線時,Sentinel向下線主服務(wù)器的所有從服務(wù)器發(fā)送 INFO 命令的頻率會從 10 秒一次改為每秒一次。
                        當(dāng)沒有足夠數(shù)量的Sentinel同意主服務(wù)器已經(jīng)下線, 主服務(wù)器的客觀下線狀態(tài)就會被移除。 當(dāng)主服務(wù)器重新向Sentinel的 PING 命令返回有效回復(fù)時, 主服務(wù)器的主管下線狀態(tài)就會被移除。
             3、哨兵的配置主要就是修改sentinel.conf配置文件中的參數(shù),在Redis安裝目錄即可看到此配置文件

            # 哨兵sentinel實例運行的端口,默認(rèn)26379  
            port 26379
            # 哨兵sentinel的工作目錄
            dir ./
            # 是否開啟保護模式,默認(rèn)開啟。
            protected-mode:no
            # 是否設(shè)置為后臺啟動。
            daemonize:yes

            # 哨兵sentinel的日志文件
            logfile:./sentinel.log

            # 哨兵sentinel監(jiān)控的redis主節(jié)點的 
            ## ip:主機ip地址
            ## port:哨兵端口號
            ## master-name:可以自己命名的主節(jié)點名字(只能由字母A-z、數(shù)字0-9 、這三個字符".-_"組成。)
            ## quorum:當(dāng)這些quorum個數(shù)sentinel哨兵認(rèn)為master主節(jié)點失聯(lián) 那么這時 客觀上認(rèn)為主節(jié)點失聯(lián)了  
            # sentinel monitor <master-name> <ip> <redis-port> <quorum>  
            sentinel monitor mymaster 127.0.0.1 6379 2

            # 當(dāng)在Redis實例中開啟了requirepass,所有連接Redis實例的客戶端都要提供密碼。
            # sentinel auth-pass <master-name> <password>  
            sentinel auth-pass mymaster 123456  

            # 指定主節(jié)點應(yīng)答哨兵sentinel的最大時間間隔,超過這個時間,哨兵主觀上認(rèn)為主節(jié)點下線,默認(rèn)30秒  
            # sentinel down-after-milliseconds <master-name> <milliseconds>
            sentinel down-after-milliseconds mymaster 30000  

            # 指定了在發(fā)生failover主備切換時,最多可以有多少個slave同時對新的master進行同步。這個數(shù)字越小,完成failover所需的時間就越長;反之,但是如果這個數(shù)字越大,就意味著越多的slave因為replication而不可用??梢酝ㄟ^將這個值設(shè)為1,來保證每次只有一個slave,處于不能處理命令請求的狀態(tài)。
            # sentinel parallel-syncs <master-name> <numslaves>
            sentinel parallel-syncs mymaster 1  

            # 故障轉(zhuǎn)移的超時時間failover-timeout,默認(rèn)三分鐘,可以用在以下這些方面:
            ## 1. 同一個sentinel對同一個master兩次failover之間的間隔時間。  
            ## 2. 當(dāng)一個slave從一個錯誤的master那里同步數(shù)據(jù)時開始,直到slave被糾正為從正確的master那里同步數(shù)據(jù)時結(jié)束。  
            ## 3. 當(dāng)想要取消一個正在進行的failover時所需要的時間。
            ## 4.當(dāng)進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置為指向master,但是就不按parallel-syncs所配置的規(guī)則來同步數(shù)據(jù)了
            # sentinel failover-timeout <master-name> <milliseconds>  
            sentinel failover-timeout mymaster 180000

            # 當(dāng)sentinel有任何警告級別的事件發(fā)生時(比如說redis實例的主觀失效和客觀失效等等),將會去調(diào)用這個腳本。一個腳本的最大執(zhí)行時間為60s,如果超過這個時間,腳本將會被一個SIGKILL信號終止,之后重新執(zhí)行。
            # 對于腳本的運行結(jié)果有以下規(guī)則:  
            ## 1. 若腳本執(zhí)行后返回1,那么該腳本稍后將會被再次執(zhí)行,重復(fù)次數(shù)目前默認(rèn)為10。
            ## 2. 若腳本執(zhí)行后返回2,或者比2更高的一個返回值,腳本將不會重復(fù)執(zhí)行。  
            ## 3. 如果腳本在執(zhí)行過程中由于收到系統(tǒng)中斷信號被終止了,則同返回值為1時的行為相同。
            # sentinel notification-script <master-name> <script-path>  
            sentinel notification-script mymaster /var/redis/notify.sh

            # 這個腳本應(yīng)該是通用的,能被多次調(diào)用,不是針對性的。
            # sentinel client-reconfig-script <master-name> <script-path>
            sentinel client-reconfig-script mymaster /var/redis/

             4、搭建:編輯 sentinel.conf,配置文件修改如
            //端口默認(rèn)為26379。 port:26379 //關(guān)閉保護模式,可以外部訪問。 protected-mode:no //設(shè)置為后臺啟動。 daemonize:yes //日志文件。 logfile:./sentinel.log //指定主機IP地址和端口,并且指定當(dāng)有2臺哨兵認(rèn)為主機掛了,則對主機進行容災(zāi)切換。 sentinel monitor mymaster 192.168.231.130 6379 2 //當(dāng)在Redis實例中開啟了requirepass,這里就需要提供密碼。 sentinel auth-pass mymaster pwdtest@2019 //這里設(shè)置了主機多少秒無響應(yīng),則認(rèn)為掛了。 sentinel down-after-milliseconds mymaster 3000 //主備切換時,最多有多少個slave同時對新的master進行同步,這里設(shè)置為默認(rèn)的1。 sentinel parallel-syncs mymaster 1 //故障轉(zhuǎn)移的超時時間,這里設(shè)置為三分鐘。 sentinel failover-timeout mymaster 180000

             5、啟動:redis-sentinel ./entinel.conf(配置文件路徑)
            三、缺點:
            資源使用:每個 Sentinel 實例也會占用系統(tǒng)資源,包括 CPU 和內(nèi)存,尤其是在大型集群中。
            網(wǎng)絡(luò)依賴性:Sentinel 的效果很大程度上依賴于網(wǎng)絡(luò)的可靠性。網(wǎng)絡(luò)分區(qū)或是延遲高的情況可能會導(dǎo)致誤判或故障轉(zhuǎn)移延遲。
            冷啟動問題:如果所有 Redis 節(jié)點同時宕機,Sentinel 系統(tǒng)無法自動恢復(fù),需要手動干預(yù)來重新設(shè)置主節(jié)點和從節(jié)點。
            數(shù)據(jù)丟失風(fēng)險:在發(fā)生故障轉(zhuǎn)移時,如果還有未同步到從節(jié)點的數(shù)據(jù),那么這部分?jǐn)?shù)據(jù)可能會丟失。這是因為 Redis 使用異步復(fù)制。
            四、寫操作局限性
            單點瓶頸在一主多從架構(gòu)中,所有寫操作都必須由主節(jié)點處理。這意味著主節(jié)點的處理能力和資源(CPU、內(nèi)存、網(wǎng)絡(luò)帶寬)將直接限制系統(tǒng)的寫入吞吐量。
            數(shù)據(jù)同步延遲盡管從節(jié)點可以提供讀擴展性,它們依賴于與主節(jié)點的數(shù)據(jù)同步。高寫負(fù)載情況下,數(shù)據(jù)復(fù)制到從節(jié)點可能會經(jīng)歷延遲,影響了數(shù)據(jù)的最終一致性。
            故障風(fēng)險如主節(jié)點出現(xiàn)故障,整個系統(tǒng)的寫能力會喪失直到故障轉(zhuǎn)移完成并且一個從節(jié)點被提升為新的主節(jié)點。這個過程可能會導(dǎo)致服務(wù)中斷。


            posted on 2024-07-11 22:22 Benjamin 閱讀(74) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫

            丁香色欲久久久久久综合网| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲成色WWW久久网站| 国产精品九九久久免费视频 | 久久久WWW免费人成精品| 97久久精品午夜一区二区| 无码国内精品久久人妻| 国内精品人妻无码久久久影院导航 | 久久精品国产亚洲AV嫖农村妇女| 中文精品久久久久人妻不卡| 久久99精品久久久大学生| 久久亚洲AV无码精品色午夜| 国产亚洲精品久久久久秋霞| 日产精品久久久久久久性色| 精品久久久久久亚洲精品| 久久国产高潮流白浆免费观看| 久久久久亚洲AV无码网站| 精品国产乱码久久久久久郑州公司| 久久久久无码精品国产不卡| 国产成人综合久久综合| 91精品久久久久久无码| 久久精品国产精品亚洲艾草网美妙 | 久久久久久久久66精品片| 一本色道久久99一综合| 好属妞这里只有精品久久| 国产亚洲精午夜久久久久久| 一级a性色生活片久久无| 久久久一本精品99久久精品88| 久久91亚洲人成电影网站| 欧美日韩成人精品久久久免费看| 亚洲色欲久久久综合网| 国产精品久久久久影院色| 久久影院午夜理论片无码| 久久夜色精品国产噜噜亚洲AV| 国产A级毛片久久久精品毛片| 国产成人综合久久精品红| 久久国产精品久久久| 欧美一区二区久久精品| 国产精品嫩草影院久久| 婷婷伊人久久大香线蕉AV| 久久久久成人精品无码|