精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高可用Redis服務架構分析與搭建

數據庫 其他數據庫 Redis
基于內存的Redis應該是目前各種web開發業務中最為常用的key-value數據庫了,我們經常在業務中用其存儲用戶登陸態(Session存儲),加速一些熱數據的查詢(相比較mysql而言,速度有數量級的提升),做簡單的消息隊列(LPUSH和BRPOP)、訂閱發布(PUB/SUB)系統等等。

 

 

[[334833]]

基于內存的Redis應該是目前各種web開發業務中最為常用的key-value數據庫了,我們經常在業務中用其存儲用戶登陸態(Session存儲),加速一些熱數據的查詢(相比較mysql而言,速度有數量級的提升),做簡單的消息隊列(LPUSH和BRPOP)、訂閱發布(PUB/SUB)系統等等。規模比較大的互聯網公司,一般都會有專門的團隊,將Redis存儲以基礎服務的形式提供給各個業務調用。

不過任何一個基礎服務的提供方,都會被調用方問起的一個問題是:你的服務是否具有高可用性?最好不要因為你的服務經常出問題,導致我這邊的業務跟著遭殃。最近我所在的項目中也自己搭了一套小型的“高可用”Redis服務,在此做一下自己的總結和思考。

首先我們要定義一下對于Redis服務來說怎樣才算是高可用,即在各種出現異常的情況下,依然可以正常提供服務。或者寬松一些,出現異常的情況下,只經過很短暫的時間即可恢復正常服務。所謂異常,應該至少包含了以下幾種可能性:

【異常1】某個節點服務器的某個進程突然down掉(例如某開發手殘,把一臺服務器的redis-server進程kill了)

【異常2】某臺節點服務器down掉,相當于這個節點上所有進程都停了(例如某運維手殘,把一個服務器的電源拔了;例如一些老舊機器出現硬件故障)

【異常3】任意兩個節點服務器之間的通信中斷了(例如某臨時工手殘,把用于兩個機房通信的光纜挖斷了)

其實以上任意一種異常都是小概率事件,而做到高可用性的基本指導思想就是:多個小概率事件同時發生的概率可以忽略不計。只要我們設計的系統可以容忍短時間內的單點故障,即可實現高可用性。

對于搭建高可用Redis服務,網上已有了很多方案

例:Keepalived,Codis,Twemproxy,Redis Sentinel。其中Codis和Twemproxy主要是用于大規模的Redis集群中,也是在Redis官方發布Redis Sentinel之前twitter和豌豆莢提供的開源解決方案。我的業務中數據量并不大,所以搞集群服務反而是浪費機器了。最終在Keepalived和Redis Sentinel之間做了個選擇,選擇了官方的解決方案Redis Sentinel。

Redis Sentinel可以理解為一個監控Redis Server服務是否正常的進程,并且一旦檢測到不正常,可以自動地將備份(slave)Redis Server啟用,使得外部用戶對Redis服務內部出現的異常無感知。我們按照由簡至繁的步驟,搭建一個最小型的高可用的Redis服務。

方案1:單機版Redis Server,無Sentinel

高可用Redis服務架構分析與搭建

一般情況下,我們搭的個人網站,或者平時做開發時,會起一個單實例的Redis Server。調用方直接連接Redis服務即可,甚至Client和Redis本身就處于同一臺服務器上。這種搭配僅適合個人學習娛樂,畢竟這種配置總會有單點故障的問題無法解決。一旦Redis服務進程掛了,或者服務器1停機了,那么服務就不可用了。并且如果沒有配置Redis數據持久化的話,Redis內部已經存儲的數據也會丟失。

 

方案2:主從同步Redis Server,單實例Sentinel

高可用Redis服務架構分析與搭建

為了實現高可用,解決方案1中所述的單點故障問題,我們必須增加一個備份服務,即在兩臺服務器上分別各啟動一個Redis Server進程,一般情況下由master提供服務,slave只負責同步和備份。與此同時,在額外啟動一個Sentinel進程,監控兩個Redis Server實例的可用性,以便在master掛掉的時候,及時把slave提升到master的角色繼續提供服務,這樣就實現了Redis Server的高可用。這基于一個高可用服務設計的依據,即單點故障本身就是個小概率事件,而多個單點同時故障(即master和slave同時掛掉),可以認為是(基本)不可能發生的事件。

