集群的工作模型

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.cf
crm 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

相关文章:

  • 2021-09-25
  • 2021-11-11
  • 2021-12-25
  • 2021-12-18
  • 2021-07-13
  • 2021-06-12
  • 2021-08-13
猜你喜欢
  • 2022-01-13
  • 2022-01-15
  • 2022-01-14
  • 2022-01-03
  • 2021-06-13
相关资源
相似解决方案