Corosync+Pacemaker

corosync+pacemker的高可用集群,html

能够分为几层:从下往上,分为Messaging  Layer(信息传递层或基础架构层,用来传递心跳信息等的程序),Resoure  Layer(资源管理器层(全局的),管理资源),Local  Resouce  Manager(本地资源管理器),在上面是资源代理,node

wKiom1Y4NVTg_plHAAF6hkjRkQU708.jpg

这种形式的高可用集群,一旦分区,须要quorum(拥有法定票数)  >  total/2(总数),拥有法定票数多的一方表明集群进行工做python

vote system: (投票系统)mysql

   少数服从多数:quorum> total/2web

        withquorum: 拥有法定票数sql

        withoutquorum: 不拥有法定票数shell

两个节点(偶数个节点)vim

    Pingnode后端

    qdiskcentos

    若是是两个节点的后端服务器,须要加仲裁机制,才能让集群正常的工做

 

资源管理层用来定义和管理资源,资源之间有位置关系(也叫约束)

资源类型:

    primitive:主资源,原始资源;在集群中只能运行一个实例;

    clone:克隆资源,在集群中可运行多个实例;匿名克隆、全局唯一克隆、状态克隆(主动、被动)

    multi-state(master/slave):克隆资源的特殊实现;多状态资源;

    group: 组资源;

        启动或中止;

        资源监视

        相关性:

 

    资源属性:

        priority: 优先级;

        target-rolestarted,stopped, master;

        is-managed:是否容许集群管理此资源;

        resource-stickiness:资源粘性;

        allow-migrate:是否容许迁移;

    约束:score

        位置约束:资源对节点的倾向性;

          (-oo,+oo):

            任何值+无穷大=无穷大

            任何值+负无穷大=负无穷大

            无穷大+负无穷大=负无穷大

        排列约束:资源彼此间是否能运行于同一节点的倾向性;

        顺序约束:多个资源启动顺序依赖关系,即谁先启动,谁后启动;

            

CentOS7中,使用的是corosync  v2(带有投票系统)  + pacemaker (独立服务)

集群的全生命周期管理工具:

        pcs:agent(pcsd)

        crmsh:agentless (pssh)

 

配置集群的前提:

    (1)时间同步;

    (2)基于当前正在使用的主机名互相访问;

    (3)是否会用到仲裁设备;

配置两节点的集群服务,首先安装pcs,安装pcs会自动安装corosyncpacmaker

 

示例:pcs的方式配置集群,用pcs管理集群

 

两个节点都安装pcs,时间要同步,要能基于主机名进行访问,须要修改/etc/hosts文件(ansible的使用,若有疑问能够查看本人的ansible的博客)

wKioL1Y4ZwzTWokZAACjGseyDo0343.jpg

wKiom1Y4Z5KwDf4hAAB4UkFUiXU729.jpg

而后在每一个节点启动pcsd.service,并让开机自启动

systemctl start pcsd.service

systemctl enable pcsd.service

使用ansible进行启动

ansible websrvs -m service -a 'name=pcsdstate=started enabled=yes'

websrvs里包括172.16.249.115  172.16.249.159

wKioL1Y4Z_WBM4NAAADeK9sj7vA824.jpg

能够使用systemctl  status  pcsd 来查看

wKioL1Y4aGPRv6GSAAHvosjFd7E891.jpg

而后给hacluster这个用户设置密码

ansible websrvs -m shell -a 'echo"mageedu" | passwd --stdin hacluster'

wKiom1Y4aEPSBIe0AAEAUdp08F0943.jpg

而后配置corosync 在其中的任意一个节点上进行配置(pcs  help 能够查看pcs的命令)

pcs  cluster  auth  centos71 centos72 作认证

wKiom1Y4aFqSIfozAABvaAVBJ2Y284.jpg

这样验证就经过了,你要保证每一个节点的hacluster的用户的信息是同样的,

在另外一个节点上测试下

wKiom1Y4aHrDMfCGAABtYZQqM_o336.jpg

而后设定集群

pcs cluster setup --name mycluster centos71centos72

