久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行MySQL + Heartbeat + DRBD架構部署

146次閱讀
沒有評論

共計 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 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計30976字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 延津县| 巨鹿县| 仁寿县| 册亨县| 噶尔县| 禹州市| 石楼县| 咸丰县| 车险| 荔波县| 百色市| 通城县| 土默特左旗| 连城县| 湖口县| 汾阳市| 博湖县| 电白县| 修水县| 阳朔县| 铜山县| 太仓市| 郯城县| 舒兰市| 江源县| 常宁市| 潞城市| 阳泉市| 梅州市| 格尔木市| 紫阳县| 鸡泽县| 惠水县| 营山县| 本溪市| 图木舒克市| 台东市| 防城港市| 泰安市| 贺兰县| 金塔县|