對于Redis服務的調用方來說,現在要連接的是Redis Sentinel服務,而不是Redis Server了。常見的調用過程是,client先連接Redis Sentinel并詢問目前Redis Server中哪個服務是master,哪些是slave,然后再去連接相應的Redis Server進行操作。當然目前的第三方庫一般都已經實現了這一調用過程,不再需要我們手動去實現(例如Nodejs的ioredis,PHP的predis,Golang的go-redis/redis,JAVA的jedis等)。

然而,我們實現了Redis Server服務的主從切換之后,又引入了一個新的問題,即Redis Sentinel本身也是個單點服務,一旦Sentinel進程掛了,那么客戶端就沒辦法鏈接Sentinel了。所以說,方案2的配置并無法實現高可用性。

方案3:主從同步Redis Server,雙實例Sentinel

高可用Redis服務架構分析與搭建

為了解決方案2的問題,我們把Redis Sentinel進程也額外啟動一份,兩個Sentinel進程同時為客戶端提供服務發現的功能。對于客戶端來說,它可以連接任何一個Redis Sentinel服務,來獲取當前Redis Server實例的基本信息。通常情況下,我們會在Client端配置多個Redis Sentinel的鏈接地址,Client一旦發現某個地址連接不上,會去試圖連接其他的Sentinel實例,這當然也不需要我們手動實現,各個開發語言中比較熱門的redis連接庫都幫我們實現了這個功能。我們預期是:即使其中一個Redis Sentinel掛掉了,還有另外一個Sentinel可以提供服務。

然而,愿景是美好的,現實卻是很殘酷的。如此架構下,依然無法實現Redis服務的高可用。方案3示意圖中,紅線部分是兩臺服務器之間的通信,而我們所設想的異常場景(【異常2】)是,某臺服務器整體down機,不妨假設服務器1停機,此時,只剩下服務器2上面的Redis Sentinel和slave Redis Server進程。這時,Sentinel其實是不會將僅剩的slave切換成master繼續服務的,也就導致Redis服務不可用,因為Redis的設定是只有當超過50%的Sentinel進程可以連通并投票選取新的master時,才會真正發生主從切換。本例中兩個Sentinel只有一個可以連通,等于50%并不在可以主從切換的場景中。

你可能會問,為什么Redis要有這個50%的設定?假設我們允許小于等于50%的Sentinel連通的場景下也可以進行主從切換。試想一下【異常3】,即服務器1和服務器2之間的網絡中斷,但是服務器本身是可以運行的。如下圖所示:

高可用Redis服務架構分析與搭建

實際上對于服務器2來說,服務器1直接down掉和服務器1網絡連不通是一樣的效果,反正都是突然就無法進行任何通信了。假設網絡中斷時我們允許服務器2的Sentinel把slave切換為master,結果就是你現在擁有了兩個可以對外提供服務的Redis Server。Client做任何的增刪改操作,有可能落在服務器1的Redis上,也有可能落在服務器2的Redis上(取決于Client到底連通的是哪個Sentinel),造成數據混亂。即使后面服務器1和服務器2之間的網絡又恢復了,那我們也無法把數據統一了(兩份不一樣的數據,到底該信任誰呢?),數據一致性完全被破壞。

 

方案4:主從同步Redis Server,三實例Sentinel

高可用Redis服務架構分析與搭建

鑒于方案3并沒有辦法做到高可用,我們最終的版本就是上圖所示的方案4了。實際上這就是我們最終搭建的架構。我們引入了服務器3,并且在3上面又搭建起一個Redis Sentinel進程,現在由三個Sentinel進程來管理兩個Redis Server實例。這種場景下,不管是單一進程故障、還是單個機器故障、還是某兩個機器網絡通信故障,都可以繼續對外提供Redis服務。

