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.简单总结下,有问题随时交流~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容

  • 简介 在上一篇中, 我们已经较为详细的描述如何基于docker,搭建一套全栈式应用。web端采用Django,并使...
    keysaim阅读 816评论 0 1
  • Codis 3.2 部署配置汇总 概念总结 集群配置前需要了解架构,集群分片主要分三种: 客户端分片:这个需要自己...
    三杯水Plus阅读 5,951评论 0 11
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,500评论 15 147
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,569评论 18 139
  • 昨天晚上跟小伙伴之间进行了一次比较深入的交流,在我这个“不前进会死星”人眼中,几乎没办法理解她的那种“我就是懒呀,...
    王沁妤阅读 210评论 8 4