共计 30976 个字符,预计需要花费 78 分钟才能阅读完成。
本篇文章为大家展示了如何进行 MySQL + Heartbeat + DRBD 架构部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1、MySQL 高可用生成业务需求:
在企业实际生产场景中,一主多从的 MySQL 数据库架构是最常用的 DB 架构方案,该架构方案部署简单,维护方便,并且通过配置简单的代理或者通过程序的方式就可以实现应用服务队主从库的读写分离,且多个从库还可以通过 LVS 或者 Haproxy 等代理实现多个从库的负载均衡,分担读的压力,同时排除单点问题。但是 MYSQL 数据库架构中,不难发现,虽然从库是多个,但是主库仅有一个,也就是说主库一旦宕机,所以写的业务都会终止,而从库宕机 1 个就没什么影响,那么如何解决这个主库单点的问题呢,其实最简单的方案就是做好监控,然后主库宕机后,由管理人为手工选择最快的从库改为主,然后让其它从库和新的主库同步,这个方案是简单易行的,但是需要人工处理,对有些高要求场合高度不够,那样就需要下面说的 MySQL+Heartbeat+DRBD 架构方案。
MySQL+Heartbeat+DRBD 架构方案说明:
正常情况下:
1、heartbeat 通过串口线或者以太网网线直链网卡对对端的服务做监控检查,并负责执行 drbd,mysql,vip 等资源的自动切换
2、MYSQL_S 作为 MYSQL_M 的高可用热备,正常情况下 MYSQL_M 提供一个分区 sdb1 给 MYSQL 使用。
3、物理磁盘做 RAID10 或者 RAID0,根据性能和冗余需求来选择
4、服务器之间,服务器和交换机直接都是千兆网卡做 bongding
5、应用服务(包括但不限于 web)通过 VIP 访问 MYSQL 从库,通过不同的 VIP 访问负载均衡的从库池。
故障情况下:
1、MYSQL_S 的 heartbeat 通过串口线或者以太网网线对 MYSQL_M 做健康检查,发现 MYSQL_M 挂掉后,自动在 MYSQL_S 上启动 DRBD/MYSQL 等服务及负载 VIP 的动态切换,确保主库业务被正常接管,自动通过对外提供服务
2、MYSQL_M 上的 MYSQL 在 /dev/sdb1 分区中,故障后在 MYSQL_S 上同时实现高可用切换
3、故障后 MYSQL 客户端,从库等。通过 VIP 和 MYSQL_S 的 MYSQL 服务相连,MYSQL 对外正常提供服务
4、当 MYSQL_M 故障修复后,可以设置自动把自己原来的业务,从 MYSQL_S 中取回来,但是一般不建议这样做。如果两台服务器之前存在性能的差异,最好也是人工进行切换
2、MYSQL 高可以生产需求描述
本案例假设有 3 台 MYSQL 服务器,他们的 IP 分别是
MYSQL_M 10.0.0.3
MYSQL_S 10.0.0.4
MYSQL_C 10.0.0.5
MYSQL_M 的 MYSQL 目录为 /data,前端提供的访问 VIP 是 10.0.0.103
配置目标:一段主 MYSQL 服务器 MYSQL_M 宕机,该服务器上的 MYSQL 和虚拟 IP 会自动切换当热备服务器 MYSQL_S 上继续提供服务,从而达到 MYSQL 高可用宕机后无业务影响的目的
这里会有一个特别的问题,就是以前的多个从库如何能和新的主库同步,经过实践,通过 DRBD 的方式同步的 MYSQL 数据库,以及做从库 MYSQL 时使用和主库 VIP 为同步 VIP,当主 MYSQL 宕机后,VIP 漂移到热备主 MYSQL,默认情况在 60 秒内,从库就可以连接到新的 VIP,从而自动和新的主库同步,这里需要强调的下,通过 MYSQL 同步做双主的方式,是难以做到主库单机从库和新的主库自动同步的。这也是这个架构的难点。
提示:本文讲解的 MYSQL 数据库服务主备高可用模式,对于 MYSQL 数据库服务高可用,也可以是主主的双向高可用模式。
3、系统环境
##MYSQL_M #主库,主服务器
eth0:10.0.0.3 #管理 IP,用于 LAN 内数据转发
eth2:172.16.1.3 #MYSQL 服务器间心跳连接(直链)
VIP:10.0.0.103 #用于提供对外 MYSQL 存储系统服务 VIP
##MYSQL_S #主库的备用服务器
eth0:10.0.0.4
eth2:172.16.1.4
##MYSQL_C #mysql 从库
eth0:10.0.0.5
同时在 MYSQL_M 需要添加一个 1G 的磁盘,MYSQL_S 需要添加一个 1.5G 的磁盘。测试用
4、部署前准备
# 要配置主机名和 hosts 文件.
主机名称要以 uname - n 为准
[root@MYSQL_S ~]# uname -n
MYSQL_S
[root@MYSQL_S ~]# uname -m
x86_64
================================
MYSQL_M
cp /etc/hosts /etc/hosts.bak
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i $a 10.0.0.3 MYSQL_M /etc/hosts
sed -i $a 10.0.0.4 MYSQL_S /etc/hosts
sed -i /HOSTNAME=/d /etc/sysconfig/network
sed -i /$/aHOSTNAME=MYSQL_M /etc/sysconfig/network
===============================
MYSQL_S
sed -i $a 10.0.0.3 MYSQL_M /etc/hosts
sed -i $a 10.0.0.4 MYSQL_S /etc/hosts
sed -i /HOSTNAME=/d /etc/sysconfig/network
sed -i /$/aHOSTNAME=MYSQL_S /etc/sysconfig/network
############################
start 测试:
[root@MYSQL_S ~]# ping MYSQL_M
PING MYSQL_M (10.0.0.3) 56(84) bytes of data.
64 bytes from MYSQL_M (10.0.0.3): icmp_seq=1 ttl=64 time=0.347 ms
64 bytes from MYSQL_M (10.0.0.3): icmp_seq=2 ttl=64 time=0.297 ms
^C
— MYSQL_M ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1424ms
rtt min/avg/max/mdev = 0.297/0.322/0.347/0.025 ms
[root@MYSQL_S ~]# ping MYSQL_S
PING MYSQL_S (10.0.0.4) 56(84) bytes of data.
64 bytes from MYSQL_S (10.0.0.4): icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from MYSQL_S (10.0.0.4): icmp_seq=2 ttl=64 time=0.043 ms
^C
— MYSQL_S ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1226ms
rtt min/avg/max/mdev = 0.027/0.035/0.043/0.008 ms
[root@MYSQL_S ~]#
===========================
[root@MYSQL_M ~]# ping MYSQL_S
PING MYSQL_S (10.0.0.4) 56(84) bytes of data.
64 bytes from MYSQL_S (10.0.0.4): icmp_seq=1 ttl=64 time=0.720 ms
64 bytes from MYSQL_S (10.0.0.4): icmp_seq=2 ttl=64 time=0.346 ms
64 bytes from MYSQL_S (10.0.0.4): icmp_seq=3 ttl=64 time=0.329 ms
^C
— MYSQL_S ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2150ms
rtt min/avg/max/mdev = 0.329/0.465/0.720/0.180 ms
[root@MYSQL_M ~]# ping MYSQL_M
PING MYSQL_M (10.0.0.3) 56(84) bytes of data.
64 bytes from MYSQL_M (10.0.0.3): icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from MYSQL_M (10.0.0.3): icmp_seq=2 ttl=64 time=0.131 ms
^C
— MYSQL_M ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1388ms
rtt min/avg/max/mdev = 0.022/0.076/0.131/0.055 ms
[root@MYSQL_M ~]#
###########################end
# 两台服务器都添加下面的心跳路由 生产环境建议加 route。现在不加也不影响搭建.
/sbin/route add -host 172.16.1.4 dev eth2
/sbin/route add -host 172.16.1.3 dev eth2
echo /sbin/route add -host 172.16.1.3 dev eth2 /etc/rc.local
echo /sbin/route add -host 172.16.1.4 dev eth2 /etc/rc.local
#######################start
[root@MYSQL_M ~]# ping 172.16.1.4
PING 172.16.1.4 (172.16.1.4) 56(84) bytes of data.
64 bytes from 172.16.1.4: icmp_seq=1 ttl=64 time=1.56 ms
64 bytes from 172.16.1.4: icmp_seq=2 ttl=64 time=0.310 ms
^C
— 172.16.1.4 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1267ms
rtt min/avg/max/mdev = 0.310/0.935/1.561/0.626 ms
[root@MYSQL_M ~]#
============================
[root@MYSQL_S ~]# /sbin/route add -host 172.16.1.3 dev eth2
[root@MYSQL_S ~]# ping 172.16.1.3
PING 172.16.1.3 (172.16.1.3) 56(84) bytes of data.
64 bytes from 172.16.1.3: icmp_seq=1 ttl=64 time=0.391 ms
^C
— 172.16.1.3 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 897ms
rtt min/avg/max/mdev = 0.391/0.391/0.391/0.000 ms
[root@MYSQL_S ~]#
3、安装 heartbeat
a、下载并安装 epel 包. 两台服务器都要操作
mkdir -p /home/lvnian/tools cd /home/lvnian/tools
wget http://mirrors.opencas.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -qa |grep epel
[epel-release-6-8.noarch.rpm] rpm -ivh epel-release-6-8.noarch.rpm
rpm -qa |grep epel
b、安装 heartbeat,下面是在 CentOS 版本系统中部署,. 两台服务器都要操作。所有用 yum install heartbeat* -y
yum install heartbeat -y
c、拷贝 ha 的配置文件,资源文件以及授权文件到 /etc/ha.d/ 下面
ll /usr/share/doc/heartbeat-3.0.4/
cd /usr/share/doc/heartbeat-3.0.4/
cp ha.cf haresources authkeys /etc/ha.d/
d、开始配置
cd /etc/ha.d
mv ha.cf ha.bak
mv authkeys authkeys.bak
mv haresources haresources.bak
注意点:下面 ha.cf、authkeys、haresources 这三个文件在主备都是一样的
######## 配置 ha.cf
cat /etc/ha.d/ha.cf eof
#the start by lvnian 20150881
debugfile /var/log/ha-debug
logfile /var/log/ha-log
#logfacility local1
keepalive 2
deadtime 30
warntime 10
initdead 60
#bcast eth2
mcast eth2 225.0.0.181 694 1 0
#ucast eth2 172.16.1.4
auto_failback off #服务器正常后,不接管备用设备资源
node MYSQL_M
node MYSQL_S
crm no
#the end by lvnian 20150881
eof
#### 配置 authkeys
cat /etc/ha.d/authkeys eof
auth 1
1 sha1 b900cbbdfa0a850444fa3dae47a9d354 #这个字符串是随便写的,但是需要主备都是一样的
eof
chmod 600 /etc/ha.d/authkeys
##### 配置 haresources
cat /etc/ha.d/haresources eof
#lvnian services
#10.0.0.103 www.etianetian.org
MYSQL_M IPaddr::10.0.0.103/24/eth0
#MYSQL_M IPaddr::10.0.0.103/24/eth0 httpd
#10.0.0.104 bbs.etianetian.org
MYSQL_S IPaddr::10.0.0.104/24/eth0
#mysql MYSQL_M mysqlm.etianetian.org
#MYSQL_M IPaddr::10.0.0.103/24/eth0
#MYSQL_M IPaddr::10.0.0.103/24/eth0 mysqld
#mysql slave mysqlm.etianetian.org
#MYSQL_S IPaddr::10.0.0.104/24/eth0
eof
#########
f、启动 heartbeat 服务
/etc/init.d/heartbeat start
/etc/init.d/heartbeat stop
/etc/init.d/heartbeat restart
g、设置开机自启动 heartbeat
chkconfig heartbeat on
用 ip add 查看 vip
查看 cat /var/log/ha-log 日志文件
检查:出现虚拟 VIP 才算部署 heartbeat 成功
[root@MYSQL_M ~]# ip addr |grep 10.0.0
inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.103/24 brd 10.0.0.255 scope global secondary eth0
[root@MYSQL_M ~]#
============================
[root@MYSQL_S ha.d]# ip addr |grep 10.0.0
inet 10.0.0.4/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.104/24 brd 10.0.0.255 scope global secondary eth0
[root@MYSQL_S ha.d]#
出现上面的 VIP,代表 Heartbeat 部署没问题
5、对磁盘进行分区,这里模拟大于 2T 硬盘进行分区
###MYSQL_M
parted /dev/sdb mklabel gpt
yes
parted /dev/sdb mkpart primary 0 600
Ignore
parted /dev/sdb p
parted /dev/sdb mkpart primary 600 1024
Ignore
parted /dev/sdb p
###MYSQL_S
parted /dev/sdb mklabel gpt ## 创建一个分区表
yes
parted /dev/sdb mkpart primary 0 1024 ## 创建一个主分区
Ignore
parted /dev/sdb p
parted /dev/sdb mkpart primary 1024 1500
Ignore
parted /dev/sdb p
===========================
[root@MYSQL_M ~]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 600MB 600MB primary
2 600MB 1024MB 424MB primary
[root@MYSQL_M ~]#
===============================
[root@MYSQL_S ha.d]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 1611MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 1024MB 1024MB primary
2 1024MB 1500MB 476MB primary
[root@MYSQL_S ha.d]#
================================
6、正式开始部署 DRBD。两台服务器都要部署。操作相同
mkdir -p /home/lvnian/tools/
cd /home/lvnian/tools/
export LC_ALL=C
echo $LC_ALL
cd /home/lvnian/tools/
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
ll drbd-8.4.4.tar.gz
tar xf drbd-8.4.4.tar.gz
cd drbd-8.4.4
./configure –prefix=/application/drbd-8.4.4 –with-km –with-heartbeat –sysconfdir=/etc/
make KDIR=/usr/src/kernels/$(uname -r)
make install
## 加载 drbd 到内核
lsmod |grep drbd
modprobe drbd
lsmod |grep drbd
# 这个加载,在重启之后失效,可以把它放在 rc.local 中。但也可以用 heartbeat 挂载
## 设置开机自启动挂载 drbd
echo modprobe drbd /etc/rc.local
## 配置 drbd.conf 两个服务去的配置文件时一样的
cat /etc/drbd.conf eof
global {
usage-count no;
}
common {
syncer {
rate 10M;
verify-alg crc32c;
}
}
resource data {
protocol C;
disk{
on-io-error detach;
}
on MYSQL_M {
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.0.3:7788;
meta-disk /dev/sdb2[0];
}
on MYSQL_S {
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.0.4:7788;
meta-disk /dev/sdb2[0];
}
}
eof
cat /etc/drbd.conf
####### 初始化话 meta data 分区
drbdadm create-md data
##drbd 启动
mkdir -p /application/drbd-8.4.4/var/run/drbd
drbdadm up data
cat /proc/drbd
##################################################33
报错:
[root@DRBD2 ~]# drbdadm up data
/application/drbd-8.4.4/var/run/drbd: No such file or directory
/application/drbd-8.4.4/var/run/drbd: No such file or directory
[root@DRBD2 ~]#
解决:
mkdir -p /application/drbd-8.4.4/var/run/drbd
drbdadm up data
# 指定其中一台为主 drbd(注意。选其中一台为主)
drbdadm — –overwrite-data-of-peer primary data
# 格式化分区:
mkfs.ext4 -b 4096 /dev/drbd0
tune2fs -c -1 /dev/drbd0
# 挂载分区:
mkdir /data
mount /dev/drbd0 /data ## 用 drbd0 挂载,而不是用 /dev/sdb2 物理分区挂载。
注意:仅仅是在主 drbd 中挂载,但是需要分别在进行主备切换,看能不能都成功进行挂载,只要能手工切换准备,并且能成功挂载,才算成功。才能继续下面的整合。
# 修改 heartbeat,也就是仅仅修改这个文件就可以了,其他不用变
cat /etc/ha.d/haresources eof
#lvnian services
#10.0.0.103 www.etianetian.org
MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
#MYSQL_M IPaddr::10.0.0.103/24/eth0 httpd
#10.0.0.104 bbs.etianetian.org
MYSQL_S IPaddr::10.0.0.104/24/eth0
#mysql MYSQL_M mysqlm.etianetian.org
#MYSQL_M IPaddr::10.0.0.103/24/eth0
#MYSQL_M IPaddr::10.0.0.103/24/eth0 mysqld
#mysql slave mysqlm.etianetian.org
#MYSQL_S IPaddr::10.0.0.104/24/eth0
eof
===================================================
## 解析下面命令:
MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
上面命令相对于依次在主节点上执行下面命令,如果主节点宕机了,就依次在被节点上执行
/etc/ha.d/resource.d/IPaddr 10.0.0.103/24/eth0 start/stop
/etc/ha.d/resource.d/drbddisk data start/stop
/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start/stop
依次在主备上单独在命令行上面执行上面的命令。如果都能成功,那就可以用 heartbeat 使用了。
注意 drbd 需要在 up 状态在执行上面的命令。也就是先执行 drbdadm up data 再执行上面的命令
# 在重启 heartbeat 之前,必须把 drbd 的给启动起来,可以都是从
/etc/init.d/heartbeat stop
/etc/init.d/heartbeat restart
用下面命令,查看是否成功。之后左右重启服务器,切换主备。和用命令切换主备,让其能正常切换,才算成功
df
cat /proc/drbd
/usr/share/heartbeat/hb_standby
/usr/share/heartbeat/hb_takeover
## 注意要 drbd 设置开启自启动,只有设置开启自启动,heartbeat 才能管理他,不然他无法挂载 /dev/drbd0/, 因为开机的是否,如果 drbd 不启动,就不存在 /dev/drbd0 分区。
所以 heartbeat 和 drbd 都要设置开机自启动。
但是在生产环境中,最好还是不要设置 drbd 和 heartbeat 开启自启动,我们仅仅需要让主服务故障的时候能够切换到备用设备就好了。这时候主的修复,最好还是人工介入。
但是这个实验为了能够体现主备可以相互接管等,在服务器出现故障重启,也能正常接管,所以设置了开启自启动
对于 heartbeat 配合 drbd 联合调试小结
1、主或备节点有 heartbeat 控制的资源的启动顺序是相同,资源启动顺序为
a、vip 的启动
b、drbd 启动和设置
c、drbd 分区的挂载
2、发生切换时主或备节点释放资源的顺序是相同,但是和上面启动的顺序是相反的。
a、drbd 分区的卸载
b、drbd 服务角色等变为 slave
c、vip 的停止
所以 /etc/ha.d/haresources 里面的资源顺序是不可以表的,必须如下:
MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
故障解决思路:
出现故障,就根据分别执行下面命令,看日志,看哪里出错,之后进行处理
/etc/ha.d/resource.d/IPaddr 10.0.0.103/24/eth0 start/stop
/etc/ha.d/resource.d/drbddisk data start/stop
/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start/stop
########## 安装 MySQL
下面是一键安装 mysql 脚本,要一键安装成功的前提是,必须把
在 /home/lvnian/tools/ 目录下存在 mysql-5.5.32-linux2.6-x86_64.tar.gz、data-mysql.cnf.tar.gz、这两个包。
一个是 mysql 的软件包,一个是 mysql 的配置文件包。
mysql 的配置包内容如下
[root@MYSQL_M tools]# vim mysql.simple.sh
#!/bin/sh
# 一键安装单实例 mysql
#xiaogao 20190921
# 创建相关 mysql 用户
groupadd mysql
useradd -s /sbin/nologin -g mysql -M mysql
tail -1 /etc/passwd
# 安装 mysql 依赖库
yum -y install ncurses-devel
# 开启安装 mysql,记得先上传安装包到 /home/lvnian/tools/
cd /home/lvnian/tools/
tar zxf mysql-5.1.72.tar.gz
cd mysql-5.1.72
./configure \
–prefix=/application/mysql5.1.72 \
–with-unix-socket-path=/application/mysql5.1.72/tmp/mysql.sock \
–localstatedir=/application/mysql5.1.72/data \
–enable-assembler \
–enable-thread-safe-client \
–with-mysqld-user=mysql \
–with-big-tables \
–without-debug \
–with-pthread \
–enable-assembler \
–with-extra-charsets=complex \
–with-readline \
–with-ssl \
–with-embedded-server \
–enable-local-infile \
–with-plugins=partition,innobase \
–with-mysqld-ldflags=-all-static \
–with-client-ldflags=-all-static
#–with-plugin-PLUGIN \
make make install
echo $?
# 制作软连接:
ln -s /application/mysql5.1.72 /application/mysql
# 创建 msyql 数据库文件
cd /home/lvnian/tools/mysql-5.1.72/support-files/
ls my*.cnf -l
/bin/cp my-small.cnf /etc/my.cnf
mkdir /application/mysql/data -p
chown -R mysql.mysql /application/mysql/data/
# 初始化数据库
/application/mysql/bin/mysql_install_db –basedir=/application/mysql –datadir=/application/mysql/data –user=mysql
# 启动 mysql 数据库
#/application/mysql/bin/mysqld_safe
# 启动方法 2
echo ———– 启动方法 mysql 2—————
cp /home/lvnian/tools/mysql-5.1.72/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
/etc/init.d/mysqld restart
sleep 5
netstat -lnt|grep 3306
lsof -i :3306
# 设置 mysql 命令全局使用路径
echo PATH=$PATH:/application/mysql/bin /etc/profile
source /etc/profile
which mysql
mysql
[root@MYSQL_M tools]#
########################################################################
### 测试看是否安装成功
[root@MYSQL_M tools]# netstat -lntup|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 47525/mysqld
[root@MYSQL_M tools]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@MYSQL_M tools]# netstat -lntup|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 47742/mysqld
[root@MYSQL_M tools]#
###### 安装成功 mysql
修改 MYSQL 数据库的数据目录
因为的 drbd 要挂载到 /data 目录上,所以我需要把上面的 mysql 数据目录移除。重新初始化数据库文件到 /data 目录,同时要确保 /data 目录现在已经挂载到 drbd0 上操作如下
df
[root@MYSQL_M ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 11150604 2498092 8086088 24% /
tmpfs 247112 0 247112 0% /dev/shm
/dev/sda1 198337 29670 158427 16% /boot
/dev/drbd0 576696 38308 509092 3% /data
《===== 此时 /dev/drbd0 已经挂载到 /data 目录
[root@MYSQL_M ~]#
/etc/init.d/mysqld stop
mv /application/mysql/data /tmp/
/application/mysql/bin/mysql_install_db –basedir=/application/mysql –datadir=/data –user=mysql
## 执行上面初始数据库目录脚本时,必须要把 drbd 的 /dev/drbd0 挂载到 /data 目录上
初始化数据目录到 /data 目录后,直接用脚本启动数据库会出现下面错误
/etc/init.d/mysqld start
[root@MYSQL_M ~]# /etc/init.d/mysqld start
Starting MySQL. ERROR! Manager of pid-file quit without updating file.
[root@MYSQL_M ~]#
上面的故障解决:
修改 /etc/init.d/mysqld 启动目录的 47 行,修改为如下内容:
47 datadir=/data
或者用 sed 替换,命令如下:
sed -i s#^datadir=#datadir=/data# /etc/init.d/mysqld
=====================
/etc/init.d/mysqld start
netstat -lntup |grep 3306
=====================
[root@MYSQL_M ~]# sed -i s#^datadir=#datadir=/data# /etc/init.d/mysqld
[root@MYSQL_M ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@MYSQL_M ~]# netstat -lntup|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 48830/mysqld
[root@MYSQL_M ~]#
[root@MYSQL_M ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 11150604 2498092 8086088 24% /
tmpfs 247112 0 247112 0% /dev/shm
/dev/sda1 198337 29670 158427 16% /boot
/dev/drbd0 576696 38308 509092 7% /data
[root@MYSQL_M ~]#
[root@MYSQL_M ~]# ls /data/
a1 a10 a2 a3 a4 a5 a6 a7 a8 a9 ibdata1 ib_logfile0 ib_logfile1 lost+found mysql MYSQL_M.err MYSQL_M.pid test
注意 两台 mysql 的数据目录都要改为 /data。确保此时的 /data 目录已经是挂载到 drbd0 上的应为我们通过 heartbeat 漂移到备用 mysql 服务器,也会挂载到 /data 目录下,所以我们必要要在这两台服务器上面测试把数据目录改到 /data 目录下,依旧可以正常启动 mysql 服务。
其实我们可以也可以直接用 mv 命令,把源数据文件 /application/mysql/data 到 /data 里面,再修改 mysql 启动脚本即可。操作如下:
netstat -lntup|grep 3306
/etc/init.d/mysqld stop
netstat -lntup|grep 3306
mv /application/mysql/data /
sed -i s#^datadir=#datadir=/data# /etc/init.d/mysqld
/etc/init.d/mysqld start
netstat -lntup|grep 3306
==========================================
[root@MYSQL_S tools]# netstat -lntup|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 48234/mysqld
[root@MYSQL_S tools]#
[root@MYSQL_S tools]# /etc/init.d/mysqld stop
Shutting down MySQL. SUCCESS!
[root@MYSQL_S tools]# netstat -lntup|grep 3306
[root@MYSQL_S tools]# mv /application/mysql/data /
mv: overwrite `/data ? y
[root@MYSQL_S tools]# sed -i s#^datadir=#datadir=/data# /etc/init.d/mysqld
[root@MYSQL_S tools]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@MYSQL_S tools]# netstat -lntup|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 48396/mysqld
[root@MYSQL_S tools]#
因为我们需要实现的是高可用,所以只需要只要一台数据文件 /data。
所以现在我们需要做的是把备用服务器也就是 10.0.0.4 服务器的 /data 目录移走。
以后通过 drbd 漂移挂载 /data 目录(mount /dev/drbd0 /data)存储数据
把备用服务器的 /data 欲走后,备用服务器如果没有接管主服务器它将无法启动. 在备服务器,也就是 10.0.0.4 上操作
mkdir /tmp/data
mv /data/* /tmp/data
/etc/init.d/mysqld start
=====================
[root@MYSQL_S tools]# /etc/init.d/mysqld start
Starting MySQL.. ERROR! Manager of pid-file quit without updating file.
[root@MYSQL_S tools]#
发送此时把 /data 目录的内容移走之后,mysql 数据库无法正常启动
## 测试,把备份服务器上的 drbd 停止,挂载 /dev/drbd0 到 /data 目录,让其能正常启动。只有正常启动才能,让 heartbeat 管理主库 mysql 的高可用
## 命令如下:
pkill mysql
pkill mysqld
drbdadm create-md data
drbdadm down data
drbdadm create-md data
drbdadm up data
cat /proc/drbd
drbdadm down data
mkdir /data
mount /dev/sdb1 /data
df
ll /data/
pkill mysql
pkill mysqld
ps -ef|grep mysql
netstat -lntup|grep 3306
/etc/init.d/mysqld start
netstat -lntup
netstat -lntup|grep 330
==============================
[root@MYSQL_S ~]# drbdadm down data
[root@MYSQL_S ~]#
[root@MYSQL_S ~]# mkdir /data
[root@MYSQL_S ~]#
[root@MYSQL_S ~]# mount /dev/sdb1 /data
[root@MYSQL_S ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 11150604 2513892 8070288 24% /
tmpfs 247112 0 247112 0% /dev/shm
/dev/sda1 198337 29670 158427 16% /boot
/dev/sdb1 576696 38304 509096 7% /data
[root@MYSQL_S ~]# ll /data/
total 20508
-rw-rw—- 1 mysql mysql 10485760 Nov 5 09:48 ibdata1
-rw-rw—- 1 mysql mysql 5242880 Nov 5 09:54 ib_logfile0
-rw-rw—- 1 mysql mysql 5242880 Nov 4 23:55 ib_logfile1
drwx—— 2 mysql mysql 4096 Nov 4 23:55 mysql
-rw-r—– 1 mysql mysql 3683 Nov 5 09:54 MYSQL_M.err
-rw-rw—- 1 mysql mysql 5 Nov 5 09:54 MYSQL_M.pid
-rw-r—– 1 mysql mysql 6190 Nov 5 09:19 MYSQL_S.err
-rw-rw—- 1 mysql mysql 6 Nov 5 00:45 MYSQL_S.pid
drwx—— 2 mysql mysql 4096 Nov 4 23:55 test
[root@MYSQL_S ~]#
[root@MYSQL_S ~]# pkill mysql
[root@MYSQL_S ~]# pkill mysqld
[root@MYSQL_S ~]# ps -ef|grep mysql
root 61189 50623 0 09:56 pts/1 00:00:00 grep mysql
[root@MYSQL_S ~]# netstat -lntup|grep 3306
[root@MYSQL_S ~]# /etc/init.d/mysqld start
Starting MySQL SUCCESS!
[root@MYSQL_S ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1075/rpcbind
tcp 0 0 0.0.0.0:53845 0.0.0.0:* LISTEN 1093/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1243/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1551/master
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 61313/mysqld
tcp 0 0 :::111 :::* LISTEN 1075/rpcbind
tcp 0 0 :::37716 :::* LISTEN 1093/rpc.statd
tcp 0 0 :::22 :::* LISTEN 1243/sshd
tcp 0 0 ::1:25 :::* LISTEN 1551/master
udp 0 0 0.0.0.0:111 0.0.0.0:* 1075/rpcbind
udp 0 0 225.0.0.181:694 0.0.0.0:* 51656/heartbeat: wr
udp 0 0 0.0.0.0:826 0.0.0.0:* 1075/rpcbind
udp 0 0 0.0.0.0:55103 0.0.0.0:* 51656/heartbeat: wr
udp 0 0 0.0.0.0:68 0.0.0.0:* 918/dhclient
udp 0 0 127.0.0.1:845 0.0.0.0:* 1093/rpc.statd
udp 0 0 0.0.0.0:53339 0.0.0.0:* 1093/rpc.statd
udp 0 0 :::111 :::* 1075/rpcbind
udp 0 0 :::826 :::* 1075/rpcbind
udp 0 0 :::56276 :::* 1093/rpc.statd
[root@MYSQL_S ~]# netstat -lntup|grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 61313/mysqld
[root@MYSQL_S ~]#
注意:切换到备用服务器之后,无法挂载,注意 /data/ 目录的属主问题,一定要把 /data 属主和 UID 设置相同
根据上面的操作,可以知道备用 mysql 数据库用主 mysql 数据库的数据文件,能够正常启动。
测试备库可以成功使用主 mysql 数据库的数据文件,下面把备库的 drbd 正常启动起来
/etc/init.d/mysqld stop
umount /data
netstat -lntup|grep 330
ps -ef|grep mysql
drbdadm up data
cat /proc/drbd
================================
[root@MYSQL_S ~]# umount /data
[root@MYSQL_S ~]# !net
netstat -lntup|grep 330
[root@MYSQL_S ~]# !ps
ps -ef|grep mysql
root 61384 50623 0 10:01 pts/1 00:00:00 grep mysql
[root@MYSQL_S ~]# drbdadm up data
[root@MYSQL_S ~]# !cat
cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@MYSQL_S, 2015-11-04 22:59:05
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r—–
ns:0 nr:12 dw:12 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@MYSQL_S ~]#
================================
下面用 heartbeat 管理 drbd 和 mysql 数据库,
##### 实现 mysql 自动接管
## 操作需要在两个服务器内进行
cat /etc/ha.d/haresources eof
#gao services
#10.0.0.103 www.etianetian.org
MASTER IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysqld
#MASTER IPaddr::10.0.0.103/24/eth0 httpd
#10.0.0.104 bbs.etianetian.org
MYSQL_S IPaddr::10.0.0.104/24/eth0
#mysql master mysqlm.etianetian.org
#MASTER IPaddr::10.0.0.103/24/eth0
#MASTER IPaddr::10.0.0.103/24/eth0 mysqld
#mysql slave mysqlm.etianetian.org
#MYSQL_S IPaddr::10.0.0.104/24/eth0
eof
## 把启动 mysql 的文件放到 /etc/ha.d/resource.d/,并且授予执行权限
cp /mysql /etc/ha.d/resource.d/
chmod +x /etc/ha.d/resource.d/mysql
ll /etc/ha.d/resource.d/mysql
##### 查看备用服务器是否启动 mysql
[root@MYSQL_S ~]# lsof -i :3306
[root@MYSQL_S ~]# netstat -lnt|grep 3306
### 把 heartbeat 关闭
/etc/init.d/heartbeat stop
## 查看 maste 服务器现在的转态
[root@MASTER tools]# netstat -lnt|grep 3306
[root@MASTER tools]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 11150604 3886464 6697716 37% /
tmpfs 247112 0 247112 0% /dev/shm
/dev/sda1 198337 29670 158427 16% /boot
[root@MASTER tools]# ip add |grep 10.0.0
inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
[root@MASTER tools]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 11150604 3886464 6697716 37% /
tmpfs 247112 0 247112 0% /dev/shm
/dev/sda1 198337 29670 158427 16% /boot
[root@MASTER tools]#
启动 heartbeat
/etc/init.d/heartbeat start
用下面命令,查看是否成功。之后左右重启服务器,切换主备。和用命令切换主备,让其能正常切换,才算成功
df
cat /proc/drbd
/usr/share/heartbeat/hb_standby
/usr/share/heartbeat/hb_takeover
这里就不列举具体的切换过程了,就用上面的命令在主备中切换。看能否切换成功。
切换延迟大概在 10 秒左右
##### 配置 mysql 主从同步
配置 mysql 主从同步,用 mysql_c,ip 为:10.0.0.5 作为 mysql 数据库的从库。
其中 mysql 的安装和上面的一样,也就是用上面的脚本一键安装即可。数据目录保留为原目录即可。
主数据上面操作(也就是需要在两台主 mysql 服务器上操作)
开启主数据的 binlog 参数,和设置 server-id
egrep server-id|log-bin /etc/my.cnf
sed -i s%#log-bin=mysql-bin%log-bin=mysql-bin%g /etc/my.cnf
egrep server-id|log-bin /etc/my.cnf
=======================================
[root@MYSQL_S ~]# egrep server-id|log-bin /etc/my.cnf
server-id = 1
#log-bin=mysql-bin
[root@MYSQL_S ~]# sed -i s%#log-bin=mysql-bin%log-bin=mysql-bin%g /etc/my.cnf
[root@MYSQL_S ~]# egrep server-id|log-bin /etc/my.cnf
server-id = 1
log-bin=mysql-bin
[root@MYSQL_S ~]#
=======================================
重启数据库
/etc/init.d/mysqld restart
netstat -lntup|grep 3306
########################################
[root@MYSQL_S ~]# /etc/init.d/mysqld restart
Shutting down MySQL….. SUCCESS!
Starting MySQL. SUCCESS!
[root@MYSQL_S ~]# netstat -lntup|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 904/mysqld
[root@MYSQL_S ~]#
########################################
查看是否记录 bin_log 日志
[root@MYSQL_S ~]# ll /data/
total 20524
-rw-rw—- 1 mysql mysql 10485760 Nov 5 10:48 ibdata1
-rw-rw—- 1 mysql mysql 5242880 Nov 5 10:48 ib_logfile0
-rw-rw—- 1 mysql mysql 5242880 Nov 4 23:55 ib_logfile1
drwx—— 2 mysql mysql 4096 Nov 4 23:55 mysql
-rw-rw—- 1 mysql mysql 106 Nov 5 10:48 mysql-bin.000001 ## 有这个,证明在记录主从同步
-rw-rw—- 1 mysql mysql 19 Nov 5 10:48 mysql-bin.index
-rw-r—– 1 mysql mysql 8427 Nov 5 10:29 MYSQL_M.err
-rw-r—– 1 mysql mysql 9010 Nov 5 10:48 MYSQL_S.err
-rw-rw—- 1 mysql mysql 4 Nov 5 10:48 MYSQL_S.pid
drwx—— 2 mysql mysql 4096 Nov 4 23:55 test
[root@MYSQL_S ~]#
##########################################
在主数据中创建测试用的数据库和表。
mysql
create database lvnian;
use lvnian;
create table test(
id int(4) not null auto_increment,
name char(20) not null,
primary key(id)
);
flush privileges;
quit;
mysql -uroot -e use lvnian; select * from test;
for n in `seq 100`;do mysql -uroot -e use lvnian;insert test values($n, lvnian$n done;
mysql -uroot -e use lvnian; select * from test;
################################################
查看是否开启 binlog
[root@MYSQL_S ~]# mysql -uroot -e show variables like log_bin
+—————+——-+
| Variable_name | Value |
+—————+——-+
| log_bin | ON |
+—————+——-+
[root@MYSQL_S ~]#
#######
创建用于同步数据的账号 rep
mysql grant replication slave on *.* to rep @ 10.0.0.% identified by lvnian123456
Query OK, 0 rows affected (0.00 sec)
mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)
=========
或者用下面命令:
mysql -uroot -e grant replication slave on *.* to rep @ 10.0.0.% identified by lvnian123456 flush privileges;
mysql -uroot -e select user,host from mysql.user; |grep rep
——
[root@MYSQL_S ~]# mysql -uroot -e select user,host from mysql.user; |grep rep
rep 10.0.0.%
[root@MYSQL_S ~]#
锁表
mysql flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
或者用下面命令:
mysql -uroot -e flush tables with read lock;
查看当前日志名称和位置
mysql -uroot -e show master status;
mysql -uroot -e show master logs;
########################################
[root@MYSQL_S ~]# mysql -uroot -e show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 10447 | | |
+——————+———-+————–+——————+
[root@MYSQL_S ~]# mysql -uroot -e show master logs;
+——————+———–+
| Log_name | File_size |
+——————+———–+
| mysql-bin.000001 | 10447 |
+——————+———–+
[root@MYSQL_S ~]#
######################################
备份当前主数据库的数据
另开一个窗口
mysqldump -uroot -A -B -F –master-data=2 –events | gzip /tmp/mysql_bak.$(date +%F).sql.gz
##################
[root@MYSQL_S ~]# mysqldump -uroot -A -B -F –events –master-data=2 | gzip /tmp/mysql_bak.$(date +%F).sql.gz
[root@MYSQL_S ~]# ll /tmp/
total 148
drwxr-xr-x 4 mysql mysql 4096 Nov 5 09:43 data
-rw-r–r– 1 root root 145589 Nov 5 11:05 mysql_bak.2015-11-05.sql.gz
[root@MYSQL_S ~]#
给主数据解锁
mysql unlock tables;
Query OK, 0 rows affected (0.00 sec)
或者:
mysql -uroot -e unlock tables;
###############################################
继续往主数据写数据
for n in `seq 100 150`;do mysql -uroot -e use lvnian;insert test values($n, lvnian$n done;
mysql -uroot -e use lvnian; select * from test;
###############################################
启动备数据也就是从库(10.0.0.5)
/etc/init.d/mysqld restart
[root@MYSQL_C ~]# /etc/init.d/mysqld restart
Shutting down MySQL…. SUCCESS!
Starting MySQL. SUCCESS!
[root@MYSQL_C ~]#
##########################################
把备份数据备份到备数据
scp root@10.0.0.4:/tmp/mysql_bak* .
ls
cp mysql_bak.2015-11-05.sql.gz /tmp/
gzip -d mysql_bak.2015-11-05.sql.gz
mysql -uroot mysql_bak.2015-11-05.sql
mysql -uroot -e show databases;
mysql -uroot -e use lvnian;select * from test;
=========================================
[root@MYSQL_C ~]# scp root@10.0.0.4:/tmp/mysql_bak* .
root@10.0.0.4 s password:
mysql_bak.2015-11-05.sql.gz 100% 142KB 142.2KB/s 00:00
[root@MYSQL_C ~]# ls
anaconda-ks.cfg chu.sh gao.txt hosts install.log install.log.syslog mysql_bak.2015-11-05.sql.gz
[root@MYSQL_C ~]#
##########
[root@MYSQL_C ~]# gzip -d mysql_bak.2015-11-05.sql.gz
[root@MYSQL_C ~]# mysql -uroot mysql_bak.2015-11-05.sql
[root@MYSQL_C ~]# mysql -uroot -e show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| lvnian |
| mysql |
| test |
+——————–+
[root@MYSQL_C ~]# mysql -uroot -e use lvnian;select * from test;
+—–+———–+
| id | name |
+—–+———–+
| 1 | lvnian1 |
| 2 | lvnian2 |
| 3 | lvnian3 |
| 4 | lvnian4 |
….
….
….
| 95 | lvnian95 |
| 96 | lvnian96 |
| 97 | lvnian97 |
| 98 | lvnian98 |
| 99 | lvnian99 |
| 100 | lvnian100 |
+—–+———–+
[root@MYSQL_C ~]#
全部恢复到备数据成功
开始设置主从同步
修改从库的 server-id,修改和主库不一样,这里修改为 20
egrep server-id /etc/my.cnf
sed -i s/^server-id/#server-id/g /etc/my.cnf
egrep server-id /etc/my.cnf
sed -i /#server-id/aserver-id = 20 /etc/my.cnf
egrep server-id /etc/my.cnf
### 重启 mysql
更改主数据刚才的文件名称和位置点,等到下面的内容
mysql
======
CHANGE MASTER TO
MASTER_HOST= 10.0.0.103 ,
MASTER_PORT=3306,
MASTER_USER= rep ,
MASTER_PASSWORD= lvnian123456 ,
MASTER_LOG_FILE= mysql-bin.000001 ,
MASTER_LOG_POS=10447;
######################
start slave;
show slave status\G;
######################
mysql CHANGE MASTER TO
– MASTER_HOST= 10.0.0.103 , === 注意,必须要用 VIP
– MASTER_PORT=3306,
– MASTER_USER= rep ,
– MASTER_PASSWORD= lvnian123456 ,
– MASTER_LOG_FILE= mysql-bin.000003 ,
– MASTER_LOG_POS=302;
Query OK, 0 rows affected (0.08 sec)
mysql start slave;
Query OK, 0 rows affected (0.03 sec)
mysql show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.4
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 9759
Relay_Log_File: S_MYSQL-relay-bin.000005
Relay_Log_Pos: 9905
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 9759
Relay_Log_Space: 10106
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified
mysql
成功的表现:
[root@S_MYSQL ~]# mysql -uroot -e show slave status\G; |egrep Slave_IO_Runnin|Slave_SQL_Running
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[root@S_MYSQL ~]#
出现上面两个 yes 证明数据库主从同步成功了
再次用 heartbeat 让 mysql 主库进行主备切换。看看 mysql 客户端,也就是从库的状态。
用下面命令看在从库 10.0.0.5 看主备切换,从库数据同步的情况:
mysql -uroot -e show slave status\G; |egrep Slave_IO_Runnin|Slave_SQL_Running
for i in `seq 100`;do mysql -uroot -e show slave status\G; |egrep Slave_IO_Runnin|Slave_SQL_Running sleep 10;echo -e ========$i=======\n done
用下面命令进行主备切换
/usr/share/heartbeat/hb_standby
/usr/share/heartbeat/hb_takeover
往主库写数据
for n in `seq 2000 2300`;do mysql -uroot -e use lvnian;insert test values($n, lvnian$n sleep 10 ;done;
for n in `seq 100`;do mysql -uroot -e use lvnian; select * from test; |tail -5 ;sleep 10;echo -e =========$i========== done;
mysql -uroot -e use lvnian; select * from test;
######################################################
[root@MYSQL_C ~]# for i in `seq 100`;do mysql -uroot -e show slave status\G; |egrep Slave_IO_Runnin|Slave_SQL_Running sleep 10;echo -e ========$i=======\n done
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
========1=======
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
========2=======
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
========3=======
Slave_IO_Running: No
Slave_SQL_Running: Yes
========4=======
Slave_IO_Running: No
Slave_SQL_Running: Yes
========5=======
Slave_IO_Running: No
Slave_SQL_Running: Yes
========6=======
Slave_IO_Running: No
Slave_SQL_Running: Yes
========7=======
Slave_IO_Running: No
Slave_SQL_Running: Yes
========8=======
Slave_IO_Running: No
Slave_SQL_Running: Yes
========9=======
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
通过上面的主备切换时,从库同步主库的情况,因为每次查看同步情况,是 10 秒,所以得出结论:在主备进行切换时,mysql 可不得大概会有 1 分钟的延迟,导致无法正常进行使用 mysql 数据库
上述内容就是如何进行 MySQL + Heartbeat + DRBD 架构部署,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。