linux corosync+pacemaker+drbd+mysql配置安装详解
一,基本环境介绍及基本环境配置
节点1:node1.hulala.com 192.168.1.35 centos6.5_64 添加8G新硬盘
节点2:node1.hulala.com 192.168.1.36 centos6.5_64 添加8G新硬盘
vip 192.168.1.39
节点1与节点2均需配置
修改主机名:
vim/etc/sysconfig/network
HOSTNAME=node1.hulala.com
配置hosts解析:
vim/etc/hosts
192.168.1.35 node1.hulala.comnode1
192.168.1.36 node2.hulala.comnode1
同步系统时间:
ntpdatecn.pool.ntp.org
关闭防火墙与SELINUX
serviceiptablesstop
chkconfigiptablesoff
cat/etc/sysconfig/selinux
SELINUX=disabled
以上配置在两个节点都需要配置,配置完成之后重启两个节点
二:配置ssh互信
[root@node1~]#ssh-keygen-trsa-b1024
[root@node1~]#ssh-copy-idroot@192.168.1.36
[root@node2~]#ssh-keygen-trsa-b1024
[root@node2~]#ssh-copy-idroot@192.168.1.35
三:DRBD的安装与配置(node1和node2执行相同操作)
[root@node1~]#wget-chttp://elrepo.org/linux/elrepo/el6/x86_64/RPMS/drbd84-utils-8.4.2-1.el6.elrepo.x86_64.rpm
[root@node1~]#wget-chttp://elrepo.org/linux/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.2-1.el6_3.elrepo.x86_64.rpm
[root@node1~]#rpm-ivh*.rpm
获取一个sha1值做为shared-secret
[root@node1~]#sha1sum/etc/drbd.conf
8a6c5f3c21b84c66049456d34b4c4980468bcfb3 /etc/drbd.conf
创建并编辑资源配置文件:/etc/drbd.d/dbcluster.res
[root@node1~]#vim/etc/drbd.d/dbcluster.res resourcedbcluster{ protocolC; net{ cram-hmac-algsha1; shared-secret"8a6c5f3c21b84c66049456d34b4c4980468bcfb3"; after-sb-0pridiscard-zero-changes; after-sb-1pridiscard-secondary; after-sb-2pridisconnect; rr-conflictdisconnect; } device /dev/drbd0; disk /dev/sdb1; meta-diskinternal; onnode1.hulala.com{ address 192.168.1.35:7789; } onnode2.hulala.com{ address 192.168.1.36:7789; } }
以上配置所用参数说明:
RESOURCE:资源名称
PROTOCOL:使用协议”C”表示”同步的”,即收到远程的写入确认之后,则认为写入完成.
NET:两个节点的SHA1key是一样的
after-sb-0pri:“SplitBrain”发生时且没有数据变更,两节点之间正常连接
after-sb-1pri:如果有数据变更,则放弃辅设备数据,并且从主设备同步
rr-conflict:假如前面的设置不能应用,并且drbd系统有角色冲突的话,系统自动断开节点间连接
META-DISK:Metadata保存在同一个磁盘(sdb1)
ON<NODE>:组成集群的节点
将DRBD配置拷贝到node机器:
[root@node1~]#scp/etc/drbd.d/dbcluster.resroot@192.168.1.36:/etc/drbd.d/
创建资源及文件系统:
创建分区(未格式化过)
在node1和node2上创建LVM分区:
[root@node1~]#fdisk/dev/sdb
在node1和node2上给资源(dbcluster)创建metadata:
[root@node1~drbd]#drbdadmcreate-mddbcluster
激活资源(node1和node2都得查看)
–首先确保drbdmodule已经加载
查看是否加载:
#lsmod|grepdrbd
若未加载,则需加载:
#modprobedrbd
#lsmod|grepdrbd
drbd 317261 0
libcrc32c 1246 1drbd
–启动drbd后台进程:
[root@node1drbd]#drbdadmupdbcluster
[root@node2drbd]#drbdadmupdbcluster
查看(node1和node2)drbd状态:
[root@node2drbd]#/etc/init.d/drbdstatus
GIT-hash:7ad5f850d711223713d6dcadc3dd48860321070cbuildbydag@Build64R6,2012-09-0608:16:10
m:res cs ro ds p mounted fstype
0:dbcluster Connected Secondary/Secondary Inconsistent/Inconsistent C
从上面的信息可以看到,DRBD服务已经在两台机器上运行,但任何一台机器都不是主机器(“primary”host),因此无法访问到资源(blockdevice).
开始同步:
仅在主节点操作(这里为node1)
[root@node1drbd]#drbdadm—–overwrite-data-of-peerprimarydbcluster
查看同步状态:
[root@node1drbd.d]#cat/proc/drbd
version:8.4.2(api:1/proto:86-101)
GIT-hash:7ad5f850d711223713d6dcadc3dd48860321070cbuildbydag@Build64R6,2012-09-0608:16:10
0:cs:Connectedro:Primary/Secondaryds:UpToDate/UpToDateCr—–
ns:8297248nr:0dw:0dr:8297912al:0bm:507lo:0pe:0ua:0ap:0ep:1wo:foos:0
上面的输出结果的一些说明:
cs(connectionstate):网络连接状态
ro(roles):节点的角色(本节点的角色首先显示)
ds(diskstates):硬盘的状态
复制协议:A,BorC(本配置是C)
看到drbd状态为”cs:Connectedro:Primary/Secondaryds:UpToDate/UpToDate”即表示同步结束.
也可以这样查看drbd状态:
[root@centos193drbd]#drbd-overview
0:dbcluster/0 ConnectedSecondary/PrimaryUpToDate/UpToDateCr—–
创建文件系统:
在主节点(Node1)创建文件系统:
[root@node1drbd]#mkfs-text4/dev/drbd0
mke2fs1.41.12(17-May-2010)
Filesystemlabel=
OStype:Linux
Blocksize=4096(log=2)
…….
180days,whichevercomesfirst. Usetune2fs-cor-itooverride.
注:没必要在辅节点(Node2)做同样的操作,因为DRBD会处理原始磁盘数据的同步.
另外,我们也不需要将这个DRBD系统挂载到任何一台机器(当然安装MySQL的时候需要临时挂载来安装MySQL),因为集群管理软件会处理.还有要确保复制的文件系统仅仅挂载在Active的主服务器上.
三:mysql的安装
1,在node1和node2节点安装mysql:
yuminstallmysql*-y
2.node1和node2都操作停止mysql服务
[root@node1~]#servicemysqlstop
ShuttingdownMySQL. [ OK ]
3.node1和node2都操作创建数据库目录并将该目录权限属主修改为mysql
[root@host1/]#mkdir-p/mysql/data
[root@host1/]#chown-Rmysql:mysql/mysql
4,关闭mysql临时挂载DRBD文件系统到主节点(Node1):
[root@node1~]#mount/dev/drbd0 /mysql/
5.node1和node2都操作修改my.cnf文件修改
在[mysqld]下添加新的数据存放路径
datadir=/mysql/data
7.将默认的数据路径下的所有文件和目录cp到新的目录下(node2不用操作)
[root@host1mysql]#cd/var/lib/mysql
[root@host1mysql]#cp-R*/mysql/data/
node1和node2都操作这里注意copy过去的目录权限属主需要修改为mysql,这里直接修改mysql目录即可.
[root@host1mysql]#chown-Rmysql:mysql/mysql
8.启动node1上的mysql进行登陆测试
[root@host1mysql]#mysql
9.在节点Node1卸载DRBD文件系统
[root@node1~]#umount/var/lib/mysql_drbd
[root@node1~]#drbdadmsecondarydbcluster
将DRBD文件系统挂载节点Node2
[root@node2~]#drbdadmprimarydbcluster
[root@node2~]#mount/dev/drbd0/mysql/
节点Node2上配置MySQL并测试
[root@node1~]#scpnode2:/etc/my.cnf/etc/my.cnf
[root@node2~]#chownmysql/etc/my.cnf
[root@node2~]#chmod644/etc/my.cnf
10.node2上做mysql登陆测试
[root@node2~]#mysql
11.在Node2上卸载DRBD文件系统,交由集群管理软件Pacemaker来管理
[root@node2~]#umount/var/lib/mysql_drbd
[root@node2~]#drbdadmsecondarydbcluster
[root@node2~]#drbd-overview
0:dbcluster/0 ConnectedSecondary/SecondaryUpToDate/UpToDateCr—–
[root@node2~]#
四:Corosync和Pacemaker的安装配置(node1和node2都需安装)
安装Pacemaker必须依赖:
[root@node1~]#yum-yinstallautomakeautoconflibtool-ltdl-develpkgconfigpythonglib2-devellibxml2-devellibxslt-develpython-develgcc-c++bzip2-develgnutls-develpam-devellibqb-devel
安装ClusterStack依赖:
[root@node1~]yum-yinstallclusterlib-develcorosynclib-devel
安装Pacemaker可选依赖:
[root@node1~]yum-yinstallncurses-developenssl-develcluster-glue-libs-develdocbook-style-xsl
Pacemaker安装:
[root@node1~]yum-yinstallpacemaker
crmsh安装:
[root@node1~]wgethttp://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo
[root@node1~]yum-yinstallcrmsh
1,配置corosync
CorosyncKey
–生成节点间安全通信的key:
[root@node1~]#corosync-keygen
–将authkey拷贝到node2节点(保持authkey的权限为400):
[root@node~]#scp/etc/corosync/authkeynode2:/etc/corosync/
2,[root@node1~]#cp/etc/corosync/corosync.conf.example/etc/corosync/corosync.conf
编辑/etc/corosync/corosync.conf:
#Pleasereadthecorosync.conf.5manualpage compatibility:whitetank aisexec{ user:root group:root } totem{ version:2 secauth:off threads:0 interface{ ringnumber:0 bindnetaddr:192.168.1.0 mcastaddr:226.94.1.1 mcastport:4000 ttl:1 } } logging{ fileline:off to_stderr:no to_logfile:yes to_syslog:yes logfile:/var/log/cluster/corosync.log debug:off timestamp:on logger_subsys{ subsys:AMF debug:off } } amf{ mode:disabled }
–创建并编辑/etc/corosync/service.d/pcmk,添加”pacemaker”服务
[root@node1~]#cat/etc/corosync/service.d/pcmk
service{
#LoadthePacemakerClusterResourceManager
name:pacemaker
ver:1
}
将上面两个配置文件拷贝到另一节点
[root@node1]#scp/etc/corosync/corosync.confnode2:/etc/corosync/corosync.conf
[root@node1]#scp/etc/corosync/service.d/pcmknode2:/etc/corosync/service.d/pcmk
3,启动corosync和Pacemaker
分别在两个节点上启动corosync并检查.
[root@node1]#/etc/init.d/corosyncstart
StartingCorosyncClusterEngine(corosync): [ OK ]
[root@node1~]#corosync-cfgtool-s
Printingringstatus.
LocalnodeID-1123964736
RINGID0
id =192.168.1.189
status =ring0activewithnofaults
[root@node2]#/etc/init.d/corosyncstart
StartingCorosyncClusterEngine(corosync): [ OK ]
–在两节点上分别启动Pacemaker:
[root@node1~]#/etc/init.d/pacemakerstart
StartingPacemakerClusterManager: [ OK ]
[root@node2~]#/etc/init.d/pacemakerstart
StartingPacemakerClusterManager:
资源配置
配置资源及约束
配置默认属性
查看已存在的配置:
[root@node1~]#crmconfigureshow
nodenode1.hulala.com
nodenode2.hulala.com
property$id="cib-bootstrap-options"dc-version="1.1.8-7.el6-394e906"cluster-infrastructure="classicopenais(withplugin)"expected-quorum-votes="2"
禁止STONITH错误:
[root@node1~]#crmconfigurepropertystonith-enabled=false
[root@node1~]#crm_verify-L
让集群忽略Quorum:
[root@node1~]#crmconfigurepropertyno-quorum-policy=ignore
防止资源在恢复之后移动:
[root@node1~]#crmconfigurersc_defaultsresource-stickiness=100
设置操作的默认超时:
[root@node1~]#crmconfigurepropertydefault-action-timeout="180s"
设置默认的启动失败是否为致命的:
[root@node1~]#crmconfigurepropertystart-failure-is-fatal="false"
配置DRBD资源
–配置之前先停止DRBD:
[root@node1~]#/etc/init.d/drbdstop
[root@node1~]#/etc/init.d/drbdstop
–配置DRBD资源:
[root@node1~]#crmconfigure
crm(live)configure#primitivep_drbd_mysqlocf:linbit:drbdparamsdrbd_resource="dbcluster"opmonitorinterval="15s"opstarttimeout="240s"opstoptimeout="100s"
–配置DRBD资源主从关系(定义只有一个Master节点):
crm(live)configure#msms_drbd_mysqlp_drbd_mysqlmetamaster-max="1"master-node-max="1"clone-max="2"clone-node-max="1"notify="true"
–配置文件系统资源,定义挂载点(mountpoint):
crm(live)configure#primitivep_fs_mysqlocf:heartbeat:Filesystemparamsdevice="/dev/drbd0"directory="/var/lib/mysql_drbd/"fstype="ext4"
配置VIP资源
crm(live)configure#primitivep_ip_mysqlocf:heartbeat:IPaddr2paramsip="192.168.1.39"cidr_netmask="24"opmonitorinterval="30s"
配置MySQL资源
crm(live)configure#primitivep_mysqllsb:mysqlopmonitorinterval="20s"timeout="30s"opstartinterval="0"timeout="180s"opstopinterval="0"timeout="240s"
组资源和约束
通过”组”确保DRBD,MySQL和VIP是在同一个节点(Master)并且确定资源的启动/停止顺序.
启动:p_fs_mysql–>p_ip_mysql->p_mysql
停止:p_mysql–>p_ip_mysql–>p_fs_mysql
crm(live)configure#groupg_mysqlp_fs_mysqlp_ip_mysqlp_mysql
组group_mysql永远只在Master节点:
crm(live)configure#colocationc_mysql_on_drbdinf:g_mysqlms_drbd_mysql:Master
MySQL的启动永远是在DRBDMaster之后:
crm(live)configure#ordero_drbd_before_mysqlinf:ms_drbd_mysql:promoteg_mysql:start
配置检查和提交
crm(live)configure#verify
crm(live)configure#commit
crm(live)configure#quit
查看集群状态和failover测试
状态查看:
[root@node1mysql]#crm_mon-1r
Failover测试:
将Node1设置为Standby状态
[root@node1~]#crmnodestandby
过几分钟查看集群状态(若切换成功,则看到如下状态):
[root@node1~]#crmstatus
将Node1恢复online状态:
[root@node1mysql]#crmnodeonline
[root@node1mysql]#crmstatus