1. MySQL高可用需求介绍
1.1 MySQL高可用生产业务需求
在企业实际生产场景中,一主多从的MySQL数据库架构师最常用的架构,该架构部署简单、维护方便,并且通过简单的代理或者通过程序的方式就可以实现对主从库的读写分离,且多个从库还可以通过lvs或haproxy实现对多个从库的负载均衡。
但是,在以上的MySQL数据库架构中,我们不难发现,虽然从库是多个,但是主库仅有一个,也就是说主库一旦宕机,所有的写业务就会终止,而从库宕机1个就没什么大的影响。
Mysql+Drbd+Heartbeat高可用服务应用,这个解决方案可以有效的解决主库单点的问题。当主库宕机后。可以实现主库从一个主节点切换到另一个主节点,而所有的从库会自动和新的主库进行同步,且新主库的数据和宕机瞬间的主几乎完全一致,从而实现了MySQL主库的热备方案。
1.2 MySQL高可用架构拓扑
正常情况说明:
A. Heartbeat通过串口线或直练线对DB服务做健康检查,并执行DRBD、MySQL、VIP等资源自动动态切换
B. db-1-2作为db-1-1高可用备份,正常情况下db-1-1提供一个主分区给MySQL使用
C. 物理磁盘做RAID10或RAID0,根据性能和冗余需求来选
D. 服务器之间、服务器和交换机之间都是双千兆网卡绑定
E. 应用服务器(包括不限于web等)通过VIP访问MySQL主库
F. MySQL在DRBD分区1中
G. MySQL slave1,MySQL slave2通过VIP同步主库MySQL 3306
H. 以上高可用为MySQL多从的模式,属于一主二从。
1.2.2 MySQL主库宕机切换过程架构拓扑
1.2.3 MySQL主库宕机切换新主后架构拓扑
提示:经过高可用方案切换后的数据库架构,就是一个常规的主从结构。此时,主库就从热备变成了单点,因此,要尽快恢复原来的主库,以确保切换后的新主库宕机对业务带来的影响。
1.3 MySQL高可用生产需求描述
假设有3台数据库服务器db-1-1/db-1-2/db-1-3,其实际IP分别为10.0.15.81(db-1-1),10.0.15.82(db-1-2),10.0.15.83(db-1-3)
db-1-1的数据库文件目录为/data,对前端提供的访问VIP为10.0.15.181
配置目标:一旦数据库服务器db-1-1宕机,服务器上的mysql数据库服务和虚拟IP会自动切换到服务器db-1-2继续提供服务,从而达到mysql数据库高可用无业务影响的目的。
这里还有一个特别的问题,就是以前的多个从库如何能自动和新的主库同步,经过实践,通过drbd的方式同步,然后做从库时使用和主库对外提供服务的VIP为同步IP,当主库宕机后,VIP漂移到热备主库,默认情况60秒内,从库就可以找到新的VIP,从而自动和新的主库同步。强调:通过MySQL同步做双主的方式,是难以做到主库宕机从库和新的主库自动同步的
1.4 高可用架构图
单主热备模式:上图
双主热备模式:
1.5 网卡及IP资源
名称 | 接口 | IP | 用途 |
MASTER | eth0 | 10.0.15.81 | 外网管理IP,用于WAN数据转发 |
eth1 | 192.168.2.81 | 用于MYSQL服务器间心跳连接(直连) | |
eth2 | 192.168.3.81 | 用于MYSQL服务器DRBD同步(直连) | |
vip | 10.0.15.181 | 用于对外MySQL数据库服务VIP | |
BACKUP | eth0 | 192.168.1.82 | 外网管理IP,用于WAN数据转发 |
eth1 | 192.168.2.82 | 用于MYSQL服务器间心跳连接(直连) | |
eth2 | 192.168.3.82 | 用于MYSQL服务器DRBD同步(直连) | |
vip |
2. 开始部署mysql高可用
2.1 分别修改服务器机器名
分别设置两台机器的hostname为db-1-1/db-1-2
方法为:编辑/etc/sysconfig/network,设置HOSTNAME=db-1-1和HOSTNAME=db-1-2,然后再命令行执行hostname db-1-1和hostname db-1-2使设置马上生效
2.2 分别增加配置一块硬盘
2.3 分别配置hosts
vim /etc/hosts
10.0.15.81 db-1-1
10.0.15.82 db-1-2
2.4 添加路由
81主机:
route add -host 192.168.2.82 dev eth1
route add -host 192.168.3.82 dev eth2
echo 'route add -host 192.168.2.82 dev eth1' >> /etc/rc.local
echo 'route add -host 192.168.3.82 dev eth2' >> /etc/rc.local
82主机:
route add -host 192.168.2.81 dev eth1
route add -host 192.168.3.81 dev eth2
echo 'route add -host 192.168.2.81 dev eth1' >> /etc/rc.local
echo 'route add -host 192.168.3.81 dev eth2' >> /etc/rc.local
2.5 硬盘分区,格式化
2.6 安装相关软件
安装drbdyum -y install kmod-drbd83 drbd83
安装heartbeatyum -y install heartbeat
安装mysql通过编译方式安装
2.7 理顺MySQL数据/data目录各配置列表
主机名称 | db-1-1 | db-1-2 |
管理IP | eth0:10.0.15.81 | eth0:10.0.15.82 |
DRBD管理名称 | data | data |
DRBD挂载目录 | /data | /data |
DRBD逻辑设备 | /dev/drbd0 | /dev/drbd0 |
DRBD对接IP | eth2:192.168.3.81/24 | eth2:192.168.3.82/24 |
DRBD存储设备 | /dev/sdb1 | /dev/sdb1 |
DRBD Meta设备 | /dev/sdb2 | /dev/sdb2 |
NFS/MySQL导出目录 | /data | /data |
NFS/MySQL虚拟IP | eth0:10.0.15.181/24 | eth0:10.0.15.181/24 |
注:灰色部分为自动生成
2.8 配置heartbeat服务
在高可用方案中,heartbeat服务的主要作用就是控制IP及drbd,mysql等服务根据要在主备节点上正确的启动和停止
Heartbeat的默认配置文件目录为/etc/ha.d。Heartbeat常用的配置文件有三个,ha.cf、authkey、haresource
配置名称 | 作用 | 备注 |
ha.cf | heartbeat参数配置文件 | 在这里配置heartbeat的一些基本参数 |
authkey | heartbeat认证文件 | 高可用服务器对之间根据对端的authkey,对对端进行认证,权限必须是600 |
haresource | heartbeat资源配置文件 | 如配置IP资源及脚本程序等 |
2.8.2配置authkey文件
cat authkey
auth 1
1 sha1 47e9336850f1db6fa58bc470bc9b7810eb397f04
chmod 600 /etc/ha.d/authkey
2.8.3 配置ha.cf
vim ha.cf
#the start by oldboy
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local1
keepalive 2
deadtime 30
warntime 10
initdead 120
#bcast eth1
mcast eth1 225.0.0.81 694 1 0
auto_failback on
node db-1-1
node db-1-2
crm no
2.8.4 配置haresoure文件
vim haresources
#oldboy services
#db-1-1 IPaddr::10.0.15.181/24/eth0 ---->先用这个测试下,是否可以起到VIP
db-1-1 IPaddr::10.0.15.181/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext3 rsdata
2.8.5 配置haresource说明
db-1-1 IPaddr::10.0.0.17/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 rsdatadb-1-1 ==>主机名,表示初始状态会在db-1-1绑定IP 10.0.15.181
IPaddr ==>heartbeat配置IP的默认脚本,其后的IP等都是其参数
10.0.15.181/24/eth0 ==>集群对外服务的VIP,初始启动在db-1-1上
drbddisk::data ==>启动drbd data资源,相当于执行/etc/ha.d/resource.d/drbddidk data stop/start
Filesystem::/dev/drbd0::/data::ext3 ==>drbd分区挂载到/data目录,这里相当于/etc/ha.d/resource.d/Filesystem::/dev/drbd0/data ext3 stop/start
rsdata ==>启动mysql服务脚本。这里相当于/etc/init.d/rsdata stop/start
2.9 测试
/etc/init.d/heartbeat start
3. 配置DRBD服务
在高可用方案中,DRBD的主要作用就是确保数据能实时完整从主节点同步到热备节点上。
3.1 加载drbd模块到内核
modprobe drbd(临时生效)
lsmod | grep drbd
3.2 初始化DRBD的metadata并启动DRBD
创建DRBD记录信息的metdata分区数据块
drbdadm create-md data
drbdadm up all
3.3 指定一个要同步的资源,同步数据到对端
在主节点的一端执行
drbdadm -- --overwrite-data-of-peer primary data
此步执行完,如果从端分区为空,就会自动开始进行数据同步
从端查看:
cat /proc/drbd
version: 8.4.1 (api:1/proto:86-100)
GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@db-1-2, 2016-04-29 02:11:47
0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
ns:0 nr:396288 dw:396288 dr:0 al:0 bm:24 lo:1 pe:9 ua:0 ap:0 ep:1 wo:b oos:1145924
[====>...............] sync'ed: 26.0% (1145924/1542212)K
finish: 0:00:11 speed: 99,072 (99,072) want: 102,400 K/sec
3.4 配合heartbeat调试drbd服务
需要执行相关切换命令确保heartbeat服务及drbd服务之间的配合是正确的才能继续进行。这类似项目阶段的里程碑,成功配置drbd服务,并且能配合heartbeat服务进行主备切换时第二步。
cat /etc/ha.d/haresources
db-1-1 IPaddr::10.0.15.181/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
重新启动heartbeat服务
判断heartbeat配合drbd启动成功的3点
1)ifconfig 查看是否有VIP
2)df -h 查看drbd0是否挂载
3)cat /proc/drbd 查看Primary/Secondary主从是否正确
3.5 heartbeat配合drbd调试的结论
主备节点的启动顺序是相同的:
1)VIP启动 2)drbd启动 3)drbd分区的挂载
发生切换时主或者备节点释放资源的顺序是相同的,但是和上面启动的顺序是相反的
1)drbd分区的挂载 2)drbd启动和设置 3)vip的启动
重点中的重点:
根据heartbeat的日志文件以及heartbeat原理及启动资源的顺序去排查问题
排查的方法就是按照启动heartbeat服务,heartbeat加载脚本资源的顺序手动启动检查。
4. MySQL服务安装配置
4.1 挂载drbd0分区到/data目录
生产应用场景这里的挂载操作是由heartbeat控制挂载和卸载的
mount /dev/drbd0
4.2 安装mysql
cd /home/yan/tools/
........
4.3 创建数据文件目录
mkdir -p /data/3306/data
4.4 上传3306 my.cnf配置文件,mysql启动脚本
4.5 授权
chown mysql:mysql /data/3306/
4.6 初始化数据库并加700权限
chmod 700 mysql
export PATH=/application/mysql-5.5.32/bin:$PATH >> /etc/profile
./mysql_install_db --basedir=/application/mysql-5.5.32/ --datadir=/data/3306/data --user=mysql
chown -R mysql:mysql /data/
4.7 启动数据库
/data/3306/mysql start
或者手动启动:
/application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf
4.8 测试备节点数据库
备节点上的MySQL仅仅执行到make install完成就不需要操作了,因为MySQL的数据文件会被drbd运送到备节点分区里,因此,正常情况下,我们手工模拟停止drbd服务,挂载数据分区后,MySQL服务能正常启动才对
我们也可以在备节点安装数据库,但目的仅仅是测试备节点的安装和启动是否正常,测试完毕后,需要把/data里的数据移走或者删除
4.9 创建一个多实例(3307)
mkdir -R /data/3307/data
初始化:
./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql
4.10 设置3307 为3306的从库
要使用VIP进行同步,这样当主库挂掉后能够
5.
5.1 主库宕机后恢复了,如何将宕机恢复后的主库变为主
启动ha,或者hb_takevoer,ha自动接管的参数
5.2 监控方案
a.服务本身
b.主从同步状态和延迟时间
c.裂脑监控:备节点出现VIP就认为裂闹了。更细致的就是主节点宕机并且备节点VIP出现。
d.监控drbd的同步状态
转载于:https://blog.51cto.com/yjy724/1840786