免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7854 | 回复: 9
打印 上一主题 下一主题

实战drbd+clvm+gfs+multipath(类SAN的实现) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-05 16:17 |只看该作者 |倒序浏览

  1. 1.环境及说明:
  2. vmware 6.0
  3. node1 (192.168.0.5) node2 (192.168.0.6) 网关 192.168.0.1
  4. 硬件设置均为 2cpu/256M/sda(4G)/sdb(1G)/sdc(1G) (sdb,sdc在系统安装完成后增加)

  5. 相关说明
  6. 1)#command  command要在node1与node2分别执行一次。
  7. 2)node[12]#command 指command只在node1或2上执行.
  8. 3)----/路径/文件 配置文件,下面是文件内容.

  9. 2.安装:
  10. 1)操作系统安装(此时sdb,sdc未增加)
  11. centos4.5 (2.6.9-55.ELsmp) 最小化安装到sda,sda的分区在安装过程中自动生成.安装完成后,增加两个新盘sdb(1G),sdc(1G).

  12. 2)更新系统,安装相关软件包.
  13. cd /etc/yum.repos.d/

  14. wget http://mirror.centos.org/centos/4.5/csgfs/CentOS-csgfs.repo

  15. yum -y install yum-plugin-fastestmirror

  16. yum -y update

  17. yum remove kernel-smp-2.6.9-55.0.2.EL kernel-2.6.9-55.0.2.EL

  18. yum -y install device-mapper-multipath perl-Net-Telnet magma magma-devel magma-plugins ccs ccs-devel cman-kernel  cman-kernel-smp cman-kernheaders cman cman-devel dlm-kernel dlm-kernel-smp dlm-kernheaders dlm dlm-devel fence GFS GFS-kernel  GFS-kernel-smp GFS-kernheaders gnbd-kernel gnbd-kernel-smp  gnbd-kernheaders gnbd gulm gulm-devel iddev iddev-devel  piranha ipvsadm  lvm2-cluster pyorbit gcc kernel-smp-devel-2.6.9-55.EL.i686 kernel-devel-2.6.9-55.EL.i686 rpm-build flex

  19. 3)安装drbd:(使用8.0.*版,因为在gfs下支持primary/primary方式)
  20. cd /root

  21. wget http://oss.linbit.com/drbd/8.0/drbd-8.0.4.tar.gz

  22. tar -zxvf drbd-8.0.4.tar.gz

  23. cd drbd-8.0.4

  24. make rpm KDIR=/usr/src/kernels/2.6.9-55.EL-smp-i686

  25. rpm -ivh dist/RPMS/i386/drbd-8.0.4-3.i386.rpm dist/RPMS/i386/drbd-km-2.6.9_55.ELsmp-8.0.4-3.i386.rpm

  26. make clean
  27. make rpm KDIR=/usr/src/kernels/2.6.9-55.EL-i686
  28. rpm -ivh dist/RPMS/i386/drbd-km-2.6.9_55.EL-8.0.4-3.i386.rpm

  29. 3.配置与相关操作:
  30. 1)配置启动
  31. /boot/grub.conf
  32. default=0
  33. timeout=5
  34. splashimage=(hd0,0)/grub/splash.xpm.gz
  35. hiddenmenu
  36. title CentOS-4 i386 (2.6.9-55.ELsmp)
  37.         root (hd0,0)
  38.         kernel /vmlinuz-2.6.9-55.ELsmp ro root=/dev/VolGroup00/LogVol00
  39.         initrd /initrd-2.6.9-55.ELsmp.img
  40. title CentOS-4 i386-up (2.6.9-55.EL)
  41.         root (hd0,0)
  42.         kernel /vmlinuz-2.6.9-55.EL ro root=/dev/VolGroup00/LogVol00
  43.         initrd /initrd-2.6.9-55.EL.img
  44. 使用2.6.9-55ELsmp内核为默认启动内核

  45. 2)配置drbd
  46. ----/etc/drbd.conf
  47.        global { usage-count yes; }
  48.        common { syncer { rate 100M; } }
  49.        resource r0 {
  50.             protocol C;
  51.             net {
  52.                  cram-hmac-alg sha1;
  53.                  shared-secret "FooFunFactory";
  54.                  allow-two-primaries;
  55.             }
  56.             on node1 {
  57.                  device    /dev/drbd0;
  58.                  disk      /dev/sdb;
  59.                  address   192.168.0.5:7789;
  60.                  flexible-meta-disk  internal;
  61.             }
  62.             on node2 {
  63.                  device    /dev/drbd0;
  64.                  disk      /dev/sdb;
  65.                  address   192.168.0.6:7789;
  66.                  flexible-meta-disk  internal;
  67.             }
  68.        }
  69.        resource r1 {
  70.             protocol C;
  71.             net {
  72.                  cram-hmac-alg sha1;
  73.                  shared-secret "FooFunFactory";
  74.                  allow-two-primaries;
  75.             }
  76.             on node1 {
  77.                  device    /dev/drbd1;
  78.                  disk      /dev/sdc;
  79.                  address   192.168.0.5:7788;
  80.                  flexible-meta-disk  internal;
  81.             }
  82.             on node2 {
  83.                  device    /dev/drbd1;
  84.                  disk      /dev/sdc;
  85.                  address   192.168.0.6:7788;
  86.                  flexible-meta-disk  internal;
  87.             }
  88.        }

  89. 分别镜像两个机子的sdb与sdc,生成drbd0与drbd1.
  90. #drbdadm create-md r0 (上面定义的resource)

  91. #drbdadm create-md r1

  92. #service drbd start

  93. #drbdadm --  --overwrite-data-of-peer primary all (系统启动是 drbd0,drbd1均为secondary,不可访问,此命令要加入到合适的服务启动脚本中,以使后续使用drbd0,drbd1设备的服务能正常启动)

  94. #service drbd status
  95. drbd driver loaded OK; device status:
  96. version: 8.0.4 (api:86/proto:86)
  97. SVN Revision: 2947 build by root@node1, 2007-07-03 16:04:10
  98. 0: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
  99.     ns:151596 nr:16 dw:92 dr:154552 al:0 bm:26 lo:0 pe:0 ua:0 ap:0
  100.         resync: used:0/31 hits:9455 misses:13 starving:0 dirty:0 changed:13
  101.         act_log: used:0/127 hits:18 misses:0 starving:0 dirty:0 changed:0
  102. 1: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
  103.     ns:68 nr:12 dw:80 dr:2328 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
  104.         resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
  105.         act_log: used:0/127 hits:16 misses:0 starving:0 dirty:0 changed:0

  106. 好了,drbd安装正常。

  107. 3)配置cluster
  108. ----/etc/cluster/cluster.conf
  109. <?xml version="1.0"?>
  110. <cluster name="cluster1" config_version="1">  
  111. <cman two_node="1" expected_votes="1">  
  112. </cman>  
  113. <clusternodes>  
  114. <clusternode name="node1" votes="1">  
  115. <fence>  
  116. <method name="single">  
  117. <device name="human" ipaddr="192.168.0.5"/>  
  118. </method>  
  119. </fence>  
  120. </clusternode>  
  121. <clusternode name="node2" votes="1">  
  122. <fence>  
  123. <method name="single">  
  124. <device name="human" ipaddr="192.168.0.6"/>  
  125. </method>  
  126. </fence>  
  127. </clusternode>  
  128. </clusternodes>  
  129. <fencedevices>  
  130. <fencedevice name="human" agent="fence_gnbd" option="multipath" servers="192.168.0.5 192.168.0.6"/>  
  131. </fencedevices>  
  132. </cluster>

  133. 使用fence_gnbd.

  134. ----/etc/sysconfig/cluster (目的,是在集群开始前插入模块)
  135. modprobe lock_dlm
  136. modprobe gnbd
  137. modprobe gfs

  138. ----/etc/hosts
  139. 127.0.0.1               localhost.localdomain localhost
  140. 192.168.0.5             node1
  141. 192.168.0.6             node2

  142. #service ccsd start

  143. #service cman start

  144. #service fenced start

  145. #ccs_tool lsnode
  146. Cluster name: cluster1, config_version: 1
  147. Nodename                        Votes Nodeid Iface Fencetype
  148. node1                              1               human
  149. node2                              1               human

  150. # ccs_tool lsfence
  151. Name             Agent
  152. human            fence_gnbd

  153. # cman_tool services
  154. Service          Name                              GID LID State     Code
  155. Fence Domain:    "default"                           2   2 run       -
  156. [1 2]

  157. 好了,一切正常.

  158. 4)配置clvm
  159. ----/etc/lvm/lvm.conf
  160. devices {
  161.     dir = "/dev"
  162.     scan = [ "/dev" ]
  163.     filter = [ "r|/dev/cdrom|", "r|/dev/sdb|","r|/dev/sdc|", "a|/dev/sda|","a|/dev/drbd|","r|.*|"]
  164.     (此处修改是为的避免出现duplicate uuid的错误,与实战1)和2)相关)
  165.     #filter = [ "r|/dev/cdrom|", "r|/dev/sdb|","r|/dev/sdc|", "a|/dev/sda|","a|/dev/mpath|","r|.*|"]
  166.     (此处修改是为的避免出现duplicate uuid的错误,与实战3)相关,使用此设置,注释掉上面的filter)
  167.     cache = "/etc/lvm/.cache"
  168.     write_cache_state = 1
  169.     sysfs_scan = 1
  170.     md_component_detection = 1
  171.     ignore_suspended_devices = 0
  172. }
  173. log {
  174.     verbose = 0
  175.     syslog = 1
  176.     file = "/var/log/lvm2.log"
  177.     overwrite = 0
  178.     level = 0
  179.    
  180.     indent = 1
  181.     command_names = 0
  182.     prefix = "  "
  183. }
  184. backup {
  185.     backup = 1
  186.     backup_dir = "/etc/lvm/backup"
  187.     archive = 1
  188.     archive_dir = "/etc/lvm/archive"
  189.    
  190.     retain_min = 10
  191.     retain_days = 30
  192. }
  193. shell {
  194.     history_size = 100
  195. }
  196. global {
  197.     library_dir = "/usr/lib"
  198.    
  199.     umask = 077
  200.     test = 0
  201.     activation = 1
  202.     proc = "/proc"
  203.     locking_type = 3 (此处改为3,使clvm生效)
  204.     fallback_to_clustered_locking = 1
  205.     fallback_to_local_locking = 1
  206.     locking_dir = "/var/lock/lvm"
  207. }
  208. activation {
  209.     missing_stripe_filler = "/dev/ioerror"
  210.     reserved_stack = 256
  211.     reserved_memory = 8192
  212.     process_priority = -18
  213.     mirror_region_size = 512
  214.     mirror_log_fault_policy = "allocate"
  215.     mirror_device_fault_policy = "remove"
  216. }

  217. #service clvmd start

  218. 5)配置multipath
  219. ----/etc/multipath.conf
  220. devnode_blacklist {
  221.         devnode "^sd[a-z]"  (此处两行目的是不检查本地磁盘)
  222.         devnode "^hd[a-z]"
  223. }
  224. defaults {
  225.         user_friendly_names yes
  226.         udev_dir                /dev
  227.         polling_interval        10
  228.         selector                "round-robin 0"
  229.         prio_callout            /bin/true
  230.         path_checker            readsector0
  231.         rr_min_io               100
  232.         rr_weight               priorities
  233.         failback                immediate
  234.         no_path_retry           fail
  235. }
  236.         device {
  237.                 vendor                  "GNBD"
  238.                 product                 "GNBD"
  239.                 path_grouping_policy    multibus
  240.                 getuid_callout          "/sbin/gnbd_import -q -U /block/%n"
  241.                 path_checker            directio
  242.         }

  243. #service multipath start

  244. 至此所有配置完成。
  245. #chkconfig drbd on

  246. #chkconfig ccsd on

  247. #chkconfig cman on

  248. #chkconfig fenced on

  249. #chkconfig clvmd on

  250. #chkconfig multipath on

  251. #chkconfig gfs on

  252. 确保相关服务自动启动。重启系统。

  253. 4.实战篇:
  254. 由于有多种顺序组合来形成最后的系统,下面开始分别实践主要的几种.

  255. 注意/etc/lvm/lvm.conf中filter的不同.

  256. 由于clvm的使用,lvm的相关命令只需在其中的一台机子上执行即可.

  257. 1)在本地形成lv,然后导出(导入).
  258. node1#pvcreate /dev/drbd0 /dev/drbd1

  259. node1#vgcreate test /dev/drbd0 /dev/drbd1

  260. #service clvmd restart (不知道rhel 5.0中是否有改进,可以不重启)

  261. #gnbd_serv -v

  262. node1#lvcreate -L 1.99G test

  263. node1#gnbd_export -d /dev/test/lvol0 -e gfs -u 1

  264. node2#gnbd_export -d /dev/text/lvol0 -e gfs1 -u 1 (两个导出设备的uid相同,视为对同一个设备的多路径导出)

  265. node1#gnbd_import -i node1 (此处是为了实验multipath,不建议导入本机的导出设备)

  266. node1#gnbd_import -i node2

  267. node1#multipath -ll
  268. mpath0 (1)
  269. [size=1 GB][features="0"][hwhandler="0"]
  270. \_ round-robin 0 [active]
  271. \_ #:#:#:#     gnbd0 252:0 [active][ready]
  272. \_ #:#:#:#     gnbd1 252:1 [active][ready]

  273. node1#gfs_mkfs -j 2 -p lock_dlm -t cluster1:gfs /dev/mpath/mpath0

  274. #mount -t gfs /dev/mpath/mpath0 /mnt

  275. 好了,可以正常使用了。

  276. /***********************************
  277. 下面回到未导出(导入)的状态.
  278. #umount /mnt

  279. #dmsetup remove /dev/mpath/mpath0

  280. #gnbd_import -R

  281. #gnbd_export -R
  282. *************************************/

  283. 2)在本地形成gfs,然后导出(导入).
  284. node1#gfs_mkfs -j 2 -p lock_dlm -t cluster1:gfs /dev/test/lvol0

  285. node1#gnbd_export -d /dev/test/lvol0 -e gfs -u 1

  286. node2#gnbd_export -d /dev/test/lvol0 -e gfs1 -u 1 (两个导出设备的uid相同,视为对同一个设备的多路径导出)

  287. #gnbd_import -i node1 (此处是为了实验multipath,不建议导入本机的导出设备)

  288. #gnbd_import -i node2

  289. #multipath -ll
  290. mpath0 (1)
  291. [size=1 GB][features="0"][hwhandler="0"]
  292. \_ round-robin 0 [active]
  293. \_ #:#:#:#     gnbd0 252:0 [active][ready]
  294. \_ #:#:#:#     gnbd1 252:1 [active][ready]

  295. node1#mount -t gfs /dev/mpath/mpath0 /mnt

  296. /***********************************
  297. 下面回到未使用lvm前的状态.
  298. #umount /mnt

  299. #dmsetup remove /dev/mpath/mpath0

  300. #gnbd_import -R

  301. #gnbd_export -R

  302. node1#lvchange -an /dev/test/lvol0

  303. node1#lvremove /dev/test/lvol0

  304. node1#vgremove test

  305. node1#pvremove /dev/drbd0 /dev/drbd1
  306. *************************************/

  307. 3)直接导出(导入)设备drbd0,drbd1.(推荐使用,client分担了server的设备管理的部分负载,可以提高性能)
  308. node1#gnbd_export -d /dev/drbd0 -e gfs -u 1

  309. node2#gnbd_export -d /dev/drbd0 -e gfs1 -u 1

  310. node1#gnbd_export -d /dev/drbd1 -e gfs2 -u 2

  311. node2#gnbd_export -d /dev/drbd1 -e gfs3 -u 2

  312. #gnbd_import -i node1

  313. #gnbd_import -i node2

  314. #multipath -ll
  315. mpath1 (2)
  316. [size=1023 MB][features="0"][hwhandler="0"]
  317. \_ round-robin 0 [enabled]
  318. \_ #:#:#:#     gnbd2 252:2 [active][ready]
  319. \_ #:#:#:#     gnbd0 252:0 [active][ready]
  320. mpath0 (1)
  321. [size=1023 MB][features="0"][hwhandler="0"]
  322. \_ round-robin 0 [enabled]
  323. \_ #:#:#:#     gnbd3 252:3 [active][ready]
  324. \_ #:#:#:#     gnbd1 252:1 [active][ready]

  325. node1#pvcreate /dev/mpath/mpath0 /dev/mpath/mpath1

  326. node1#vgcreate test /dev/mpath/mpath0 /dev/mpath/mpath1

  327. #service clvmd restart (不知道rhel 5.0中是否有改进,可以不重启)

  328. node1#lvcreate -L 1.9G test

  329. node1#gfs_mkfs -j 2 -p lock_dlm -t cluster1:gfs /dev/test/lvol0

  330. #mount -t gfs /dev/test/lvol0 /mnt

  331. 5.结束语
  332. 写此文档的目的是为了提供给大家一个关于gfs应用的一个基本的范例,将关于clvm,drbd,multipath的概念变成实在的东西供大家来学习讨论。
  333. 参照此文,稍加修改后,多gnbd_server,多路径及使用drbd来构建便宜的SAN应用都不会有太多的问题。

  334. 6.不足之处
  335. 对于更细化的概念有赖于读者的自行补充,尚可加入lvs,未提及。fence,multipath未充分使用。
  336. 还有更多更多,希望有人不吝指教。

  337. 附图,本文就是redhat官方这个图的实现

