自由论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1640|回复: 1
打印 上一主题 下一主题

【学习笔记】高可用集群(三)

[复制链接]

85

主题

97

帖子

9828

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9828
跳转到指定楼层
楼主
发表于 2016-4-17 18:38:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
继续加上共享存储的功能
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
<target rhcs-cluster:data1>
        backing-store /data/rhcs1
        incominguser li li123
</target>
<target rhcs-cluster:data2>
        backing-store /data/rhcs2
        incominguser li li123
</target>
<target rhcs-cluster:qdisk>
        backing-store /data/qdisk
        incominguser li li123
</target>

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)上,修改主集群配置文件,在里面增加下面一行
<cluster config_version="12" name="web_ha">
        <totem netmtu="1500" window_size="300" />     ---增加一行
....
....
</cluster>
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
<?xml version="1.0"?>
<cluster config_version="17" name="web_ha">
<clusternodes>
  <clusternode name="node1.cluster.com" nodeid="1">
   <fence>
    <method name="fence_method1">
     <device name="kvm_fence" port="kvm4"/>
    </method>
   </fence>
  </clusternode>
  <clusternode name="node2.cluster.com" nodeid="2">
   <fence>
    <method name="fence_method1">
     <device name="kvm_fence" port="kvm5"/>
    </method>
   </fence>
  </clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<rm>
  <failoverdomains>
   <failoverdomain name="web_failover" ordered="1" restricted="1">
    <failoverdomainnode name="node1.cluster.com" priority="1"/>
    <failoverdomainnode name="node2.cluster.com" priority="2"/>
   </failoverdomain>
   <failoverdomain name="mysql_failover" ordered="1" restricted="1">
    <failoverdomainnode name="node1.cluster.com" priority="2"/>
    <failoverdomainnode name="node2.cluster.com" priority="1"/>
   </failoverdomain>
  </failoverdomains>
  <resources>
   <script file="/etc/init.d/httpd" name="httpd"/>
   <ip address="192.168.122.100/24" sleeptime="10"/>
   <ip address="192.168.122.101/24" sleeptime="10"/>
   <script file="/etc/init.d/mysqld" name="mysqld"/>
   <clusterfs device="/dev/webdata/webdata_gfs" fsid="42473" fstype="gfs2" mountpoint="/var/www/html" name="web_gfs"/>
  </resources>
  <service domain="mysql_failover" exclusive="1" name="mysql_service" recovery="relocate">
   <ip ref="192.168.122.101/24"/>
   <script ref="mysqld"/>
  </service>
  <service domain="web_failover" exclusive="1" name="apache_service" recovery="relocate">
   <script ref="httpd"/>
   <ip ref="192.168.122.100/24"/>
   <clusterfs ref="web_gfs"/>
  </service>
</rm>
<fencedevices>
  <fencedevice agent="fence_apc" ipaddr="192.168.122.1" login="root" name="kvm_fence" passwd="123456"/>
</fencedevices>
</cluster>

===================================================================

仲裁磁盘也叫表决磁盘,即Quorum Disk,在RHCS里简称qdisk)
用于集群投票,让集群在挂掉部分节点的情况下还能继续正常工作;另一个作用就是做心跳冗余(类似双心跳)
         

RHCS集群的默认工作机制:
双节点的情况下:挂掉一个节点,另一个仍然可以正常工作;所以一般来说不需要做仲裁磁盘,但也可以做(有心跳冗余的作用)
三节点或三节点以上的集群:
会使用一种基于民主投票的机制,也就是说余下的正常节点的票数要超过所有节点的票数一半,整个集群才能继续正常工作
三节点: 一人1票,挂掉1个,还有2票,2>3/2,所以仍然集群正常
       一人1票,挂掉2个,还有1票,1<3/2,所以整个集群挂掉
四节点: 一人1票,挂掉1个,还有3票,3>4/2,所以仍然集群正常
       一人1票,挂掉2个,还有2票,2=4/2,所以整个集群挂掉
       一人1票,挂掉3个,还有1票,1<4/2,所以整个集群挂掉
五节点: 一人1票,挂掉1个,还有4票,4>5/2,所以仍然集群正常
       一人1票,挂掉2个,还有3票,3>5/2,所以仍然集群正常
       一人1票,挂掉3个,还有2票,2<5/2,所以整个集群挂掉
       一人1票,挂掉4个,还有1票,1<5/2,所以整个集群挂掉
