欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 39_03 _Linux集群系列之十三——高可用集群之corosync基础概念及安装配置【攻城狮论坛の免费分享】 有大用

image.png

mean:这里是平均的意思

image.png

image.png

硬件故障:

design failure:

random failure:

infant mortality:自己用法失当,导致服务器提前终止了

wear out:穿破了,用坏了


用品牌,质量好的

抢修,替换掉

image.png

软件故障:

找经验丰富的团队开发

检视所有代码

简单就是美

image.png

 image.png

Hearbeat:信息层

corosync:通信设置,配置比Hearbeat更简单的信息层 

RHEL 6.x:  RHCS:corosync     成为管理messaging layer的服务

RHEL 5.x:  RHCS:openais,作为内核中的信息通信api,借助于cman完成messaging layer,使用rgmanager完成资源管理

                 RHEL 5.0 系列上的rg cs (cluster suit) 套件,用的是非常古老的openais的实现机制

可以看看马哥 推荐的  /node-admin/15723 

    

    openais 0.9之后    

        corosync: Messaging Layer  一个层次,一个集群引擎,有时需要openais的功能,就需要安装openais的插件    https://corosync.github.io/corosync/ (http://ww.corosync.org/)

        openais: 仅保留了AIS规范和corosync的一部分了功能 wilson只是软件版本的名称,还有其它的版本名称 ,比如whitetank


image.png

image.png



image.png

image.png


corosync:只是一个集群引擎,不是负责信息传递的,不负责资源管理能力,对于非ha-aware(非高可用的软件)要使用ha-aware的能力要提供crm,这里使用的是 pacemaker (当然pacemaker既可以和corosync一起工作,也可以和heartbeat v3一起工作)

image.png


pacemaker 比 crmd 更强管理能力,提供更丰富特性的集群资源管理器,但是与 hb_gui & 图形界面的概念差不多,


corosync 完全支持在纯命令行方式下配置,也支持多种图形界面


https://clusterlabs.org/

我打开的 https://clusterlabs.org/ 与马哥的不一样

image.png



image.png

image.png

corosync-->pacemaker

        SLES (SUSE  Linux Enterprise Server): Hawk,它是webGUI

        LCMC (The Linux Cluster Management Console):LCMC,不是webGUI,比Hawk强大,还支持虚拟化主机的管理

        RHCS: Conga (luci/ricci)    红帽系统专用的,两个组件,luci是控制端,是基于web的webGUI;;;ricci是安装在每一个集群节点上,被控制端,


luci是一个服务,自带的web服务,非80端口,

web浏览器配置luci能够基于ssh,不使用密码,而使用密钥的方式跟每个节点的root用户通信,每个节点不用装任何corosync,heartbeat等组件,不用装pacemaker,配置ricci成为luci的管理对象,把这几个节点加入到luci的管理对象里面来,在luci的某些管理界面,可以选择安装集群(此前不用安装集群),,,当然此时每个节点的yum源要配置好,,,,,,然后点下安装几个组件,会通过yum自动下载安装,而后,每个节点的corosync pacemaker等等都装好了,装好以后,服务会自动启动起来,并且加入到成立一个集群,集群起个名字之后,再接着,基于luci配置各种资源,配置stonith设备,定义资源组,定义资源属性等等,所以完全不用手动在命令行界面配置它们了,这就是rhcs套件中的一个组件,叫 Conga 


image.png


corosysnc 各种linux版本都用它,delfi,redhat,suse,,,,它支持的节点非常多,基于组播通信,可以支持多达100个以上的节点,最佳状态是16个左右的节点


keepalived: VRRP协议来实现虚拟路由管理,一般最多支持2个节点;;;;;双节点,它是理想的选择,配置简单,因为功能有限


安装 corosysnc 

    rpm,source源码编译安装(可能麻烦一点),

    红帽6不建议源码编译安装


https://wiki.clusterlabs.org/wiki/Install

https://github.com/ClusterLabs

https://clusterlabs.org/quickstart.html

image.png

Fedora:

openSUSE: 属于 Novell,


马哥讲解的知识,大多来自于 clusterlabs.org的文档和SUSE官方所提供的高可用集群的文档 (Book LSEHA) (suse linux enterprise版 ha服务书 ) 可以到nowell官方站点搜一下   LSEHA( suse linux enterprise版 ha服务)

image.png

image.png


https://rarforge.com/w/index.php/Centos5_pacemaker_corosync

https://lists.archive.carbon60.com/linuxha/pacemaker/78503

https://copr.fedorainfracloud.org/coprs/jpokorny/pacemaker/


下面是我找到的网址

http://rpm.repo.onapp.com/repo/centos/5/i386/RPMS-4.0/

http://rpm.repo.onapp.com/repo/rhel/5/i386/RPMS-4.0/

image.png


pacemaker 是crm, 要依赖于信息层 messaging layer (corosync 或者 heartbeat v3吧)

            pacemaker 默认依赖于hearbeat v3的,不让它依赖,自己重新制作rpm包也行,

            当然想用 corosync 的话,就安装好了 hearbeat v3 ,然后  hearbeat v3不要启动就行了

ldirectord 是 hearbeat 的子组件,如果把lvs做成高可用集群的时候,规则管理很麻烦,lvs并没有后端 real server 的健康状况检查的功能,所以 ldirectord 是 lvs的一个补充,它能够让 lvs 具有后端 real server 的健康状况检查的功能,还可以帮助lvs生成规则的,不再用ipvsadm来写规则了  ldirectord有个配置文件,说明你的配置服务监听在哪个协议的哪个端口上,有哪些real server的地址,基于什么模式工作等等        ldirectord可以灵活应用在高可用集群当中,跟heartbeat 或 corosync都能结合起来工作,,,用于提供lvs的director的高可用 


corosync 如果不想提供额外amf ais功能的话,openais可以不用装,它是作为插件的方式结合cososync进行工作的,只要不做特定工作的话,openais是不用装的


cluster-glue:集群glue(胶水,粘合剂),让集群中的各个组件能够粘合在一起协同工作的组件



马哥的  https://clusterlabs.org/doc/

image.png

https://clusterlabs.org/doc/

image.png


https://clusterlabs.org/pacemaker/doc/  这个文档相当好,只不过它用的是fedora,从零开始,自己通过手动安装corosync等等 来安装集群的

image.png

image.png

image.pngimage.pngimage.png









image.png




pcs是另外一个基于图形的管理工具,webGUI


DLM: Distributed Lock Manager 分布式锁管理器

 如gfs,ocfs,甚至集群逻辑卷,都依赖于DLM


image.png

image.png

image.png

image.png

image.png

image.png

cLVM: cluster logical volume manager  集群逻辑卷

gfs2:global filesystem 2 全局文件系统

ocfs2:Oracle Clustered File System version  2








image.png

ccm:集群管理器,集群成员关系配置,cluster config membership???现在配不配都无所谓了

cib:是一个xml 文档,用于保存当前整个集群内部用于 pacemaker 的所有的资源的相关属性的定义;cib:Cluster Information Base   集群信息库,这是基于crm实现管理高可用集群的时候,它的资源定义的配置文件,里面可能包含多个配置文件,可能将集群的所有配置信息都保存在cib的配置文件当中


基于web的管理界面,hawk,lcmc马哥不再演示,要自己摸索使用一下lcmc,

lcmc的工作依赖于pacemaker,非pacemaker的场景中,最好不要使用lcmc

heartbeat v2之前的不要使用它



        节点最多多于两个,单数(法定票数是单数,节点数可以不是单数)(法定票数不是奇数也没关系,要借助于中间节点来完成判定谁到底是合法的)(8个节点,一分裂,各4个,借助于中间节点ping node,或者借助于仲裁磁盘等等)(有时不借助关系也不大,只要节点大于2个,比如8个节点,正好分成2组4个,4个成为一组的可能性很小)


安装corosync(与heartbeat前提一样,差不多)前提:

        1)时间同步

        2)主机名能解析

        3)SSH双机互信

        


corosync 在红帽6系统上最好用     1系列 2系列 都可以

corosync 在红帽5系统上最好用     1系列

image.png

image.png

马哥说 先使用 corosync 1.27的包吧


image.png

image.png

image.png

image.png



首先:

        时间同步

        ssh通信

2、安装如下rpm包:

libibverbs, librdmacm, lm_sensors, libtool-ltdl, openhpi-libs, openhpi, perl-TimeDate

3、安装corosync和pacemaker, 首先下载所需要如下软件包至本地某专用目录( 这里为/root/cluster 我的是 /root/corosync  ) :

cluster-glue

cluster-glue-libs

heartbeat

openaislib

resource-agents

corosync

heartbeat-libs

pacemaker

corosynclib

libesmtp

pacemaker-libs



安装corosync

    一)看时间同步

192.168.0.75    # 

192.168.0.45      #第一个节点 #uname -n 是 node1.magedu.com 别名 node1  /etc/sysconfig/network 中配置hostname  ;;;/etc/hosts 中配置  解析 

                                192.168.0.45 node1.magedu.com node1

                                192.168.0.55 node2.magedu.com node2

192.168.0.55      #第二个节点 #uname -n 是 node2.magedu.com 别名 node2

看三个节点 # date 是否相同,,,如果不同 使用 #ntpdate 某个ntp服务器网址(比如192.168.0.75)         来同步

 二)双机互信 见    /node-admin/15683



在第一个节点上 ( 192.168.0.45 )

image.png

image.png


先不装这个包,看能不能装上去 ( 下面的安装好像不依赖于 openais ,换句话说,不需要安装 openais )


image.png


image.png

image.png

image.png

image.pngimage.png

image.png

自动解决依赖关系,装上 perl_TimeDate

image.png

image.png

在第二个节点 192.168.0.55 上  同样安装上面的软件

image.png


https://rpmfind.net/linux/rpm2html/search.php?query=pacemaker&submit=Search+...&system=&arch=   搜索rpm包 下载 有大用


我弄了好久 就是找不到 pacemaker-cts-1.0.12-1.el5.centos.i386.rpm

下面几个都是从   http://rpm.repo.onapp.com/repo/rhel/5/i386/RPMS-4.0/ 上面找的

[root@node1 corosync]# ls        

cluster-glue-1.0.6-1.6.el5.i386.rpm #集群胶水

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm # #集群胶水的库

corosync-1.2.7-1.1.el5.i386.rpm #corosync 信息层

corosynclib-1.2.7-1.1.el5.i386.rpm #corosync 信息层的库

heartbeat-3.0.3-2.3.el5.i386.rpm    #安装  heartbeat ,目的是pacemaker (它是CRM层)的依赖 

heartbeat-libs-3.0.3-2.3.el5.i386.rpm    #安装  heartbeat 的库

libesmtp-1.0.4-5.el5.i386.rpm

pacemaker-1.0.12-1.el5.centos.i386.rpm     #安装 pacemaker (它是CRM层)

pacemaker-libs-1.0.12-1.el5.centos.i386.rpm  #安装 pacemaker 的库

resource-agents-1.0.4-1.1.el5.i386.rpm       #安装资源代理

[root@node1 corosync]#



http://rpm.pbone.net/index.php3?stat=3&limit=3&srodzaj=3&dl=40&search=pacemaker-cts

http://rpm.pbone.net/results_limit_3_srodzaj_3_dl_40_search_pacemaker-cts.html


这里下载 pacemaker-cts-1.1.9-2.2.i686.rpm  

ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/i686/pacemaker-cts-1.1.9-2.2.i686.rpm


http://rpm.pbone.net/info_idpl_23860901_distro_centos6_com_pacemaker-cts-1.1.5-1.1.386.rpm.html


找了很久 ,找到了 pacemaker-cts-1.1.9-2.1.i686.rpm 和 pacemaker-cts-1.1.9-2.2.i686.rpm 放在了 /root/cts目录下


[root@node1 corosync]# pwd

/root/corosync

[root@node1 corosync]#

[root@node1 corosync]# ls

cluster-glue-1.0.6-1.6.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm

cts

heartbeat-3.0.3-2.3.el5.i386.rpm

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

libesmtp-1.0.4-5.el5.i386.rpm

pacemaker-1.0.12-1.el5.centos.i386.rpm

pacemaker-libs-1.0.12-1.el5.centos.i386.rpm

resource-agents-1.0.4-1.1.el5.i386.rpm

[root@node1 corosync]#

[root@node1 corosync]# ls cts

pacemaker-cts-1.1.9-2.1.i686.rpm  pacemaker-cts-1.1.9-2.2.i686.rpm

[root@node1 corosync]#


[root@node1 corosync]# ssh node2 'mkdir -p /root/corosync/cts'         #在第二个节点192.168.0.55上建目录夹  /root/corosync/  /root/corosync/cts

[root@node1 corosync]# scp -r * node2:/root/corosync        #这里用到了关于corosync 和 pacemaker全部复制到 第二个节点192.168.0.55上

cluster-glue-1.0.6-1.6.el5.i386.rpm           100%  265KB 265.0KB/s   00:00

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm      100%  130KB 130.1KB/s   00:00

corosync-1.2.7-1.1.el5.i386.rpm               100%  166KB 166.1KB/s   00:00

corosynclib-1.2.7-1.1.el5.i386.rpm            100%  155KB 154.8KB/s   00:00

pacemaker-cts-1.1.9-2.2.i686.rpm              100%  235KB 235.3KB/s   00:00

pacemaker-cts-1.1.9-2.1.i686.rpm              100%  235KB 235.3KB/s   00:00

heartbeat-3.0.3-2.3.el5.i386.rpm              100%  162KB 161.7KB/s   00:00

heartbeat-libs-3.0.3-2.3.el5.i386.rpm         100%  283KB 282.8KB/s   00:00

libesmtp-1.0.4-5.el5.i386.rpm                 100%   59KB  59.0KB/s   00:00

pacemaker-1.0.12-1.el5.centos.i386.rpm        100%  876KB 875.9KB/s   00:00

pacemaker-libs-1.0.12-1.el5.centos.i386.rpm   100%  304KB 304.5KB/s   00:00

resource-agents-1.0.4-1.1.el5.i386.rpm        100%  380KB 379.5KB/s   00:00

[root@node1 corosync]# 


[root@node1 corosync]# mount /dev/cdrom /media/cdrom/        #挂载光盘,为了 yum localinstall 时可能所需的依赖

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@node1 corosync]# 


[root@node1 corosync]# yum --nogpgcheck localinstall *.rpm     #安装 cososync 和 pacemaker相关软件

image.png


[root@node1 corosync]# rpm -ql corosync            #看看corosync安装后生成的文件

/etc/corosync        #corosync配置文件的目录

/etc/corosync/corosync.conf.example    #corosync样例配置文件

/etc/corosync/service.d

/etc/corosync/uidgid.d

/etc/init.d/corosync    #服务脚本,使用service 可以启动

/usr/libexec/lcrso

/usr/libexec/lcrso/coroparse.lcrso

/usr/libexec/lcrso/objdb.lcrso

/usr/libexec/lcrso/quorum_testquorum.lcrso

/usr/libexec/lcrso/quorum_votequorum.lcrso

/usr/libexec/lcrso/service_cfg.lcrso

/usr/libexec/lcrso/service_confdb.lcrso

/usr/libexec/lcrso/service_cpg.lcrso

/usr/libexec/lcrso/service_evs.lcrso

/usr/libexec/lcrso/service_pload.lcrso

/usr/libexec/lcrso/vsf_quorum.lcrso

/usr/libexec/lcrso/vsf_ykd.lcrso

/usr/sbin/corosync        # corosync 主程序  

/usr/sbin/corosync-cfgtool         # corosync的工具

/usr/sbin/corosync-cpgtool         # corosync的工具

/usr/sbin/corosync-fplay

/usr/sbin/corosync-keygen            #corosync的密钥生成器,不需要ssh-keygen手动生成了,将从/dev/random来获取随机数的,而且需要的数据数的数量非常大,如果提供的数量不够的话,就会卡住,需要狂敲键盘来生成随机数  random的随机数来自于熵池,熵池中的随机数来自于磁盘中断的时间间隔和和击键的时间间隔

/usr/sbin/corosync-objctl

/usr/sbin/corosync-pload

/usr/sbin/corosync-quorumtool

/usr/share/doc/corosync-1.2.7

/usr/share/doc/corosync-1.2.7/LICENSE

/usr/share/doc/corosync-1.2.7/SECURITY

/usr/share/man/man5/corosync.conf.5.gz

/usr/share/man/man8/confdb_overview.8.gz

/usr/share/man/man8/coroipc_overview.8.gz

/usr/share/man/man8/corosync-blackbox.8.gz

/usr/share/man/man8/corosync-cfgtool.8.gz

/usr/share/man/man8/corosync-cpgtool.8.gz

/usr/share/man/man8/corosync-fplay.8.gz

/usr/share/man/man8/corosync-keygen.8.gz

/usr/share/man/man8/corosync-objctl.8.gz

/usr/share/man/man8/corosync-pload.8.gz

/usr/share/man/man8/corosync-quorumtool.8.gz

/usr/share/man/man8/corosync.8.gz

/usr/share/man/man8/corosync_overview.8.gz

/usr/share/man/man8/cpg_overview.8.gz

/usr/share/man/man8/evs_overview.8.gz

/usr/share/man/man8/logsys_overview.8.gz

/usr/share/man/man8/sam_overview.8.gz

/usr/share/man/man8/votequorum_overview.8.gz

/var/lib/corosync

[root@node1 corosync]#


[root@node1 corosync]# cd /etc/corosync/

[root@node1 corosync]#

[root@node1 corosync]# ls

corosync.conf.example  service.d  uidgid.d

[root@node1 corosync]#


先编辑配置文件,积累熵池

[root@node1 corosync]# pwd

/etc/corosync

[root@node1 corosync]# cp corosync.conf.example corosync.conf

[root@node1 corosync]#

[root@node1 corosync]# vim corosync.conf

1.45版本的rpm包,里面有关于配置的详细说明, 我这个是1.27的版本


# Please read the corosync.conf.5 manual page

compatibility: whitetank


totem {

        version: 2

        #secauth: off

        secauth: on

        #threads: 0

        threads: 2

        interface {

                ringnumber: 0

                #bindnetaddr: 192.168.1.1

                bindnetaddr: 192.168.0.0        #是网卡对应的网络地址

                #mcastaddr: 226.94.1.1

                mcastaddr: 226.99.6.17  #尽可能跟别人不一样              

                mcastport: 5405    #corosync通信端口 

        }

        # 如果有多个interface ,就继续定义,例如如下        

         #  interface {

                     #     ringnumber: 1  #上面为0,这里为1吧

                         # #bindnetaddr: 192.168.1.1

                    #      bindnetaddr: 172.16.0.0    #是网卡对应的网络地址

                     #     #mcastaddr: 226.94.1.1

                    #      mcastaddr: 226.99.6.18  #尽可能跟别人不一样              

                    #      mcastport: 5405    # 这个端口可以与上面一样吧 

              #    }


}

logging {

        fileline: off           #不同的日志之间要不要打印行分隔线,使用off吧

        to_stderr: no        #日志信息需不需要发送到标准错误输出(就是前端输出,一个命令没敲完,输出一段信息,会打断,打扰整个过程)所以使用no吧

        to_logfile: yes        #到logfile,独立的日志文件,见下面第二行 /var/log/cluster/corosync.log  

                                       #to_logfile与to_syslog中需要记录一份吧,建议单独定义to_logfile

        #to_syslog: yes        #到系统日志文件,会使用某个facility接受下来,使用某个priority,定义级别后再记录下来

        to_syslog: no 

        logfile: /var/log/cluster/corosync.log        # /var/log/cluster/目录不存在,使用它的话要先创建目录

        debug: off        #调试级默认关闭吧,出错的话,可以打开看看

        timestamp: on    #记录日志时要不要记录时间戳;;;记录时间戳,可以定位错误,但每次都使用时间戳,每记录一条信息,会获取当前系统时间,只有内核才能读取时间,所以至少一次系统调用,再返回用户空间,再记录,会产生大量的IO(多记录一个信息,体积会更大的)

        logger_subsys {        #记录子系统信息

                subsys: AMF        #没有记录openais,没有启用openais,那么AMF可以不用启动的,,,我们没装openais,所以不用启动;;因此AMF是被禁用的(见下面第6行),所以这项我们就不管它了

                debug: off

        }

}


amf {

        mode: disabled        #amf这里是禁用的

}

service {

        ver: 0        #版本号

        name: pacemaker

        # use mgmtd: yes        #这一项不用管

        }

      




heartbeat里面配置了一个子选项 crm respawn,表示heartbeat里面会顺带连带启动pacemaker的

同样corosync想使用pacemaker的话,需要配置启动pacemaker

        在corosync.conf里面加上  ;;会corosync一启动,会顺带启动 pacemaker 

        service {

            ver: 0        #版本号

            name: pacemaker

            # use mgmtd: yes        #这一项不用管

        }

      

         #如果用到ais功能的话(aisexec 就是 ais执行的意思吧),执行ais的用户名和组名;;openais没装的话,不需要启用的话,这项意义不大,而且默认就是root用户,基本上用不到 

        aisexec {       

            user: root

            group: root

        }

                



[root@node1 corosync]# man corosync.conf

       totem { }    #totem,图腾,就是大家都信任的东西,每个节点之间,第一次通信靠totem来定义

              This  top level directive contains configuration options for the

              totem protocol.


       logging { }        #日志

              This top level directive contains configuration options for log-

              ging.


       event { }            #事件

              This  top level directive contains configuration options for the

              event service.

ringnumber

image.png

image.png

冗余协议,eth0,eth1接在同一个交换机上;;从0开始记号,第一组是ringnumber 0,,第二组是ringnumber 1

我们只有一个网卡,所以直接是默认值 0 


bindnetaddr        #绑定的网络地址,不是网卡地址

image.png

image.png


broadcast        #如果要广播的话,在哪个网络内广播

image.png


 mcastaddr        #多播的方式通信   组播地址 不能是 224的地址,其它的组播地址都可以使用,为了同学们不相干扰,挑一个大家用不到的地址

image.png


mcastport            #默认是 694端口上通信的吧?? 不对 corosync用的是 5405

image.png


 version        #是配置文件的版本号 ,是让corosync实现它的语法的,不能动

image.png

secauth  (secure authentication) 安全的认证机制,默认是关闭的off,为了安全,是on起来,基于HMAC/SHA1进行认证加密,相当消耗CPU时间的;;;;要以aisexec as measured这种方式运行,但我们用不着,所以启用起来,也没关系

image.png

rrp_mode            # corosync是否可以执行在rrp模型当中,默认配置文件里面没有

image.png

threads            #需要多少线程来实现加密和执行多播的,如果 secauth 是 off ,这一项基本是没有意义的;;如果  secauth 是 on,那么这一项是可以使用多线程来提高性能的,,,,可以多启动几个线程,但是不要太多,况且,没有cpu的情况下,启动太多也没有意义????

本身cpu的场景当中,本身会自动启动多个线程来实现mcast的,而在只有一颗cpu的环境当中,启动多线程,可以加速多播的执行过程

image.png

 fileline            #不同的日志信息之间 各行之间要不要打印行分隔线之类的,意义不大

              This specifies that file and line should be printed.


              The default is off.

image.png



在第一个节点上 ( 192.168.0.45 )

[root@node1 corosync]# pwd

/etc/corosync

[root@node1 corosync]#

[root@node1 corosync]# vim corosync.conf        #最终版的corosync.conf 

# Please read the corosync.conf.5 manual page

compatibility: whitetank


totem {

        version: 2

        secauth: on

        threads: 2

        interface {

                ringnumber: 0

                bindnetaddr: 192.168.0.0

                mcastaddr: 226.94.6.17

                mcastport: 5405

        }

}