wKiom1Y4aKCTujqYAAEnURH4Hg0371.jpg

若是你之前作过corosync集群,加个选项–force强制从新生成下

而后进入/etc/corosync/里面会有一个corosync.conf配置文件,这个文件默认是不存在的

能够修改配置文件(/etc/corosync/ corosync.conf),把日志的存放位置改下

wKioL1Y4aPGQsX6rAAA4gfelaaw615.jpg

而后其余节点也须要修改,

这个不须要修改就能够启动,这里为了查看日志方便,才修改的

 

而后启动集群任意节点中pcs cluster start - - all 由于这里只有一个集群,因此使用all,若是有多个,能够指定集群名来启动

wKioL1Y4aQnjWdhSAABvGBCMXIc160.jpg

而后检查集群启动的状态

检查各节点通讯状态(显示为no faults即为OK)

 corosync-cfgtool -s

wKiom1Y4aOyDD9QQAACdLVvBUvI046.jpg

能够看到没问题

检查集群成员关系及Quorum API:

corosync-cmapctl  | grep members

wKiom1Y4aQDjs3pLAAGfZCFUVQU257.jpg

这样集群就没问题了

还能够使用 pcs  status 来查看集群状态

wKiom1Y4aRCi6F7sAAGwS3D_Qjo575.jpg

这里有个警告,须要修改集群的全局属性stonith-enabled=false就能够了,

Current DC是集群中用来决策的节点

crm_verify -L –V这个命令能够查看集群是否有问题

wKioL1Y4aV2B82hrAAEPc7bleBU012.jpg


配置集群全局属性,pcs property set stonith-enabled=false,而后在检查就没问题了

wKiom1Y4aSCDsCEMAABfeN51E2w383.jpg 

pcs resource  describe  能够查看资源的配置命令格式

查看一个详细资源的配置信息

pcs resource describe 资源名 例:pcs resourcedescribe ocf:heartbeat:IPaddr

这样就能够查看这个资源的怎样配置的了

 

定义资源,pcs resource create webip ocf:heartbeat:IPaddrip="172.16.36.88" op monitor interval=20s timeout=10s

删除资源,pcs resource  delete  webip  这样就能够删除

而后定义下一个资源

pcs resource create webserver systemd:httpdop monitor interval=30s timeout=20s

查看状态

wKiom1Y4aWHy3fFhAAHPRKzrB6w157.jpg

要把这两个资源绑到一块,使用约束,或者定义成组,这里定义成组

pcs resource group add webservice webipwebserver

在看状态

wKiom1Y4aevxlKcCAAHVW_Ltd9Q753.jpg

这样资源就在一个节点上了

测试下

wKiom1Y4agDSFpRKAABk-L3nNrg064.jpg

而后把这个节点状态改成standby,资源就会到另外一个节点上了

pcs cluster standby centos71

wKioL1Y4alXwVt00AAHrVbw8i-I252.jpg

能够看到在另外一个节点上了,测试下

wKioL1Y4amaRjNBZAABj3S96Doc734.jpg

 

 

 

 

示例:手动配置 corosync + pacemaker 使用crmsh来管理集群

 

首先在三个节点上172.16.249.195(centos7),172.16.249.115(centos71),172.16.249.159(centos72),安装httpd服务,

设置测试页

[root@centos7 ansible_playbooks]# echo"<h1>This is node1</h1>" >/var/www/html/index.html

[root@centos7 ansible_playbooks]# ansible172.16.249.159 -m shell -a'echo "<h1>This is node3</h1>">/var/www/html/index.html'

172.16.249.159 | success | rc=0 >>

[root@centos7 ansible_playbooks]# ansible172.16.249.115 -m shell -a'echo "<h1>This is node2</h1>">/var/www/html/index.html'

172.16.249.115 | success | rc=0 >>

而后测试服务是否都没问题了,把服务停掉,而后把服务加入到列表中


而后作corosync+pacemaker集群服务

首先安装 corosync和 pacemaker 使用ansible

建立一个installcpk.yml,而后加入内容以下:

    - hosts: websrvs

     remote_user: root

     tasks:

       - name: install corosync pacemaker

        yum: name=corosync state=present

        yum: name=pacemaker state=present

 

