主從庫同步
哨兵機制
新客服系統

主從庫同步

06 | 数据同步:主从库如何实现数据一致?

主從庫架構

同步流程

(全量複製)

分散主庫負擔的方法

增量複製

repl_backlog_buffer

哨兵機制

07 | 哨兵机制:主库挂了,如何不间断服务?

08 | 哨兵集群:哨兵挂了,主从库还能切换吗?

哨兵

(眾所周知,人只要不想做簡報,就會開始發展其他東西以拖延時間,像是做動畫之類的)

哨兵們是怎麼聯繫的?

哨兵們是怎麼知道從庫的?

任務一:監測斷線

主觀斷線與客觀斷線

任務二:選主

(就跟麒麟一樣​,所以哨兵是一種麒麟)

從庫B

從庫C

從庫D

從庫E

網路已斷線

網路時斷時連

down-after-milliseconds 高於閥值

網路穩定

slave-priority: 1

slave_repl_offset: 200

網路穩定

slave-priority: 1

slave_repl_offset: 100

第一步:剔除斷線的人​,與易斷線的人

第二步:給剩下的人評分

誰是哨兵的領袖?誰可以執行易主?

當吹哨者

誰是哨兵的領袖?誰可以執行易主?

領袖選舉

領袖條件:

1. 拿到活著的人,半數以上的贊成票

2. 贊成票數大於等於文件配置的 quorum 值

任務三:通知

1. 讓從庫與新的主庫同步

2. 通知 client 端與新的主庫連線

Client 是怎麼知道主庫易主了?

訂閱點讚開啟小鈴鐺

訂閱哨兵

就如同主庫會死掉
哨兵也是會死掉的

一個哨兵死掉基本不會有影響

但如果死掉的哨兵超過文件配置的 quorum 值

領袖選舉會失敗

就會無法更換主庫

新客服系統

緣起

  • 舊客服系統修繕不易
  • 舊客服系統有太多手刻而不穩定的機制
  • 舊客服系統太依賴週邊的機器(Redis, Laravel, RabbitMQ)
  • 新的需求會需要加強跟 Laravel 之前的連結

聊天室機制

判斷在線的機制

  1. 一分鐘問 echo server 會員 socket 狀態
  2. 每五秒從會員收到 /heartbeat api
  3. 心跳在跳是會員存活證明的依據,但不是用來判斷會員在線
  4. 存活證明是用來判斷會員在線
  5. 心跳停止到死亡證明的開立可能有時間差,是避免短時間的誤判造成上下線的切換頻繁

Sentinel 機制

此 sentinel 非 redis sentinel

目的:在 echo server 掛掉或 socket 斷線後

減少資料庫的存取次數

動畫軟體

  • 免費
  • 不用登入
  • 簡單好上手
  • 專案檔可保存在本地端,隨意放
  • 可匯出 GIF, MP4

我花了三分鐘找到它owo​,好用

refactor-bf

By 球魚

refactor-bf

  • 507