RHCS 实现高可用 HA(一)

简介:

RHCS即 RedHat Cluster Suite ,中文意思即红帽集群套件。
红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。
它提供有如下两种不同类型的集群:

  • 1、高可用性:应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
  • 2、负载均衡:IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡
  • 在这里插入图片描述

特点:

1、最多支持128个节点(红帽企业Linux 3 和红帽企业Linux 4 支持 16 个节点)。
2、可同时为多个应用提供高可用性。
3、NFS/CIFS 故障切换:支持 Unix 和 Windows 环境下使用的高可用性文件。
4、完全共享的存储子系统:所有集群成员都可以访问同一个存储子系统。
5、综合数据完整性:使用最新的 I/O 屏障(barrier)技术,如可编程的嵌入式和外部电源开关装置(power switches)。
6、服务故障切换:红帽集群套件可以确保及时发现硬件停止运行或故障的发生并自动恢复系统,同时,它还可以通过监控应用来确保应用的正确运行并在其发生故障时进行自

集群相关术语:

1.节点(node)
运行集群进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和集群软件服务,在集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
2.资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管
3.事件(event)
也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。
4.动作(action)
事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源

集群大致结构

在这里插入图片描述

RHCS环境的搭建

实验环境

主机 ip
server1(下载ricci,luci(为了提供Conga配置用户界面),作主节点 ) 172.25.5.1
server2(下载ricci,作副节点 ) 172.25.5.2
server3(后面作iscci共享存储) 172.25.5.3
foundation5(后面作fence) 172.25.5.250

rhel6.5 selinux disabled iptables stop
注意:
从红帽企业版 Linux 6.1 开始,您在任意节点中使用 ricci 推广更新的集群配置时要求输入密码。所以在前面两台主机安装完成ricci后需要修改ricci用户的密码,这个是后面节点设置的密码,并且要作时间同步;然后启动安装的服务

1.给server1和server2配置高可用yum源

[HighAvailability]    ##高可用
name=HighAvailability
baseurl=http://172.25.5.250/rhel6.5/HighAvailability
gpgcheck=1

[LoadBalancer]   ##负载平衡
name=LoadBalancer
baseurl=http://172.25.5.250/rhel6.5/LoadBalancer
gpgcheck=1

[ResilientStorage]  ##存储
name=ResilientStorage
baseurl=http://172.25.5.250/rhel6.5/ResilientStorage
gpgcheck=1

[ScalableFileSystem]  ##系统文件
name=ScalableFileSystem
baseurl=http://172.25.5.250/rhel6.5/ScalableFileSystem
gpgcheck=1

2.下载相关软件包

server1:

[root@server1 ~]# yum install ricci luci -y  下载ricci和luci作为主节点
[root@server1 ~]# passwd ricci            修改ricci用户密码
Changing password for user ricci.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@server1 ~]# /etc/init.d/ricci start     开启ricci服务
[root@server1 ~]# /etc/init.d/luci start      开启luci服务
[root@server1 ~]# chkconfig ricci on       开机自启动服务
[root@server1 ~]# chkconfig luci on    
[root@server1 ~]# netstat -tnlp        
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:8084                0.0.0.0:*                   LISTEN      1287/python         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      873/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      951/master          
tcp        0      0 :::22                       :::*                        LISTEN      873/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      951/master          
tcp        0      0 :::11111                    :::*                        LISTEN      1206/ricci          
[root@server1 ~]# cat /etc/hosts     看本地解析是否存在副节点的解析
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.5.1 server1
172.25.5.2 server2
172.25.5.3 server3
172.25.5.4 server4
172.25.5.5 server5
172.25.5.6 server6

server2:

[root@server2 ~]# yum install ricci -y   ##下载ricci作为副节点
[root@server2 ~]# passwd ricci
Changing password for user ricci.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@server2 ~]# /etc/init.d/ricci start
[root@server2 ~]# chkconfig ricci on
[root@server2 ~]# cat /etc/hosts   ##同样看是否有主节点的解析
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.5.1 server1
172.25.5.2 server2
172.25.5.3 server3
172.25.5.4 server4
172.25.5.5 server5
172.25.5.6 server6

3.创建集群

1.在浏览器中输入https://172.25.5.1:8084

在网页浏览器的地址栏中输入 cman 服务器的 URL
luci服务器的URL语法为https://172.25.5.1:luci_server_port。luci_server_port 的默认值为 8084

首次访问 luci 时,网页浏览器会根据显示的自我签名 SSL 证书( luci 服务器的证书)给出具体提示。确认一个或者多个对话框后,您的网页显示器会显示 luci 登录页面。
在这里插入图片描述

2.登陆进入后点击管理集群开始添加集群(注用户密码是服务器的用户名密码,这里以root身份)

