您的位置:首页 > 运维架构

分布式对象存储系统在openstack中的应用研究-----sheepdog

2013-01-07 11:40 447 查看
一. 系统架构
Sheepdog的架构是完全对称的,没有中心控制节点,不存在单点问题,具有以下几点特性:
Ÿ 性能和容量的现行扩展:当需要更大的容量时,sheepdog可以以线性增长方式简单的将新节点加入到集群中。
Ÿ 无单点故障:当有机器出问题时,数据还是可以通过其他机器传输。
Ÿ 容易管理:集群中的节点没有配置文件,当有新机器加入时,sheepdog进程会自动检测并将新机器加入到集群中。
系统架构图:




Sheepdog是一个分布式存储系统,并具有对象存储功能(哈希算法),其主要模块有:
Object storage:Sheepdog不是一个普通的文件系统,它可以为QEMU组建一个分布式的对象存储系统,并将对象存储在这个系统中。一个对象是指大小灵活可变,并具有全局的唯一标识符。可以通过指定标识符对该对象进行读/写/创建/删除等操作,该对象存储系统由gateway和object manager组成。
Gateway:Gateway从QEMU的块设备驱动上接收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 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目录及磁盘的网络存储系统。本文出自 “IT屌丝” 博客,请务必保留此出处http://aiven86.blog.51cto.com/5636387/1110632
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: