codis dockerization
codis 的3.1版本官方已经提供Dockerfile支持生成codis-image,并且提供了一个脚本(scripts/docker.sh)基于codis-image生成zookeeper, dashboard, proxy, server, fe的容器(基于一个image生成多个组件,赞),但实际运行的过程中发现一些问题,导致codis整个docker化运行起来并不顺利,遇到了一些问题,将这个过程整理如下:
步骤
- 获取官方代码
go get -u github.com/tools/godep && which godep
mkdir -p $GOPATH/src/github.com/CodisLabs
cd $GOPATH/src/github.com/CodisLabs
git clone https://github.com/CodisLabs/codis.git
- 生成docker镜像
docker build -f Dockerfile -t codis-image .
需要一些时间,耐心等待~~
- 脚本和配置文件修改
redis.conf配置文件修改
将redis.conf拷贝到config目录:
cd $GOPATH/src/github.com/CodisLabs/codis
cp extern/redis-3.2.4/redis.conf config/
由于redis 从3.2版本(codis 3.1版本使用的redis版本)出于安全性考虑,配置文件增加了bind和protected-mode两个配置项,默认是只能从127.0.0.1这个ip访问redis,需要解决这个问题,修改config/redis.conf配置文件中下面两项:
# bind 127.0.0.1 ##默认是没有注释的
protected-mode no ##默认是yes,需要改为no
其实也可以将docker外面需要访问redis的ip加到bind里,(看redis配置说明应该可以了,但增加bind ip这个解决方法我还没有测试过~)
dashboard.toml配置文件修改
需要将config/dashboard.toml配置文件中coordinator_addr的地址改为本机ip地址,如果是mac环境改为docker-machine ip:
coordinator_addr = "192.168.99.100:2181" ##默认是 "0.0.0.0:2181"
scripts/docker.sh脚本修改
(1)如果是mac环境需要修改脚本开始处的hostip,其他Linux环境不需要修改
hostip=`docker-machine ip`
(2)docker.sh脚本proxy) 处需要做如下修改
proxy)
docker rm -f "Codis-P29000" &> /dev/null
docker run --name "Codis-P29000" -d \
--read-only -v `realpath ../config/proxy.toml`:/codis/proxy.toml \
-v `realpath log`:/codis/log \
-p 29000:19000 -p 21080:11080 \
codis-image \
codis-proxy -l log/proxy.log -c proxy.toml --host-admin ${hostip}:21080 --host-proxy ${hostip}:29000
;;
--host-admin和--host-proxy这两个参数端口原来应该是写反了~~
(3)docker.sh脚本 server) 处需要将上面的redis.conf配置文件加上,具体如下:
server)
for ((i=0;i<4;i++)); do
let port="26379 + i"
docker rm -f "Codis-S${port}" &> /dev/null
docker run --name "Codis-S${port}" -d \
--read-only -v `realpath ../config/redis.conf`:/codis/redis.conf \
-v `realpath log`:/codis/log \
-p $port:6379 \
codis-image \
codis-server redis.conf --logfile log/${port}.log
done
;;
这样codis-server就可以从docker外面访问了~
4.运行生成各个组件容器
sh docker.sh zookeeper
sh docker.sh dashboard
sh docker.sh proxy
sh docker.sh server
sh docker.sh fe
5.添加proxy,group,server,初始化slots
##添加proxy ip地址根据具体情况修改
../bin/codis-admin --dashboard=192.168.99.100:28080 --create-proxy -x 192.168.99.100:21080
##添加 group和server,脚本默认创建4个server,根据自己需要创建group数和server数
../bin/codis-admin --dashboard=192.168.99.100:28080 --create-group --gid=1
../bin/codis-admin --dashboard=192.168.99.100:28080 --group-add --gid=1 --addr=192.168.99.100:26379
##初始化slots 刚开始创建codis推荐用rebalance
../bin/codis-admin --dashboard=192.168.99.100:28080 --rebalance —confirm
## 也可以用../bin/codis-admin --dashboard=10.29.154.210:28080 --slots-assign --beg=0 --end=255 --gid=1 --confirm 自己指定初始化slots
除了按上面命令行方式,上面步骤可以在codis-fe页面手动添加,
6.测试
##docker.sh中hostip获得的ip
redis-cli -h 192.168.99.100 -p 29000 info
做了些工作,简化codis docker化,按下面操作方式可快速构建一套codis docker系统
git clone https://github.com/left2right/codis
cd codis
docker build -f Dockerfile -t codis-image .
./scripts/docker.sh zookeeper
./scripts/docker.sh dashboard
./scripts/docker.sh proxy
./scripts/docker.sh server
./scripts/docker.sh fe
./scripts/docker.sh buildup
pika dockerization
参照codis的Dockerfile给pika写了Dockerfile,现在已经能从pika官方代码中获得
步骤
- 获取代码
git clone --recursive https://github.com/Qihoo360/pika
- 生成镜像
cd pika
docker build -f Dockerfile -t pika-image .
- 运行生成容器
docker run --name "PIKA" -d -v /pika-data/db:/pika/output/db -p 9221:9221 pika-image pika -c conf/pika.conf
- 测试
##docker.sh中hostip获得的ip
redis-cli -h 192.168.99.100 -p 29000 info
- pika docker作为codis server
需要在加入codis时,打开slotmigrate开关
redis-cli -h 192.168.99.100 -p 9221
config set slotmigrate yes
PS.简单总结下,有问题随时交流~