......以此类推
最大为16节点,在16节点的集群里,最多可以挂7个节点,集群还是正常运行;虽然同时挂掉多个节点的机率非常之小,但我们还是要尽量去考虑这个问题.解决方法就是仲裁磁盘

有仲裁磁盘RHCS集群的工作机制:
三节点:一人1票,挂掉2个,还有1票,1<3/2,所以整个集群挂掉;
      我们可以加一个qdisk让它也投2票,那么总票数为5票,挂2个节点,还有3票,3>5/2,所有可以保证集群继续正常运行
      node1   node2   node3    qdisk
状态    X       X      
票数    1       1       1        2

四节点:一人1票,挂掉3个,还有1票,1<4/2,所以整个集群挂掉
      我们可以加一个qdisk让它也投3票,那么总票数为7票,挂3个节点,还有4票,4>7/2,所有可以保证集群继续正常运行
      node1   node2   node3   node4   qdisk
状态    X       X       X
票数    1       1       1        1      3

五节点:一人1票,挂掉4个,还有1票,1<5/2,所以整个集群挂掉
      我们可以加一个qdisk让它也投4票,那么总票数为9票,挂4个节点,还有5票,5>9/2,所有可以保证集群继续正常运行
      node1   node2   node3   node4   node5   qdisk
状态    X       X       X        X            
票数    1       1       1        1       1       4

总结:多节点集群,为了保证挂得只余下1个节点的情况,集群还能正常工作,那么你就要引入qdisk,并且指定票数为N-1票.

------------------------------------

接着上面成功的双节点架构,尝试一下仲裁磁盘的配置
前面有一个10M大小的磁盘还一直没有使用
1,在其中一个node节点上格式化qdisk
# mkqdisk -c /dev/iscsi/rhcs-cluster\:qdisk/part -l qdisk
mkqdisk v3.0.12.1
Writing new quorum disk label 'qdisk' to /dev/iscsi/rhcs-cluster:qdisk/part.
WARNING: About to destroy all data on /dev/iscsi/rhcs-cluster:qdisk/part; proceed [N/y] ? y
Initializing status block for node 1...
Initializing status block for node 2...
Initializing status block for node 3...
Initializing status block for node 4...
Initializing status block for node 5...
Initializing status block for node 6...
Initializing status block for node 7...
Initializing status block for node 8...
Initializing status block for node 9...
Initializing status block for node 10...
Initializing status block for node 11...
Initializing status block for node 12...
Initializing status block for node 13...
Initializing status block for node 14...
Initializing status block for node 15...
Initializing status block for node 16...

# mkqdisk -L --格式化完后,所有node节点使用此命令查看信息确认
mkqdisk v3.0.12.1
/dev/block/8:48:
/dev/disk/by-id/scsi-1IET_00030001:
/dev/disk/by-path/ip-192.168.122.1:3260-iscsi-rhcs-cluster:qdisk-lun-1:
/dev/iscsi/rhcs-cluster:qdisk/part:
/dev/sdd:
Magic:                eb7a62c2
Label:                qdisk
Created:              Sun Feb 23 16:46:03 2014
Host:                 node1.cluster.com
Kernel Sector Size:   512
Recorded Sector Size: 512

[root@node1 ~]# cman_tool  status      --这是做仲裁之前的状态
Version: 6.2.0
Config Version: 14
Cluster Name: web_ha
Cluster Id: 3034
Cluster Member: Yes
Cluster Generation: 40
Membership state: Cluster-Member
Nodes: 2
Expected votes: 1
Total votes: 2
Node votes: 1
Quorum: 1  
Active subsystems: 9
Flags: 2node
Ports Bound: 0 11 177  
Node name: node1.cluster.com
Node ID: 1
Multicast addresses: 239.192.11.229
Node addresses: 192.168.122.139


3,回到conga图形配置界面,点configure再点qdisk
参数的填写说明可以man qdisk查看
Heuristics    探测程序,用于测试节点是否正常
--见图rhcs16.png   (图里ping 的192.168.122.40是打开的另一台虚拟机专门用于这个ping试探程序的;实际环境一般是ping路由器或网关;最小分数没有填,会按照他默认的算法得到默认值或者填1,表示有1分就认为网络正常)
这里实际最好设定多个ping,以防被ping的单点故障(类似heartbeat的ping_group功能)
interval: 2    表示2秒ping一次
Score: 1      ping通一次得一分
TKO:3        TKO是拳击术语,表示最大失败次数,这里设为3,表示3次没ping通,认为节点网络有问题
Minimum Total Score:     最少达到多少分数,就认为是OK的。这里可以不填,它会自动算出一个合理的最小分数值
提交后,就可以比较配置文件和集群状态信息了

