Linux

小型架构实践(准备工作)--corosync配置及注意事项

2018-02-06  本文已影响4人  飞翔的Tallgeese

##################################

本文除开前面的RA报错的重要补充实验,其余部分转自下文

原文链接:corosync配置详解

##################################

重要补充:关于RA资源报错的实验

测试机1:192.168.40.135(LNMP01)

测试机2:192.168.40.100(Master01)

在配置nginx资源的时候,网上的语法是primitive server_name lsb:nginx,然而在lsb:ng后面敲击tab并无法补全,证明该资源不存在(强行配置的话,在verify的时候会报错,导致无法commit)

实际上LNMP01已经完成了nginx的安装,进一步对比Master01发现LNMP01的RA里面同样没有lsb:mysqld资源

于是对LNMP01进行mysql的安装,完成安装后,crm→ra→list lsb可以发现mysqld资源出现,确定必须安装了资源才会出现在ra列表里

然而LNMP01上面已经部署了nginx,为什么没有出现呢

进一步发现必须将该服务添加到/etc/init.d下面

完成添加后,确认可以通过service nginx start/stop 来操控nginx

之后在crm的list lsb里面已经可以发现nginx

primitive配置也可以自动补全nginx,并且成功commit

测试效果如下:

eg.

[root@LNMP01 init.d]# service nginx status

nginx is stopped

[root@LNMP01 init.d]# ps -ef|grep nginx

root      31266  20217  0 16:03 pts/0    00:00:00 grep nginx

[root@LNMP01 init.d]# crm

crm(live)# ra

crm(live)ra# list lsb

.....

nginx

......

crm(live)ra# cd

crm(live)# configure

crm(live)configure# primitive nginx_server lsb:nginx

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure#

[root@LNMP01 init.d]# crm_mon

Attempting connection to the cluster...

Stack: classic openais (with plugin)

Current DC: LNMP02 (version 1.1.15-5.el6-e174ec8) - partition with quorum

Last updated: Tue Feb  6 16:07:15 2018          Last change: Tue Feb  6 16:06:08 2018 by root via cibadmin on LNMP01

, 2 expected votes

2 nodes and 3 resources configured

Online: [ LNMP01 LNMP02 ]

Active resources:

webvip  (ocf::heartbeat:IPaddr):        Started LNMP01

webstore        (ocf::heartbeat:Filesystem):    Started LNMP02

nginx_server    (lsb:nginx):    Started LNMP01

Failed Actions:

* nginx_server_monitor_0 on LNMP02 'not installed' (5): call=29, status=Not installed, exitreason='none',

    last-rc-change='Tue Feb  6 16:06:10 2018', queued=0ms, exec=1ms

(报错是LNMP02上面还没有配置init.d的nginx)

##################################

只摘抄了其中关于CRM配置的部分

一、corosync、pacemaker各自是什么?

Corosync简介:

      Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.

    pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。

corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用

        注:Stonith 即shoot the other node in the head使Heartbeat软件包的一部分,该组件允许系统自动复位一个失败的服务器使用连接到一个健康的服务器的遥远电源设备,简单的说Stonith设备可以接受一台主机发来的信号从而切断不能传递心跳信息的节点电源,从而避免产生资源争用的设备;

    此时我们将node2 节点停掉,因为node2没办法传递心跳信息,node3以为node2出了故障,马上就变成了DC 而且两个节点都不具备法定票数(partition WITHOUT quorum),再将node2启动起来,就都具有法定票数 (partition quorum);

什么是 crmsh?

    pacemaker本身只是一个资源管理器,我们需要一个接口才能对pacemker上的资源进行定义与管理,而crmsh即是pacemaker的配置接口,从pacemaker 1.1.8开始,crmsh 发展成一个独立项目,pacemaker中不再提供。crmsh提供了一个命令行的交互接口来对Pacemaker集群进行管理,它具有更强大的管理功能,同样也更加易用,在更多的集群上都得到了广泛的应用,类似软件还有 pcs;

      注:在crm管理接口所做的配置会同步到各个节点上;

crm的特性:

    1、任何操作都需要commit提交后才会生效;

    2、想要删除一个资源之前需要先将资源停止

    3、可以用  help COMMAND 获取该命令的帮助

    4、与Linux命令行一样,都支持TAB补全

[iyunv@essun corosync]# crm

crm(live)# help    # 获取当前可用命令

# 一级子命令

This is crm shell, a Pacemaker command line interface.

Available commands:

cib              manage shadow CIBs # cib沙盒

resource         resources management # 所有的资源都在这个子命令后定义

configure        CRM cluster configuration # 编辑集群配置信息

node             nodes management # 集群节点管理子命令

options          user preferences # 用户优先级

history          CRM cluster history

site             Geo-cluster support

ra               resource agents information center # 资源代理子命令(所有与资源代理相关的程都在此命令之下)

status           show cluster status # 显示当前集群的状态信息

help,?           show help (help topics for list of topics)# 查看当前区域可能的命令

end,cd,up        go back one level # 返回第一级crm(live)#

quit,bye,exit    exit the program  # 退出crm(live)交互模式

crm(live)resource# help

vailable commands:

        status          show status of resources # 显示资源状态信息

        start            start a resource # 启动一个资源

        stop            stop a resource # 停止一个资源

        restart          restart a resource # 重启一个资源

        promote          promote a master-slave resource # 提升一个主从资源

        demote          demote a master-slave resource # 降级一个主从资源

        manage          put a resource into managed mode

        unmanage        put a resource into unmanaged mode

        migrate          migrate a resource to another node # 将资源迁移到另一个节点上

        unmigrate        unmigrate a resource to another node

        param            manage a parameter of a resource # 管理资源的参数

        secret          manage sensitive parameters # 管理敏感参数

        meta            manage a meta attribute # 管理源属性

        utilization      manage a utilization attribute

        failcount        manage failcounts # 管理失效计数器

        cleanup          cleanup resource status # 清理资源状态

        refresh          refresh CIB from the LRM status # 从LRM(LRM本地资源管理)更新CIB(集群信息库),在

        reprobe          probe for resources not started by the CRM # 探测在CRM中没有启动的资源

        trace            start RA tracing # 启用资源代理(RA)追踪

        untrace          stop RA tracing # 禁用资源代理(RA)追踪

        help            show help (help topics for list of topics) # 显示帮助

        end              go back one level # 返回一级(crm(live)#)

        quit            exit the program # 退出交互式程序

crm(live)configure# help

Available commands:

        node             define a cluster node # 定义一个集群节点

        primitive        define a resource # 定义资源

        monitor          add monitor operation to a primitive # 对一个资源添加监控选项(如超时时间,启动失败后的操作)

        group            define a group # 定义一个组类型(将多个资源整合在一起)

        clone            define a clone # 定义一个克隆类型(可以设置总的克隆数,每一个节点上可以运行几个克隆)

        ms               define a master-slave resource # 定义一个主从类型(集群内的节点只能有一个运行主资源,其它从的做备用)

        rsc_template     define a resource template # 定义一个资源模板

        location         a location preference # 定义位置约束优先级(默认运行于那一个节点(如果位置约束的值相同,默认倾向性那一个高,就在那一个节点上运行))

        colocation       colocate resources # 排列约束资源(多个资源在一起的可能性)

        order            order resources # 资源的启动的先后顺序

        rsc_ticket       resources ticket dependency

        property         set a cluster property # 设置集群属性

        rsc_defaults     set resource defaults # 设置资源默认属性(粘性)

        fencing_topology node fencing order # 隔离节点顺序

        role             define role access rights # 定义角色的访问权限

        user             define user access rights # 定义用用户访问权限

        op_defaults      set resource operations defaults # 设置资源默认选项

        schema           set or display current CIB RNG schema

        show             display CIB objects # 显示集群信息库对

        edit             edit CIB objects # 编辑集群信息库对象(vim模式下编辑)

        filter           filter CIB objects # 过滤CIB对象

        delete           delete CIB objects # 删除CIB对象

        default-timeouts set timeouts for operations to minimums from the meta-data

        rename           rename a CIB object # 重命名CIB对象

        modgroup         modify group # 改变资源组

        refresh          refresh from CIB # 重新读取CIB信息

        erase            erase the CIB # 清除CIB信息

        ptest            show cluster actions if changes were committed

        rsctest          test resources as currently configured

        cib              CIB shadow management

        cibstatus        CIB status management and editing

        template         edit and import a configuration from a template

        commit           commit the changes to the CIB # 将更改后的信息提交写入CIB

        verify           verify the CIB with crm_verify # CIB语法验证

        upgrade          upgrade the CIB to version 1.0

        save             save the CIB to a file # 将当前CIB导出到一个文件中(导出的文件存于切换crm 之前的目录)

        load             import the CIB from a file # 从文件内容载入CIB

        graph            generate a directed graph

        xml              raw xml

        help             show help (help topics for list of topics) # 显示帮助信息

        end              go back one level # 回到第一级(crm(live)#)

