Corosync+Pacemaker

corosync+pacemker的高可用集群,

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

wKiom1Y4NVTg_plHAAF6hkjRkQU708.jpg

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

vote system: (投票系统)

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

        withquorum: 拥有法定票数

        withoutquorum: 不拥有法定票数

两个节点(偶数个节点)

    Pingnode

    qdisk

    如果是两个节点的后端服务器,需要加仲裁机制,才能让集群正常的工作

 

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

资源类型:

    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集群,加个选项�Cforce强制重新生成下

然后进入/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 �CV这个命令可以查看集群是否有问题

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 �Cs验证以下

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 �CV 可以查看集群的状态,这里显示错误,是因为我们没有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集群了。(这个以后有时间在演示)


 

 

 

 


你可能感兴趣的:(crmsh和pcs的使用)