设为首页 收藏本站
查看: 3283|回复: 0

[经验分享] Corosync+Pacemaker

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-4 08:53:24 | 显示全部楼层 |阅读模式
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-role:started,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会自动安装corosync和pacmaker

示例: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服务,
设置测试页
[iyunv@centos7 ansible_playbooks]# echo"<h1>This is node1</h1>" >/var/www/html/index.html
[iyunv@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 >>
[iyunv@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/
[iyunv@centos7 corosync]# ls
corosync.conf.example  corosync.conf.example.udpu  corosync.xml.example  uidgid.d
[iyunv@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

下面来定义资源,可以使用crmsh和pcs等,也可以直接使用二进制的接口命令也可以设置
下面使用crmsh,只需要在一个节点安装crmsh就行了,然后在这个节点进行配置

使用crm_verify -L –V 可以查看集群的状态,这里显示错误,是因为我们没有STONITH设备,但默认开启了这一项,所以需要修改这一项stonith-enabled为false
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.cnf的datadir=/mydata/data 然后重启mariadb,如果能正常启动没有问题的话
就把上面做的资源修改下就可以实现mysql集群了。(这个以后有时间在演示)






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-134772-1-1.html 上篇帖子: corosync+pacemaker+crmsh实现3节点高可用web服务 下篇帖子: pdsh、ClusterSSH和mussh集群管理软件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表