虽然所有可以在托管 luci 的系统中认证的用户都可以登录 luci,但从红帽企业版 Linux 6.2 开始,只 有运行 luci 的系统中的 root 可以访问所有 luci 组件,除非管理员(root 用户或者有管理员权限的用 户)为那个用户设置权限。
在这里插入图片描述
//最下面两个是加入节点自动重启和支持共享存储

  • 注意:
  • 1、在「集群名称」 文本框中输入集群名称。集群名称不能超过 15 个字符。
    如果集群中的每个节点都有同样的 ricci 密码,您可以选择「在所有 节 点中使用相同的密 码 」 ,这样就可在添加的节点中自动填写「密 码 」 字段。
    2、在「 节 点名称」 栏中输入集群中节点的名称,并在「密 码 」 栏中为该节点输入 ricci 密码。
    3、如果要在 ricci 代理中使用不同的端口,而不是默认的 11111 端口,可以更改那个参数。
    4、如果不想要在创建集群时升级已经在节点中安装的集群软件软件包,请选择「使用本地安装的软 件包」 选项。如果要升级所有集群软件软件包,请选择「下 载软 件包」 选项
    5、添加完成后会发现一直在等待状态,这时查看服务器,会发现server1已经重启,这时只需要启动后再开启服务就成功添加节点了。
    如果缺少任意基本集群组件(cm an、rgm anager、m odcluster 及其所有相依性软件 包),无论是选择「使用本地安装的 软 件包」 ,还是「下 载软 件包」 选项,都会安装它 们。如果没有安装它们,则创建节点会失败
    此时,在两个主机中的任一个上执行clustat,或者cat /etc/cluster/cluster.conf ,都可以查看到集群的信息
    在这里插入图片描述

4.配置故障切换

RHCS的一个很重要概念:Failover Domain故障转移域,更准确地说应该是服务故障转移域(一个服务包括多个资源如VIP FileSystem…)key当i定义一个节点故障后,此节点上的资源能够转移的目标节点,进而限制了资源转移的范围
FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令, 将服务器重启或关机,或者与网络断开连接。

FENCE的工作原理:

当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资 源进行了释放,保证了资源和服务始终运行在一个节点上。

向集群添加fence

1.

这里作为fence的是我们的主机,172.25.5.250

  • 安装软件fence-virtd-multicast、fence-virtd、fence-virtd-libvirt;
  • fence_virtd -c编写新的fence信息
    安装fence,选择工作模式”multicast”,地址”225.0.0.12”,端口”1229”,family”ipv4”,网络interface”br0”,Backend module “libvirt”;
  • 执行命令:dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
  • 生成128位的key,可以file查看这个key类型是数据(data),并将key发送到套件集群服务器(server1,server4)的/etc/cluster目录下,
  • 完成后可以通过文件 /etc/fence_virt.conf 查看fence的信息;
  • 重新启动fence_virtd;
[root@foundation5 rhel6.5]# yum search fence
[root@foundation5 rhel6.5]# yum install fence-virtd-multicast.x86_64 fence-virtd.x86_64 fence-virtd-libvirt.x86_64 -y
[root@foundation5 rhel6.5]# fence_virtd -c
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]: br0

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 = "br0";
		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@foundation5 rhel6.5]# mkdir /etc/cluster