复制代码

[ 本帖最后由 wysilly 于 2007-7-6 18:27 编辑 ]

20070628_8c2efbe3d38fabcefac8uZgROfAEeaaE.jpg (22.24 KB, 下载次数: 38)

20070628_8c2efbe3d38fabcefac8uZgROfAEeaaE.jpg

论坛徽章:
0
2 [报告]
发表于 2007-07-05 16:54 |只看该作者


[ 本帖最后由 agg230 于 2007-8-17 12:41 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-07-06 13:36 |只看该作者
好贴子!!收啦!!!!!!

论坛徽章:
0
4 [报告]
发表于 2007-07-06 13:45 |只看该作者
太谢谢楼主了!!!!!

论坛徽章:
0
5 [报告]
发表于 2007-07-06 17:12 |只看该作者
把图画出来更完美了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-07-06 17:54 |只看该作者
感谢共享心得。

论坛徽章:
0
7 [报告]
发表于 2007-07-10 22:31 |只看该作者

好东西

真的不错,哥们支持你

论坛徽章:
0
8 [报告]
发表于 2007-08-06 09:29 |只看该作者
看的晕晕的 。。

字数汉化完美破解中文版。。。

论坛徽章:
0
9 [报告]
发表于 2007-08-12 17:59 |只看该作者
看不大明白,要是有图就好了。

论坛徽章:
0
10 [报告]
发表于 2007-09-14 12:02 |只看该作者
已经收藏,楼主辛苦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP