• <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)。
            隨筆 - 398, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

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

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


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

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

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

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

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

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

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

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

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

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

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

            # 這個(gè)腳本應(yīng)該是通用的,能被多次調(diào)用,不是針對(duì)性的。
            # 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)閉保護(hù)模式,可以外部訪問。 protected-mode:no //設(shè)置為后臺(tái)啟動(dòng)。 daemonize:yes //日志文件。 logfile:./sentinel.log //指定主機(jī)IP地址和端口,并且指定當(dāng)有2臺(tái)哨兵認(rèn)為主機(jī)掛了,則對(duì)主機(jī)進(jìn)行容災(zāi)切換。 sentinel monitor mymaster 192.168.231.130 6379 2 //當(dāng)在Redis實(shí)例中開啟了requirepass,這里就需要提供密碼。 sentinel auth-pass mymaster pwdtest@2019 //這里設(shè)置了主機(jī)多少秒無響應(yīng),則認(rèn)為掛了。 sentinel down-after-milliseconds mymaster 3000 //主備切換時(shí),最多有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行同步,這里設(shè)置為默認(rèn)的1。 sentinel parallel-syncs mymaster 1 //故障轉(zhuǎn)移的超時(shí)時(shí)間,這里設(shè)置為三分鐘。 sentinel failover-timeout mymaster 180000

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


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

            WWW婷婷AV久久久影片| 久久妇女高潮几次MBA| 久久精品9988| 国内精品久久久久久不卡影院| 欧美亚洲国产精品久久| 久久国产精品久久久| 中文精品99久久国产| 精品久久久久一区二区三区 | 久久精品国产乱子伦| 久久国产高潮流白浆免费观看| 亚洲精品无码久久毛片| 久久精品九九亚洲精品| 亚洲伊人久久成综合人影院| 国产香蕉97碰碰久久人人| 色偷偷偷久久伊人大杳蕉| 久久婷婷人人澡人人| 国产精品久久久福利| 色综合合久久天天综合绕视看| 久久久久亚洲精品日久生情| 久久综合亚洲鲁鲁五月天| 久久亚洲欧洲国产综合| 四虎影视久久久免费观看| 四虎影视久久久免费| 久久无码人妻一区二区三区午夜| 亚洲午夜久久久影院伊人| 99精品国产在热久久| 久久青青草原亚洲av无码| 亚洲欧美成人综合久久久| 国产福利电影一区二区三区,免费久久久久久久精 | 99久久做夜夜爱天天做精品| 欧美午夜精品久久久久免费视 | 99精品国产综合久久久久五月天| 久久久久亚洲AV成人片| 国产精品美女久久久久AV福利| 久久亚洲AV永久无码精品| 久久久国产乱子伦精品作者| 国产精品热久久毛片| 久久香蕉国产线看观看精品yw| 久久久久国产视频电影| 久久香蕉超碰97国产精品| 狠狠色丁香久久婷婷综合蜜芽五月 |