设为首页 收藏本站
查看: 3499|回复: 6

[经验分享] KVM分布式共享存储解决方案-sheepdog

[复制链接]

尚未签到

发表于 2012-6-28 21:32:45 | 显示全部楼层 |阅读模式
介绍今天在调研分布式文件系统时,非常偶然的机会看到sheepdog ,然后接着又看到KVM这个关键字,让我异常兴奋,这不是我一直在找的KVM镜像存储的分布式存储系统吗,原来KVM/Qemu最近已经开始对其进行了开发,并在Qemu 0.13.0版本后加入了与sheepdog的支持,太佩服国外的开源贡献者。
sheepdog(牧羊犬) 官方网站:http://www.osrg.net/sheepdog/
Sheepdog is a distributed storage system for KVM. It provides highly available block level storage volumes that can be attached to KVM virtual machines. Sheepdog scales to several hundreds nodes, and supports advanced volume management features such as snapshot, cloning, and thin provisioning.
安装步骤1,环境准备corosync-1.3.0.tar.gz sheepdog-0.2.0.tar.gz
2,安装corosynccorosync 是linux 集群管理的引擎,具体请参看官网

  • $ tar -xzvf  corosync-1.3.0.tar.gz$ cd corosync-1.3.0$ ./autogen.sh$ ./configure$ sudo make install

复制代码
3,qemu 0.13的安装 (略)4,sheepdog安装
  • $ tar -xzvf sheepdog-0.2.0.tar.gz$ cd sheepdog-0.2.0$ ./autogen.sh$ ./configure$ sudo make install

复制代码
这时可能会出现linux/signalfd.h  这个文件找不到,以及后续会出现signalfd undefined reference 的错误,我的系统是CentOS ,出现了这种错误,出现这种情况的话,我简单的解决方法是对signalfd进行模拟,这点我参考了qemu的有关实现,
具体是在sheep/work.c中加入以下代码:
代码太长,我贴到最后了,请参看附件

5,sheepdog的具体使用
1> 配置/etc/corosync/corosync.conf


  • mv /etc/corosync/corosync.conf.example   /etc/corosync/corosync.conf

复制代码

同时修改,bindnetaddr字段为自己的ip地址,mcastaddr(怎么修改暂时不清楚,应该是广播的地址,保持默认值即可)

2> 启动corosync
  • # corosync {注:需要是root账户}

复制代码


3> 如果是ext3文件系统,需要加入user_xattr
  • mount -o remount,user_xattr /

复制代码

4> 启动Sheep
  • # sheep ~/store_dir  <span style="color: #ff6600;">#不能是相对路径,相对路径会出错</span>      # collie cluster format --copies=3

复制代码
5> 查看状态
  • # collie node list      # collie cluster info      # colli vdi list

复制代码
6> 创建镜像
  • # qemu-img create sheepdog:Alice 256G        # qemu-img convert ~/amd64.raw sheepdog:Bob

复制代码
不过我在Convert时一直提示不成功,error while writing

查找原因:通过查看sheep.log日志文件,可以发现时由于Too Many open files 错误提示,原来是打开太多文件所造成的,因为sheepdog对文件进行4M进行分片的,这样会导致大量的文件打开,而一般的系统进程最多的文件数是1024 所以就这个错误!

解决方法:ulimit -n 4096 {或者更大的值} 这样修改只是在目前会话中有效,需要长久生效,请参看这篇文章