而后使用 ansible-playbook installcpk.yml

这样就安装好了

 

使用多播的形式来进行heartbeat的信息交互,而后crmsh认证

首先复制配置文件

cd /etc/corosync/

[root@centos7 corosync]# ls

corosync.conf.example  corosync.conf.example.udpu  corosync.xml.example  uidgid.d

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

而后修改配置文件

wKiom1Y4bOOwOjhyAAI2HU5cLIg220.jpg

wKioL1Y4bSCBBx7tAADzWV_CYMQ008.jpg

wKioL1Y4bSDDo_bnAABQMPlbiKc503.jpg 作安全认证

wKiom1Y4bOPSVmQ4AABrCFcLIAw912.jpg

wKiom1Y4bOOTleHrAACHH7-dK9Y075.jpg

由于开启认证了,因此要生成认证文件

corosync-keygen

wKioL1Y4bWSSi0VfAADTpCRkQ1E285.jpg

而后把配置文件和认证文件,复制给其余节点

scp -p authkey corosync.confcentos71:/etc/corosync/

scp -p authkey corosync.conf centos72:/etc/corosync/

而后验证没有问题的话,就能够启动了

写一个ansible剧本,

vim startcpk.yml

- hosts: websrvs

 remote_user: root

 tasks:

       - name: start corosync

         service: name=corosync  state=started

而后执行就好了

wKiom1Y4beyg1c56AAIaGkCCBho666.jpg

使用这个命令corosync-cfgtool –s验证如下

wKioL1Y4beuCKpGwAACKV4oMBfc933.jpg

其余节点也都验证一下

wKiom1Y4bzPQ3W-9AACS--vs1QI909.jpg

wKioL1Y4b3HDUX9OAACLBpHzMRk976.jpg

使用这个命令corosync-cmapctl也能够验证,里面有下面这些信息就能够了

wKioL1Y4b5HTjEAYAAIoThY4aF0144.jpg

 

而后启动pacemaker ,配置文件在/etc/sysconfig/pacemaker里,通常不用改,若是想单独生成日志文件,打开下面这一项

wKiom1Y4b3GTQEmFAABogNjgH90839.jpg

写入到刚才的ansible剧本里,而后执行

wKioL1Y4b7ngi8JIAAB_WRFQhFk526.jpg

wKioL1Y4b-bzFcqXAAJfU0H0V0s037.jpg

使用ps  aux 查看下

wKiom1Y4b72BnL7kAAI8rJLspp8694.jpg

 

而后使用crm_mon来监控集群服务

能够看到,节点都启动成功了,就是没有资源定义

wKioL1Y4cA7xublIAADEshX6zaY720.jpg

 

下面来定义资源,能够使用crmshpcs等,也能够直接使用二进制的接口命令也能够设置

下面使用crmsh,只须要在一个节点安装crmsh就好了,而后在这个节点进行配置

 

使用crm_verify -L –V 能够查看集群的状态,这里显示错误,是由于咱们没有STONITH设备,但默认开启了这一项,因此须要修改这一项stonith-enabledfalse

wKiom1Y4cAWjfBr5AAFIpqFDK10520.jpg

安装crmsh来进行修改和定义资源

首先下载,

crmsh-2.1.4-1.1.x86_64.rpmpssh-2.3.1-4.2.x86_64.rpm python-pssh-2.3.1-4.2.x86_64.rpm

这几个rpm包,而后yum -y install *.rpm(你要保证当前目录下,就只有这三个rpm包)

wKiom1Y4cCSBa6fsAADpuCl4F7g959.jpg

 

而后就能够使用crm工具了

wKiom1Y4cDjAITW-AAAdm3g4mgA921.jpg

而后就行资源的定义,修改STONITH这一项crm(live)# configure property stonith-enabled=false

而后在crm_verify -L -V检查集群就没问题了,下面开始配置资源

 

show能够查看已定义的资源,而后定义IP这个资源,使用verify能够检查错误,若是出错会提示,若是出错,能够使用delete webip这个资源

