codis与pika的docker化

codis dockerization

codis 的3.1版本官方已经提供Dockerfile支持生成codis-image,并且提供了一个脚本(scripts/docker.sh)基于codis-image生成zookeeper, dashboard, proxy, server, fe的容器(基于一个image生成多个组件,赞),但实际运行的过程中发现一些问题,导致codis整个docker化运行起来并不顺利,遇到了一些问题,将这个过程整理如下:

步骤

  1. 获取官方代码
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
  1. 生成docker镜像
docker build -f Dockerfile  -t codis-image .

需要一些时间,耐心等待~~

  1. 脚本和配置文件修改

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官方代码中获得

步骤

  1. 获取代码
git clone --recursive https://github.com/Qihoo360/pika
  1. 生成镜像
cd pika
docker build -f Dockerfile -t pika-image .
  1. 运行生成容器
docker run --name "PIKA" -d -v /pika-data/db:/pika/output/db -p 9221:9221 pika-image pika -c conf/pika.conf
  1. 测试
##docker.sh中hostip获得的ip
redis-cli -h 192.168.99.100 -p 29000 info
  1. pika docker作为codis server
    需要在加入codis时,打开slotmigrate开关
redis-cli -h 192.168.99.100 -p 9221
config set slotmigrate yes

PS.简单总结下,有问题随时交流~

你可能感兴趣的:(codis与pika的docker化)