一、规划
系统 CentOS 64bit
DRBD版本 9.0.0
Heartbeat版本 3.0.6
MySQL版本 5.6.27
DRBD磁盘 /dev/sdb1
主机名(IP) node1(192.168.10.132)
node2(192.168.10.133)
注:已关闭SeLinux和Firewalld。
二、安装
Heartbeat安装:http://wangzhijian.blog.51cto.com/6427016/1708694
DRBD安装:http://wangzhijian.blog.51cto.com/6427016/1710926
MySQL安装:
1 2 3 | # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community-release-el7-5.noarch.rpm ##安装MySQL源 # yum -y install mysql-server mysql-devel ##安装MySQL |
三、配置互信
HA-01:
1 2 | ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.133 |
HA-02:
1 2 | ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.132 |
四、配置
①配置DRBD
a.主配置文件drbd.conf
1 2 3 4 | # cat /etc/drbd.conf # You can find an example in /usr/share/doc/drbd.../drbd.conf.example include "drbd.d/global_common.conf"; include "drbd.d/*.res"; |
b.配置global_common.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # cat /etc/drbd.d/global_common.conf|grep -v "#" global { usage-count no; ##是否参加drbd的使用者统计,默认此选项为YES } common { handlers { } startup { } options { } disk { } net { } } |
c.新建res资源配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # vi /etc/drbd.d/drbd.res ##新建一个名为drbd的res资源 resource r1 { ##定义资源组名称为r1 net { cram-hmac-alg sha1; ##使用sha1加密 shared-secret "123456"; ##生成共享密钥 } volume 1 { ##定义卷组 device /dev/drbd1; ##逻辑设备路径(建立块设备) disk /dev/sdb1; ##物理设备路径(用于复制的分区) meta-disk internal; ##meta data信息存放的方式,该处为内部存储, 即和真实数据放在一起存储 } on node1 { ##on开头,后面是主机名称(需与uname -n相同) node-id 0; address 192.168.10.132:7000; ##设置drbd监听地址和端口 } on node2 { node-id 1; address 192.168.10.133:7000; } connection { host node1 port 7000; host node2 port 7000; net { protocol C;##使用drbd的第三种同步协议,表示收到对方主机写入确认后,则认为写入完成 } } } |
d.挂载新磁盘
# fdisk /dev/sdb
-----> n
-----> 1
-----> 默认
-----> +300M -----> w
f.创建设备元数据并格式化磁盘
1 2 3 4 5 6 | # dd if=/dev/zero of=/dev/sdb1 bs=1M count=10 ##用指定大小的块拷贝一个文件 # drbdadm -c /etc/drbd.conf create-md all ##创建设备元数据 # mkfs.ext4 /dev/drbd1 ##格式化虚拟磁盘 # mkdir -pv /data/mysql # chown -R mysql.mysql /data/mysql/ # ln -s /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/ ##建立drbddisk脚本至heartbeat的/etc/ha.d/resource.d/的软链接 |
②Heartbeat配置
Heartbeat的配置主要涉及到ha.cf、haresources、authkeys这三个文件。其中ha.cf是主配置文件,haresource用来配置要让Heartbeat托管的服务,authkey是用来指定Heartbeat的认证方式。
a.配置ha.cf
1 2 3 4 5 6 7 8 9 10 11 | # cat /usr/local/heartbeat/etc/ha.d/ha.cf |grep ^[^#] logfile /var/log/ha-log ##日志文件记录 logfacility local0 keepalive 2 ##设定心跳(监测)时间时间为2秒 deadtime 30 ##指定若备用节点在30秒内未收到主节点心跳信号,则接管主服务器资源 warntime 10 ##指定心跳延迟的时间 initdead 120 ##系统启动或重启后预留的忽略时间段,取值至少为deadtime的两倍 udpport 694 ##广播/单播通讯使用的Udp端口 ucast eno16777736 192.168.10.133 ##采用网卡eno16777736的udp单播来组织心跳,后面为对端IP auto_failback on ##定义当主节点恢复后,是否将服务自动切回 node node1 ##节点名称,与uname -n显示一致 node node2 ping 192.168.10.1 |
b.配置haresources
1 2 3 | # cp resource-agents-3.9.6/heartbeat/mysql /usr/local/heartbeat/etc/ha.d/resource.d/ ##复制MySQL脚本至heartbeat的/etc/ha.d/resource.d/下 # cat /usr/local/heartbeat/etc/ha.d/haresources |grep ^[^#] node1 IPaddr::192.168.10.222/24/eno16777736 drbddisk::r1 Filesystem::/dev/drbd1::/data::ext4 mysql |
node1是HA集群的主节点,IPaddr为heartbeat自带的执行脚本,heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 192.168.10.222/24 start的操作,即虚拟一个子网掩码为255.255.255.0,IP为192.168.10.222的地址,此IP为heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口,接着,指定使用的DRBD的资源,然后,Heartbeat将执行共享磁盘分区的挂载操 作,"Filesystem::/dev/sdb1::/data::ext4"相当于在命令行下执行mount操作,即"mount -t ext4 /dev/sdb1 /data",最后依次启动MySQL服务。
c.配置authkeys
1 2 3 | # grep -v "#" /usr/local/heartbeat/etc/ha.d/authkeys auth 2 2 sha1 HI! |
auth 后面填写序号,可任意填写,但第二行开头必须为序号名,然后为验证方式,支持三种( crc md5 sha1 )方式验证,最后面是自定义密钥
d.复制配置文件至node2
1 | # scp /usr/local/heartbeat/etc/ha.d/* root@192.168.10.133:/usr/local/heartbeat/etc/ha.d/ |
注:需更改ha.cf的ucast中的IP为node1的IP(该处为192.168.10.132)。
③配置MySQL
1 2 | # vi /etc/my.cnf datadir=/data/mysql ##修改MySQL的数据存储目录 |
五、测试
①
1 2 3 4 5 | # drbdadm up r1 ##启用该资源 # drbd-overview 1:r1/1 Connected(2*) Secondary(2*) UpToDa/UpToDa # systemctl start mysql # systemctl start heartbeat |
已实现自动挂载
②故障切换测试
node1:
1 | # systemctl stop heartbeat |
node2:
已实现正常切换
本文出自 “记事本” 博客,请务必保留此出处http://wangzhijian.blog.51cto.com/6427016/1713052