node子命令 # 节点管理和状态

crm(live)# node

crm(live)node# help

Node management and status commands.

Available commands:

    status           show nodes status as XML # 以xml格式显示节点状态信息

    show             show node # 命令行格式显示节点状态信息

    standby          put node into standby # 模拟指定节点离线(standby在后面必须的FQDN)

    online           set node online # 节点重新上线

    maintenance      put node into maintenance mode

    ready            put node into ready mode

    fence            fence node # 隔离节点

    clearstate       Clear node state # 清理节点状态信息

    delete           delete node # 删除 一个节点

    attribute        manage attributes

    utilization      manage utilization attributes

    status-attr      manage status attributes

    help             show help (help topics for list of topics)

    end              go back one level

    quit             exit the program

ra子命令 # 资源代理类别都在此处

crm(live)# ra

crm(live)ra# help

Available commands:

        classes          list classes and providers # 为资源代理分类

        list             list RA for a class (and provider)# 显示一个类别中的提供的资源

        meta             show meta data for a RA # 显示一个资源代理序的可用参数(如meta ocf:heartbeat:IPaddr2)

        providers        show providers for a RA and a class

        help             show help (help topics for list of topics)

        end              go back one level

        quit             exit the program

show xml 显示完整的xml格式信息

crm(live)configure# show

node node2.test.com

node node3.test.com    # 当前集群共有三个节点

property cib-bootstrap-options: \

dc-version=1.1.11-97629de \   # DC的版本

cluster-infrastructure="classic openais (with plugin)" \  # 底层基础架构(经典的openais,使用plugin方式来运行)

expected-quorum-votes=2 \   # 当前节点一共有两票

stonith-enabled=false    # stonith 设备已被禁用

禁用stonith设备:

configure

crm(live)configure# property stonith-enabled=false

crm(live)configure# commit

crm_verify -L -V   此时在检查就不会检查 stoith 设备了;

尝试配置VIP:

crm(live)#configure

crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=172.16.4.88 nic='eth0' cidr_netmask='16' broadcast='172.16.255.255'

         # 只要IPaddr 不在一个以上资源代理类别下存在,ocf:heartbeat都可以省略

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# cd

crm(live)# status

Last updated: Sat Jan  3 18:40:23 2015

Last change: Sat Jan  3 18:40:19 2015

Stack: classic openais (with plugin)

Current DC: node3.zhangjian.com - partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

1 Resources configured

Online: [ node2.test.com node3.zhangjian.com ]

webip(ocf::heartbeat:IPaddr):Started node2.test.com  # VIP已经配置成功

删除一个资源:

crm(live)# resource

crm(live)resource# stop webip  # 删除需先将资源停止

crm(live)resource# cd ..

crm(live)# configure

crm(live)configure# delete webip  # 删除一个CIB对象

crm(live)configure# commit        # 想要生效需要提交

crm(live)configure# cd ..

crm(live)# status

Last updated: Sat Jan  3 21:01:44 2015

Last change: Sat Jan  3 21:01:39 2015

Stack: classic openais (with plugin)

Current DC: node2.zhangjian.com - partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

0 Resources configured