logging {

        fileline: off

        to_stderr: no

        to_logfile: yes

        to_syslog: no

        logfile: /var/log/cluster/corosync.log

        debug: off

        timestamp: on

        logger_subsys {

                subsys: AMF

                debug: off

        }

}


amf {

        mode: disabled

}


service {

        ver: 0

        name: pacemaker

}


aisexec{

        user: root

        group: root

}




[root@node1 corosync]# pwd

/etc/corosync

[root@node1 corosync]# ls

corosync.conf  corosync.conf.example  service.d  uidgid.d

[root@node1 corosync]# corosync-keygen        #生成 corosync 的密钥

Corosync Cluster Engine Authentication key generator.

Gathering 1024 bits for key from /dev/random.

Press keys on your keyboard to generate entropy.

Writing corosync key to /etc/corosync/authkey.        #生成为 /etc/corosync/authkey

[root@node1 corosync]# 

[root@node1 corosync]# ll

总计 40

-r-------- 1 root root  128 12-11 10:28 authkey        #权限为 400

-rw-r--r-- 1 root root  514 12-11 10:26 corosync.conf

-rw-r--r-- 1 root root  436 2010-07-28 corosync.conf.example

drwxr-xr-x 2 root root 4096 2010-07-28 service.d

drwxr-xr-x 2 root root 4096 2010-07-28 uidgid.d

[root@node1 corosync]#


[root@node1 corosync]# file authkey        #不是文本文件,不能用cat查看,有专门的解码工具反编译才能看的

authkey: data

[root@node1 corosync]#



在第二个节点上 192.168.0.55 安装 corosync,pacemaker等软件

[root@node2 ~]# cd /root/corosync/

[root@node2 corosync]# pwd

/root/corosync

[root@node2 corosync]# ls

cluster-glue-1.0.6-1.6.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm

cts

heartbeat-3.0.3-2.3.el5.i386.rpm

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

libesmtp-1.0.4-5.el5.i386.rpm

pacemaker-1.0.12-1.el5.centos.i386.rpm

pacemaker-libs-1.0.12-1.el5.centos.i386.rpm

resource-agents-1.0.4-1.1.el5.i386.rpm

[root@node2 corosync]#

[root@node1 corosync]# mount /dev/cdrom /media/cdrom/        #挂载光盘,为了 yum localinstall 时可能所需的依赖

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@node1 corosync]# 


[root@node1 corosync]# yum --nogpgcheck localinstall *.rpm     #安装 cososync 和 pacemaker相关软件

image.png





在第一个节点上 192.168.0.45  复制相应的配置文件到 在第二个节点上 192.168.0.55 上


在第一个节点上 192.168.0.45 

[root@node1 corosync]# scp -p corosync.conf node2:/etc/corosync/        # -p 保留原来的属性与属组,权限等信息

corosync.conf                                 100%  514     0.5KB/s   00:00

[root@node1 corosync]#


在第一个节点上 192.168.0.45     创建日志文件目录


[root@node1 corosync]# mkdir /var/log/cluster        #给第一个节点( 192.168.0.45 )创建 /var/log/cluster 目录

[root@node1 corosync]# ssh node2 'mkdir /var/log/cluster'        #给第二个节点( 192.168.0.55 )创建 /var/log/cluster 目录

[root@node1 corosync]#



在第一个节点上 192.168.0.45   

[root@node1 corosync]# service corosync start        #启动第一个节点上 192.168.0.45 的 corosync 

Starting Corosync Cluster Engine (corosync):               [确定]

[root@node1 corosync]#

