Codis是基於代理的高效能Redis叢集方案,使用Go語言進行開發,現在在在豌豆莢及其它公司內已經廣泛使用,當然也包括我們公司。
Codis與常見的Redis叢集方案對比。
image.png
在搭建的時候,個人覺得Redis Cluster搭建起來非常容易,但是redis-cluster沒有GUI管理面板,另外查詢資料發現redis-cluster的用戶端實現redis-cluster的協議比較麻煩。
而codis在使用的時候,就像正常串連redis用戶端一樣,不過codis有些命令不支援。動手吧
多看幾眼這個官方架構圖,有助於我們理解codis的架構,方便後面操作
image.png
過程
- 如果編譯安裝codis,安裝codis依賴的庫,使用yum安裝的golang庫預設在/usr/lib/golang目錄下,編譯起來也沒有很麻煩了
yum install golang -yyum install autoconf -y
- 下載源檔案,並且編譯
cd /usr/lib/golangmkdir -p src/github.com/CodisLabscd src/github.com/CodisLabs/git clone https://github.com/CodisLabs/codis.git -b release3.2cd codismake
然後會得到編譯的檔案,不出意外都可以編譯成功,記得安裝linux的開發套件
image.png
- 在運行命令之前,先看一下運行命令包含的內容
在config目錄下,會有運行幾個組件的設定檔,這些檔案都可以使用命令自動產生
codis-dashboard --default-config #產生codis-dashboard的預設設定檔codis-proxy --default-config #產生codis-proxy的預設設定檔
如果你對zookeeper,etcd等分布式協調組件比較熟悉,這兩個命令產生的設定檔中都可以指定使用zookeeper,或者etcd, jodis是基於codis的redis用戶端。
image.pngimage.png
相關的shell指令碼,看一下admin目錄中的內容,都可以理解的,修改下設定檔什麼的
- 運行叢集
./admin/codis-proxy-admin.sh start #dashboard提供REST API管理codis的叢集./admin/codis-proxy-admin.sh start #codis代理,使用的時候串連的是codis-proxy./admin/codis-fe-admin.sh start #fe,用來提供GUI管理codis的
到這一步的時候,我們已經可以訪問codis的管理介面了,訪問http://127.0.0.1:9090,這個時候codis的管理面板基本上是空的。
- 運行redis伺服器,就像常規的運行redis伺服器,可以設定slave等相關
./redis-server /etc/redis/redis_6379.conf # 記得設定redis綁定地址或者認證相關./redis-server /etc/redis/redis_6380.conf #這個設定為6379的slave
設定為redis的slave,指定slaveof 127.0.0.1:6379。
在codis-fe的管理面板中操作
首先添加codis-proxy
image.png
然後添加redis-group,可以添加不同的group,然後往group裡面添加伺服器,留意Data Center和Group,正常情況下在每一個組中添加的第一台伺服器都是master,往後都是slave,就算你添加的是另外的master節點,點擊綠色的修複按鈕,新加入的master也會變成slave的。
image.png
- 測試,留意上面的圖片,我添加了兩台codis-proxy,然後4台redis-server,我們可以做測試了。
image.png
- 串連到不同的codis-proxy上面取得的資料都是一樣的,這樣當我們配置多個proxy的時候,其中的proxy掛掉了,也是可以正常使用的,另外通過管理介面,我們可以動態添加redis-server。
注意點
叢集搭建起來,參考官方的文檔也不會很麻煩,完成一整套流程之後,提醒一些搭建的時候要注意的點。
- 管理面板上的,在管理codis-proxy那一部分,可以看到我們的命令執行情況,命令分配到那一台主機。
- 加入新的redis-server之後,不要忘記了遷移slot,如果再生產環境遷移slot要注意時機。
- redis-proxy可以配置不同的data-center,我想這個在用戶端使用工具的時候可以指定。
配置多個proxy,串連不同的proxy擷取的資料都是一致的,proxy代理的是多個redis-master,資料在後端的redis-server上也是分區儲存的。
如果配置了多個redis-master,也可以說redis-group,每一個master儲存的是部分的資料。
最後
紙上得來終覺淺,在公司內部一般有專門的營運來負責這部分的維護,保證高可用相關內容。另外真正搭建過cods之後,覺得codis比redis-cluster好用一些,除了搭建複雜一點,概念多了一點點,後續使用很簡單了。
參考
- 唯品會 Redis cluster 大規模生產實踐
- Codis教程