您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行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架構部署,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。