基于corosync和pacemaker实现HA mysql service

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


案例:基于corosyncpacemaker构建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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。