wKioL1Y4cI2ykzXWAAEsV7_UQ0A167.jpg

primitive webip ocf:heartbeat:IPaddr paramsip="172.16.36.88" op monitor interval=30s timeout=20s

primitive webserver systemd:httpd opmonitor interval=30s timeout=20s

colocation webserver_with_webip inf:webserver webip 这是定义这两个资源在一块儿,排列约束

order webserver_afterwebip Mandatory: webipwebserver定义顺序约束

而后提交commit

wKioL1Y4cReD0oFMAAFzaQdDJSs514.jpg

使用show  xml  能够看到配置的配置文件,定义好提交,而后在使用status就能够查看集群的状态了,从上图能够看出,资源已经启动了

查看下ip地址

wKioL1Y4caqw0gffAAFWlU3Jlp4255.jpg

地址加上了,而后访问下

wKiom1Y4cT6xSNC2AABZtTj6v-I647.jpg

而后把第一个节点变为备用

而后使用这个命令crm node standby

而后在查看状态

wKioL1Y4cdTgd-uuAAF_pM0x6mc547.jpg

能够看到迁移了,

而后去centos71上看下,而后在访问下

wKioL1Y4cfaCcxggAAGU1olJGa4432.jpg

wKiom1Y4cbmTs38eAABdKgvnoTI212.jpg

 

没问题了,而后再把节点一还原回来,看下资源会不会切换来

wKiom1Y4ceLQyiBzAAFtATG52Ac600.jpg

能够看到资源没有动,咱们能够定义位置约束,只要这个节点在,就会把资源移动到这个节点上

location webservice_pref_centos7 webip 100:centos7  定义位置约束

而后commit同步

wKioL1Y4ckPwZ3OkAAF0cs-Nh_U860.jpg

能够看到资源回到cemtos7上了

 

下面把web的页面放在nfs服务器上,而后修改资源进行操做


首先在nfs服务器上建立一个目录,mkdir /www/htdocs -pv

而后写一个测试页echo "<h1>Test Page on NFS Server</h1>" >/www/htdocs/index.html

而后把这个目录输出出去,编辑/etc/exports

wKiom1Y4cizzqGYpAAAdkERtcu4427.jpg

而后执行service   nfs   start,而后确保没有被iptables阻断

wKioL1Y4cnvBOPAjAAFx4mFn1ys745.jpg

而后chkconfig nfs on 让其能开机启动

而后测试一下,

在其余主机上使用showmount -e 172.16.249.248

wKiom1Y4clXjAdQdAAB1ex0-IL4509.jpg

能够看到没问题了

而后挂载上,访问测试下

wKioL1Y4cpWiNTNAAAD-mOYLx6M721.jpg

wKiom1Y4cliAyCrCAABoqLHzNKU872.jpg

而后使用crmsh定义nfs资源

而后把刚定义的顺序和绑定的约束删掉

delete webserver_with_webip

delete webserver_afterwebip

而后定义资源

primitive webstore ocf:heartbeat:Filesystemparams device="172.16.249.248:/www/htdocs"directory="/var/www/html" fstype="nfs" op start timeout=60sop stop timeout=60s op monitor  interval=20s  timeout=40s

 

colocation webserver_with_webstore_and_wibipinf: webserver (webip webstore)

order webstore_after_webip Mandatory: webipwebstore

order webserver_after_webstore Mandatory:webstore webserver

commit

status

wKioL1Y4csyjixf0AAFCrTA10ew808.jpg

而后测试就好了

wKiom1Y4co6RS1cSAAB0PMa_WXI942.jpg

使用corosync + pacemaker作mysql集群 

首先设置nfs

而后在nfs共享的目录里,建立一个data目录,属主属组改成mysql 权限766

负载mysql服务

而后在节点主机里,建立一个/mydata/data/目录属主属组改成mysql权限766

修改/etc/my.cnfdatadir=/mydata/data 而后重启mariadb,若是能正常启动没有问题的话

就把上面作的资源修改下就能够实现mysql集群了。(这个之后有时间在演示)

本站公众号
   欢迎关注本站公众号,获取更多信息