分佈式對象存儲系統在openstack中的應用研究-----sheepdog

一. 系統架構

Sheepdog的架構是完全對稱的,沒有中心控制節點,不存在單點問題,具有以下幾點特性:

Ÿ   性能和容量的現行擴展:當需要更大的容量時,sheepdog可以以線性增長方式簡單的將新節點加入到集羣中。

Ÿ   無單點故障:當有機器出問題時,數據還是可以通過其他機器傳輸。

Ÿ   容易管理:集羣中的節點沒有配置文件,當有新機器加入時,sheepdog進程會自動檢測並將新機器加入到集羣中。

系統架構圖:                 

 

Sheepdog是一個分佈式存儲系統,並具有對象存儲功能(哈希算法),其主要模塊有:

Object storageSheepdog不是一個普通的文件系統,它可以爲QEMU組建一個分佈式的對象存儲系統,並將對象存儲在這個系統中。一個對象是指大小靈活可變,並具有全局的唯一標識符。可以通過指定標識符對該對象進行讀//創建/刪除等操作,該對象存儲系統由gatewayobject manager組成。

GatewayGatewayQEMU的塊設備驅動上接收I/O請求(對象ID,偏移量,長度,操作類型等),通過哈希算法計算出目標節點,並且將該I/O請求發到目標節點上。

Object manager:對象管理器接收網關發來的I/O請求,並根據該請求對本地磁盤執行讀寫操作。

Cluster manager:集羣管理器管理集羣中節點之間的關係,檢測集羣中節點的變更並進行通知,同步節點之間的信息,如VDI,快照等。目前使用corosync作爲集羣管理器。

QEMU設備驅動程序:該程序將VM鏡像分割成一個固定大小的對象(默認爲4M,並通過網關將其存儲到對象存儲系統中。這些對象存儲在/var/lib/sheepdog/objs/下面。

二.安裝

1. 環境:

  • One or more x86-64 machines.

  • Linux kernel 2.6.27 or later

  • glibc 2.9 or later

  • The corosync and corosync lib package.

  • QEMU 0.13 or later

2. 依賴包:

  • GNU Autotools

  • pkg-config

  • corosync devel package

  • git (when compiling from source repo)

  • liburcu

  • optional:fuse-devel (for sheepfs)

3. 安裝集羣管理器-corosync

yum install corosync corosynclib corosynclib-devel

配置/etc/corosync/corosync.conf

# Please read the corosync.conf.5 manual page

compatibility: whitetank

 

totem {

        version: 2

        secauth: off

        threads: 0

        interface {

                ringnumber: 0

                bindnetaddr: 1.1.1.0

                mcastaddr: 226.94.1.1

                mcastport: 5405

                ttl: 1

        }

}

logging {

        fileline: off

        to_stderr: no

        to_logfile: yes

        to_syslog: yes

        logfile: /var/log/cluster/corosync.log

        debug: off

        timestamp: on

        logger_subsys {

                subsys: AMF

                debug: off

        }

}

amf {

        mode: disabled

}

主要需要修改bindnetaddr,該參數是指節點所在的網絡。

corosync是一個簡單的集羣管理器,其基本原理是通過組播的方式來進行通信,達到信息管理的目的。根據淘寶的調研,corosync最多隻支持50個節點的集羣,推薦使用zookeeper進行集羣管理。

下載userspace-rcu-0.7.4.tar.bz2

tar -xvf userspace-rcu-0.7.4.tar.bz2

cd userspace-rcu-0.7.4

./configure

make && make install

 

下載collie-sheepdog-v0.4.0-309-ga313bd0.zip

unzip collie-sheepdog-v0.4.0-309-ga313bd0.zip

cd collie-sheepdog-a313bd0

./autogen.sh

./configure

make && make install

 

配置iptables規則

iptables -A INPUT -p igmp -j ACCEPT

iptables -A INPUT -m addrtype --dst-type MULTICAST -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m multiport --dport 5404,5405 -j ACCEPT  

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 7000 -j ACCEPT

 

啓動服務

/etc/init.d/corosync restart

service iptables restart

/etc/init.d/sheepdog restart

 

日誌:

/var/log/cluster/corosync.log

/var/lib/sheepdog/sheep.log

三.使用

格式化集羣,並設置farm模式(提供高級特性:如集羣快照,快速修復,數據壓縮存儲(未實現)),冗餘設置爲3

collie cluster format -b farm --copies=3

查看集羣節點:

collie node list

查看已經創建的img鏡像文件:

collie vdi list

如果報錯:Failed to read object 800316b400000000 IO has halted as there are too few living nodes

Failed to read inode header

解決:則停掉其他集羣node

對該單一節點執行recover操作:

collie cluster recover force

但是這個操作會刪除所有已有鏡像

以網關形式啓動服務:

sheep -g /var/lib/sheepdog

 

創建一個空的vdi

qemu-img create sheepdog:Alice 256G

把一個已有鏡像轉換到sheepdog中去:

qemu-img convert -t writethrough ~/amd64.raw sheepdog:Bob

 

通過sheepdog啓動一個虛擬機

qemu-system-x86_64  -curses  sheepdog:192.168.10.2:7000:Alice

sheepdog中安裝一個虛擬機

通過iso安裝:

qemu-kvm -m 1024 -cdrom CentOS-6.2-x86_64-minimal.iso -drive file=sheepdog:Alice,index=0 -boot d -net nic -net user -nographic  -vnc :2 

通過硬盤啓動

qemu-kvm -m 1024 -drive file=sheepdog:Bob,index=0,boot=on -boot c -net nic -net user -nographic -vnc :3

掛載硬盤到虛擬機中:

修改virsh中虛擬機的xml文件:

    <disk type="network" device="disk">

      <driver name="qemu" type="raw" />

      <source protocol='sheepdog' name="Alice">

        <host name="1.1.1.93" port="7000"/>

        <host name="1.1.1.89" port="7000"/>

      </source>

      <target dev="vdb" bus="virtio" />

    </disk>

進入到虛擬機中格式化磁盤:

mkfs.ext4 /dev/vdb

掛載:

mount /dev/vdb /mnt

這樣虛擬機中的vdb就使用了遠程sheepdog集羣中的vdi文件。

四.結論

sheepdog基本沒有配置文件,使用起來很簡單方便,使用zookeeper作爲集羣管理器能擴展更多的sheepdog節點。sheepdogvdi在使用時會被分割成4Mobj,在試驗過程中,這個分割過程導致寫數據時非常慢,需要優化及進一步調研。與淘寶sheepdog項目成員子團溝通該問題,得到的答覆是最好用作慢存儲。因此,sheepdog就目前情況來說不適合用來做openstack的base目錄及磁盤的網絡存儲系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章