實際上,如果你的機器比較空閑,當然也可以把服務器3上面也開啟一個Redis Server,形成1 master + 2 slave的架構,每個數據都有兩個備份,可用性會提升一些。當然也并不是slave越多越好,畢竟主從同步也是需要時間成本的。

在方案4中,一旦服務器1和其他服務器的通信完全中斷,那么服務器2和3會將slave切換為master。對于客戶端來說,在這么一瞬間會有2個master提供服務,并且一旦網絡恢復了,那么所有在中斷期間落在服務器1上的新數據都會丟失。如果想要部分解決這個問題,可以配置Redis Server進程,讓其在檢測到自己網絡有問題的時候,立即停止服務,避免在網絡故障期間還有新數據進來(可以參考Redis的min-slaves-to-write和min-slaves-max-lag這兩個配置項)。

至此,我們就用3臺機器搭建了一個高可用的Redis服務。其實網上還有更加節省機器的辦法,就是把一個Sentinel進程放在Client機器上,而不是服務提供方的機器上。只不過在公司里面,一般服務的提供方和調用方并不來自同一個團隊。兩個團隊共同操作同一個機器,很容易因為溝通問題導致一些誤操作,所以出于這種人為因素的考慮,我們還是采用了方案4的架構。并且由于服務器3上面只跑了一個Sentinel進程,對服務器資源消耗并不多,還可以用服務器3來跑一些其他的服務。

 

易用性:像使用單機版Redis一樣使用Redis Sentinel

作為服務的提供方,我們總是會講到用戶體驗問題。在上述方案當中始終有一個讓Client端用的不是那么舒服的地方。對于單機版Redis,Client端直接連接Redis Server,我們只需要給一個ip和port,Client就可以使用我們的服務了。而改造成Sentinel模式之后,Client不得不采用一些支持Sentinel模式的外部依賴包,并且還要修改自己的Redis連接配置,這對于“矯情”的用戶來講顯然是不能接收的。有沒有辦法還是像在使用單機版的Redis那樣,只給Client一個固定的ip和port就可以提供服務呢?

高可用Redis服務架構分析與搭建

答案當然是肯定的。這可能就要引入虛擬IP(Virtual IP,VIP),如上圖所示。我們可以把虛擬IP指向Redis Server master所在的服務器,在發生Redis主從切換的時候,會觸發一個回調腳本,回調腳本中將VIP切換至slave所在的服務器。這樣對于Client端來說,他仿佛在使用的依然是一個單機版的高可用Redis服務。

 

結語

搭建任何一個服務,做到“能用”其實是非常簡單的,就像我們運行一個單機版的Redis。不過一旦要做到“高可用”,事情就會變得復雜起來。業務中使用了額外的兩臺服務器,3個Sentinel進程+1個Slave進程,只是為了保證在那小概率的事故中依然做到服務可用。在實際業務中我們還啟用了supervisor做進程監控,一旦進程意外退出,會自動嘗試重新啟動。

 

 

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2019-10-31 09:03:12

Java集群微服務

2018-04-13 09:21:07

高可用Redis架構

2019-05-27 15:13:31

Redis服務高可用

2023-11-13 09:03:10

2017-09-13 13:42:09

微服務緩存架構

2021-03-09 20:52:01

架構無狀態服務

2024-07-25 08:39:48

2022-05-16 13:46:38

Redis高可用Sentinel

2022-06-21 07:51:06

Redis高可用哨兵進程

2025-07-31 04:00:00

2015-12-16 11:27:52

Google高可用架構

2018-05-15 10:54:33

NginxRedisEhcache

2022-06-23 11:42:22

MySQL數據庫

2022-05-17 11:06:44

數據庫MySQL系統

2025-09-26 02:55:00

Redis系統緩存架構

2017-12-28 09:41:29

微服務網關容錯

2023-05-30 07:27:45

高可用架構流量

2018-09-20 09:33:38

單機QPSRedis

2014-10-09 10:04:23

CentOS集群

2023-01-05 07:52:36

高可用架構消息隊列
點贊
收藏

51CTO技術棧公眾號

