欢迎各位兄弟 发布技术文章
这里的技术是共享的
mean:这里是平均的意思
硬件故障:
design failure:
random failure:
infant mortality:自己用法失当,导致服务器提前终止了
wear out:穿破了,用坏了
用品牌,质量好的
抢修,替换掉
软件故障:
找经验丰富的团队开发
检视所有代码
简单就是美
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
corosync:只是一个集群引擎,不是负责信息传递的,不负责资源管理能力,对于非ha-aware(非高可用的软件)要使用ha-aware的能力要提供crm,这里使用的是 pacemaker (当然pacemaker既可以和corosync一起工作,也可以和heartbeat v3一起工作)
pacemaker 比 crmd 更强管理能力,提供更丰富特性的集群资源管理器,但是与 hb_gui & 图形界面的概念差不多,
corosync 完全支持在纯命令行方式下配置,也支持多种图形界面
我打开的 https://clusterlabs.org/ 与马哥的不一样
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
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
Fedora:
openSUSE: 属于 Novell,
马哥讲解的知识,大多来自于 clusterlabs.org的文档和SUSE官方所提供的高可用集群的文档 (Book LSEHA) (suse linux enterprise版 ha服务书 ) 可以到nowell官方站点搜一下 LSEHA( suse linux enterprise版 ha服务)
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/
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/
https://clusterlabs.org/pacemaker/doc/ 这个文档相当好,只不过它用的是fedora,从零开始,自己通过手动安装corosync等等 来安装集群的
pcs是另外一个基于图形的管理工具,webGUI
DLM: Distributed Lock Manager 分布式锁管理器
如gfs,ocfs,甚至集群逻辑卷,都依赖于DLM
cLVM: cluster logical volume manager 集群逻辑卷
gfs2:global filesystem 2 全局文件系统
ocfs2:Oracle Clustered File System version 2
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系列
马哥说 先使用 corosync 1.27的包吧
首先:
时间同步
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 )
先不装这个包,看能不能装上去 ( 下面的安装好像不依赖于 openais ,换句话说,不需要安装 openais )
自动解决依赖关系,装上 perl_TimeDate
在第二个节点 192.168.0.55 上 同样安装上面的软件
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
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相关软件
[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
冗余协议,eth0,eth1接在同一个交换机上;;从0开始记号,第一组是ringnumber 0,,第二组是ringnumber 1
我们只有一个网卡,所以直接是默认值 0
bindnetaddr #绑定的网络地址,不是网卡地址
broadcast #如果要广播的话,在哪个网络内广播
mcastaddr #多播的方式通信 组播地址 不能是 224的地址,其它的组播地址都可以使用,为了同学们不相干扰,挑一个大家用不到的地址
mcastport #默认是 694端口上通信的吧?? 不对 corosync用的是 5405
version #是配置文件的版本号 ,是让corosync实现它的语法的,不能动
secauth (secure authentication) 安全的认证机制,默认是关闭的off,为了安全,是on起来,基于HMAC/SHA1进行认证加密,相当消耗CPU时间的;;;;要以aisexec as measured这种方式运行,但我们用不着,所以启用起来,也没关系
rrp_mode # corosync是否可以执行在rrp模型当中,默认配置文件里面没有
threads #需要多少线程来实现加密和执行多播的,如果 secauth 是 off ,这一项基本是没有意义的;;如果 secauth 是 on,那么这一项是可以使用多线程来提高性能的,,,,可以多启动几个线程,但是不要太多,况且,没有cpu的情况下,启动太多也没有意义????
本身cpu的场景当中,本身会自动启动多个线程来实现mcast的,而在只有一颗cpu的环境当中,启动多线程,可以加速多播的执行过程
fileline #不同的日志信息之间 各行之间要不要打印行分隔线之类的,意义不大
This specifies that file and line should be printed.
The default is off.
在第一个节点上 ( 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相关软件
在第一个节点上 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 的错误 与马哥的报错是一模一样的
在第一个节点上 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,一旦集群产生分裂,任何一个节点下线了,它无法判断当前这一个节点是不是在线的,因此很有可能产生集群分裂的
下图是马哥的,是正常的
在第一个节点上 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错,无关紧要)
但是第二个节点 192.168.0.55 有下的错误,看不懂
crm_mon 命令的结果也正常了