codis 3.0 版本編譯安裝
# 首先安裝 go 語言
wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
tar zxvf go1.4.2.linux-amd64.tar.gz
mv go /opt/local/
# 配置環境變數
vi /etc/profile
--------------------------------------
export GOROOT=/opt/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/opt/local/codis
--------------------------------------
source /etc/profile
# 執行
go version
# 安裝codis
yum install -y git
go get -u -d github.com/CodisLabs/codis
cd /opt/local/codis/src/github.com/CodisLabs/codis
# 安裝配置
make
提示如下錯誤:
-------------------------------------------------------
/bin/sh: godep: 未找到命令
/bin/sh: godep: 未找到命令
make: *** [godep] 錯誤 127
-------------------------------------------------------
cd /opt/local/codis/bin
複製 godep 到 go/bin 目錄
cp godep /opt/local/go/bin
然後再執行 make 命令
Hint: It's a good idea to run 'make test' ;) 表示安裝完成
執行 make test 測試
完成安裝會在 codis/src/github.com/CodisLabs/codis/bin 生成
assets, codis-config, codis-proxy, codis-server 四個檔案
# 複製檔案 方便管理
mkdir -p /opt/local/codis/{logs,conf,data}/
cd /opt/local/codis/src/github.com/CodisLabs/codis/bin
cp -rf * /opt/local/codis/bin
cd /opt/local/codis/src/github.com/CodisLabs/codis/
cp config.ini /opt/local/codis/conf/
cd /opt/local/codis/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src
cp redis-cli /opt/local/codis/bin/redis-cli-2.8.21
ln -s /opt/local/codis/bin/redis-cli-2.8.21 /opt/local/codis/redis-cli
# 修改配置檔案
cd /opt/local/codis/conf
vi config.ini
# 修改IP,配置WEB管理 預設 18087 埠 多proxy 配置VIP地址,但只能啟動一個dashboard ,程式掉線再啟動其他
dashboard_addr
( zk 配置 zookeeper 地址,單機配置一個,群集配置多個~以,號隔開 )
proxy_id=codis_proxy_1 配置為唯一
product= # zookeeper 節點資訊
# redis-server 配置檔案
cd /opt/local/codis/src/github.com/CodisLabs/codis/extern/redis-test/conf
cp 6379.conf 6380.conf /opt/local/codis/conf/
# 修改裡面的配置埠與配置 需要修改的配置如下:
daemonize yes #後臺模式執行
pidfile var/run/redis_6379.pid #pid 檔案
port 6379 #執行埠
timeout 50 #請求超時時間,預設0
logfile "/opt/local/codis/logs/codis_6379.log" #日誌檔案
maxmemory 20gb #最大記憶體設定
save 900 1 #開啟儲存快照的條件( 第一個*表示多長時間 , 第三個*表示執行多少次寫操作 )
save 300 10
save 60 10000
dbfilename 6379.rdb #資料快照儲存的名字
dir /opt/local/codis/data #資料快照的儲存目錄
appendfilename "6379_appendonly.aof" #Redis更加高效的資料庫備份及災難恢復方式。
appendfsync everysec # ( always: always表示每次有寫操作都進行同步. everysec: 表示對寫操作進行累積,每秒同步一次 )
# 建立 dashboard 啟動指令碼
vi /opt/local/codis/start_dashboard.sh
#!/bin/sh
nohup /opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini -L /opt/local/codis/logs/dashboard.log dashboard --addr=:18087 --http-log=/opt/local/codis/logs/requests.log &>/dev/null &
# 啟動 dashboard
/opt/local/codis/start_dashboard.sh
# 初始化 slot , 該命令會在zookeeper上建立slot相關資訊
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot init
# 啟動codis-server服務
/opt/local/codis/bin/codis-server /opt/local/codis/conf/6379.conf
/opt/local/codis/bin/codis-server /opt/local/codis/conf/6380.conf
# 新增 Redis Server Group
( 每一個 Server Group 作為一個 Redis 伺服器組存在, 只允許有一個 master, 可以有多個 slave, group id 僅支援大於等於1的整數 )
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 1 localhost:6379 master
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 1 localhost:6380 slave
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 1 172.16.32.78:6379 master
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 1 172.16.32.79:6380 slave
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 2 172.16.32.79:6379 master
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 2 172.16.32.78:6380 slave
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 3 172.16.32.80:6379 master
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 3 172.16.32.81:6380 slave
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 4 172.16.32.81:6379 master
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini server add 4 172.16.32.80:6380 slave
# 設定 server group 服務的 slot 範圍
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot range-set 0 255 1 online
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot range-set 256 511 2 online
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot range-set 512 767 3 online
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot range-set 768 1023 4 online
# slot 資料遷移
Codis 支援動態的根據例項記憶體, 自動對slot進行遷移, 以均衡資料分佈.
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot rebalance
執行此命令需要滿足下列條件:
1. 所有的codis-server都必須設定了maxmemory引數
2. 所有的 slots 都應該處於 online 狀態, 即沒有遷移任務正在執行
3. 所有 server group 都必須有 Master
另外 codis 還支援比例遷移。
如: 將slot id 為 [0-511] 的slot的資料, 遷移到 server group 2 上, --delay 參數列示每遷移一個 key 後 sleep 的毫秒數, 預設是 0, 用於限速.
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini slot migrate 0 511 2 --delay=10
遷移的過程對於上層業務來說是安全且透明的, 資料不會丟失, 上層不會中止服務.
注意:遷移的過程中打斷是可以的, 但是如果中斷了一個正在遷移某個slot的任務, 下次需要先遷移掉正處於遷移狀態的 slot, 否則無法繼續 (即遷移程式會檢查同一時刻只能有一個 slot 處於遷移狀態).
# 建立 start_proxy.sh,啟動codis-proxy服務
vi /opt/local/codis/start_proxy.sh
#!/bin/sh
echo "shut down codis_proxy_1.."
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini proxy offline codis_proxy_1
echo "done"
echo "start new proxy..."
nohup /opt/local/codis/bin/codis-proxy --log-level info -c /opt/local/codis/conf/config.ini -L /opt/local/codis/logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &>/dev/null &
echo "done"
# 啟動 proxy
/opt/local/codis/start_proxy.sh
# 設定 proxy 為 online 狀態
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini proxy online codis_proxy_1
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini proxy online codis_proxy_2
/opt/local/codis/bin/codis-config -c /opt/local/codis/conf/config.ini proxy online codis_proxy_3
# 訪問dashboard
http://localhost:18087/admin/
# codis-server 主從切換配置
codis-ha 是一個通過 是一個通過 codis開放的 api 實現自動切換主從
配置如下:
go get github.com/ngaut/codis-ha
cd /opt/local/codis/src/github.com/ngaut/codis-ha
go build
啟動:
cd /opt/local/codis/bin
./codis-ha --codis-config="127.0.0.1:18087" --productName="mycodis"
------------------------------------------------------------------------------
https://github.com/wlibo666/codis-ha
這個 codis-ha 新增了很多新功能,包括郵件報警,等功能。