前期准备:
1.三台主机
一台安装luci和ricci
另一台安装ricci
还有一台用来安装fencd_virtd服务
我的三台的ip分别是:(三台的ip互通即可)
172.25.90.1
172.25.90.2
172.25.254.90
2.配置yum源
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.254.90/rhel6.5/Server
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.254.90/rhel6.5/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.254.90/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.254.90/rhel6.5/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.254.90/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=0
集群中luci的作用:
luci是用来配置和管理集群,监听在8084上
集群中ricci的作用:
ricci是安装在每个后端的每个节点上的,luci管理集群上的各个节点就是通过和节点上的ricci进行通信,ricci监听在11111上
集群中fence的作用:
在HA集群坏境中,备份服务器B通过心跳线来发送数据包来看服务器A是否还活着,主服务器A接收了大量的客户端访问请求,服务器A的CPU负载达到100%响应不过来了,资源已经耗尽,没有办法回复服务器B数据包(回复数据包会延迟),这时服务器B认为服务器A已经挂了,于是备份服务器B把资源夺过来,自己做主服务器,过了一段时间服务器A响应过来了,服务器A觉得自己是老大,服务器B觉得自己也是老大,他们两个就挣着抢夺资源,集群资源被多个节点占有,两个服务器同时向资源写数据,破坏了资源的安全性和一致性,这种情况的发生叫做“脑裂”。服务器A负载过重,响应不过来了,有了Fence机制,Fence会自动的把服务器A给Fence掉,阻止了“脑裂"的发生
FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。
Fence分类:
硬件Fence:电源Fence,通过关掉电源来踢掉坏的服务器
软件Fence:Fence卡(智能卡),通过线缆、软件来踢掉坏的服务器
第二种分法:
内部FENCE:IBM RSAII卡,HP的iLO卡,还有IPMI的设备等
外部FENCE:UPS、SAN SWITCH、NETWORK SWITCH等
实际坏境中,Fence卡连接的都是专线,使用专用的Fence网卡,不会占用数据传输线路,这样,更能保证稳定及可靠性。
Fence卡的IP网络和集群网络是相互依存的
详细配置可以查看:红帽企业版Linux6集群管理
开始配置
1.安装ricci
每个节点都要做:
# yum install -y ricci
设置ricci用户的密码
# passwd ricci
启动并且开机自启
# /etc/init.d/ricci start
# chkconfig ricci on
2.安装luci
只在一台主机上做,我是在172.25.90.1上做
# yum install luci -y
启动luci,设置开机自启
# /etc/init.d/luci start
# chkconfig luci on
通过网页登录到管理界面来进行配置
https://172.25.90.1:8084
用安装luci的root用户登录
警告信息直接OK
创建cluster,Node Name写节点的主机名即可,密码就是ricci用户的密码
clustat命令:
clustat用来查看集群系统中每个节点以及服务的运行状态,
-i :包时每3秒刷新一词集群状态
在上面的图中,可以看到每个节点都处于“Online”状态,表明每个节点都运行正常,如果某个节点退出了集群,对应的状态应该是“Offline”,同时还可以看到,集群的一个服务apache处于“started”状态,运行在server1节点。
另外,通过“ID”一列可以知道集群节点的对应关系,例如,server1在此集群中对应的就是“Node 1”节点,同理,server2对应的是“Node 2”节点。了解集群节点顺序有助于对集群日志的解读。
3.安装fence_virtd服务
我的fence_virtd服务安装在172.25.254.90
yum安装以下三个安装包
交互式配置fence文件
[root@desktop24 cluster]# fence_virtd -c
Module search path[/usr/lib64/fence-virt]:
//模块搜索路径,回车使用默认的
Available backends:
libvirt 0.1
Available listeners:
multicast 1.1
Listener modules are responsible foraccepting requests
from fencing clients.
Listener module [multicast]:
//监听组播模块,回车选择默认
The multicast listener module is designedfor use environments
where the guests and hosts may communicateover a network using
multicast.
The multicast address is the address that aclient will use to
send fencing requests to fence_virtd.
Multicast IP Address[225.0.0.12]:
组播IP地址选择,回车选择默认的225.0.0.12
Using ipv4 as family.
Multicast IP Port [1229]:
//组播IP端口选择,回车选择默认的1229
Setting a preferred interface causes fence_virtdto listen only
on that interface. Normally, it listens on all interfaces.
In environments where the virtual machinesare using the host
machine as a gateway, this *must* be set(typically to virbr0).
Set to 'none' for no interface.
Interface [none]: private
//Fence卡使用那个接口来和集群网络来通讯(fence卡的专用接口和集群网络在同一网段)
The key file is the shared key informationwhich is used to
authenticate fencing requests. The contents of this file must
be distributed to each physical host andvirtual machine within
a cluster.
Key File[/etc/cluster/fence_xvm.key]:
//是否是对/etc/cluster/fence_xvm.key这个文件做策略,回车选择默认的
Backend modules are responsible for routingrequests to
the appropriate hypervisor or managementlayer.
Backend module [checkpoint]:libvirt
//模块基于那个协议,填写libvirt
The libvirt backend module is designed forsingle desktops or
servers. Do not use in environments where virtual machines
may be migrated between hosts.
Libvirt URI [qemu:///system]:
Configuration complete.
=== Begin Configuration ===
backends {
libvirt{
uri= "qemu:///system";
}
}
listeners {
multicast{
interface= "eth0";
port= "1229";
family= "ipv4";
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.confwith the above [y/N]? y
//输入y保存配置
启动fence服务:
[root@desktop24 cluster]# /etc/init.d/fence_virtd restart
Stopping fence_virtd: [FAILED]
Starting fence_virtd: [ OK ]
fence_xvm.key:Fence卡的key文件,名字别改,fence_xvm是fence卡的一种类型
/etc/cluster/fence_xvm.key需要我们自建手动创建生成
# mkdir /etc/cluster
# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
key生成好之后,给每个节点发送到结点的/etc/cluster目录下
4.登录到集群管理界面上添加fence设备
每个节点的cluster.conf需要同步,所以在每次点击submit会缓冲一段时间,从下面的图我们可以看出来fence设备已经添加进去了
给每个节点添加fence
添加fence设备时,Domain那一栏写可以区别各个节点的内容,可以是主机名,也可是唯一的标示符,我的是虚拟机的UUID
其他节点也做一样的操作
5.Failover Domains
Failover Domains就是失效率、优先级的意思
在集群坏境中,有个问题就是1机器先启动服务还是2机器先启动服务,通过设置Failover Domains来解决,数字越低,优先级越高,这个机器就先启动服务。
6.创建资源
先创建一个vip资源
创建apache资源
7.添加Serice Group
在每个节点上面配置httpd服务:
# yum install -y httpd
# echo server1 > /var/www/html/index.html
server2上的发布页写server2
注意httpd服务不要手动开启
然后到网页上配置:
添加资源:添加我们刚刚创的两个资源
实验:httpd服务本来在server1上运行,我们关掉server1上的httpd服务,
# killall httpd
现在我们可以看到集群的httpd服务迁移到了server2上
我们来看server2的ip,可以看到网卡eth0上多了一个ip地址17225.0.100/24,这就是我们刚配置的vip
我们再来实验,如果server2挂了,这时候会发生什么?
# cd /proc/
# echo c > sysrq-trigger ##让内核发生故障,也就是让server2挂掉
然后我们用网页来访问vip,发现服务迁移到了server1上
我们通过clustat查看集群的状态,发现apache服务现在是运行在server1上
推荐阅读:
RHCS集群理论暨最佳实践:http://369369.blog.51cto.com/319630/836001/
RHCS(概念篇):http://blog.chinaunix.net/uid-26931379-id-3558604.html
手把手让你了解linux上集群原理篇【图解】:http://freeze.blog.51cto.com/1846439/388957