[root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'        #为何不能启动第二个节点上 192.168.0.55的 corosync,思路:查看第二个节点(192.168.0.55 ) tail /var/log/cluster/corosync.log 发觉 authkey有问题,应该是没有生成authkey

Starting Corosync Cluster Engine (corosync): [失败]

[root@node1 corosync]# 


在第二个节点(192.168.0.55 ) 上生成 生成authkey

[root@node2 corosync]# corosync-keygen        #生成 corosync 的密钥


在第一个节点上 192.168.0.45   

[root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'  #启动第二个节点上 192.168.0.55 的 corosync 

Starting Corosync Cluster Engine (corosync): [确定]

[root@node1 corosync]#


在第一个节点上 192.168.0.45   

检查日志看 corosync 是否正常启动

[root@node1 corosync]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log        #看 Corosync Cluster Engine 和 configuration file是否正常  -e表示正则表达式

Dec 11 11:02:06 corosync [MAIN  ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.

Dec 11 11:02:06 corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

[root@node1 corosync]#


在第一个节点上 192.168.0.45   

查看初始化成员节点通知是否正常发出:

TOTEM 图腾,用来定义各节点之间实现节点初始化的,各节点之间的第一次通信?

[root@node1 corosync]# grep TOTEM /var/log/cluster/corosync.log        #只要没有error就行

Dec 11 11:02:06 corosync [TOTEM ] Initializing transport (UDP/IP).

Dec 11 11:02:06 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).

Dec 11 11:02:06 corosync [TOTEM ] The network interface [192.168.0.45] is now up.

[root@node1 corosync]#


在第一个节点上 192.168.0.45   

检查启动过程中是否有错误产生:

[root@node1 corosync]# grep ERROR: /var/log/cluster/corosync.log      #我的错误为啥这么多,与第二个节点192.168.0.55的错误不一样

Dec 11 11:04:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Election Timeout (I_ELECTION_DC) just popped in state S_ELECTION!


Dec 11 11:07:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:10:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integra tion Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:13:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:16:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:19:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:22:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:25:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:28:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:31:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:34:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:37:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:40:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:43:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:46:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:49:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:52:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:55:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 11:58:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:01:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:04:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:07:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:10:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:13:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:16:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:19:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:22:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:25:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:28:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:31:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:34:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:37:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:40:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:43:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:46:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:49:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!


Dec 11 12:52:28 node1.magedu.com crmd: [14869]: ERROR: crm_timer_popped: Integration Timer (I_INTEGRATED) just popped in state S_INTEGRATION!

[root@node1 corosync]#


#马哥的 关于 unpack_resources 都是关于stonith的,没有配置stonith,所以是可以忽略的

我的第二个节点 192.168.0.55 的错误 与马哥的报错是一模一样的

image.png



在第一个节点上 192.168.0.45   

查看pacemaker是否正常启动:

#我们的pacemaker是被corosync调度调用启动起来的

[root@node1 corosync]# grep pcmk_startup /var/log/cluster/corosync.log

#  pcmk 就是 pacemaker 吧

Dec 11 11:02:06 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized

Dec 11 11:02:06 corosync [pcmk  ] Logging: Initialized pcmk_startup

Dec 11 11:02:06 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 4294967295

Dec 11 11:02:06 corosync [pcmk  ] info: pcmk_startup: Service: 9

Dec 11 11:02:06 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1.magedu.com

[root@node1 corosync]#



[root@node1 corosync]# crm_mon        # 我这里为什么看不到节点的信息

============

Last updated: Fri Dec 11 13:03:57 2020

Stack: openais    

Current DC: NONE

0 Nodes configured, 2 expected votes

0 Resources configured.

============



# Stack 叫 openais(其实是corosync,corosync是openais的子组件)

马哥又这个集群具有法定票数?哎不理解

没有配置ping node,一旦集群产生分裂,任何一个节点下线了,它无法判断当前这一个节点是不是在线的,因此很有可能产生集群分裂的

下图是马哥的,是正常的

image.png

image.png


在第一个节点上 192.168.0.45   

[root@node1 ~]# service corosync stop        #第一个节点 192.168.0.45 上的  corosync 都没法停止了

Signaling Corosync Cluster Engine (corosync) to terminate: [确定]

Waiting for corosync services to unload:............................................................................................................................................................................................................................................................................................................


搞了很久,没办法搞了,

只好把 第一个节点 192.168.0.45 虚拟机删掉

第二个节点   192.168.0.55 虚拟机 复制一份 为 第一个节点  192.168.0.45

终于 两个节点 报错 与马哥一样 (stonith错,无关紧要)

image.png



但是第二个节点   192.168.0.55 有下的错误,看不懂image.png



crm_mon 命令的结果也正常了

image.png

普通分类: