RHCS高可用集群配置(luci+ricci+fence)

来源:互联网 发布:鼎盈人工智能 编辑:程序博客网 时间:2024/05/21 19:27

一 、关于RHCS

1. 什么是RHCS

RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。 RHCS提供了集群系统中三种集群构架,分别是高可用性集群、负载均衡集群、存储集群。

2. RHCS提供的三个核心功能

高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用性服务管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务,这就是RHCS高可用集群实现的功能。RHCS通过LVS(Linux Virtual Server)来提供负载均衡集群,而LVS是一个开源的、功能强大的基于IP的负载均衡技术,LVS由负载调度器和服务访问节点组成,通过LVS的负载调度功能,可以将客户端请求平均的分配到各个服务节点,同时,还可以定义多种负载分配策略,当一个请求进来时,集群系统根据调度算法来判断应该将请求分配到哪个服务节点,然后,由分配到的节点响应客户端请求,同时,LVS还提供了服务节点故障转移功能,也就是当某个服务节点不能提供服务时,LVS会自动屏蔽这个故障节点,接着将失败节点从集群中剔除,同时将新来此节点的请求平滑的转移到其它正常节点上来;而当此故障节点恢复正常后,LVS又会自动将此节点加入到集群中去。而这一系列切换动作,对用户来说,都是透明的,通过故障转移功能,保证了服务的不间断、稳定运行。    RHCS通过GFS文件系统来提供存储集群功能,GFS是Global File System的缩写,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中从而消除了在应用程序间同步数据的麻烦,GFS是一个分布式文件系统,它通过锁管理机制,来协调和管理多个服务节点对同一个文件系统的读写操作。

3. RHCS集群的组成

RHCS是一个集群工具的集合,主要有下面几大部分组成:

集群构架管理器

这是RHCS集群的一个基础套件,提供一个集群的基本功能,使各个节点组成集群在一起工作,具体包含分布式集群管理器(CMAN)、成员关系管理、锁管理(DLM)、配置文件管理(CCS)、栅设备(FENCE)。

高可用服务管理器

提供节点服务监控和服务故障转移功能,当一个节点服务出现故障时,将服务转移到另一个健康节点。

实验环境主机配置及功能:

server2 ip:172.6.6.20 安装ricci(集群节点)
server3 ip 172.6.6.30 安装ricci(集群节点) 和luci(集群管理界面)

fence主机:双ip(一个外网,一个172.6.6.6),apache服务用来挂载镜像,安装fence

二、创建集群

1. yum源的配置

因为是附加组件所以可以直接从镜像中获得,本示例集群的安装从yum源进行,所以首先我们需要挂载一个镜像(示例中rhel6.5的镜像挂载在172.6.6.6的apache服务下)作为yum源
这里写图片描述
上图中标出部分即为高可用组件,然后根据需要我们来配置一下yum源:

cat /etc/yum.repo/yum.repo

[halo]name=halobaseurl=http://172.6.6.6/iso6gpgcheck=0[HighAvailability]name=HighAvailabilitybaseurl=http://172.6.6.6/iso6/HighAvailabilitygpgcheck=0[LoadBalancer]name=LoadBalancerbaseurl=http://172.6.6.6/iso6/LoadBalancergpgcheck=0[ResilientStorage]name=ResilientStoragebaseurl=http://172.6.6.6/iso6/ResilientStoragegpgcheck=0[ScalableFileSystem]name=ScalableFileSystembaseurl=http://172.6.6.6/iso6/ScalableFileSystemgpgcheck=0

配置好yum源执行yum clean all清理缓存,准备下一步的安装过程了。

2. 安装luci和ricci

luci的作用我们可以通过一句话来知晓(只是管理高可用的应用而已):

# luci    high availability management application

ricci的作用:

# description:  Starts and stops Red Hat Cluster and Storage Remote Configuration Interface (ricci)

直接yum安装

#server3yum install luci ricci -y#server2yum install ricci -y

安装完成启动服务(有必要进行开机自启动的设置chkconfig service on),关闭防火墙(iptables -F)

server2和server3:/etc/init.d/ricci startserver3:/etc/init.d/luci start

注意要为ricci用户添加密码(两台都要做),这个等会创建集群的时候需要对应起来

passwd ricci

3. 解析配置

两台ricci主机中做好解析:

vim /etc/hosts添加以下内容:172.6.6.20 server2172.6.6.30 server3

4. 访问测试

在server3中启动luci服务的时候有提示:
在外部注意通过https://server3:8084进行访问
那我们就访问一下,因为是https访问,所以需要添加信任网络,访问到的结果如下:

这里写图片描述

登录用户为系统(luci所在主机,此例中为172.6.6.30)root,密码为root用户的密码

5. 创建一个集群

点击集群管理(Manager Clusters),然后点击create出现以下页面,根据实际情况填写信息即可(注意Ricci Hostname是做过解析的)
这里写图片描述
add(添加一个已有的集群) create(创建一个新的集群) remove(移除已有集群)

这里写图片描述

只要server2和server3上的ricci服务正常启动,并且网络正常连接,一般就会出现如下界面,这个时候server2和server3就会自动reboot,如果luci和ricci没有设置开机自启动的话需要手动启动一下,这样才能看到下一张图片的内容
这里写图片描述

集群添加成功,这个时候在server2和server3中的/etc/cluster/cluster.conf文件中就会有一些配置写入

这里写图片描述

如果已经创建了集群,在我们删掉集群之后需要手动清除/etc/cluster/cluster.conf配置文件,否则下次将节点加入集群的时候会提示错误,注意如果集群创建好了之后如果某些节点运行不正常,需要检查的地方有:防火墙,相关服务是否启动(ricci和cman),解析是否正确。。。
通过本地命令查看集群状态:
这里写图片描述

三、配置fence

通过栅设备可以从集群共享存储中断开一个节点,切断I/O以保证数据的完整性。当CMAN确定一个节点失败后,它在集群结构中通告这个失败的节点,fenced进程将失败的节点隔离,以保证失败节点不破坏共享数据。它可以避免因出现不可预知的情况而造成的“脑裂”(split-brain)现象。“脑裂”是指当两个节点之间的心跳线中断时,两台主机都无法获取对方的信息,此时两台主机都认为自己是主节点,于是对集群资源(共享存储,公共IP地址)进行争用,抢夺。Fence的工作原理是:当意外原因导致主机异常或宕机时,备用机会首先调用fence设备,然后通过fence设备将异常的主机重启或从网络上隔离,释放异常主机占据的资源,当隔离操作成功后,返回信息给备用机,备用机在接到信息后,开始接管主机的服务和资源。RHCS的Fence设备可以分为两种:内部Fence和外部Fence。内部fence有IBM RSAII卡,HP的ILO卡,以及IPMI设备等;外部FENCE设备有UPS,SAN switch ,Network switch等。当节点A上的栅过程发现C节点失效时,它通过栅代理通知光纤通道交换机将C节点隔离,从而释放占用的共享存储。当A上的栅过程发现C节点失效时,它通过栅代理直接对服务器做电源power on/off,而不是去执行操作系统的开关机指令。

1. 在fence主机上安装fence

yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y

2. 执行fence配置

[root@lockey iso6]# systemctl start fence_virtd.service
[root@lockey iso6]# fence_virtd -c
#除了Interface [virbr0]:这一项要根据具体情况来修改之外其他基本都直接回车即可
Module search path [/usr/lib64/fence-virt]:

Available backends:
libvirt 0.1
Available listeners:
multicast 1.2

Listener modules are responsible for accepting requests
from fencing clients.

Listener module [multicast]:

The multicast listener module is designed for use environments
where the guests and hosts may communicate over a network using
multicast.

The multicast address is the address that a client will use to
send fencing requests to fence_virtd.

Multicast IP Address [225.0.0.12]:

Using ipv4 as family.

Multicast IP Port [1229]:

Setting a preferred interface causes fence_virtd to listen only
on that interface. Normally, it listens on all interfaces.
In environments where the virtual machines are using the host
machine as a gateway, this must be set (typically to virbr0).
Set to ‘none’ for no interface.

Interface [virbr0]:

The key file is the shared key information which is used to
authenticate fencing requests. The contents of this file must
be distributed to each physical host and virtual machine within
a cluster.

Key File [/etc/cluster/fence_xvm.key]:

Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.

Backend module [libvirt]:

Configuration complete.

=== Begin Configuration ===
backends {
libvirt {
uri = “qemu:///system”;
}

}

listeners {
multicast {
port = “1229”;
family = “ipv4”;
interface = “virbr0”;
address = “225.0.0.12”;
key_file = “/etc/cluster/fence_xvm.key”;
}

}

fence_virtd {
module_path = “/usr/lib64/fence-virt”;
backend = “libvirt”;
listener = “multicast”;
}

=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y
[root@lockey iso6]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000234745 s, 2.2 MB/s

#生成fence认证钥匙并分发给节点
[root@lockey iso6]# scp /etc/cluster/fence_xvm.key root@172.6.6.20:/etc/cluster/
root@172.6.6.20’s password:
fence_xvm.key 100% 512 0.5KB/s 00:00
[root@lockey iso6]# scp /etc/cluster/fence_xvm.key root@172.6.6.30:/etc/cluster/
root@172.6.6.30’s password:
fence_xvm.key

3. 添加fence设备

这里写图片描述

fence添加成功提示
这里写图片描述

成功之后两个集群节点的/etc/cluster/cluster.conf文件中就会出现fence配置内容,如下:

[root@rhel6-vm2 ~]# cat /etc/cluster/cluster.conf <?xml version="1.0"?><cluster config_version="3" name="cluseter2-3">    <clusternodes>        <clusternode name="server2" nodeid="1"/>        <clusternode name="server3" nodeid="2"/>    </clusternodes>    <cman expected_votes="1" two_node="1"/>    <fencedevices>        <fencedevice agent="fence_xvm" name="fence23"/>    </fencedevices></cluster>[root@rhel6-vm2 ~]# 

4. 绑定节点(两个节点都要进行以下操作)

第一步add fence method,第二步add fence instance(需要填写主机的uuid或者域名)
这里写图片描述
这里写图片描述

两个节点都绑定后配置文件内容应该如下:
[root@rhel6-vm3 ~]# cat /etc/cluster/cluster.conf

<?xml version="1.0"?><cluster config_version="17" name="cluseter2-3">    <clusternodes>        <clusternode name="server2" nodeid="1">            <fence>                <method name="fence2">                    <device domain="564da0f9-987b-3d6e-4e78-49ecb06657d1" name="fence23"/>                </method>            </fence>        </clusternode>        <clusternode name="server3" nodeid="2">            <fence>                <method name="fence3">                    <device domain="564db6d5-07a4-5f8e-eb0e-64f9eb10f48a" name="fence23"/>                </method>            </fence>        </clusternode>    </clusternodes>    <cman expected_votes="1" two_node="1"/>    <fencedevices>        <fencedevice agent="fence_xvm" name="fence23"/>    </fencedevices></cluster>

5. 测试

在server2上通过fence干掉节点server3,使server3断电

[root@rhel6-vm2 ~]# fence_node server3 fence server3 success  

四、高可用服务配置

1.添加failover 域
这里写图片描述

2.添加虚拟ip
这里写图片描述

3. 添加可执行脚本
这里写图片描述

4.添加需要进行高可用的服务组到集群
这里写图片描述
依次为集群服务添加虚拟IP和执行脚本,如上2、3
5. 测试

clusvcadm -d apache ##关闭服务clusvcadm -e apache ##开启服务

五、 为集群添加共享磁盘

1.配置共享磁盘
server1 172.6.6.10(新加一块硬盘作为其他主机的共享磁盘,假定添加的磁盘为/dev/vdb)

yum install scsi-target-utils -yvim /etc/tgt/targets.conf ##编辑磁盘共享配置文件<target iqn.2017-09.com.example:server.target1>    backing-store /dev/vdb    initiator-address 172.6.6.20    initiator-address 172.6.6.30    #只共享给server2和server3  </target>

/etc/init.d/tgtd start
tgt-admin -s
##查看共享

2.节点连接共享磁盘
server2
server3
同时安装iscsi-initiator-utils

yum install  iscsi-initiator-utils -y

iscsiadm -m discovery -t st -p 172.6.6.10
iscsiadm -m node -l ##iscsi登陆

只在server2(或者server3)进行以下操作

fdisk -l ##查看是否有/dev/sdafdisk -cu /dev/sda ##对共享磁盘进行分区

##lvm创建

pvcreate /dev/sda1vgcreate clustervg /dev/sda1lvcreate -L +2G -n demo clustervg

操作完成在serve2和server3上查看结果是否一致:

pvs && vgs && lvs

如果没有同步,则执行partprobe然后再查看,如果一致则进行以下操作:

mkfs.ext4 /dev/clustervg/demo ##格式化文件系统mount /dev/clustervg/demo /var/www/html/ ##挂载使用
原创粉丝点击