corosync+pacemker的高可用集群,html
能够分为几层:从下往上,分为Messaging Layer(信息传递层或基础架构层,用来传递心跳信息等的程序),Resoure Layer(资源管理器层(全局的),管理资源),Local Resouce Manager(本地资源管理器),在上面是资源代理,node
这种形式的高可用集群,一旦分区,须要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-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的博客)
而后在每一个节点启动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
能够使用systemctl status pcsd 来查看
而后给hacluster这个用户设置密码
ansible websrvs -m shell -a 'echo"mageedu" | passwd --stdin hacluster'
而后配置corosync 在其中的任意一个节点上进行配置(pcs help 能够查看pcs的命令)
pcs cluster auth centos71 centos72 作认证
这样验证就经过了,你要保证每一个节点的hacluster的用户的信息是同样的,
在另外一个节点上测试下
而后设定集群
pcs cluster setup --name mycluster centos71centos72
若是你之前作过corosync集群,加个选项–force强制从新生成下
而后进入/etc/corosync/里面会有一个corosync.conf配置文件,这个文件默认是不存在的
能够修改配置文件(/etc/corosync/ corosync.conf),把日志的存放位置改下
而后其余节点也须要修改,
这个不须要修改就能够启动,这里为了查看日志方便,才修改的
而后启动集群任意节点中pcs cluster start - - all 由于这里只有一个集群,因此使用all,若是有多个,能够指定集群名来启动
而后检查集群启动的状态
检查各节点通讯状态(显示为no faults即为OK):
corosync-cfgtool -s
能够看到没问题
检查集群成员关系及Quorum API:
corosync-cmapctl | grep members
这样集群就没问题了
还能够使用 pcs status 来查看集群状态
这里有个警告,须要修改集群的全局属性stonith-enabled=false就能够了,
Current DC是集群中用来决策的节点
crm_verify -L –V这个命令能够查看集群是否有问题
配置集群全局属性,pcs property set stonith-enabled=false,而后在检查就没问题了
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
查看状态
要把这两个资源绑到一块,使用约束,或者定义成组,这里定义成组
pcs resource group add webservice webipwebserver
在看状态
这样资源就在一个节点上了
测试下
而后把这个节点状态改成standby,资源就会到另外一个节点上了
pcs cluster standby centos71
能够看到在另外一个节点上了,测试下
示例:手动配置 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
而后修改配置文件
作安全认证
由于开启认证了,因此要生成认证文件
corosync-keygen
而后把配置文件和认证文件,复制给其余节点
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
而后执行就好了
使用这个命令corosync-cfgtool –s验证如下
其余节点也都验证一下
使用这个命令corosync-cmapctl也能够验证,里面有下面这些信息就能够了
而后启动pacemaker ,配置文件在/etc/sysconfig/pacemaker里,通常不用改,若是想单独生成日志文件,打开下面这一项
写入到刚才的ansible剧本里,而后执行
使用ps aux 查看下
而后使用crm_mon来监控集群服务
能够看到,节点都启动成功了,就是没有资源定义
下面来定义资源,能够使用crmsh和pcs等,也能够直接使用二进制的接口命令也能够设置
下面使用crmsh,只须要在一个节点安装crmsh就好了,而后在这个节点进行配置
使用crm_verify -L –V 能够查看集群的状态,这里显示错误,是由于咱们没有STONITH设备,但默认开启了这一项,因此须要修改这一项stonith-enabled为false
安装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包)
而后就能够使用crm工具了
而后就行资源的定义,修改STONITH这一项crm(live)# configure property stonith-enabled=false
而后在crm_verify -L -V检查集群就没问题了,下面开始配置资源
show能够查看已定义的资源,而后定义IP这个资源,使用verify能够检查错误,若是出错会提示,若是出错,能够使用delete webip这个资源
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
使用show xml 能够看到配置的配置文件,定义好提交,而后在使用status就能够查看集群的状态了,从上图能够看出,资源已经启动了
查看下ip地址
地址加上了,而后访问下
而后把第一个节点变为备用
而后使用这个命令crm node standby
而后在查看状态
能够看到迁移了,
而后去centos71上看下,而后在访问下
没问题了,而后再把节点一还原回来,看下资源会不会切换来
能够看到资源没有动,咱们能够定义位置约束,只要这个节点在,就会把资源移动到这个节点上
location webservice_pref_centos7 webip 100:centos7 定义位置约束
而后commit同步
能够看到资源回到cemtos7上了
下面把web的页面放在nfs服务器上,而后修改资源进行操做
首先在nfs服务器上建立一个目录,mkdir /www/htdocs -pv
而后写一个测试页echo "<h1>Test Page on NFS Server</h1>" >/www/htdocs/index.html
而后把这个目录输出出去,编辑/etc/exports
而后执行service nfs start,而后确保没有被iptables阻断
而后chkconfig nfs on 让其能开机启动
而后测试一下,
在其余主机上使用showmount -e 172.16.249.248
能够看到没问题了
而后挂载上,访问测试下
而后使用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
而后测试就好了
使用corosync + pacemaker作mysql集群
首先设置nfs
而后在nfs共享的目录里,建立一个data目录,属主属组改成mysql 权限766
负载mysql服务
而后在节点主机里,建立一个/mydata/data/目录属主属组改成mysql权限766
修改/etc/my.cnf的datadir=/mydata/data 而后重启mariadb,若是能正常启动没有问题的话
就把上面作的资源修改下就能够实现mysql集群了。(这个之后有时间在演示)