集群的工作模型
N-M模型:N个节点,M个服务
如何分配集群资源,如有N台主机,有M个服务,M<N,如何分配资源呢?如3个节点运行两个服务,(服务不是资源,资源只有组合成服务才能使用),有ABC三个几点,分别运行两个不同的服务,A运行Y服务,B运行Z服务,一旦A或者B服务出问题了,就转到C节点上,这叫N-M模型
A/P:主备模型
只有两个节点,当发生脑裂时,需要借助ping-node或仲裁盘管理
N-N:N个节点,N个服务,活动节点为N,备用为N-M
如有三台主机ABC,三个服务XYZ,A节点运行X服务,B节点运行Y服务,C节点运行Z服务,一旦A节点故障,就转移到B或C节点,如果三个节点有两个节点故障,未故障的节点就要承担剩下两个节点的服务.不过A和B如果挂了,B的投票权不足以让他成为节点,所以整个集群就挂了
A/A:双主模型
两个节点运行两个不同的服务,任何一个节点故障,都会将自己的服务和VIP转到另一个节点上.两个节点运行相同的服务,如ipvs高可用和负载均衡,负载均衡通过DNS轮询.其中一个ipvs挂了,就把他的vip移到另一个ipvs服务器.
资源转移的方式
rgmanager:failover domaim 故障转移域;
当备用的节点有多个,主节点发生故障时,可以定义在哪些节点中转移,并且在这些个节点中,优先转移到哪个节点
pacemaker:靠资源约束
资源粘性:如果两个节点的倾向性一样, 就比较两个节点的粘性,粘性大的资源的倾向性更高
位置约束:资源更倾向于哪个节点上,通过在每个节点上设置数值来
inf: 无穷大
n: 正值
-n: 负值
-inf: 负无穷,其他节点都挂了,才运行在该节点上排列约束:资源运行在同一节点的倾向性;
inf: 多个资源很倾向于运行在一起
-inf: 绝对不倾向于运行在一起
顺序约束:资源启动次序及关闭次序;一般来说,先启动的后关闭
让多个资源在同一个节点的方式:
1、排列约束;
2、资源组(resource group);把多次资源绑定成一个组;如果节点不再是集群节点成员时,如何处理运行于当前节点的资源?
stopped:停止运行
ignore:忽略,不论自己是否是集群成员,照常运行
freeze:冻结,已经连接进来的用户可以继续被服务,新用户的请求就忽略
suicide:kill掉自己的服务一个资源刚配置完成时,是否启动?
target-role指定该资源配置完成后是否启动RA类型(资源代理类型):
heartbeat legacy :heartbeat 传统类型
LSB :所有位于 /etc/rc.d/init.d下的都是LSB类型
OCF:由不同的组织提供
STONITH:专门实施资源隔离资源类型:
primitive, native: 主资源,只能运行于一个节点
group: 组资源;
clone: 克隆资源;在多个节点上同时运行,克隆资源首先得是主资源,如果某一个节点的服务挂了,就把该节点的服务转移到其他节点上,但是并不转移克隆资源,因为每个节点都有克隆资源配置时需要定义总克隆数,每个节点最多可运行的克隆数;
stonith,cluster filesystem,这两个是克隆资源的应用场景
master/slave: 主从资源,也是克隆类型的,不过只能克隆两份,主节点能读能写,从节点啥都不能做,但是可以从主的同步数据,当主的挂了,从的立即提升为主的集群文件系统
分布式锁,每个节点都有一个锁,当某个节点在执行写操作时,会通过信息传递层发广播通知给其他节点,其他节点就不会往里面写数据,而在用户看来,就是可以多用户共同挂载该文件系统.
Heartbeat+CRM :示例1
拓扑结构如图1-1,两个web服务器做高可用,服务器1处于等待状态,当服务器2挂了的时候,服务器1可以立马上线,下面看操作,安装heartbeat的过程笔者就不细述了
1.在heartbeat v1上,可以通过 /usr/lib64/heartbeat/下的haresources2cib.py将heartbeat的配置文件转换成heartbeat V2的,也可以通过在ha.cf配置文件中添加一句 crm on来开启crm功能
2.修改完配置文件后,把ha.cf同步到节点1,这里就不使用scp了,尝试使用heartbeat自带的一个工具
/usr/lib64/heartbeat/ha_propagate这里笔者就不使用这种方法了,因为失败了....3.安装heartbeat GUI
安装完成后会自动添加一个hacluster的系统用户,为这个用户设置一个密码 redhat,笔者是在节点2上添加的密码,读者需要在哪个节点启动gui就在哪个节点添加密码
4.修改配置文件让heartbeat支持 crm
vim /etc/ha.d/ha.cfcrm on #仅需添加这一句就行了,两个节点都需要更改
表示启用heartbeat v2 版本的crm功能
5.执行service heartbeat start,并查看端口
tcp LISTEN 0 10 *:5560 *:*启动成功后,才可以使用crm命令,使用crm-mon查看节点状态:如下图
执行hb_gui,就可以出现图形化界面,如下图所示
界面如下所示,现在可以使用图形化界面设置集群资源了
上图中的with quorum表示满足法定票数,whith noquorum表示不满足法定票数.注意:在上图中2个节点的模型中,ping node也会被当成一个节点使用,因此ping-node也拥有法定票数
添加一个主资源
定义资源详细信息,添加VIP
查看配置好的资源
添加第二个资源httpd
启动两个资源后并查看
对于高可用,我们必须让两个资源工作在同一个节点上.第一种方式:排列约束
查看结果
尝试访问网页
把lidefu2节点暂停,再次访问网页
再次把lidefu2启动起来,由于我们的配置文件中定义了auto_failback on,所以,启动节点后,资源会自动返回到lidefu2
如果我们想让资源更倾向于运行在节点1上,就需要定义位置约束,下面定义位置约束
启动顺序约束,先启动webip,后启动webserver,下面定义顺序约束
让两个资源在一起,第二种方式,组
VIP:172.16.21.12
httpd
filesystem:nfs:172.16.21.4
在上面的篇日志的基础上,删除资源后从新添加,首先添加一个组
在组中添加VIP,在一个组中,先定义哪个资源就先启动哪个资源,关闭时顺序相反
添加filesystem
添加httpd服务
尝试访问页面
定义组了,就不用定义顺序约束和排列约束了,只需定义位置约束,下面来定义位置约束,让服务更倾向于运行在lidefu1的节点上
以上基本的高可用集群就配置完了
额外:配置stoinsh,如果集群出现脑裂,其中一方虽然不是集群中的节点了,但是还是有可能会使用集群中的资源,这时,需要把这个不是集群节点中的主机做相应的处理:如关机,重启等
查看配置
一般在mysql中,stonith设备是必须的
示例2
配置负载均衡集群,这里就不演示了
首先保存ipvs服务器上的配置信息,这里都不演示了.就是下面哪些了,添加规则后使用service ipvsadm save就可以保存了,两个节点都需要
把lvs服务器的ipvsadm的开机自动启动给关闭,并且关闭ipvsadm
在两个节点上启动heartbeat后,在节点2上启动hb_gui,添加一个组和一个VIP
添加第二个组资源,ipvsadm
最终效果图
这里就不做测试了
以上的又玩完了...这篇就写到这吧..有点长了
转载于:https://blog.51cto.com/lidefu/1400729