Online: [ node2.zhangjian.com node3.zhangjian.com ]

monitor 监控资源monitor [:] [:]  

监控   哪个资源  哪个角色   多长时间监控一次  监控超时时长是多少 

例:

    monitor apcfence 60m:60s  监控apcfence 这个资源  60分钟监控一次  60s 超时

        注:每一个资源都有它的默认监控法则,我们所定义的时长,不应该小于它的默认法则时长;

例如:(获取IPaddr资源的默认监控法则)

crm(live)# ra

crm(live)ra# info IPaddr

Operations' defaults (advisory minimum):

start         timeout=20s    # 启动时的超时时长 

    stop          timeout=20s    # 停止时的超时时长

    status        timeout=20s interval=10s  # 监控状态时的操作  interval=10s 每隔10s 监控一次

    monitor       timeout=20s interval=10s  # 监控 10s 监控一次 超时长为20s

定义IP:

crm(live)configure# primitive webip IPaddr params ip=172.16.4.88 op monitor interval=10s timeout=20s

crm(live)configure# verify

crm(live)configure# commit

定义httpd资源:

[iyunv@node2 html]# crm

crm(live)# configure

crm(live)configure# primitive webserver lsb:httpd op monitor interval=30s timeout=15s

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# cd

crm(live)# status

Last updated: Sat Jan  3 21:25:49 2015

Last change: Sat Jan  3 21:25:45 2015

Stack: classic openais (with plugin)

Current DC: node2.zhangjian.com - partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

2 Resources configured

Online: [ node2.zhangjian.com node3.zhangjian.com ]

webip(ocf::heartbeat:IPaddr):Started node2.zhangjian.com  # webip 运行在节点2上

webserver(lsb:httpd):Started node3.zhangjian.com   # webserver 运行在节点3上

 注意:现在webip与webserver是分别运行在不同的节点上的,默认情况下资源是尽可能均衡的运行在各节点上的;

两种解决办法:

    group 组资源,将两个资源定义在一起,做为一组资源而运行;

    colocation  也可以定义排列约束,也叫协同约束,两个资源必须在一起;

crm(live)# configure

crm(live)configure# colocation webserver_with_webip inf: webserver webip # 定义在一起

crm(live)configure# show   # 查看刚刚定义是否生效

crm(live)configure# commit

crm(live)configure# cd ..

crm(live)# status

Last updated: Sat Jan  3 21:30:14 2015

Last change: Sat Jan  3 21:30:08 2015

Stack: classic openais (with plugin)

Current DC: node2.zhangjian.com - partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

2 Resources configured

Online: [ node2.zhangjian.com node3.zhangjian.com ]

webip(ocf::heartbeat:IPaddr):Started node2.zhangjian.com 

webserver(lsb:httpd):Started node2.zhangjian.com   # 此时两个资源都运行在节点2上

定义顺序约束:

order webip_before_webserver mandatory: webip webserver

crm(live)configure# commit

注:mandatory 代表强制,webip、webserver 这两个资源必须按照我所给定的顺序启动;

此时就可以用客户机测试,访问 172.16.4.88  会访问到节点2上的web页面;

crmnode standby  # 将 node2 节点转换成备用节点

    再重新用浏览器访问测试,此时访问的就是node3 节点上的web页面了;

crm onde online  # 此时将 node2 节点重新上线,资源也不会流转回来

定义节点倾向性:

configure 

help location  # 获取 location 使用帮助 

crm(live)configure# location webip_prefer_node1 webip rule 100: #uname eq node2.zhangjian.com # 约束名 资源名 约束为100 节点名为 node2

crm(live)configure# commit

    此时在用浏览器访问web页面就会变成 node2上的页面,因为资源对node2 的倾向性更大,即使将node2 变成备用模式,资源转移出去了,在让node2重新上线,它立马就会流转回来,因为我们定义了webip对于node2的倾向性是100,默认对所有节点的倾向性都是0,所以只要node2在,它就会运行在节点2上;

粘性:每一个资源对于当前节点的粘性;

上一篇下一篇

猜你喜欢

热点阅读