总结sheepdog作为一个新的项目,感觉还是挺不错的,刚好弥补了开源虚拟化中有关镜像存储的问题,为后续的虚拟机迁移做准备,目前sheepdog暂时还未支持migrate ,不过看它的TODO LIST 下一步已经开始做了,系统能够尽快做出来,下一步主要是看下它的源码,因为很多地方会出现诡异的错误的,还需要解决呀!
  • #ifndef  _SIGNALFD
  • #include
  • /*
  • *  include/linux/signalfd.h
  • *
  • *  Copyright (C) 2007  Davide Libenzi
  • *
  • */
  • /* For O_CLOEXEC and O_NONBLOCK */
  • #include
  • /* Flags for signalfd4.  */
  • #define SFD_CLOEXEC O_CLOEXEC
  • #define SFD_NONBLOCK O_NONBLOCK
  • struct signalfd_siginfo {
  •         __u32 ssi_signo;
  •         __s32 ssi_errno;
  •         __s32 ssi_code;
  •         __u32 ssi_pid;
  •         __u32 ssi_uid;
  •         __s32 ssi_fd;
  •         __u32 ssi_tid;
  •         __u32 ssi_band;
  •         __u32 ssi_overrun;
  •         __u32 ssi_trapno;
  •         __s32 ssi_status;
  •         __s32 ssi_int;
  •         __u64 ssi_ptr;
  •         __u64 ssi_utime;
  •         __u64 ssi_stime;
  •         __u64 ssi_addr;
  •         /*
  •          * Pad strcture to 128 bytes. Remember to update the
  •          * pad size when you add new members. We use a fixed
  •          * size structure to avoid compatibility problems with
  •          * future versions, and we leave extra space for additional
  •          * members. We use fixed size members because this strcture
  •          * comes out of a read(2) and we really don't want to have
  •          * a compat on read(2).
  •          */
  •         __u8 __pad[48];
  • };
  • void qemu_set_cloexec(int fd)
  • {
  •     int f;
  •     f = fcntl(fd, F_GETFD);
  •     fcntl(fd, F_SETFD, f | FD_CLOEXEC);
  • }
  • struct sigfd_compat_info
  • {
  •     sigset_t mask;
  •     int fd;
  • };
  • static void *sigwait_compat(void *opaque)
  • {
  •     struct sigfd_compat_info *info = opaque;
  •     int err;
  •     sigset_t all;
  •     sigfillset(&all);
  •     sigprocmask(SIG_BLOCK, &all, NULL);
  •     do {
  •         siginfo_t siginfo;
  •         err = sigwaitinfo(&info->mask, &siginfo);
  •         if (err == -1 && errno == EINTR) {
  •             err = 0;
  •             continue;
  •         }
  •         if (err > 0) {
  •             char buffer[128];
  •             size_t offset = 0;
  •             memcpy(buffer, &err, sizeof(err));
  •             while (offset < sizeof(buffer)) {
  •                 ssize_t len;
  •                 len = write(info->fd, buffer + offset,
  •                             sizeof(buffer) - offset);
  •                 if (len == -1 && errno == EINTR)
  •                     continue;
  •                 if (len <= 0) {
  •                     err = -1;
  •                     break;
  •                 }
  •                 offset += len;
  •             }
  •         }
  •     } while (err >= 0);
  •     return NULL;
  • }
  • static int qemu_signalfd_compat(const sigset_t *mask)
  • {
  •     pthread_attr_t attr;
  •     pthread_t tid;
  •     struct sigfd_compat_info *info;
  •     int fds[2];
  •     info = malloc(sizeof(*info));
  •     if (info == NULL) {
  •         errno = ENOMEM;
  •         return -1;
  •     }
  •     if (pipe(fds) == -1) {
  •         free(info);
  •         return -1;
  •     }
  •     qemu_set_cloexec(fds[0]);
  •     qemu_set_cloexec(fds[1]);
  •     memcpy(&info->mask, mask, sizeof(*mask));
  •     info->fd = fds[1];
  •     pthread_attr_init(&attr);
  •     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  •     pthread_create(&tid, &attr, sigwait_compat, info);
  •     pthread_attr_destroy(&attr);
  •     return fds[0];
  • }
  • #endif



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360-1-1.html 上篇帖子: KVM命令行virt-install创建虚拟机报错 下篇帖子: kvm静态迁移 virsh define 解决方案 分布式

尚未签到

发表于 2013-3-14 00:23:39 | 显示全部楼层
有道理。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-15 22:34:20 | 显示全部楼层
做爱做的事,交配交的人。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-16 13:43:30 | 显示全部楼层
俺从不写措字,但俺写通假字!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

发表于 2013-5-17 09:28:21 | 显示全部楼层
人生不能像做菜、把所有的料都准备好才下锅!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-18 03:22:01 | 显示全部楼层
我真想亲口管你爷爷叫声:爹!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-18 21:30:05 | 显示全部楼层
生活***好玩,因为生活老***玩我!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表