<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Redis高可用有兩種模式:哨兵模式
和叢集模式
,本文基於哨兵模式搭建一主兩從三哨兵
Redis高可用服務。
一主兩從三哨兵
Redis服務,基本能夠滿足中小型專案的高可用要求,使用Supervisor監控並管理Redis範例。通過本文將完成如下目標:
哨兵模式服務相比於單機版服務更加可靠,適合讀寫分離、資料量不是很大、要求可靠穩定性的場景。
通過Spring框架對哨兵模式進行連線,完成生產環境的常見操作。
埠規劃是完成本方案的第一步。
單機模擬是指在單臺物理機或者虛擬機器器上模擬操作,最大化還原本方案中間過程,適用於學習或者開發階段使用。
為了簡化操作,Redis服務做如下約定:資料不持久化到磁碟;服務範例以前臺程序方式執行;節點的組態檔以預設組態檔為模版;無密碼驗證。
服務在第一次啟動時明確知道第幾個節點是master節點,當服務在長期執行並行生主從切換時,無法顯示知道第幾個節點是master節點,需要通過命令列間接查詢。
節點 | 主機 | 埠 | 角色 | 額外設定 |
---|---|---|---|---|
node01 | 127.0.0.1 | 6380 | 第一次啟動時作為master服務 | |
node02 | 127.0.0.1 | 6381 | 第一次啟動時作為slave服務 | replicaof 127.0.0.1 6380 |
node03 | 127.0.0.1 | 6382 | 第一次啟動時作為slave服務 | replicaof 127.0.0.1 6380 |
額外設定指第一次啟動Redis服務範例時,節點組態檔中新增設定。
哨兵服務節點之間沒有主從的區別,所有節點處於平等地位。當主服務異常時,哨兵服務之間會喚醒投票策略,從Redis範例從節點選擇主服務的候選人。
節點 | 主機 | 埠 | 額外設定 |
---|---|---|---|
node01 | 127.0.0.1 | 26380 | sentinel monitor mymaster 127.0.0.1 6380 2 |
node02 | 127.0.0.1 | 26381 | sentinel monitor mymaster 127.0.0.1 6380 2 |
node03 | 127.0.0.1 | 26382 | sentinel monitor mymaster 127.0.0.1 6380 2 |
節點的初始組態檔以預設組態檔為模版。
node01、node02初始化組態檔之後,顯示指明節點間的主從關係,增加如下設定:
replicaof 127.0.0.1 6380
節點的初始組態檔以預設組態檔為模版。
node01、node02、node03初始化組態檔後,增加如下設定:
sentinel monitor mymaster 127.0.0.1 6381 2
測試或者學習時,建議採用前臺程序管理服務,便於模擬單點故障、檢視紀錄檔觀察主從切換。
生產條件下建議使用Supervisor管理服務,不僅易於管理而且能夠實現服務異常終止後自動重啟。高可用場景下使用的是三臺物理機。
/usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis80.conf --port 6380 --save '' --daemonize no /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis81.conf --port 6381 --save '' --daemonize no /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis82.conf --port 6382 --save '' --daemonize no
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel280.conf --port 26380 --daemonize no /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel281.conf --port 26381 --daemonize no /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel282.conf --port 26382 --daemonize no
使用者端實現是指基於SpringBoot的整合分為兩步實現:一是完成作為基礎的整合;二是結合生產需要補充新特性。
基礎整合的內容是以Java使用者端連線高可用哨兵模式Redis服務,實現單節點故障服務正常執行的要求。
全域性組態檔新增的設定資訊有:master
引數為哨兵服務名,此處為預設值;nodes
引數為哨兵服務列表(不是Redis範例服務列表);database
引數為資料庫。
spring: redis: database: 0 sentinel: nodes: 192.168.181.171:26380,192.168.181.171:26381,192.168.181.171:26382 master: mymaster
整合進SpringBoot體系,最核心的是建立LettuceConnectionFactory
連線工廠,通過Redis連線工廠,能夠順利繼承進Spring體系下其他框架。
@Configuration public class RedisSentinelConfig { @Autowired private RedisProperties redisProperties; @Bean public RedisConnectionFactory lettuceConnectionFactory() { RedisProperties.Sentinel sentinel = redisProperties.getSentinel(); HashSet<String> nodes = new HashSet<>(sentinel.getNodes()); String master = sentinel.getMaster(); RedisSentinelConfiguration config = new RedisSentinelConfiguration(master, nodes); config.setDatabase(redisProperties.getDatabase()); return new LettuceConnectionFactory(config); } }
基礎整合僅僅是實現了高可用Redis服務的流程,生產環境下仍需要增加其他設定:修改自定義連線資料庫序號;授權連線;連線池設定;讀寫分離。
在高可用前提下,衍生出讀寫分離的特性,主庫完成寫請求;從庫完成讀請求(從庫不允許寫)。
@Bean public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() { // 設定讀寫分離 return builder -> builder.readFrom(ReadFrom.REPLICA); }
到此這篇關於淺談Redis哨兵模式高可用解決方案的文章就介紹到這了,更多相關Redis哨兵模式高可用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45