下面一起來(lái)了解下MySQL、heartbeat、drbd如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)高可用群集,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望mysql、heartbeat、drbd如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)高可用群集這篇短內(nèi)容是你想要的。
北屯網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),北屯網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為北屯超過(guò)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的北屯做網(wǎng)站的公司定做!
DRBD 的全稱(chēng)為:Distributed ReplicatedBlock Device(DRBD)分布式塊設(shè)備復(fù)制,DRBD
是由內(nèi)核模塊和相關(guān)腳本而組成,用來(lái)構(gòu)建數(shù)據(jù)的高可用性集群。其實(shí)現(xiàn)方式是通過(guò)網(wǎng)絡(luò)來(lái)鏡像整個(gè)磁盤(pán)設(shè)備(數(shù)據(jù))。你可以把它看作是一種基于網(wǎng)絡(luò)的 RAID1。它允許用戶(hù)在遠(yuǎn)程機(jī)器上建立一個(gè)本地塊設(shè)備的實(shí)時(shí)鏡像。
(DRBD Primary)負(fù)責(zé)接收數(shù)據(jù),把數(shù)據(jù)寫(xiě)到本地磁盤(pán)并發(fā)送給另一臺(tái)主機(jī)(DRBD
Secondary)。另一個(gè)主機(jī)再將數(shù)據(jù)存儲(chǔ)到自己的磁盤(pán)中。目前,DRBD每次只允許對(duì)一個(gè)節(jié)
點(diǎn)進(jìn)行讀寫(xiě)訪問(wèn),但這對(duì)于通常的故障切換高可用集群來(lái)說(shuō)已經(jīng)足夠用了。有可能以后的版本支持兩個(gè)節(jié)點(diǎn)進(jìn)行讀寫(xiě)存取。
一個(gè) DRBD 系統(tǒng)由兩個(gè)節(jié)點(diǎn)構(gòu)成,與HA 集群類(lèi)似,也有主節(jié)點(diǎn)和備用節(jié)點(diǎn)之分,在帶有主要設(shè)備的節(jié)點(diǎn)上,應(yīng)用程序和操作系統(tǒng)可以運(yùn)行和訪問(wèn) DRBD 設(shè)備(/dev/drbd*)。在主節(jié)點(diǎn)寫(xiě)入的數(shù)據(jù)通過(guò) DRBD 設(shè)備存儲(chǔ)到主節(jié)點(diǎn)的磁盤(pán)設(shè)備中,同時(shí),這個(gè)數(shù)據(jù)也會(huì)自動(dòng)發(fā)送到備用節(jié)點(diǎn)對(duì)應(yīng)的 DRBD 設(shè)備,最終寫(xiě)入備用節(jié)點(diǎn)的磁盤(pán)設(shè)備上,在備用節(jié)點(diǎn)上,DRBD 只是將數(shù)據(jù)從 DRBD 設(shè)備寫(xiě)入到備用節(jié)點(diǎn)的磁盤(pán)中?,F(xiàn)在大部分的高可用性集群都會(huì)使用共享存儲(chǔ),而 DRBD 也可以作為一個(gè)共享存儲(chǔ)設(shè)備,使用 DRBD 不需要太多的硬件的投資。因?yàn)樗赥CP/IP 網(wǎng)絡(luò)中運(yùn)行,所以,利用DRBD 作為共享存儲(chǔ)設(shè)備,要節(jié)約很多成本,因?yàn)閮r(jià)格要比專(zhuān)用的存儲(chǔ)網(wǎng)絡(luò)便宜很多;其性能與穩(wěn)定性方面也不錯(cuò)。
異步復(fù)制協(xié)議。一旦本地磁盤(pán)寫(xiě)入已經(jīng)完成,數(shù)據(jù)包已在發(fā)送隊(duì)列中,則寫(xiě)被認(rèn)為是完成的。在一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),可能發(fā)生數(shù)據(jù)丟失,因?yàn)楸粚?xiě)入到遠(yuǎn)程節(jié)點(diǎn)上的數(shù)據(jù)可能仍在發(fā)送隊(duì)列。盡管,在故障轉(zhuǎn)移節(jié)點(diǎn)上的數(shù)據(jù)是一致的,但沒(méi)有及時(shí)更新。這通常是用于地理上分開(kāi)的節(jié)點(diǎn)。
內(nèi)存同步(半同步)復(fù)制協(xié)議。一旦本地磁盤(pán)寫(xiě)入已完成且復(fù)制數(shù)據(jù)包達(dá)到了遠(yuǎn)程節(jié)點(diǎn)則認(rèn)為寫(xiě)在主節(jié)點(diǎn)上被認(rèn)為是完成的。數(shù)據(jù)丟失可能發(fā)生在參加的兩個(gè)節(jié)點(diǎn)同時(shí)故障的情況下,因?yàn)樵趥鬏斨械臄?shù)據(jù)可能不會(huì)被提交到磁盤(pán)。
同步復(fù)制協(xié)議。只有在本地和遠(yuǎn)程節(jié)點(diǎn)的磁盤(pán)已經(jīng)確認(rèn)了寫(xiě)操作完成,寫(xiě)才被認(rèn)為完成。沒(méi)有任何數(shù)據(jù)丟失,所以這是一個(gè)群集節(jié)點(diǎn)的流行模式,但 I / O 吞吐量依賴(lài)于網(wǎng)絡(luò)帶寬一般使用協(xié)議 C,但選擇 C 協(xié)議將影響流量,從而影響網(wǎng)絡(luò)時(shí)延。為了數(shù)據(jù)可靠性,我們?cè)谏a(chǎn)環(huán)境使用時(shí)須慎重選項(xiàng)使用哪一種協(xié)議。
Heartbeat 是 Linux-HA 工程的一個(gè)組件,自1999 年開(kāi)始到現(xiàn)在,發(fā)布了眾多版本,是目前開(kāi)源Linux-HA項(xiàng)目最成功的一個(gè)例子,在行業(yè)內(nèi)得到了廣泛的應(yīng)用,這里分析的是2007年1月18日發(fā)布的版本 2.0.8。
隨著 Linux 在關(guān)鍵行業(yè)應(yīng)用的逐漸增多,它必將提供一些原來(lái)由 IBM 和 SUN 這樣的大型商業(yè)公司所提供的服務(wù),這些商業(yè)公司所提供的服務(wù)都有一個(gè)關(guān)鍵特性,就是高可用集群。
Heartbeat 最核心的包括兩個(gè)部分,心跳監(jiān)測(cè)部分和資源接管部分,心跳監(jiān)測(cè)可以通過(guò)
網(wǎng)絡(luò)鏈路和串口進(jìn)行,而且支持冗余鏈路,它們之間相互發(fā)送報(bào)文來(lái)告訴對(duì)方自己當(dāng)前的狀態(tài),如果在指定的時(shí)間內(nèi)未收到對(duì)方發(fā)送的報(bào)文,那么就認(rèn)為對(duì)方失效,這時(shí)需啟動(dòng)資源接管模塊來(lái)接管運(yùn)行在對(duì)方主機(jī)上的資源或者服務(wù)。
高可用集群是指一組通過(guò)硬件和軟件連接起來(lái)的獨(dú)立計(jì)算機(jī),它們?cè)谟脩?hù)面前表現(xiàn)為一個(gè)單一系統(tǒng),在這樣的一組計(jì)算機(jī)系統(tǒng)內(nèi)部的一個(gè)或者多個(gè)節(jié)點(diǎn)停止工作,服務(wù)會(huì)從故障節(jié)點(diǎn)切換到正常工作的節(jié)點(diǎn)上運(yùn)行,不會(huì)引起服務(wù)中斷。從這個(gè)定義可以看出,集群必須檢測(cè)節(jié)點(diǎn)和服務(wù)何時(shí)失效,何時(shí)恢復(fù)為可用。這個(gè)任務(wù)通常由一組被稱(chēng)為“心跳”的代碼完成。在 Linux-HA 里這個(gè)功能由一個(gè)叫做heartbeat 的程序完成。
操作系統(tǒng) | IP地址 | 主機(jī)名 | 軟件包列表 |
CentOS release 6.5 | 192.168.200.101 | server1 | DRBD 、heartbeat 、mysql |
CentOS release 6.5 | 192.168.200.102 | server2 | DRBD 、heartbeat 、mysql |
CentOS release 6.5 | 192.168.200.103 | Slave1 | Mysql |
CentOS release 6.5 | 192.168.200.104 | Slave2 | mysql |
CentOS release 6.5 | 192.168.200.105 | Lvs-m | Lvs+keepalived |
CentOS release 6.5 | 192.168.200.106 | Lvs-s | Lvs+keepalived |
所有主機(jī)需要添加一塊60G的SCSI接口硬盤(pán)
[root@localhost ~]# service iptables stop
[root@localhost ~]# setenforce 0
[root@localhost ~]# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
P
Partition number (1-4): 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610,default 2610): +10G
Command (m for help): w
[root@server1 ~]# partprobe /dev/sdb
[root@localhost ~]# vim /etc/sysconfig/network
2 HOSTNAME=server1
[root@localhost ~]# hostname server1
[root@localhost ~]# bash
[root@server1 ~]# vim /etc/hosts
3 192.168.200.101 server1
4 192.168.200.102 server2
把包上傳到/root下,按照順序安裝。
[root@server1 ~]#rpm -ivhPyXML-0.8.4-19.el6.x86_64.rpm
[root@server1 ~]#rpm -ivhperl-TimeDate-1.16-13.el6.noarch.rpm
[root@server1 ~]#rpm -ivhresource-agents-3.9.5-24.el6_7.1.x86_64.rpm
[root@server1 ~]#rpm -ivh lib64ltdl7-2.2.6-6.1mdv2009.1.x86_64.rpm
[root@server1 ~]#rpm -ivhcluster-glue-libs-1.0.5-6.el6.x86_64.rpm
[root@server1 ~]#rpm -ivhcluster-glue-1.0.5-6.el6.x86_64.rpm
[root@server1 ~]#yum -y install kernel-devel kernel-headers
[root@server1 ~]#rpm -ivh heartbeat-libs-3.0.4-2.el6.x86_64.rpmheartbeat-3.0.4-2.el6.x86_64.rpm
[root@server1 ~]# tar xf drbd-8.4.3.tar.gz
[root@server1 ~]# cd drbd-8.4.3
[root@server1 drbd-8.4.3]#./configure--prefix=/usr/local/drbd --with-km --with-heartbeat
[root@server1 drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/&& make &&
make install
[root@server1 drbd-8.4.3]# mkdir -p/usr/local/drbd/var/run/drbd
[root@server1 drbd-8.4.3]# cp/usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/
[root@server1 drbd-8.4.3]# chkconfig --add drbd
[root@server1 drbd-8.4.3]# cd drbd
[root@server1 drbd]# make clean
[root@server1 drbd]# make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/
[root@server1 drbd]# cp drbd.ko /lib/modules/2.6.32-504.el6.x86_64/kernel/lib/
[root@server1 drbd]# depmod
[root@server1 drbd]# cp -R/usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/
[root@server1 drbd]# cd /usr/local/drbd/etc/drbd.d/
[root@server1 drbd]# cat /usr/local/drbd/etc/drbd.conf
# You can find an example in/usr/share/doc/drbd.../drbd.conf.example
|
include"drbd.d/global_common.conf";
include "drbd.d/*.res";
[root@server1 drbd.d]# pwd
/usr/local/drbd/etc/drbd.d
[root@server1 drbd.d]# cp global_common.conf{,-$(date+%s)}
[root@server1 drbd.d]# vim global_common.conf
global {
usage-count yes; // 是否對(duì)使用信息作統(tǒng)計(jì), 默認(rèn)為 yes
}
common {
startup {
wfc-timeout 120; // 等待連接的超時(shí)時(shí)間
degr-wfc-timeout 120;
}
disk {
on-io-error detach; //當(dāng)IO出現(xiàn)錯(cuò)誤時(shí)執(zhí)行的動(dòng)作
}
net {
protocol C; // 復(fù)制模式為第 3種
}
}
[root@server1 drbd.d]# vim r0.res
resource r0 { //r0資源名稱(chēng)
on server1 {
device /dev/drbd0; // 邏輯設(shè)備路徑
disk /dev/sdb1; // 物理設(shè)備
address 192.168.200.101:7788; //主節(jié)點(diǎn)
meta-disk internal;
}
on server2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.200.102:7788; // 備節(jié)點(diǎn)
meta-disk internal;
}
}
[root@server1 drbd.d]# scp global_common.conf r0.res
192.168.200.102:/usr/local/drbd/etc/drbd.d
[root@server1 drbd.d]# modprobe drbd
[root@server1 drbd.d]# lsmod | grep drbd
drbd 310268 0
libcrc32c 1246 1 drbd
[root@server1 drbd.d]# dd if=/dev/zero bs=1M count=1of=/dev/sdb1
[root@server1 drbd.d]# drbdadm create-md r0 // 輸出以下信息
The server's response is:
you are the 57184th user to install this version
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created. //當(dāng)輸出成功信息后可 Ctrl+C結(jié)束
注意:
當(dāng)執(zhí)行命令”drbdadm create-md r0 ”時(shí),出現(xiàn)以下錯(cuò)誤信息。
Device sizewould be truncated, which
would corruptdata and result in
'accessbeyond end of device' errors.
You need toeither
* useexternal meta data (recommended)
* shrink thatfilesystem first
* zero outthe device (destroy the filesystem)
Operationrefused.
Command'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40
drbdadmcreate-md r0: exited with code 40
解決辦法:初始化磁盤(pán)文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync
[root@server1 drbd.d]# /etc/init.d/drbd start
Starting DRBD resources: [
create res: r0
prepare disk: r0
adjust disk: r0
adjust net: r0
]
........
[root@server1 drbd.d]# netstat -anpt | grep 7788
tcp 0 0 192.168.200.101:35654 192.168.200.102:7788
ESTABLISHED -
tcp 0 0 192.168.200.101:7788 192.168.200.102:33034
ESTABLISHED -
[root@server2 drbd.d]# netstat -anpt | grep 7788
tcp 0 0 192.168.200.102:7788 192.168.200.101:48501
ESTABLISHED -
tcp 0 0 192.168.200.102:10354 192.168.200.101:7788
ESTABLISHED -
初始化網(wǎng)絡(luò)磁盤(pán)(主節(jié)點(diǎn)上執(zhí)行)
[root@server1 drbd.d]# drbdadm -- --overwrite-data-of-peerprimary r0
[root@server1 drbd.d]#watch -n 2 cat /proc/drbd //動(dòng)態(tài)顯示同步內(nèi)容
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515build by root@bogon, 2016-12-04
13:39:22
0: cs:SyncSource ro:Primary/Secondaryds:UpToDate/Inconsistent C r-----
ns:116024 nr:0 dw:0 dr:123552 al:0 bm:7 lo:0 pe:1 ua:7ap:0 ep:1 wo:f oos:10374340
[>....................] sync'ed: 1.2%(10128/
數(shù)據(jù)同步測(cè)試(主節(jié)點(diǎn)上操作前 6 6 步驟,次節(jié)點(diǎn)上操作后三步驟)
server1上操作
[root@server1 drbd.d]# mkfs.ext4 /dev/drbd0
[root@server1 drbd.d]# mkdir /mysqldata
[root@server1 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server1 drbd.d]# echo www.crushlinux.com >/mysqldata/file // 建立測(cè)試文件
[root@server1 ~]# umount /dev/drbd0
[root@server1 ~]# drbdadm secondary r0 // 主降為次
server2上操作
[root@server2 drbd.d]# drbdadm primary r0 // 次升為主
[root@server2 drbd.d]# mkdir /mysqldata
[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server2 drbd.d]# ls /mysqldata // 在備節(jié)點(diǎn)上查看數(shù)據(jù)
file lost+found // 可以看到創(chuàng)建的文件
安裝 MySQL:
[root@server1 ~]# yum -y install mysql mysql-server
[root@server1 ~]# vim /etc/my.cnf
2datadir=/mysqldata/mysql
[root@server1 ~]# chown -R mysql.mysql /mysqldata
[root@server1 ~]# chkconfig mysqld on
注意:此時(shí)我們修改了數(shù)據(jù)目錄和其屬主和權(quán)限,有時(shí)會(huì)因?yàn)榇瞬僮鲗?dǎo)致數(shù)據(jù)庫(kù)無(wú)法啟動(dòng),
解決方法:
一,查看你的 selinux 是否處于打開(kāi)狀態(tài),將其關(guān)閉。
二,/etc/apparmor.d/usr.sbin.mysqld文件中,有兩行內(nèi)容規(guī)定了 mysql 使用數(shù)據(jù)文件的路徑權(quán)限,改掉即可,重啟/etc/init.d/apparmor restart。
因?yàn)榇饲暗牟僮?,現(xiàn)在把server2 節(jié)點(diǎn)降為次
[root@server2 ~]# umount /dev/drbd0
[root@server2 ~]# drbdadm secondary r0
把server1 升為主節(jié)點(diǎn)
[root@server1 ~]# drbdadm primary r0
[root@server1 ~]# mount /dev/drbd0 /mysqldata
[root@server1 ~]# /etc/init.d/mysqld start
在 server1上創(chuàng)建一個(gè)庫(kù) crushlinux,然后主降為備,把server2 升為主查看庫(kù)有沒(méi)有同步。
[root@server1 ~]# mysql
mysql> create database crushlinux;
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
[root@server1 ~]# service mysqld stop //server1的操作
[root@server1 ~]# umount /dev/drbd0 //server1的操作
[root@server1 ~]# drbdadm secondary r0 //server1的操作
server2上操作
[root@server2 drbd.d]# drbdadm primary r0 //server2的操作
[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata //server2的操作
[root@server2 drbd.d]# service mysqld start //server2的操作
[root@server2 drbd.d]# ls /mysqldata/mysql/ //server2的操作
crushlinux ibdata1 ib_logfile0 ib_logfile1 mysql test
[root@server1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server1 heartbeat-3.0.4]# cp ha.cf authkeysharesources /etc/ha.d/
[root@server1 heartbeat-3.0.4]# cd /etc/ha.d/
[root@server1 ha.d]# vim ha.cf
29 logfile /var/log/ha-log
34 logfacility local0
48 keepalive 2 //多長(zhǎng)時(shí)間檢測(cè)一次
56 deadtime 10 //連續(xù)多長(zhǎng)時(shí)間聯(lián)系不上后認(rèn)為對(duì)方掛掉(秒)
61 warntime 5 //連續(xù)多長(zhǎng)時(shí)間聯(lián)系不上開(kāi)始警告提示
71 initdead 100 //主要是給重啟后預(yù)留的一段忽略時(shí)間
76 udpport 694 //UDP端口
121 ucast eth0 192.168.200.102 //填寫(xiě)對(duì)方 IP (主從的差異點(diǎn))
157 auto_failback on //節(jié)點(diǎn)修復(fù)后是否切換回來(lái)
211 node server1 //節(jié)點(diǎn)名稱(chēng)
212 node server2 //節(jié)點(diǎn)名稱(chēng)
253 respawn hacluster /usr/lib64/heartbeat/ipfail //控制 IP切換的程序
[root@server1 ha.d]# vim haresources
server1 IPaddr::192.168.200.254/24/eth0:0 drbddisk::r0
Filesystem::/dev/drbd0::/mysqldata::ext4 mysqld //注意是一行內(nèi)容
[root@server1 ha.d]# ln -s /etc/init.d/mysqld /etc/ha.d/resource.d/mysqld
server1IPaddr::192.168.200.254/24/eth0 #主機(jī)名,后跟虛擬IP地址、接口
drbddisk::r0 #管理drbd資源
Filesystem::/dev/drbd0::/mysqldata::ext4mysqld #文件系統(tǒng),目錄及格式,后跟nfs資源腳本
[root@server1 ha.d]# vim authkeys
23 auth 1
24 1 crc
[root@server1 ha.d]# chmod 600 authkeys
主從節(jié)點(diǎn)啟動(dòng)heartbeat
[root@server1 ha.d]# service heartbeat start
查看主節(jié)點(diǎn)VIP 是否存在
[root@server1 ha.d]# ip a // 需要等待 10 秒
inet 192.168.200.254/24 brd 192.168.200.255 scopeglobal secondary eth0:0
驗(yàn)證:先停掉server1上的heartbeat服務(wù),查看 VIP是否能轉(zhuǎn)移
此時(shí) server2 上的mysql服務(wù)是關(guān)閉的
server1
[root@server2 ha.d]# mysqladmin -uroot ping //備節(jié)點(diǎn)操作
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server throughsocket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket:'/var/lib/mysql/mysql.sock' exists!
server2
[root@server1 ha.d]# service heartbeat stop //主節(jié)點(diǎn)操作
Stopping High-Availability services: Done.
[root@server2 ha.d]# ip a //備節(jié)點(diǎn)操作
inet 192.168.200.254/24 brd 192.168.0.255 scope globalsecondary eth0:0
[root@server2 ha.d]# mysqladmin -uroot ping //備節(jié)點(diǎn)操作,發(fā)現(xiàn) mysql隨之啟動(dòng)
Mysqld is alive
此時(shí)還不具備停掉mysql后VIP漂移的功能,需要添加腳本實(shí)現(xiàn),當(dāng)發(fā)現(xiàn)mysql 服務(wù)出現(xiàn)掛掉,就停掉heartbeat服務(wù),實(shí)現(xiàn) VIP轉(zhuǎn)移(雙方都要在后臺(tái)執(zhí)行)
[root@server1 ~]# vim chk_mysql.sh
#!/bin/bash
mysql="/etc/init.d/mysqld"
mysqlpid=$(ps-C mysqld --no-header | wc -l)
whiletrue
do
if [$mysqlpid -eq 0 ];then
$mysqlstart
sleep 3
mysqlpid=$(ps-C mysqld --no-header | wc -l)
if [$mysqlpid -eq 0 ];then
/etc/init.d/heartbeatstop
echo"heartbeat stopped,please check your mysql !" | tee -a
/var/log/messages
fi
fi
done
[root@server1 ha.d]# bash chk_mysql.sh &
[root@server1 ha.d]# echo “bash chk_mysql.sh &”>> /etc/rc.local
[root@server1 ~]# crontab –e
*/10 * * * * ntpdate time.nist.gov
[root@server1~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to preventassorted security risks
symbolic-links=0
relay-log =relay-log-bin
server_id =1
relay-log-index= slave-relay-bin.index
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[root@server1 ~]# /etc/init.d/mysqld restart
停止 mysqld: [確定]
正在啟動(dòng) mysqld: [確定]
[root@server1 ~]# msyql
mysql> grant replication slave on *.* to'user'@'192.168.200.%' identified by '123456';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 187 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> change master to master_host='192.168.200.254',master_user='user',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=106;
mysql> flush privileges;
mysql> start slave;
mysql> show slave status \G
server1
mysql> create database abc;
slave
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| abc |
| b |
| mysql |
| test |
+--------------------+
5 rows in set (0.00 sec)
在主節(jié)點(diǎn)上操作
[root@localhost ~]# yum -y install keepalived
[root@localhost ~]# cd /etc/keepalived/
[root@localhost ~]# cp keepalived.confkeepalived.conf.bak
[root@localhost ~]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
stateMASTER
interface eth0
virtual_router_id 51
priority100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.100
}
}
virtual_server 192.168.200.100 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.200.103 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.104 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
備節(jié)點(diǎn)與主節(jié)點(diǎn)的操作一樣,只有配置文件有一些區(qū)別
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
stateBACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.100
}
}
virtual_server 192.168.200.100 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.200.103 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.104 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@slave1~]# vim /opt/lvs-dr
#!/bin/bash
VIP="192.168.200.100"
/sbin/ifconfigeth0 192.168.200.103/24 up
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
[root@slave2~]# vim /opt/lvs-dr
#!/bin/bash
VIP="192.168.200.100"
/sbin/ifconfigeth0 192.168.200.104/24 up
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
添加執(zhí)行權(quán)限,執(zhí)行腳本
chmod +x /opt/lvs-dr
echo "/opt/lvs-dr" >> /etc/rc.local
/opt/lvs-dr
[root@slave1~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdiscnoqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet127.0.0.1/8 scope host lo
inet 192.168.200.100/32 brd192.168.200.100 scope global lo:0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu1500 qdisc pfifo_fast state UP qlen 1000
link/ether00:0c:29:3f:03:d5 brd ff:ff:ff:ff:ff:ff
inet192.168.200.103/24 brd 192.168.200.255 scope global eth0
[root@localhost keepalived]# /etc/init.d/keepalivedstart
正在啟動(dòng) keepalived: [確定]
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.200.100:3306 rr persistent 50
-> 192.168.200.103:3306 Route 1 0 0
-> 192.168.200.104:3306 Route 1 0 0
[root@localhost ~]#/etc/init.d/ipvsadm save
[root@localhost ~]#/etc/init.d/ipvsadm restart
[root@server1 ~]# service heartbeat stop
Stopping High-Availability services: Done.
mysql> show slave status\G
*************************** 1. row***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.200.253
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000023
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000008
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: 106
Relay_Log_Space: 552
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:
1 row in set (0.00 sec)
如果不同步,停一下同步,再重啟查看。
[root@localhost~]# watch ipvsadm -Lnc //實(shí)時(shí)查看遠(yuǎn)程連接信息
-c (--connection) 顯示LVS目前的連接信息
[root@localhostkeepalived]# mysql -umydb -h292.168.200.100 -p123456 -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| slave1 |
| test |
+--------------------+
查看主lvs信息,等第一次連接斷開(kāi)再測(cè)試。
[root@localhost keepalived]# mysql -umydb-h292.168.200.100 -p123456 -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| slave2 |
| test |
+--------------------+
看完mysql、heartbeat、drbd如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)高可用群集這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。
文章名稱(chēng):mysql、heartbeat、drbd如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)高可用群集
文章鏈接:http://www.rwnh.cn/article24/gsjhje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、云服務(wù)器、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)