豌豆莢redis分佈式集群?

Tags: 豌豆莢, 集群,

Codis 是一個分佈式 Redis 解決方案, 對於上層的應用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有明顯的區別 (不支持的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發, 不停機的數據遷移等工作, 所有後邊的一切事情, 對於前面的客戶端來說是透明的, 可以簡單的認為後邊連接的是一個內存無限大的 Redis 服務

工具/原料

Codis

Redis

方法/步驟

Codis 由四部分組成:

Codis Proxy (codis-proxy)

Codis Manager (codis-config)

Codis Redis (codis-server)

ZooKeeper

codis-proxy 是客戶端連接的 Redis 代理服務, codis-proxy 本身實現了 Redis 協議, 表現得和一個原生的 Redis 沒什麼區別 (就像 Twemproxy), 對於一個業務來說, 可以部署多個 codis-proxy, codis-proxy 本身是無狀態的.

codis-config 是 Codis 的管理工具, 支持包括, 添加/刪除 Redis 節點, 添加/刪除 Proxy 節點, 發起數據遷移等操作. codis-config 本身還自帶了一個 http server, 會啟動一個 dashboard, 用戶可以直接在瀏覽器上觀察 Codis 集群的運行狀態.

codis-server 是 Codis 項目維護的一個 Redis 分支, 基於 2.8.21 開發, 加入了 slot 的支持和原子的數據遷移指令. Codis 上層的 codis-proxy 和 codis-config 只能和這個版本的 Redis 交互才能正常運行.

Codis 依賴 ZooKeeper 來存放數據路由表和 codis-proxy 節點的元信息, codis-config 發起的命令都會通過 ZooKeeper 同步到各個存活的 codis-proxy.

Codis 支持按照 Namespace 區分不同的產品, 擁有不同的 product name 的產品, 各項配置都不會衝突.

Build codis-proxy & codis-config

安裝go參考這裡, 根據教程正確設置$GOPATH環境變量。注意$GOPATH是本機所有go項目(包括項目依賴的第三方庫)的所在目錄,而非單純codis的所在目錄。

豌豆莢redis分佈式集群

建議只通過go get命令來下載codis,除非你非常熟悉go語言的目錄引用形式從而不會導致代碼放錯地方。該命令會下載master分支的最新版,我們會確保master分支的穩定。

執行全部指令後,會在 bin 文件夾生成 codis-config, codis-proxy 兩個可執行文件, (另外, bin/assets 文件夾是 codis-config 的 dashboard http 服務需要的前端資源, 需要和 codis-config 放置在同一文件夾下)

豌豆莢redis分佈式集群

豌豆莢redis分佈式集群

部署

配置文件

codis-config 和 codis-proxy 在不加 -c 參數的時候, 默認會讀取當前目錄下的 config.ini 文件

見config.ini中的註釋來根據需求修改

流程

0. 啟動 dashboard, 執行 bin/codis-config dashboard, 該命令會啟動 dashboard

1. 初始化 slots , 執行 bin/codis-config slot init,該命令會在zookeeper上創建slot相關信息

2. 啟動 Codis Redis , 和官方的Redis Server參數一樣

3. 添加 Redis Server Group , 每一個 Server Group 作為一個 Redis 服務器組存在, 只允許有一個 master, 可以有多個 slave, group id 僅支持大於等於1的整數

豌豆莢redis分佈式集群

如: 添加兩個 server group, 每個 group 有兩個 redis 實例,group的id分別為1和2, redis實例為一主一從。

添加一個group,group的id為1, 並添加一個redis master到該group

豌豆莢redis分佈式集群

添加一個redis slave到該group

豌豆莢redis分佈式集群

類似的,再添加group,group的id為2

豌豆莢redis分佈式集群

4. 設置 server group 服務的 slot 範圍 Codis 採用 Pre-sharding 的技術來實現數據的分片, 默認分成 1024 個 slots (0-1023), 對於每個key來說, 通過以下公式確定所屬的 Slot Id : SlotId = crc32(key) % 1024 每一個 slot 都會有一個且必須有一個特定的 server group id 來表示這個 slot 的數據由哪個 server group 來提供.

豌豆莢redis分佈式集群

如:

設置編號為[0, 511]的 slot 由 server group 1 提供服務, 編號 [512, 1023] 的 slot 由 server group 2 提供服務

豌豆莢redis分佈式集群

5. 啟動 codis-proxy

豌豆莢redis分佈式集群

剛啟動的 codis-proxy 默認是處於 offline狀態的, 然後設置 proxy 為 online 狀態, 只有處於 online 狀態的 proxy 才會對外提供服務

豌豆莢redis分佈式集群

相關問題答案