[root@foundation5 rhel6.5]# cd /etc/cluster/
[root@foundation5 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
[root@foundation5 cluster]# hexdump -C fence_xvm.key 
00000000  79 99 d0 27 bf e2 ca 6a  9b ab 90 8e aa b8 04 6c  |y..'...j.......l|
00000010  de 7b a3 37 a4 2b bf 9e  7f a0 66 94 f7 fa 72 88  |.{.7.+....f...r.|
00000020  1a 30 a7 da 15 13 d1 3b  52 ca 18 d6 bc d4 b2 9a  |.0.....;R.......|
00000030  d9 ed 5f 5a 82 b9 1a 8d  9c c3 28 df 34 b5 a5 90  |.._Z......(.4...|
00000040  4c 4c d0 ec 6c 7e 33 48  fe 61 a8 1a 11 d0 ba 48  |LL..l~3H.a.....H|
00000050  8d da 04 0b 52 0d 53 da  ec 51 3f df a5 bf 07 42  |....R.S..Q?....B|
00000060  df 85 76 54 39 68 ee 0a  f9 e0 03 7d a7 7e 5f b8  |..vT9h.....}.~_.|
00000070  f2 26 bf 47 29 4a e1 d7  bf 96 51 fc 9e cb d9 70  |.&.G)J....Q....p|
00000080
[root@foundation5 cluster]# scp fence_xvm.key [email protected]:/etc/cluster/
[email protected]'s password: 
fence_xvm.key                                 100%  128     0.1KB/s   00:00    
[root@foundation5 cluster]# scp fence_xvm.key [email protected]:/etc/cluster/
[email protected]'s password: 
fence_xvm.key                                 100%  128     0.1KB/s   00:00    
[root@foundation5 cluster]# systemctl start fence_virtd.service 
[root@foundation5 cluster]# systemctl status fence_virtd.service
 Active: active (running)

2.在luci(https://172.25.5.1:8084)上的配置:

1.登陆luci选择集群,点击Fence Devices;
在这里插入图片描述
2.点击Add,选择模式为”Fence virt (Multicast Mode)”,输入一个自动以的Fence名称,点击Submit;
__注:此时查看server1的集群信息文件/etc/cluster/cluster.conf,会发现vmfence
在这里插入图片描述
3.点击Nodes,选择server1,点击界面下的”Add Fence Method”,输入一个自定义的server1的Fence名称,例如fence1;
在这里插入图片描述
点击Add Fence Instance,选择之前设置好的vmfence,输入Domain(虚拟服务器的UUID)
在这里插入图片描述
//重新查看cluster.conf文件,配置已经更改
4.在另一个server2上做同样操作,名称fence2,Domain为server2的;
测试:
在server1输入fence_node server2,可以让server2跳电,即直接断掉电源,即为成功;

3.删 除 Fence 设备

注意:
无法删除使用中的 fence 设备。要删除某个节点目前正在使用的 fence 设备,请首先为使用该设备的 所有节点更新节点 fence 配置,然后删除该设备。
要删除 fence 设备,请按照以下步骤执行:

  1. 在「 Fence 设备 」 配置页面中选择 fence 设备左侧的复选框选择要删除的设备。
  2. 点击 删 除 并等待配置更新。此时会出现一条信息说明已经删除了该设备。 当更新配置后,显示中不再会出现删除的 fence 设备。**

5.添加服务

HA 服务是一组在统一实体中配置的集群资源,可为客户端提供指定的服务。HA 服务在集群配置文件/etc/cluster/cluster.conf(在每个集群节点中)中以资源树的形式出现。在集群配置文件中,每个 资源树都使用一个 XML 代表,它指定每个资源及其属性,以及在资源树中与其他资源的关系(上级、下级和平级关系)。
在资源树的上/下级关系中采用以下规则:

  • 上级资源在下级资源之前启动。
    在停止上级资源前必须停止全部下级资源。
    对于正常工作的资源,其下级资源必须全部正常工作。

添加一个服务,这里以httpd为例:

  • 在server1和server4上均配置好httpd,编写各自的网页(index.html文件);
  • 启动启动Apache服务检测是否正常显示网页,检测完成后server1和server4均关闭httpd服务;
  • 交给集群的资源一定是屏蔽掉的,因为要交给集群去开启
    1.进入luci的集群,点击Faliover Domains,点击Add,输入Name,例如webfile,**选中Prioritized、Restricted(只在指定节点跑)、No Failback(资源故障回切),**选中下方的server1和server4的Member并输入优先级,这里server1输入10,server2输入1,就是以server1为主节点,数字越小优先级越高;
    在这里插入图片描述
    2.点击Resources,点击Add,选择模式IP Address,输入IP和NETMASK,IP不能被占用,这个IP就是VIP,点击Submit; 注意:子网掩码要匹配,不一定都是24
    在这里插入图片描述
    3.点击Resources,点击Add,选择模式Script,输入Name”apache“,并输入脚本路径”/etc/init.d/httpd“,点击Submit;
    在这里插入图片描述
    4.点击Service Groups,点击Add,输入一个自定义名称,例如”web“,选中”Automatically Start This Service“(集群自动开启)和”Run Exclusive(运行独占)“,选中”Failover Domain”下刚才创建的”webfile“,”Recovery Policy”选择”Relocate“,点击下方Add Resource,选择之前创建的Resources,因为有两个,所以需要添加两次,完成后点击Submit;
    节点资源添加的顺序,就是启动的顺序,所以先开启VIP,然后再启动httpd,要注意!!
    在这里插入图片描述
    在这里插入图片描述

6.测试

1.用foundation5访问vip显示的是主节点上的服务
在这里插入图片描述
2.命令行的显示:
在这里插入图片描述
clusvcadm -r apache -m server2 转移服务
clusvcadm -s apache //关闭httpd服务
clusvcadm -e apache //打开httpd服务

3.将服务转到server2,使用命令”echo c > /proc/sysrq-trigger“崩溃server2的内核(b,h…都有对应的操作项),并观察server2发现server2崩溃后自动转换到server1的界面
4.如果前面不勾选**No Failback(资源故障回切)**并且server1重新启动,clustat查看server1重新started
其实server1不止是重新启动,还会自动添加到fence中,并且VIP也会自动飘过来;
这就是故障切换。

猜你喜欢

转载自blog.csdn.net/weixin_43407305/article/details/87531036
今日推荐