sheepdog安裝和使用管理

一. 系統架構 node

Sheepdog的架構是徹底對稱的,沒有中心控制節點,不存在單點問題,具備如下幾點特性: git

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

Ÿ   無單點故障:當有機器出問題時,數據仍是能夠經過其餘機器傳輸。 網絡

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

系統架構圖:                  tcp

 

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

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

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

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

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 pagecompatibility: 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 節點。 sheepdog vdi 在使用時會被分割成 4M obj ,在試驗過程當中,這個分割過程致使寫數據時很是慢,須要優化及進一步調研。與淘寶 sheepdog 項目成員子團溝通該問題,獲得的答覆是最好用做慢存儲。所以, sheepdog 就目前狀況來講不適合用來作 openstack的base目錄 及磁盤的網絡存儲系統。
相關文章
相關標籤/搜索