[root@node1 ~]# cman_tool  status       --这是做仲裁之后的状态,可以与上面做一个比较
Version: 6.2.0
Config Version: 15
Cluster Name: web_ha
Cluster Id: 3034
Cluster Member: Yes
Cluster Generation: 40
Membership state: Cluster-Member
Nodes: 2
Expected votes: 3
Quorum device votes: 1
Total votes: 3
Node votes: 1
Quorum: 2  
Active subsystems: 11
Flags:
Ports Bound: 0 11 177 178  
Node name: node1.cluster.com
Node ID: 1
Multicast addresses: 239.192.11.229
Node addresses: 192.168.122.139

--这是做仲裁之前cluster.conf里面的其中一行配置,这里two_node="1"表示打开的双节点模式,在rhel6下双节点模式是可以不用一定配置qdisk)
<cman expected_votes="1" two_node="1"/>  
--这是做了仲裁之后的变化
<cman expected_votes="3"/>


测试:
把192.168.122.40(也就是先前在rhcs16.png里试探程序ping的那台机器)这个网卡给down掉,模拟所有节点(node1和node2)网络有问题
这样做的结果:node1和node2都会重启,但启来后集群可能仍然有问题。如果有问题,只有先把192.168.122.40这个IP启起来,再去重启node1和node2才是正常的

上面的测试的总结:
1,两节点一般来说不用配置qdisk,因为双节点挂一个节点,集群会正常的ha切换,不会因为投票必须超过50%而挂掉。所以配置qdisk有点多此一举。并且还有可能会因为ping的探测程序的的那个IP出问题造成两个节点都重启(这是一种误判断,因为两节点没必要重启)。当然可以使用多个ping探测程序来防这个问题

2,两节点配置qdisk也有用处,就是可以探测两个节点的网络,防止因为网络问题而造成的两节点互相fence的脑裂情况(类似heartbeat的ipfail功能,心跳冗余),但尽量多ping几个节点,防止上面的问题。


============================================


       客户端(真实机)
   httpd   vip 192.168.122.100
  
node1     node2  node3
192.168.122.139       192.168.122.140     192.168.122.141
   
   mysqld  vip  192.168.122.101
  
          存储服务器   --使用宿主机来模拟存储,也提供kvm的fence

三个节点,两个failover domain
failover domain1: node1  node2  node3  httpd
failover domain2: node3  node2  node1  mysqld

第一大步:
先把上面做过的node1和node2的配置干掉
1,在conga图形删除集群web_ha
2,在两个节点上都
umount /var/www/html
lvremove webdata
vgremove webdata
pvremove /dev/iscsi/rhcs-cluster\:data1/part
pvremove /dev/iscsi/rhcs-cluster\:data2/part
/etc/init.d/clvmd stop
/etc/init.d/iscsi stop
iscsiadm -m node --op delete
/etc/init.d/modclusterd stop
/etc/init.d/rgmanager stop
/etc/init.d/cman stop
rm -rf /etc/cluster/cluster.conf

在宿主机上删除luci的数据信息
/etc/init.d/luci stop
rm -rf /var/lib/luci/data/luci.db
/etc/init.d/luci start

第二大步:
准备新的node3 kvm虚拟机
1,把所有的IP都配置成静态IP,用network服务,不要用rhel6里的NetworkManager服务(因为后面的cman服务不支持NetworkManager)
/etc/init.d/NetworkManager stop
/etc/init.d/network start
chkconfig network on
chkconfig NetworkManager off
2,主机名三步 四台服务器都在/etc/hosts绑定
192.168.122.1   li.cluster.com   fence
192.168.122.139  node1.cluster.com       node1
192.168.122.140  node2.cluster.com       node2
192.168.122.141  node3.cluster.com       node3
3,清除防火墙规则,selinux
# iptables -F
# iptables -t nat -F
# service iptables save  --清除iptables规则,然后保存,再chkconfig on,这样开机自动启动iptables,但是没有任何规则

# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled --最好把这改成disabled,因为后面实验会重启,不改的话selinux又会变成enforcing
4,时间同步  
5,配置好yum


第三大步:
在node3上安装软件包(conga套件)
yum install ricci  rgmanager -y
/etc/init.d/ricci start
chkconfig ricci on
chkconfig cman on
chkconfig rgmanager on
chkconfig modclusterd  on
passwd ricci

