drbd+heartbeat实现mysql主备并自动切换
一、阐述1、DRBD:
DistributedReplicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。
工作原理:
在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。
http://s3.运维网.com/wyfs02/M02/58/94/wKiom1S0oKXS3RnNAAGOw7O5S_o136.jpg
2、Heartbeat:
Heartbeat 项目是Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。
工作原理:
heartbeat(Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。
http://s3.运维网.com/wyfs02/M01/58/90/wKioL1S0oYSizjR8AAGEW4lVnL4597.jpg
3、MySQL:
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabase Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。具体详情访问官方网站http://www.mysql.com/
二、安装部署
1、规划
database1192.168.1.167
database2192.168.1.168
VIP192.168.1.171
2、修改主机名和域名解析
# sshroot@192.168.1.167
# vim/etc/hosts
192.168.1.167database1
192.168.1.168database2
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=database1
# sshroot@192.168.1.168
# vim/etc/hosts
192.168.1.167database1
192.168.1.168database2
#hostname database2
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=database2
3、安装DRBD
# cd /usr/local/src/
# tar xf drbd-heartbeat-8.4.4-2.el6.tar.gz
# rpm -ivh drbd-*.rpm
# cd /usr/local/src/
# tar xf drbd-heartbeat-8.4.4-2.el6.tar.gz
# rpm -ivh drbd-*.rpm
# 加载drbd模块,查看模块情况
# modprobe drbd
# lsmod | grep drbd
drbd 337142 0
libcrc32c 12461 drbd
# modprobe drbd
# lsmod | grep drbd
drbd 3371420
libcrc32c 12461 drbd
# 查看第二块磁盘名称,这里是/dev/sdb
#fdisk –l
……
#fdisk –l
……
# 分区
# parted /dev/sdb
(parted)mklabel gpt
(parted)p
(parted)mkpart
Partitionname?[]? database
Filesystem type??
Start?0
End? 100%
Ignore/Cancel?I
(parted)p
(parted)q
# database2如上操作
# vim /etc/drbd.d/database.res
resourcedb {
protocol C;
startup {
wfc-timeout 0;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
net {
after-sb-0pridiscard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
max-buffers 2048;
ko-count 4;
}
syncer {
rate 100M;
}
on database1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.167:7801;
meta-disk internal;
}
on database2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.168:7801;
meta-disk internal;
}
}
# scp -r /etc/drbd.d database2:/etc/
# 初始化DRBD分区
# drbdadm create-md db
# drbdadm create-md db
# 启动DRBD服务,两边一起启动
# /etc/init.d/drbd start
# /etc/init.d/drbd start
# service drbd status
drbddriver loaded OK; device status:
version:8.4.4 (api:1/proto:86-101)
GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by root@Database2, 2013-11-2914:02:29
m:rescs ro ds pmounted fstype
0:db Connected Secondary/Secondary Inconsistent/InconsistentC
#设置database1为主节点
# drbdadm -- --overwrite-data-of-peer primary all
# drbdadm primary db
# 数据正在同步
# service drbd status
drbddriver loaded OK; device status:
version:8.4.4 (api:1/proto:86-101)
GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by root@Database2, 2013-11-2914:02:29
m:rescs ro ds pmounted fstype
0:db SyncSource Primary/Secondary UpToDate/InconsistentC
... sync'ed: 7.8% (4724/5116)M
等待同步完成后…
# 格式化并挂载drbd分区/dev/drbd0
# mkfs.ext4 /dev/drbd0
# mount /dev/drbd0 /mnt
# drbd服务开机自启动
# chkconfig drbd on
# chkconfig drbd on
4、迁移MySQL
# 默认已经安装了mysql-service,设置mysql的启动状态为关闭,即不自动启动
# chkconfig mysql off
# chkconfig mysql off
# 迁移mysql数据库
# cp -r /var/lib/mysql/* /mnt
#umount /mnt
#将/dev/drbd0挂载到原来的mysql数据目录
#mount /dev/drbd0 /var/lib/mysql
# 修改挂载后目录的属主属组,启动mysql
#chown –R mysql.mysql mysql
#/etc/init.d/mysql start
5、安装Heartbeat
# tar fxvz heartbeat-3.0.4.el6.tar.gz
# rpm -ivh *.rpm
# tar fxvz heartbeat-3.0.4.el6.tar.gz
# rpm -ivh *.rpm
#cp /usr/share/doc/heartbeat-3.0.4/authkeys /usr/share/doc/heartbeat-3.0.4/ha.cf/usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
# 注意ucast后面跟的心跳地址是对方的,需要更新的内核支持。换成bcast
# grep -vE '^$|^#' /etc/ha.d/ha.cf
logfile/var/log/ha-log
logfacilitylocal0
keepalive2
deadtime15
bcast eth0 # Linux
respawnroot /usr/lib64/heartbeat/ipfail
apiauthipfail gid=root uid=root
auto_failbackoff
nodedatabase1
nodedatabase2
# 注意bcast后面跟的心跳地址是对方的
# grep -vE '^$|^#' /etc/ha.d/ha.cf
logfile/var/log/ha-log
logfacilitylocal0
keepalive2
deadtime15
bcast eth0 # Linux
respawnroot /usr/lib64/heartbeat/ipfail
apiauthipfail gid=root uid=root
auto_failbackoff
nodedatabase1
nodedatabase2
# 编辑验证文件
# vim /etc/ha.d/authkeys
auth 1
1 crc
# chmod 600 /etc/ha.d/authkeys
# vim /etc/ha.d/authkeys
auth 1
1 crc
# chmod 600 /etc/ha.d/authkeys
# 编辑集群资源文件
# vim /etc/ha.d/haresources
# 这个文件两个机器是一样的,除了主机名部分
# grep -vE '^$|^#' /etc/ha.d/haresources
database1192.168.1.171/24/eth0 drbddisk::db Filesystem::/dev/drbd0::/var/lib/mysql::ext4mysql
# grep -vE '^$|^#' /etc/ha.d/haresources
database2192.168.1.171/24/eth0 drbddisk::db Filesystem::/dev/drbd0::/var/lib/mysql::ext4mysql
# 设置heartbeat自启动
# chkconfig heartbeat on
# chkconfig heartbeat on
#启动heartbeat
#/etc/init.d/heartbeat start
#/etc/init.d/heartbeat start
# 重启任一一台主机mysql将会漂移到新的IP之上
# 删除/var/lib/heartbeat/下文件,新版本的heartbeat为集群环境提供了一些功能。
# 如果不删除会在关闭heartbeat服务时hanged,无法关闭
# rm -rf /var/lib/heartbeat/*
# rm -rf /var/lib/heartbeat/*
ERROR:should_drop_message: attempted replay attack ?
可能原因:ha和ha2的uuid改变引起,可能ha2是通过VMware克隆复制方式产生的或hostname设置在安装heartbeat之后
解决方案:让uuid重新生成,可以先卸载heartbeat,删除/var/lib/heartbeat目录(uuid文件就在这个目录下,该目录在卸载时不被删除,需手动删除,如果不手动删除,重新安装还会使用原来uuid)。
交流群:374506612,提供源码和支持。
页:
[1]