corosync基础介绍
corosync
AIS:
Application Interface Standard,应用程序接口规范
SA Forum:服务可用性论坛,OpenAIS即是此论坛开发
OpenAIS
提供了一种集群模式,包含集群框架、集群成员管理、通信方式、集群监测等,但没有提供集群资源管理功能;
常用组件包括:AMF,CLM,CPKT,EVT等接口,分支不同,包含的组件略有区别;
目前的三大主要分支包括:picacho,whitetank,wilson;OpenAIS在由whitetank升级到wilson的过程中,将其中的一个核心架构组件独立了出来,即corosync;由此,整个OpenAIS分裂为两个项目:corosync(集群管理引擎)和wilson(ais的接口标准)
CentOS 6上高可用集群的两套解决方案
cman + rgmanager(为了兼容CentOS 5)
corosync + pacemaker
命令行管理工具:
crmsh:SUSE,CentOS 6.4-
依赖于pssh
pcs:RedHat,CentOS 6.5+
crm常用子命令
configure:配置集群
show:显示集群信息
property:设置全局参数(命令后跟一个“space”,然后连击两下“Tab”)
verify:检查配置的语法错误
primitive:设置主资源
group:设置组资源
clone:设置克隆资源
ms:设置主从资源
location:定义位置约束
colocation:定义排列约束
order:定义顺序约束
delete:删除资源(无法删除使用中的资源)
edit:直接修改配置文件(自动打开一个vim编辑器)
commit:将内存中的设定提交到磁盘
配置格式:
指明资源类型、资源名、资源代理的类型、资源代理的参数、op指明操作
primitive<rsc_id> class:provider:ra params param1=value1 param2=value2 op op1param1=value op op2 parma1=value1
node:管理节点
show:显示当前可用节点
standby:下线资源
online:上限资源
status:查看资源状态
resource:管理资源
migrate:手动迁移资源(migrate 资源名目标节点名)
unmigrate:手动回迁资源(unmigrate资源名)
stop:停止资源
start:启用资源
status:查看资源状态
cleanup:清理资源状态
ra:资源代理
classes:显示代理类别,lsb、ocf、service、stonith
list CLASSER:显示指定类别可用的资源代理
infoocf:IPaddr:查看指定资源的详细信息
注意:配置两节点的corosync集群时,需要设置的两个全局属性
stonith-enabled=false
no-quorum-policy=ignore
案例:基于corosync和pacemaker构建HA mysql service
有了以上理论基础,我们就可以尝试构建HA mysql service了
第一步,安装corosync并完成全局配置
1、安装并配置corosync
# yum-y install corosync pacemaker
# cd/etc/corosync/
# cpcorosync.conf.example corosync.conf
# vimcorosync.conf
secauth:off:
是否打开安全认证共享,一般应该启用;启用后需运行“corosync-keygen”命令生成密钥文件;
threads:0:
工作线程数;0表示不基于线程模式工作,而是基于进程模式工作;
interface:
定义多个节点间通过哪个接口,基于哪个多播地址,监听于哪个端口完成多播通信;
bindnetaddr:
定义多播地址监听的网络地址,例如本案例中node1的IP地址为172.16.14.2/16,所以其所处的网络地址即应为172.16.0.0;
mcastaddr:
多播地址
mcastport:5405:
多播端口
ringnumber:0
ttlbindnetaddr:1
若要将pacemaker运作为corosync的插件,还需在配置文件中添加如下信息
service{
ver: 0
name: pacemaker
use_mgmtd: yes
}
aisexec{
user: root
group: root
}
2、运行corosync-keygen命令,生成密钥文件
因为corosync-keygen命令需要从/dev/random熵池中读取1024个随机数来生成密钥文件,所以必须保证熵池中的随机数足够,否则进程将被阻塞;
此时可通过安装程序、下载文件等手段形成IO产生随机数
此命令生成的密钥文件,权限自动为400
-r--------.1 root root 128 May 31 15:11 authkey
3、将配置文件和密钥文件同步到node2节点中
# scp-p authkey corosync.conf node2:/etc/corosync/
4、此时可启动corosync,并监控其运行
#service corosync start;ssh node2 'service corosync start'
# cd/var/log/cluster/
#tail -f corosync.log
查看corosync引擎是否正常启动:
#grep -e "Corosync Cluster Engine" -e "configuration file"/var/log/cluster/corosync.log
Sep 15 11:37:39 corosync [MAIN ] Corosync Cluster Engine ('1.4.1'): started and ready to provideservice.
Sep 15 11:37:39 corosync [MAIN ] Successfully read main configuration file'/etc/corosync/corosync.conf'.
查看初始化成员节点通知是否正常发出:
#grep TOTEM /var/log/cluster/corosync.log
Sep 15 11:37:39 corosync [TOTEM ] Initializing transport (UDP/IPMulticast).
Sep 15 11:37:39 corosync [TOTEM ] Initializing transmit/receivesecurity: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Sep 15 11:37:39 corosync [TOTEM ] The network interface[172.16.100.7] is now up.
Sep 15 11:37:39 corosync [TOTEM ] A processor joined or left themembership and a new membership was formed.
Sep 15 11:37:39 corosync [TOTEM ] A processor joined or left themembership and a new membership was formed.
检查启动过程中是否有错误产生。下述错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此建议使用cman作为集群基础架构服务;此处可安全忽略。
#grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
Sep 15 11:37:39 corosync [pcmk ] ERROR: process_ais_conf: You have configured a cluster using thePacemaker plugin for Corosync. The plugin is not supported in this environmentand will be removed very soon.
Sep 15 11:37:39 corosync [pcmk ] ERROR: process_ais_conf: Pleasesee Chapter 8 of 'Clusters from Scratch' (http://www.clusterlabs.org/doc) fordetails on using Pacemaker with CMAN
Sep 15 11:37:40 corosync [pcmk ] ERROR: pcmk_wait_dispatch: Child process mgmtd exited (pid=2375,rc=100)
查看pacemaker是否正常启动:
#grep pcmk_startup /var/log/cluster/corosync.log
Sep 15 11:37:39 corosync [pcmk ] info: pcmk_startup: CRM: Initialized
Sep 15 11:37:39 corosync [pcmk ] Logging: Initialized pcmk_startup
Sep 15 11:37:39 corosync [pcmk ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Sep 15 11:37:39 corosync [pcmk ] info: pcmk_startup: Service: 9
Sep 15 11:37:39 corosync [pcmk ] info: pcmk_startup: Local hostname: node1.magedu.com
如果上面命令执行均没有问题,可以执行后续操作
注意:进行后续操作前一定要确保iptables关闭或规则清空,否则将导致集群分裂,两个节点之间无法联系
5、安装crmsh(仅需在一个节点安装即可)
lftp172.16.0.1:/pub/Sources/6.x86_64/corosync> get crmsh-2.1-1.6.x86_64.rpm
lftp172.16.0.1:/pub/Sources/6.x86_64/crmsh> get pssh-2.3.1-2.el6.x86_64.rpm
crmsh依赖于pssh,且本版本的crmsh只兼容较老版本的pssh
# yum --nogpgcheck localinstallcrmsh-2.1-1.6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm
6、使用crm命令完成全局配置
crm(live)configure#property stonith-enabled=false
因为本案例中无stonith设备,所以要设置禁用该设备
crm(live)configure#property no-quorum-policy=ignore
因为本案例是两节点集群,其中一节点下线会导致另一节点“without quorum”,而此时对资源的默认处理动作是stopped,资源会停止运行而不迁移,无法实现高可用的目的,所以必须作此修改;
使用crm命令所做的设置是保存在内存中的,要想配置正式生效需提交到磁盘中
crm(live)configure#verify(检查设置错误)
crm(live)configure#commit(提交)
crm(live)configure#cd ..(可返回上一级命令)
第二步,开始配置HA mysql service
(1)前期规划
需要准备3个资源:
ip:172.16.14.5
mysqld:二进制安装MariaDB
share storage:NFS
注意:必须保证node1、node2和nfs三者上mysql用户的uid相同,此处都设为360
(2)创建NFS
#mkdir -pv /data/mydata
# vim/etc/exports
添加一行信息“/data/ 172.16.0.0/16(rw,no_root_squash)”
#groupadd -r -g 360 mysql
#useradd -r -u 360 -g 360 mysql
#chown -R mysql.mysql /data/mydata/
(3)在其中一node上挂载nfs以作测试
#mount -t nfs 172.16.14.1:/data/ /data/
若出现错误提示“mount.nfs: access denied by serverwhile mounting 172.16.14.1:/data/mydata”,则需在提供nfs的虚拟机上重新导出nfs
#exportfs -arv
#groupadd -r -g 360 mysql
#useradd -r -u 360 -g 360 mysql
(4)安装MariaDB
lftp172.16.0.1:/pub/Sources/sources/mariadb> getmariadb-5.5.43-linux-x86_64.tar.gz
# tarxf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/
# ln-sv mariadb-5.5.43-linux-x86_64/ mysql
# cdmysql/
#chown -R root.mysql ./*
#./scripts/mysql_install_db --datadir=/data/mydata/ --user=mysql
完成此步数据库初始化后,就无需root对nfs有写权限了,此时可修改/etc/exports,删除no_root_squash
#mkdir /etc/mysql
# cpsupport-files/my-large.cnf /etc/mysql/my.cnf
# vim/etc/mysql/my.cnf,添加如下三行信息
datadir= /data/mydata
innodb_file_per_table= on
skip_name_resolve= on
# cpsupport-files/mysql.server /etc/rc.d/init.d/mysqld
#chkconfig --add mysqld
# vim/etc/profile.d/mysql.sh
# ./etc/profile.d/mysql.sh
开启mysql服务,在其中创建一个测试数据库,到提供nfs的虚拟机上验证,若一切OK,可关闭mysql服务,并确保其开机不会自动启动
#chkconfig mysqld off
# su- mysql
-bash-4.1$cd /data/mydata/
-bash-4.1$touch a.txt
-bash-4.1$exit
#touch /data/mydata/c.txt
切换到提供nfs的虚拟机上查看a.txt和c.txt文件是否存在,以证明mysql和root用户是否对nfs有写权限,而后清理测试文件
# rm-f /data/mydata/*.txt
#umount /data/
(5)配置HA mysqlservice
通过定义组来解决排列约束
注意:若第一次启动失败,排错后重新启动前一定要清除之前的错误记录,否则会导致一直无法启动
(6)创建远程登录用户并在远程主机上登录测试
MariaDB[(none)]> GRANT ALL ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY '123';
#mysql -uroot -h172.16.14.5 -p