把Sheepdog裝進(jìn)OpenStack
現(xiàn)在網(wǎng)上有關(guān)Sheepdog使用方面的資料還是少一些,本文主要介紹sheepdog的安裝、簡單使用方法,以及怎樣與OpenStack集成。
編譯安裝
Sheepdog提供源碼包(tarball)下載,同樣能夠安裝使用。不過,發(fā)布工作需要制作deb安裝包,而tarball制作安裝包時(shí)有個(gè)地方引用了git log命令,由于tarball源碼所在目錄不是git倉庫而導(dǎo)致出錯(cuò),所以,***還是通過git獲取sheepdog的源碼:
- mkdir -p download
- cd download/
- git clone https://github.com/sheepdog/sheepdog.git sheepdog-github
切換到***穩(wěn)定版0.7.6:
- cd sheepdog-github/
- git checkout v0.7.6
執(zhí)行autogen.sh生成configure,在此之前,可能需要安裝依賴:
- sudo apt-get install autoconf libtool make pkg-config
- ./autogen.sh
正式編譯,sheepdog本身依賴于corosync、zookeeper等集群管理工具,如果制作deb包,還依賴于debian的一些工具:
- sudo apt-get install liburcu-dev corosync corosync-dev \
- zookeeper zookeeperd libzookeeper-mt-dev
- ./configure --enable-zookeeper
- sudo apt-get install debhelper dh-autoreconf devscripts
- make deb
生成的安裝包在上一層目錄,執(zhí)行安裝:
- cd ..
- sudo dpkg -i sheepdog_0.7.6-1_amd64.deb
完成后,重新登錄會(huì)遇到以下錯(cuò)誤:
- Last login: Tue Dec 31 14:57:10 2013 from network
- -bash: script/bash_completion_dog: No such file or directory
- -bash: script/bash_completion_dog: No such file or directory
這是因?yàn)?.7.6源碼中一個(gè)過時(shí)的文件沒有清理,可以在安裝之后清理:
- sudo rm -f /etc/bash_completion.d/sheepdog
或者make deb之前清理:
- rm -f debian/sheepdog.bash-completion
兩者唯一區(qū)別是后者執(zhí)行sheep -v查看版本時(shí),會(huì)發(fā)現(xiàn)版本字符串后面加上dirty標(biāo)識。
如果把sheepdog_0.7.6-1_amd64.deb拷貝到其它機(jī)器安裝,可能需要安裝依賴:
- sudo apt-get install zookeeperd libcfg4 libcpg4 \
- libzookeeper-mt2 libcoroipcc4
某些Ubuntu源可能找不到libcfg4和libcoroipcc4,可以修改源或者到http://packages.ubuntu.com/下載
配置zookeeper
一般正式環(huán)境使用zookeeper作為sheepdog集群的管理工具,需要相關(guān)配置。如果只是單節(jié)點(diǎn)試用,可以不配置zookeeper。
首先修改myid文件,保證每個(gè)zookeeper節(jié)點(diǎn)的myid都不一樣,文件內(nèi)容是1-255之間的數(shù)字:
- sudo vi /etc/zookeeper/conf/myid
然后修改zoo.cfg文件,主要填寫各個(gè)zookeeper節(jié)點(diǎn)的信息:
- sudo vi /etc/zookeeper/conf/zoo.cfg
修改內(nèi)容如下所示,格式為server.myid=host:port1:port2
- server.11=sd1:2888:3888
- server.12=sd2:2888:3888
- server.13=sd3:2888:3888
- server.14=sd4:2888:3888
- server.15=sd5:2888:3888
上面表示zookeeper節(jié)點(diǎn)共有5個(gè),最多允許2臺節(jié)點(diǎn)掛掉,剩余3臺還能保持一個(gè)多數(shù)派。
啟動(dòng)服務(wù),apt-get時(shí)已啟動(dòng),所以需要restart。
- sudo service zookeeper restart
啟動(dòng)sheepdog
建立工作目錄并賦予權(quán)限,僅作為例子,創(chuàng)建磁盤分區(qū)等細(xì)節(jié)不再贅述。如果以非root用戶使用sheepdog,例如sheepdog用戶,記得賦予相應(yīng)目錄的權(quán)限。
- sudo mkdir /mnt/sheepdog
- sudo mount -t ext4 -o noatime,barrier=0,user_xattr,data=writeback /dev/sda4 /mnt/sheepdog
- sudo chown -R sheepdog:sheepdog /mnt/sheepdog
簡單啟動(dòng)sheepdog
- sheep /mnt/sheepdog \
- -c zookeeper:sd1:2181,sd2:2181,sd3:2181,sd4:2181,sd5:2181
使用對象緩存
事先掛載SSD到/mnt/cache,以下啟動(dòng)命令為所在的sheepdog節(jié)點(diǎn)分配約256G的對象緩存。注意有的版本不認(rèn)size=256G,要寫成size=256000。
- sheep -w size=256000,dir=/mnt/cache,directio /mnt/sheepdog \
- -c zookeeper:sd1:2181,sd2:2181,sd3:2181,sd4:2181,sd5:2181
如需要,創(chuàng)建開機(jī)啟動(dòng)
Sheepdog安裝時(shí)會(huì)在/etc/init.d目錄創(chuàng)建sheepdog服務(wù)腳本,不過目前并不完善,***還是把上面的sheepdog啟動(dòng)命令放到/etc/rc.local文件。
常用sheepdog及qemu命令
格式化sheepdog集群
如果單節(jié)點(diǎn)試用一下功能,副本數(shù)設(shè)置為1(–copies==1)即可。
- $ dog cluster format --copies=3
- using backend plain store
查看sheepdog集群
- $ dog cluster info
- Cluster status: running, auto-recovery enabled
- Cluster created at Tue Dec 31 17:40:29 2013
- Epoch Time Version
- 2013-12-31 17:40:29 1 [10.1.48.44:7000, 192.168.1.2:7000, 192.168.1.3:7000, 192.168.1.4:7000, 192.168.1.5:7000]
查看sheepdog節(jié)點(diǎn)
- $ dog node info
- Id Size Used Avail Use%
- 0 139 GB 0.0 MB 139 GB 0%
- 1 139 GB 0.0 MB 139 GB 0%
- 2 139 GB 0.0 MB 139 GB 0%
- 3 435 GB 0.0 MB 435 GB 0%
- 4 217 GB 0.0 MB 217 GB 0%
- Total 1.0 TB 0.0 MB 1.0 TB 0%
- Total virtual image size 0.0 MB
導(dǎo)入一個(gè)鏡像到sheepdog
- $ qemu-img convert -t directsync mint15.img sheepdog:mint
查看sheepdog鏡像列表
- $ dog vdi list
- Name Id Size Used Shared Creation time VDI id Copies Tag
- mint 0 16 GB 4.1 GB 0.0 MB 2013-12-31 17:50 8ec519 3
再次查看sheepdog節(jié)點(diǎn)
- $ dog node info
- Id Size Used Avail Use%
- 0 139 GB 1.8 GB 137 GB 1%
- 1 139 GB 1.9 GB 137 GB 1%
- 2 139 GB 2.2 GB 137 GB 1%
- 3 435 GB 3.7 GB 431 GB 0%
- 4 217 GB 2.7 GB 215 GB 1%
- Total 1.0 TB 12 GB 1.0 TB 1%
- Total virtual image size 16 GB
創(chuàng)建一個(gè)空的sheepdog鏡像
- $ dog vdi create data 100G
再次查看sheepdog鏡像列表
- $ dog vdi list
- Name Id Size Used Shared Creation time VDI id Copies Tag
- mint 0 16 GB 4.1 GB 0.0 MB 2013-12-31 17:50 8ec519 3
- data 0 100 GB 0.0 MB 0.0 MB 2013-12-31 18:05 a34a05 3
啟動(dòng)虛擬機(jī)
如果使用對象緩存,默認(rèn)的緩存方式有的說是writeback,有的說是writethrough,所以建議寫上cache=writeback,以顯式區(qū)分。
- $ sudo qemu-system-x86_64 --enable-kvm -m 4096 -smp 2 \
- -drive file=sheepdog:mint,if=virtio,index=0,cache=writeback \
- -drive file=sheepdog:data,if=virtio,index=1,cache=writeback \
- -net nic,model=virtio -net user -vnc :1 -daemonize
如需要,建立端口映射
如果在局域網(wǎng)內(nèi)部啟動(dòng)虛擬機(jī),外部不能訪問,可以在跳板機(jī)建立端口映射
- $ sudo iptables -t nat -A PREROUTING -d 10.1.48.44 -p tcp \
- --dport 25901 -j DNAT --to 192.168.1.2:5901
- $ sudo iptables -t nat -A POSTROUTING -j MASQUERADE
這樣,外部網(wǎng)絡(luò)的機(jī)器就可以使用vncviewer連上虛擬機(jī)
- $ vncviewer 10.1.48.44:25901
與OpenStack集成
Cinder存儲(chǔ)服務(wù)
Sheepdog可以作為Cinder服務(wù)的后端存儲(chǔ)。一般只需要修改/etc/cinder/cinder.conf文件,在DEFAULT一節(jié)中,修改volume_driver參數(shù)為sheepdog的cinder驅(qū)動(dòng):
- volume_driver = cinder.volume.drivers.sheepdog.SheepdogDriver
修改之后,重啟cinder-volume服務(wù)即可。
如果開發(fā)者使用devstack,可以修改devstack的localrc文件,設(shè)置CINDER_DRIVER環(huán)境變量為sheepdog,修改之后,執(zhí)行./stack.sh即可。
Glance鏡像服務(wù)
Sheepdog也可以作為Glance服務(wù)的后端存儲(chǔ)。通常是修改/etc/glance/glance-api.conf文件,在DEFAULT一節(jié),加入或者修改對接sheepdog的相應(yīng)參數(shù):
- default_store = sheepdog
- known_stores = glance.store.sheepdog.Store
- sheepdog_store_address = 10.1.48.44
- sheepdog_store_port = 7000
- sheepdog_store_chunk_size = 64
修改之后,重啟glance-api服務(wù)即可。
如果開發(fā)者使用devstack,目前還沒有相應(yīng)的快捷設(shè)置對接sheepdog方法,可參考上面修改配置文件,然后重啟服務(wù)。