-- 继续加上共享存储的功能 nfs DAS NAS SAN rsync 目录同步 drbd 存储同步 分布式存储(分布式文件系统) MFS HDFS GLUSTERFS 共享存储 (nfs,gfs2,ocfs2) 硬RAID --》 SAN (iscsi或FC ) -->CLVM (可选) -- 》格式化(GFS2) --》 mount 客户端(真实机) vip 192.168.122.100 web1 web2 192.168.122.139 192.168.122.140 挂载到web家目录 存储服务器 --使用真实机来模拟存储,也提供kvm的fence 上面的架构实现了两个web的高可用和fence 但是没有实现共享存储,所以下面我们要加上共享存储,使用gfs2格式,并且使用clvm(集群逻辑卷) GFS(golbal file system 2) 第一步:安装iscsi相关软件包 fence节点(真实机,宿主机)安装iscsi服务端 # yum install scsi-target-utils -y 两个node节点(node1,node2)安装iscsi客户端 # yum install iscsi-initiator-utils -y 第二步: 在fence节点(真实机,宿主机)用fdisk或parted分出两个磁盘来模拟存储(两个或两个以上都行,因为我们要做clvm的) --注意:如果没有空间分区来模拟,可以使用dd创建两个文件来模拟存储 建议两个磁盘大小不一样(因为前面讲过iscsi客户端挂载多个磁盘时,会产生名字混乱的问题,所以大小不一样的话也方便区分) 我这里使用dd来模拟存储文件 # dd if=/dev/zero of=/data/rhcs1 bs=1M count=1000 # dd if=/dev/zero of=/data/rhcs2 bs=1M count=2000 还需要一个小存储,使用dd命令做一个10M大小的文件用于qdisk也可以 # dd if=/dev/zero of=/data/qdisk bs=1M count=10 那么我在宿主机上一共准备了三个存储(不用格式化,要给客户端挂载再格式化使用) /data/rhcs1 1000M /data/rhcs2 2000M /data/qdisk 10M 第三步: 把这三个存储使用iscsi共享给集群所有结点(node1和node2) 1,在存储节点(宿主机)配置iscsi服务端 # vim /etc/tgt/targets.conf backing-store /data/rhcs1 incominguser li li123 backing-store /data/rhcs2 incominguser li li123 backing-store /data/qdisk incominguser li li123 2.启动服务 # /etc/init.d/tgtd start --启动iscsi服务 [root@li ~]# netstat -ntlup |grep tgtd --端口为3260 tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 6283/tgtd tcp 0 0 :::3260 :::* LISTEN 6283/tgtd # chkconfig tgtd on # tgt-admin --show --用此命令查看共享出的资源,确认无误 3.然后在两个node节点做iscsi客户端的配置,并挂载iscsi设备 因为iscsi服务端被配置了验证,所以需要修改客户端配置文件才可以通过验证进行登录 # vim /etc/iscsi/iscsid.conf --两节点(node1和node2)都要做 53 node.session.auth.authmethod = CHAP 57 node.session.auth.username = li 58 node.session.auth.password = li123 67 discovery.sendtargets.auth.authmethod = CHAP 71 discovery.sendtargets.auth.username = li 72 discovery.sendtargets.auth.password = li123 4.启动客户端iscsi服务 # /etc/init.d/iscsi start --两节点(node1和node2)都要做 5,在登录前必须要先连接并发现资源(discovery) --两节点(node1和node2)都要做 # iscsiadm -m discovery -t sendtargets -p 192.168.122.1 192.168.122.1:3260,1 rhcs-cluster:data1 192.168.122.1:3260,1 rhcs-cluster:data2 192.168.122.1:3260,1 rhcs-cluster:qdisk 6.发现资源成功后,就可以进行资源登录了 --两节点(node1和node2)都要做 # /etc/init.d/iscsi restart --直接重启自动登录了 # chkconfig iscsi on 7,两个节点登录成功后,最好做一个iscsi的设备名持久化(两种方式:udev和dm-multipath) 下面我使用udev的方式来做,下面的步骤所有节点(node1,node2)都要做 # vim /etc/udev/rules.d/55-openiscsi.rules KERNEL=="sd*", BUS=="scsi", PROGRAM=="/etc/udev/iscsidev.sh %b",SYMLINK+="iscsi/%c/part%n" # vim /etc/udev/iscsidev.sh #!/bin/bash HOST=`echo $1 |cut -d":" -f1` [ -e /sys/class/iscsi_host ] || exit 1 cat /sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session/session*/targetname # chmod 755 /etc/udev/iscsidev.sh # start_udev --启动 # ls /dev/iscsi/ --验证有这三个东西产生就OK了;也就是说你不要去使用/dev/sdb这种来格式化使用,用下面的这几个设备,就不会混乱了 rhcs-cluster:data1 rhcs-cluster:data2 rhcs-cluster:qdisk /dev/iscsi/rhcs-cluster:data1/part --这就是1000M的那个存储 /dev/iscsi/rhcs-cluster:data2/part --这就是2000M的那个存储 /dev/iscsi/rhcs-cluster:qdisk/part --这就是10M的那个存储 第四步: 把上面共享的存储做成clvm 1,先在node1和node2上安装clvm和gfs2相关软件包 # yum install lvm2-cluster gfs2-utils # grep locking_type /etc/lvm/lvm.conf |grep -v '#' --查找这个配置里的locking_type参数,现在类型为1;1类型是不能支持集群环境的 locking_type = 1 # lvmconf --enable-cluster --用命令把lvm打开集群支持,node1和node2都要做 # grep locking_type /etc/lvm/lvm.conf |grep -v '#' --然后再查看,发现锁类型为3类型,也就是支持集群环境的逻辑卷 locking_type = 3 2,两个节点(node1和node2)上打开clvmd服务,并且设置开机自动启动 # /etc/init.d/clvmd start # chkconfig clvmd on --rhel6上,上面两个小步骤已经自动帮你做好了,那么确认一下就可以了 3,把物理设备做成clvm: 步骤还是和lvm一样: PV--VG--LV ----------------------------------------------- --重点注意:在rhel6.5下目前做pv-vg-lv的过程会容易卡住 如果出现这个问题,解决方法如下: 方法一: 就把两个kvm虚拟机关闭再重启后,它会在短时间内操作的话不会卡,你可以在此时间内速度将下面的lvm操作给操作完 方法二: a),在宿主机上修改下面的内核参数(我这里只改了br0和virbr0,主要是virbr0是我的实验网络) # echo 0 > /sys/class/net/br0/bridge/multicast_snooping # echo 0 > /sys/class/net/virbr0/bridge/multicast_snooping b),再把上面两句加到/etc/rc.local里让其开机自动生效 # vim /etc/rc.local echo 0 > /sys/class/net/br0/bridge/multicast_snooping echo 0 > /sys/class/net/virbr0/bridge/multicast_snooping c),还要在两个节点上(node1,node2)上,修改主集群配置文件,在里面增加下面一行 ---增加一行 .... .... d),做完上面的在宿主机上把两个节点虚拟机关闭,再同时启动 # virsh destroy node1 # virsh destroy node2 # virsh start node1 # virsh start node2 ------------------------------------------------ --下面的步骤只需要在一个节点做就可以了,我这里是在node1上做;node2就可以使用pvs,vgs,lvs等命令查看得到就OK了 # pvcreate /dev/iscsi/rhcs-cluster\:data1/part # pvcreate /dev/iscsi/rhcs-cluster\:data2/part # vgcreate webdata /dev/iscsi/rhcs-cluster\:data1/part # vgextend webdata /dev/iscsi/rhcs-cluster\:data2/part # vgs VG #PV #LV #SN Attr VSize VFree webdata 2 0 0 wz--nc 2.93g 2.93g --有C标识,表示支持集群 # lvcreate -l 100%FREE webdata -n webdata_gfs --因为我这里只需要一个逻辑卷来挂载到httpd的家目录,做httpd高可用,所以我就把整个卷组直接划成一个逻辑卷(线性卷)来使用了 # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert webdata_gfs webdata -wi-a--- 2.93g # ls /dev/webdata/webdata_gfs --可以在dev下查看到这个lvm的设备了 /dev/webdata/webdata_gfs 在另外一个节点上也使用lvs命令去查看 如果看不到,则/etc/init.d/clvmd restart重启一下服务 第五步: 把刚才做好的逻辑卷要格式化成gfs2格式,进行挂载使用了 1,在一个节点格式化这个lv做成gfs2格式,另一个节点partx -a /dev/webdata/webdata_gfs刷新就可以了 --我这是在node1上做格式化,然后node2上只做下partx -a /dev/webdata/webdata_gfs就行(最好是做一下) # mkfs.gfs2 -p lock_dlm -t web_ha:webdata_gfs -j 2 /dev/webdata/webdata_gfs --指定锁为dlm,-t后接 集群名:设备名 -j 2是指定两个节点 --集群名是/etc/cluster/cluster.conf里最早创建集群时的名字;我这里昨天创建时的名字为web_ha,和我现在对应 --设备名可以任取,我这里设备名取成webdata_gfs和lvm的设备名一致 This will destroy any data on /dev/webdata/webdata_gfs. It appears to contain: symbolic link to `../dm-0' Are you sure you want to proceed? [y/n] y --输入y确认 Device: /dev/webdata/webdata_gfs Blocksize: 4096 Device Size 2.93 GB (769024 blocks) Filesystem Size: 2.93 GB (769021 blocks) Journals: 2 Resource Groups: 12 Locking Protocol: "lock_dlm" Lock Table: "web_ha:webdata_gfs" UUID: 58d25c23-3981-10a7-5550-6c0de38fb7bf 2, 下面就要挂载这个gfs格式的clvm; 使用clustat查看httpd和vip资源在哪个节点上,就在哪个节点去挂载;另一个节点不用挂载,因为下面我们会配置集群资源,自动挂载 # mount /dev/webdata/webdata_gfs /var/www/html/ # echo gfs主页 > /var/www/html/index.html --做一个新的主页,方便测试 第六步: 1,回到conga集群的图形配置界面,点resource再点add,选择gfs2资源名 name : 随便取 mount point : 挂载点就是你的httpd的家目录,我这里是默认的/var/www/html device : 设备名 就是格式化了gfs2的lvm设备名,我这里是/dev/webdata/webdata_gfs force umount: 表示资源切换到其它机器,会自动umount。这里可勾可不勾 填完后,提交 --见图rhcs14.png 2,点service groups再点我已经搭好的叫apache_service的服务,在下面再点add resource 也就是说在昨天vip和服务脚本两个资源的基础上,再加上这个gfs资源 填完后,提交 --见图rhcs15.png 第七步: 验证,先看一下node1和node2的cluster.conf版本是否一致; OK的话, 谁占用了资源,就在谁那ifconfig eth0 down --我这里是node1上做 然后就在node2看日志,或者查看vip,gfs挂载,httpd服务状态;会发现成功fence掉node1重启,并且也成功抢到三个资源;客户端访问elinks 192.168.122.100得到的一直在gfs共享存储的内容了 到此,验证成功了 [root@node1 ~]# cat /etc/cluster/cluster.conf