前一段时间看了glusterfs分布式文件系统,从14年开始一直关注docker,现在导师让结合分布式文件系统和docker的镜像存储做些工作,并且推荐了京东的speedy,这两天一直在实验室集群上安装speedy,因为网上关于这方面的资料特别少,所以将安装过程记下来与大家分析。
首先,介绍一下环境,我用了三台服务器,分别为node01、node02、node03,并且是在root用户下操作的,在上篇文章搭建好的go语言开发环境的基础上,以下操作均是在此条件下进行的,即用户已经设定好了GOPATH和GOROOT变量,此文GOPATH为/home/go/goprojects,GOROOT为/usr/local/go,请参考者换成自己相对应的目录。
第一步,下载安装需要的包并且放入正确目录。
用的ubuntu14.04,首先安装docker_registry的依赖包python-pip,python-dev,liblzma-dev
从https://github.com/jcloudpub/speedy下载speedy解压到/home/go/goprojects/src/github.com/jcloudpub
从https://github.com/gorilla/context下载context、从https://github.com/gorilla/mux下载mux解压到/home/go/goprojects/src/github.com/gorilla
从https://github.com/garyburd/redigo下载redigo解压到/home/go/goprojects/src/github.com/garyburd
从https://github.com/go-sql-driver/mysql下载mysql解压到/home/go/goprojects/src/github.com/go-sql-driver
第二步,进入speedy目录,执行make命令,编译程序
第三步,如果机器上没有安装mysql,安装上
第四步,假设mysql的用户名和密码都是root,建立speedy和metadb数据库,具体命令为 mysql -uroot -proot < docs/speedy.sql
第五步,我是用的node01当作chunkmaster宿主机,ip地址为10.107.18.31,node01、node02、node03上各安装一组chunkserver。在node01上启动chunkmaster,这一步要注意,因为speedy原程序假设mysql的root用户没有密码,所以我们要先改源代码将root用户的密码也改为root。具体方法如下所示:
打开cmd/chunkmaster/main.go,找到第23行,将flag.string()第二个参数的空字符串加上root,保存后退出。之后重新编译该文件,生成chunkmaster替换bin文件中原来的chunkmaster。到此,更改完毕,运行chunkmaster,命令为bin/chunkmaster
第六步,建立描述chunkserver信息的文件serverlist.json,文件的内容为
node01:
[
{"GroupId":1,"Ip":"127.0.0.1","Port":7654},
{"GroupId":1,"Ip":"127.0.0.1","Port":7655},
{"GroupId":1,"Ip":"127.0.0.1","Port":7656}
]
node02:
[
{"GroupId":2,"Ip":"10.107.18.31","Port":7664},
{"GroupId":2,"Ip":"10.107.18.31","Port":7665},
{"GroupId":2,"Ip":"10.107.18.31","Port":7666}
]
node03:
[
{"GroupId":3,"Ip":"10.107.18.31","Port":7674},
{"GroupId":3,"Ip":"10.107.18.31","Port":7675},
{"GroupId":3,"Ip":"10.107.18.31","Port":7676}
]
文件建好后,在三台机器上分别运行命令curl -i -X POST --data @serverlist.json "http://10.107.18.31:8099/v1/chunkserver/batchinitserver",将chunkserver信息传送给chunkmaster
第七步,基于以上的设置运行chunkserver,在三台机器上分别运行
node01:
./bin/spy_server --ip=10.107.18.31 --port=7654 --data_dir=~/spy_data --error_log=./err.log --group_id=1 --master_port=8099 --master_ip=10.107.18.31
./bin/spy_server --ip=10.107.18.31 --port=7655 --data_dir=~/spy_data --error_log=./err.log --group_id=1 --master_port=8099 --master_ip=10.107.18.31
./bin/spy_server --ip=10.107.18.31 --port=7656 --data_dir=~/spy_data --error_log=./err.log --group_id=1 --master_port=8099 --master_ip=10.107.18.31
node02:
./bin/spy_server --ip=10.107.18.32 --port=7664 --data_dir=~/spy_data --error_log=./err.log --group_id=2 --master_port=8099 --master_ip=10.107.18.31
./bin/spy_server --ip=10.107.18.32 --port=7665 --data_dir=~/spy_data --error_log=./err.log --group_id=2 --master_port=8099 --master_ip=10.107.18.31
./bin/spy_server --ip=10.107.18.32 --port=7666 --data_dir=~/spy_data --error_log=./err.log --group_id=2 --master_port=8099 --master_ip=10.107.18.31
node03:
./bin/spy_server --ip=10.107.18.33 --port=7674 --data_dir=~/spy_data --error_log=./err.log --group_id=3 --master_port=8099 --master_ip=10.107.18.31
./bin/spy_server --ip=10.107.18.33 --port=7675 --data_dir=~/spy_data --error_log=./err.log --group_id=3 --master_port=8099 --master_ip=10.107.18.31
./bin/spy_server --ip=10.107.18.33 --port=7676 --data_dir=~/spy_data --error_log=./err.log --group_id=3 --master_port=8099 --master_ip=10.107.18.31
第八步,同第五步原因,打开cmd/imageserver/main.go,找到第23行,将flag.string()第二个参数的空字符串加上root,保存后退出。之后重新编译该文件,生成 imageserver替换bin文件中原来的imageserver。运行imageserver,bin/imagerserver至此,speedy已经搭建成功。
再向下就是在该speedy的基础上安装docker_registry
第一步,安装docker_registry相关包
首先,mkdir /home/docker/registry建立放文件的目录
然后,执行tar -xzvf ./docker_registry/docker-registry-core-2.0.3.tar.gz和tar -xzvf ./docker_registry/docker-registry-0.9.0.tar.gz分别解压docker-registry-core-2.0.3和docker-registry-0.9.0,将这两个解压好的包转移到/home/docker/registry,同时将docker_registry_speedy_driver转移到/home/docker/registry
第二步,安装docker-registry-core-2.0.3和docker-registry-0.9.0
cd /home/docker/registry/docker-registry-core-2.0.3
python setup.py install
cd /home/docker/registry/docker-registry-0.9.0
python setup.py install
第三步,安装speedy_docker_registry_driver
cd speedy_docker_registry_driver
python setup.py install