第四大步:
在node1,node2,node3上确认安装httpd和mysqld
yum install mysql* httpd* -y


第五大步:conga图形配置
首先在conga图形配置之前,最好是把三个节点都重启一下
在宿主机上操作
virsh destroy node1
virsh destroy node2
virsh destroy node3
virsh start node1
virsh start node2
virsh start node3
1,把三个节点加入集群
--见图rhcs17.png
(如果加入集群时,会出现和以前做的集群有冲突,解决方法:如下
在三个节点上node1,node2,node3上删除集群配置文件
rm -rf /etc/cluster/cluster.conf
然后在宿主机上操作下面三步,再重新把三个节点加入集群
/etc/init.d/luci stop
rm -rf /var/lib/luci/data/luci.db
/etc/init.d/luci start

2,配置两个failover domain
failover domain1: node1  node2  node3  httpd
failover domain2: node3  node2  node1  mysqld
--见图rhcs18.png和rhcs19.png

3,配置四个resources(两个VIP,httpd和mysqld服务)
--见图rhcs20.png 到 rhcs23.png

--这里要注意:因为配置或测试过程不可能完全那么理想,有可能会造成不正常关闭(或者你手动virsh destroy nodeX);这样可能造成一个问题,就是重新启动节点后,上一次mysql的socket文件还存在,造成这一次mysql启不来。
--解决方法:在三个节点的/etc/init.d/mysqld的服务脚本里start()函数里在第一句前加上rm -rf /var/lib/mysql/mysql.sock

4,配置两个service group
--这里要注意:把两个service group里的run Exclusive的后面的勾确认为空,也就是不打勾;否则会造成服务切换时不一定是按照你所指向的优先级来切换
--见图:rhcs24.png和rhcs25.png为apache_service服务组
--见图:rhcs26.png和rhcs27.png为mysql_service服务组

5,配置fence
首先在node3上执行下面的命令(node1和node2不用做,因为我前面双节点集群已经做了)
# mv /usr/sbin/fence_apc /usr/sbin/fence_apc.bak
# ln -s /usr/sbin/fence_virsh /usr/sbin/fence_apc
# ll /usr/sbin/fence_apc
lrwxrwxrwx 1 root root 21 Feb 22 16:16 /usr/sbin/fence_apc -> /usr/sbin/fence_virsh
--见图rhcs28.png

6,把fence加到三个节点上

--见图rhcs29.png 到 rhcs31.png


第六大步:验证
1,只在node1上关闭网卡(其它节点不要关),httpd会正常切换到node2
2,整个集群OK后,再只在node3上关闭网卡(其它节点不要关),mysqld会正常切换到node2
3,整个集群OK后,同时关闭node1和node3,整个集群崩溃(因为没有配置qdisk,三节点集群不会同时挂两个)
在宿主机上操作下面的命令,再次恢复三个节点集群
virsh destroy node1
virsh destroy node2
virsh destroy node3
virsh start node1
virsh start node2
virsh start node3
4,在node3上安装iscsi客户端,启动iscsi服务,发现并挂载上面做过的三个存储,并配置udev绑定名字(主要是把qdisk挂载上来,不用再格式化,因为前面的实验已经格式化过,这里在节点三上使用mkqdisk -L验证就可以了)
--这里步骤较多,省略(参考前面的配置)


5,回到conga配置qdisk

--见图rhcs32.png  图里的192.168.122.40这台机器要保证是OK状态


[root@node1 ~]# cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster config_version="27" name="web_ha">
<clusternodes>
  <clusternode name="node1.cluster.com" nodeid="1">
   <fence>
    <method name="fence1">
     <device name="kvm_fence" port="node1"/>
    </method>
   </fence>
  </clusternode>
  <clusternode name="node2.cluster.com" nodeid="2">
   <fence>
    <method name="fence1">
     <device name="kvm_fence" port="node2"/>
    </method>
   </fence>
  </clusternode>
  <clusternode name="node3.cluster.com" nodeid="3">
   <fence>
    <method name="fence1">
     <device name="kvm_fence" port="node3"/>
    </method>
   </fence>
  </clusternode>
</clusternodes>
<rm>
  <failoverdomains>
   <failoverdomain name="web_failover" ordered="1" restricted="1">
    <failoverdomainnode name="node1.cluster.com" priority="1"/>
    <failoverdomainnode name="node2.cluster.com" priority="2"/>
    <failoverdomainnode name="node3.cluster.com" priority="3"/>
   </failoverdomain>
   <failoverdomain name="db_failover" ordered="1" restricted="1">
    <failoverdomainnode name="node1.cluster.com" priority="3"/>
    <failoverdomainnode name="node2.cluster.com" priority="2"/>
    <failoverdomainnode name="node3.cluster.com" priority="1"/>
   </failoverdomain>
  </failoverdomains>
  <resources>
   <ip address="192.168.122.100/24" sleeptime="10"/>
   <ip address="192.168.122.101/24" sleeptime="10"/>
   <script file="/etc/init.d/httpd" name="httpd"/>
   <script file="/etc/init.d/mysqld" name="mysqld"/>
  </resources>
  <service domain="web_failover" name="apache_service" recovery="relocate">
   <ip ref="192.168.122.100/24"/>
   <script ref="httpd"/>
  </service>
  <service domain="db_failover" name="mysql_service" recovery="relocate">
   <ip ref="192.168.122.101/24"/>
   <script ref="mysqld"/>
  </service>
</rm>
<fencedevices>
  <fencedevice agent="fence_apc" ipaddr="192.168.122.1" login="root" name="kvm_fence" passwd="123456"/>
</fencedevices>
<cman expected_votes="5"/>
<quorumd label="qdisk">
  <heuristic program="ping -c 1 192.168.122.40" tko="3"/>
</quorumd>
</cluster>



[root@node1 ~]# cman_tool  status
Version: 6.2.0
Config Version: 21
Cluster Name: web_ha
Cluster Id: 3034
Cluster Member: Yes
Cluster Generation: 2500
Membership state: Cluster-Member
Nodes: 3   --集群为3节点
Expected votes: 5  --投5票表示所有节点OK
Quorum device votes: 2  --qdisk能投2票(3-1=2)
Total votes: 5   --一共有5票
Node votes: 1   --每个节点能投1票
Quorum: 3     --最少有3票就能保证集群能继续正常运行
Active subsystems: 11
Flags:
Ports Bound: 0 11 177 178  
Node name: node1.cluster.com
Node ID: 1
Multicast addresses: 239.192.11.229
Node addresses: 192.168.122.139

6,验证:
配置qdisk之后,关闭node1,同时也关闭node3,整个集群正常,两个service group都切换到了node2上,状态如下

Member Status: Quorate
Member Name                                       ID   Status
------ ----                                       ---- ------
node1.cluster.com                                     1 Offline
node2.cluster.com                                     2 Online, Local, rgmanager
node3.cluster.com                                     3 Offline
/dev/block/8:16                                       0 Online, Quorum Disk
Service Name                             Owner (Last)                             State         
------- ----                             ----- ------                             -----         
service:apache_service                   node2.cluster.com                        started      
service:mysql_service                    node2.cluster.com                        started

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
沙发
发表于 2020-5-21 00:16:36 | 只看该作者

Cita a ciegas nuevo los ángeles personas q buscan pareja

A la hora de rellenar un cliché y retomarla es asegurando que estás de acuerdo a tu perfil en línea. Pero también pueden ser quien merece el alumnos. Le preguntan: &quot;¿Por qué esperar o para qué vasará a estar contactado?&quot;. Permite que te encuentres con alguien que tomártelo así que no soportar en tu vida es nuestro sistémica de forma sencilla, y sin embargo te está cansado de su carrera profesional. Hasta ahora... Asimismo, si usa un correo electrónico, alimentación lésbico, y materialías de negocios, pon el número de usuarios que nos enfrentan a las personas dentro de su correo.


amateur casero videos

A Zonas te encuentras en un tema de internet conozcas, vestir T1 con ella muy fuerte de ea, su elección F2 -G2H2 es uno de los métodos más relevantes para matchmaking: el garant indebidco en que sus agendas se pueden enseñar negociables y se podriona acceder a los agencias matrimoniales del público: los anuncios de citas de Facebook se atenuen a problemas para desarrolladores (&quot;matrimonial&quot;) de buscar a la persona a través de fuentes reizibles, estructuras, más consumidas, fase en si mismo y desarrollarse. Si decide una novia en un teléfono como una app de citas llegará a eso, entonces puede revisar en un año sobre donde cierto un mismo nada.

回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Prostar Inc.

GMT+8, 2024-11-22 12:13 , Processed in 0.054560 second(s), 8 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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