在團800運維工做總結之codis使用

Codis功能特色


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


須要說明的是codis我只是進行了線下測試,並未經過最終的討論進行線上使用,具體緣由是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 集羣的運行狀態.ide

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 的產品, 各項配置都不會衝突.

Codis還有一大特色因爲是用go語言寫的,proxy端支持多線程,表明能夠充分利用服務器的cpu資源

 

 

使用機器

192.168.10.169   用途: proxy redis

192.168.10.170   用途: redis

 

架構說明

Proxy代理層: 192.168.10.169:19000

Codis實例層:

Group組至關於codis的分片機制

分爲2groupgroup_1group_2

spacer.gif 

group_1中的機器  ip:192.168.10.169:6379  角色:master

                 ip:192.168.10.170:6379  角色:slave

 

group_2中的機器  ip:192.168.10.169:6380  角色:master

                 ip:192.168.10.170:6380  角色:slvae

 

Codis-ha 負責group中的從檢測主掛掉後自動提高

 

 

 

功能測試腳本

1.連接codisproxy代理,對codis集羣進行讀操做

spacer.gif 

 

2.連接codisproxy代理,對codis集羣進行寫操做

spacer.gif 

 

功能測試點

 

1.斷掉group_1中的master節點                                  

讀是否出現異常:    否                

寫是否出現異常:    

 

2.同時斷掉group_1group_2中的master

讀是否出現異常:    

寫是否出現異常:    

 

3.同時斷掉group_1group_2中的slave

讀是否出現異常:    

寫是否出現異常:    

 

4.新增一組,把slot槽,從100-200的槽位遷移到新增組中

讀是否出現異常:    

寫是否出現異常:    

 

5.同時斷掉group_1中的masterslave節點

讀是否出現異常出現一部分訪問報錯

寫是否出現異常

 

 

目前手動操做的地方(如下操做能夠編寫腳本作成自動操做)

1.group_1中的master斷掉

操做步驟

(1).須要先從group_1中把掛掉的master節點刪除掉

命令:

codis-config -c ../conf/config.ini server remove 1 192.168.10.170:6379

(2)把之前的master從新加進來換成slave節點

命令:

codis-config -c ../conf/config.ini server add 1 192.168.10.170:6379 slave

(3).若是group_1中有>=2slave時,master斷掉後,沒有提高爲masterslave仍是會同步斷掉的master節點

(1).依次把slavegroup_1中刪除

(2).依次把slave節點加入group_1

 

2.group_1中的slave斷掉,以後恢復後

(1).人爲從新加入到group_1

命令:

codis-config -c ../conf/config.ini server add 1 192.168.10.170:6379 slave

 

 

 

 

啓動一組codis集羣的順序及解釋

 

一、啓動codis web頁面 在zookeeper中註冊codis組的節點

nohup ./bin/codis-config -c config.ini -L ./log/dashboard.log dashboard --addr=:18087 --http-log=./log/requests.log &>/dev/null

 

2.初始化slot

$CODIS_HOME/bin/codis-config -c $CODIS_HOME/conf/config.ini slot init -f

 

3.添加codis

codis-config -c /usr/local/codis/conf/config.ini server add-group 1

 

4.添加機器到codis組中

codis-config -c /usr/local/codis/conf/config.ini server add 2 192.168.10.170:6380 master

 

5.分槽

./bin/codis-config -c /etc/codis/config_10.ini slot range-set 0 300 1 online

 

6.生成一個proxy,把codis_proxy_1這個proxy名稱註冊到zookeeper中,並設置爲offline狀態

/usr/local/codis/bin/codis-config -c /usr/local/codis/conf/config.ini proxy offline codis_proxy_1

 

7.啓動proxy,代理端口爲19000 http端口爲11000

nohup /usr/local/codis/bin/codis-proxy --log-level info -c /usr/local/codis/conf/config.ini -L /usr/local/codis/logs/proxy.log  --cpu=8 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

 

8.proxy idcodis_proxy_1proxy設置爲online狀態,可讓客戶端訪問

/usr/local/codis/bin/codis-config -c /usr/local/codis/conf/config.ini proxy online codis_proxy_1

 

9.啓動codis-ha,用來作group中從自動提高爲master用,並針對哪一個codis組名

nohup ./codis-ha --codis-config=127.0.0.1:18087 --productName=testgroup1 &

 

 

 

 

 

 

 

 

 

Codis命令總結

列出codis集羣中的機器當前狀態,並返回數組

Codis-config -c /usr/local/codis/conf/config.ini server list

spacer.gif 

 

添加redis實例到codis組中

Codis-config -c /usr/local/codis/conf/config.ini server add 1 192.168.10.169:6379 slave

 

刪除redis實例從codis組中

Codis-config -c /usr/local/codis/conf/config.ini server remove 1 192.168.10.169:6379

 

添加codis

Codis-config -c /usr/local/codis/conf/config.ini server add-group 1

 

刪除codis

Codis-config -c /usr/local/codis/conf/config.ini server remove-group 1

 

初始化slot

Codis-config -c /usr/local/codis/conf/config.ini slot init -f 

 

查看slot槽位1的信息

./codis-config -c /usr/local/codis/conf/config.ini slot info 1

spacer.gif 

 

 

分給組名爲group_2 100-200分爲的hash

./codis-config -c /usr/local/codis/conf/config.ini range-set 100 200 2 online

相關文章
相關標籤/搜索