天天看點

在叢集上搭建speedy

前一段時間看了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

第四步,更改registry的設定檔案 cd /home/docker/registry/docker_registry_speedy_driver/ cp config_sample.yml config.yml,将config.yml中的speedy選項中的storage_urls:改為_env:SPEEDY_STORAGE:http://127.0.0.1:6788 在該目錄下建立dev.env檔案,檔案内容如下: export GUNICORN_WORKERS=16                                                                                                                                                      

export SETTINGS_FLAVOR=speedy                                                                                                                                                    

export SPEEDY_TMPDIR=/home/docker /registry/temp      

export DOCKER_REGISTRY_CONFIG=/home/docker/registry/docker_registry_speedy_driver/config .yml 執行指令 .  ./dev.env設定環境變量 第五步,啟動docker_registry 執行/usr/local/bin/docker-registry,啟動完成後,上傳鏡像時,如果報Error: Invalid Registry endpoint: This does not look like a Registry server ("X-Docker-Registry-Version" header not found in the response)錯誤,證明docker版本太低,要用1.0以上的穩定版本; 換成新版本後錯誤就變成了Error response from daemon: v1 ping attempt failed with error: Get https://node01:5000/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry node01:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/node01:5000/ca.crt 。簡單的解決方法是 1. 在要上傳鏡像的機器上執行 service docker stop先關掉docker daemon 2.在要上傳鏡像的機器上 /usr/bin/docker -d --insecure-registry node01:5000,node01為該機器主機名 可以執行push操作了,比如docker push node01:5000/ubuntu:latest