2020 It邦幫忙鐵人賽 系列文章
由於我比較熟悉 GCP / GKE 的服務,這篇的操作過程都會以 GCP 平台作為範例,不過操作過程大體上是跨平台通用的。
寫文章真的是體力活,覺得我的文章還有參考價值,請左邊幫我點讚按個喜歡,右上角幫我按個追縱,底下歡迎留言討論。給我一點繼續走下去的動力。
對我的文章有興趣,歡迎到我的網站上 https://chechiachang.github.io 閱讀其他技術文章,有任何謬誤也請各方大德直接聯繫我,感激不盡。

DON'T DO THIS
+----+         +----+
| M1 |---------| R1 |
| S1 |         | S2 |
+----+         +----+
Configuration: quorum = 1
這個設定下,如果 M1 掛了需要 failover,很有可能 S1 跟著機器一起掛了,S2 會沒有辦法取得多數來執行 failover,整個系統掛掉
       +----+
       | M1 |
       | S1 |
       +----+
          |
+----+    |    +----+
| R2 |----+----| R3 |
| S2 |         | S3 |
+----+         +----+
Configuration: quorum = 2
這是最基本的蛋又兼顧安全設定的設置
如果 M1 死了 S1 跟著機器故障,S2 與 S3 還可以取得多數,順利 failover 到 R2 或是 R3。
         +----+
         | M1 |
         | S1 | <- C1 (writes will be lost)
         +----+
            |
            /
            /
+------+    |    +----+
| [M2] |----+----| R3 |
| S2   |         | S3 |
+------+         +----+
為了避免這種情形,做額外的設定
當 master 發現自己再也無法 sync 到足夠的 slave,表示 master 可能被孤立,這時主動拒絕客戶端的寫入請求。客戶端被拒絕後,會再向 sentinel 取得有效的 master,重新執行寫入請求,確保資料寫到有效的 master 上。
            +----+         +----+
            | M1 |----+----| R1 |
            |    |    |    |    |
            +----+    |    +----+
                      |
         +------------+------------+
         |            |            |
         |            |            |
      +----+        +----+      +----+
      | C1 |        | C2 |      | C3 |
      | S1 |        | S2 |      | S3 |
      +----+        +----+      +----+
有些情形,redis 這端只有兩台可用機器,這種情形可以考慮把 sentinel 放在客戶端的機器上
            +----+         +----+
            | M1 |----+----| R1 |
            | S1 |    |    | S2 |
            +----+    |    +----+
                      |
               +------+-----+
               |            |  
               |            |
            +----+        +----+
            | C1 |        | C2 |
            | S3 |        | S4 |
            +----+        +----+
      Configuration: quorum = 3
            +----+         +----+
            | M1 |----+----| R1 |
            | S1 |    |    | S2 |
            +----+    |    +----+
                      |
                      |        
                      |        
                   +----+      
                   | C1 |      
                   | S3 |      
                   +----+      
      Configuration: quorum = 2