天天色综合av| 日韩精品123区| 成人免费看视频网站| 久久蜜桃香蕉精品一区二区三区| 国产精品69久久| 自拍偷拍第9页| silk一区二区三区精品视频| 一本色道久久综合狠狠躁的推荐| 亚洲欧洲精品一区二区| 亚洲第一视频在线播放| 丝袜亚洲另类丝袜在线| 久久精品电影网| 最新版天堂资源在线| 亚洲a∨精品一区二区三区导航| **性色生活片久久毛片| 久久精品ww人人做人人爽| 中文字幕在线视频免费| 在线观看一区| 久久av中文字幕| 法国伦理少妇愉情| 91在线一区| 欧美三区在线观看| a级黄色一级片| 黄色精品免费看| 久久精品夜夜夜夜久久| yellow视频在线观看一区二区| 亚洲精品久久久久久久蜜桃| 欧美午夜一区| 久久视频在线播放| 国产ts丝袜人妖系列视频| 欧洲一区在线| 欧美日韩一级黄| 欧美日韩中文在线视频| 欧美性爽视频| 中文字幕一区视频| 日韩欧美99| 午夜在线视频免费| 国产·精品毛片| 91香蕉电影院| 这里只有精品9| 日韩精品欧美精品| 日本三级久久久| 亚洲一区欧美在线| 在线精品亚洲| 欧美日韩第一视频| 欧美风情第一页| 日韩美女一区二区三区在线观看| 亚洲美女黄色片| 日本少妇毛茸茸| 岛国精品一区| 精品国产免费人成在线观看| 中文字幕在线视频一区二区| 综合欧美精品| 宅男在线国产精品| www.com污| 亚洲福利影视| 欧美放荡的少妇| 看看黄色一级片| 欧洲美女精品免费观看视频 | 亚洲午夜精品久久久久久浪潮| 婷婷国产在线| 久久女同性恋中文字幕| 欧美亚洲国产免费| av网站大全在线观看| 欧美国产禁国产网站cc| 午夜一区二区三区| 香蕉视频在线免费看| 中文字幕色av一区二区三区| 中文字幕中文字幕99| 国产写真视频在线观看| 亚洲精品国产精品乱码不99| 国产天堂视频在线观看| 黄色18在线观看| 日韩欧美高清视频| 九九九在线观看视频| av亚洲一区二区三区| 欧美日韩精品一区二区三区 | 男女视频免费看| 免费日韩av片| 国产热re99久久6国产精品| 国产精品欧美亚洲| 成人免费看黄yyy456| 精品国产乱码久久久久久久软件 | 久久先锋影音av| 三区精品视频| 尤物视频在线看| 天天影视色香欲综合网老头| 日本激情视频在线| 日韩精品一区二区三区中文字幕 | 高潮毛片无遮挡| 日韩欧美三级| 欧美大片免费观看| 日本天堂网在线| 韩国av一区二区三区| 国产精品一区二区不卡视频| 国产在线网站| 亚洲人成网站在线| 国产xxxxx在线观看| 亚洲伊人精品酒店| 亚洲精品久久久一区二区三区 | 日韩一区欧美| 久久久久亚洲精品成人网小说| 中文字幕在线观看视频免费| 国产毛片精品国产一区二区三区| 鲁丝片一区二区三区| 香蕉视频在线播放| 午夜精品久久久久久不卡8050| 高清一区二区视频| 精品嫩草影院| 深夜福利一区二区| 久久精品视频7| 国产一区二区精品久久99| 欧美精品七区| 黄网av在线| 欧美日韩高清影院| av中文字幕免费观看| 欧美午夜不卡| 成人福利免费观看| 精品久久久久一区二区三区| 一区二区理论电影在线观看| 国产aaaaa毛片| 亚洲免费成人av在线| 色综合老司机第九色激情| 成年人晚上看的视频| 成人av免费观看| 欧洲xxxxx| 粉嫩91精品久久久久久久99蜜桃 | 超碰在线最新| 精品视频1区2区| 午夜一区二区三区免费| 欧美二区不卡| 91视频国产一区| 在线毛片网站| 欧美日韩中文字幕一区| 91精品人妻一区二区三区| 99热免费精品| 国产精品三区www17con| 超碰公开在线| 51精品视频一区二区三区| 国精产品视频一二二区| 久久中文欧美| 久久亚洲一区二区| 在线观看特色大片免费视频| 亚洲国产精品久久| 日本一区二区不卡在线| 成人avav在线| 阿v天堂2018| 成人偷拍自拍| 欧美激情一区二区三区在线视频观看| 国产高潮在线观看| 亚洲精品国产精华液| 国产成人av片| 在线播放一区| 加勒比在线一区二区三区观看| wwwww亚洲| 日韩av在线网址| 在线观看免费国产视频| 91色porny在线视频| 无码无遮挡又大又爽又黄的视频| 亚洲国产欧美日韩在线观看第一区 | 国产精品区一区二区三含羞草| 男女在线视频| 亚洲精品按摩视频| 久久久精品视频网站| 国产视频视频一区| 国产精品v日韩精品v在线观看| 97精品国产| 97se亚洲综合| a天堂资源在线| 国产视频欧美视频| 亚洲 小说区 图片区| 亚洲欧洲另类国产综合| 韩国三级在线播放| 亚洲精品欧美| 日本不卡在线播放| 日韩成人综合网| 欧美激情亚洲自拍| 日夜干在线视频| 欧美日韩免费一区二区三区| www日韩在线| 不卡的av网站| 国产wwwxx| 狠狠入ady亚洲精品| 免费看成人午夜电影| 成人四虎影院| 欧美激情在线播放| bbbbbbbbbbb在线视频| 日韩一区二区不卡| 亚洲另类在线观看| 亚洲视频 欧洲视频| 一区二区三区少妇| 久久99九九99精品| 波多野结衣综合网| 日本a口亚洲| 国产伦精品一区二区三区高清版| 成人视屏在线观看| 欧美日韩第一页| bbbbbbbbbbb在线视频| 精品国产91亚洲一区二区三区婷婷| 精品免费囯产一区二区三区| 亚洲三级在线免费观看| 熟女少妇一区二区三区| 国产一区二区三区久久久| 国产精品50p| 一区二区三区国产精华| 欧美日韩精品免费观看视一区二区| www.久久久.com| 欧美在线免费视频| 欧美卡一卡二| 中文字幕综合在线| 日韩亚洲视频在线观看| 91精品国产入口在线| 中文字幕在线观看视频免费| 五月婷婷激情综合网| 粉嫩av性色av蜜臀av网站| 国产三级精品三级| 99re这里只有| 国产高清亚洲一区| 91欧美视频在线| 免费日韩av片| 日韩在线综合网| 国产字幕视频一区二区| 中文字幕欧美日韩一区二区三区| 精品在线91| 精品日韩欧美| 成人午夜三级| ts人妖另类在线| 日韩欧美高清一区二区三区| 成人国产精品av| 日本精品另类| 国产精品福利网| 日韩免费电影| 97成人精品视频在线观看| 黄色污污视频在线观看| 欧美高清videos高潮hd| www免费在线观看| 久久精品中文字幕一区| 亚洲欧美视频一区二区| 在线性视频日韩欧美| 国产一二三区在线视频| 亚洲免费影视第一页| 亚洲av片在线观看| 亚洲激情视频在线播放| 国精产品一品二品国精品69xx| 日韩免费成人网| 精品人妻一区二区三区日产乱码 | 国产成+人+综合+亚洲欧洲 | 欧美网站大全在线观看| 日韩精品在线一区二区三区| 色老汉一区二区三区| 日批视频免费在线观看| 日本高清不卡在线观看| 看黄色一级大片| 欧美性受xxxx黑人xyx性爽| 久久国产乱子伦精品| 欧美亚男人的天堂| 中文字幕一区二区三区人妻四季 | 亚洲国产精品久久久久久6q| 日韩欧美一级二级| 欧美一级特黄aaaaaa大片在线观看| 日韩精品一区二区三区在线观看 | 97超碰欧美中文字幕| 成人免费无码大片a毛片| 91麻豆精品视频| 国产91丝袜美女在线播放| 国产精品卡一卡二| 极品颜值美女露脸啪啪| 亚洲午夜免费电影| 国产精品久免费的黄网站| 色婷婷精品久久二区二区蜜臂av| 夜夜爽妓女8888视频免费观看| 欧美日韩免费观看一区三区| 99久久精品国产一区色| 亚洲精品在线网站| 黄视频在线观看免费| 色天天综合狠狠色| 欧美理论片在线播放| 清纯唯美亚洲激情| 日韩免费大片| 97视频资源在线观看| 九九视频精品全部免费播放| 亚洲欧美精品在线观看| 欧美1区2区视频| 日韩免费毛片视频| 激情国产一区二区| 麻豆国产精品一区| 最新欧美精品一区二区三区| 日本三级午夜理伦三级三| 欧洲精品一区二区| 亚洲国产999| 亚洲色图综合网| 日韩伦理电影网站| 国产精品视频1区| 粉嫩的18在线观看极品精品| 日本精品一区二区三区不卡无字幕| 亚洲激情五月| 无码人妻丰满熟妇区五十路百度| 国产精品一区二区x88av| 自拍偷拍中文字幕| 夜夜嗨av一区二区三区网页| 国产成人精品777777| 欧美一区二区三区四区在线观看| 肉丝一区二区| 欧美美最猛性xxxxxx| 四虎成人在线| 精品网站在线看| 中文在线日韩| 日本熟妇人妻中出| jlzzjlzz亚洲日本少妇| 91高清免费观看| 欧美综合欧美视频| 五月婷在线视频| 久久艳片www.17c.com| 偷拍中文亚洲欧美动漫| 国产精品一区二区欧美| 久久高清免费| 国产精品天天av精麻传媒| 成人一级黄色片| 亚洲国产精品免费在线观看| 欧美这里有精品| 牛牛影视精品影视| 97视频国产在线| 亚洲天堂av资源在线观看| 亚洲欧洲另类精品久久综合| 天堂影院一区二区| 丰满少妇一区二区三区| 午夜精品一区二区三区免费视频| av高清一区二区| 日韩在线中文视频| 国精产品一区一区三区四川| 九九九九精品| 日韩视频一区| 无码av免费精品一区二区三区| 亚洲免费电影在线| 国产一区二区三区视频免费观看| 国产一级揄自揄精品视频| 欧美××××黑人××性爽| 欧美极品一区二区| 久久久久国产精品一区二区| a视频免费观看| 婷婷一区二区三区| 无码精品视频一区二区三区| 高清亚洲成在人网站天堂| 18国产精品| 无码av天堂一区二区三区| 成人高清免费观看| 成年免费在线观看| 日韩成人中文电影| 在线男人天堂| 精品欧美一区二区三区久久久| 在线亚洲自拍| 欧美多人猛交狂配| 在线观看一区二区精品视频| 成人免费一区二区三区视频网站| 国产成人亚洲综合| 欧美限制电影| 日本一二区免费| 亚洲激情在线激情| 国产77777| 国产999精品| 欧美手机在线| 亚洲精品在线网址| 一区二区三区欧美视频| 黄色一级大片在线免费看国产一 | 中文字幕精品国产| 色综合一区二区日本韩国亚洲 | 国产精品视区| 88久久精品无码一区二区毛片| 欧美这里有精品| av片在线观看| 精品乱子伦一区二区三区| 性一交一乱一区二区洋洋av| 日本一二三不卡视频| 91精品国产免费| 3344国产永久在线观看视频| 欧美日韩在线高清| 久久99久久久欧美国产| 久久免费视频6| 亚洲视频日韩精品| 精品精品视频| 欧美成人免费高清视频| 中文字幕亚洲成人| 日韩中文字幕影院| 国产精品久久久久aaaa九色| 欧美激情在线| caopeng视频| 欧美一级二级三级蜜桃| 在线天堂新版最新版在线8| 一本久久a久久精品vr综合 | 久久免费手机视频| 精品国产自在久精品国产| 成人福利视频| 国产a级黄色大片| 国产亚洲欧美日韩俺去了| 国产黄a三级三级三级| 国产精品第一第二| 伊人久久综合| 美国一级片在线观看| 亚洲欧美日韩网| www.亚洲一二|