聊聊 Undermoo -為 Memory Broker 設置備份
項目地址:https://github.com/doyoubi/undermoon
為 Memory Broker 設置 Replica
構建二進制文件:
$ cargo build
運行 replica
$ RUST_LOG=warp=info,undermoon=info,mem_broker=info UNDERMOON_ADDRESS=127.0.0.1:8899 UNDERMOON_META_FILENAME=metadata2 target/debug/mem_broker
運行 master Memory
$ RUST_LOG=warp=info,undermoon=info,mem_broker=info UNDERMOON_REPLICA_ADDRESSES=127.0.0.1:8899 UNDERMOON_SYNC_META_INTERVAL=3 target/debug/mem_broker
# Put some data to the master:
$ ./examples/mem-broker/init.sh
# Verify that on master:
curl localhost:7799/api/v3/metadata
...
# Verify tat on replica after 3 seconds:
curl localhost:7799/api/v3/metadata
...
# Replica should have the same data as master.
請注意,當 master 失敗時,整個系統將 不會 自動故障回退到 replica。你需要通過調用 coordinator 的 API 來實現。在此期間,服務器代理仍然能夠處理請求,但整個系統無法為服務器代理擴展和故障轉移,直到 coordinator 的 Memory Broker 端點切換到 replica。
假設您已經運行了一個 coordinator:
$ RUST_LOG=undermoon=info,coordinator=info target/debug/coordinator conf/coordinator.toml
然后,您可以通過連接到 Redis 協議中的 coordinator 并更改配置來將 master 更改為 replica。
# 6699 is the port of coordinators.
$ redis-cli -p 6699 CONFIG SET brokers 127.0.0.1:8899
主 memory broker 的最新 metadata 還沒有被復制到 replica memory broker,因此失敗了。我們不能恢復丟失的數據,但是我們可以通過從所有記錄的代理中收集 epoch 來增加元數據 epoch 以恢復服務。
所以我們也需要在重新配置 coordinator 后調用這個 API。
$ curl -XPUT localhost:7799/api/v3/epoch/recovery
現在系統應該能夠再次工作。