溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql、heartbeat、drbd如何實現(xiàn)數(shù)據(jù)庫高可用群集

發(fā)布時間:2020-05-22 16:06:32 來源:網(wǎng)絡(luò) 閱讀:345 作者:三月 欄目:數(shù)據(jù)庫

下面一起來了解下mysql、heartbeat、drbd如何實現(xiàn)數(shù)據(jù)庫高可用群集,相信大家看完肯定會受益匪淺,文字在精不在多,希望mysql、heartbeat、drbd如何實現(xiàn)數(shù)據(jù)庫高可用群集這篇短內(nèi)容是你想要的。

DRBD  概述

一、DRBD簡介

         DRBD 的全稱為:Distributed ReplicatedBlock Device(DRBD)分布式塊設(shè)備復(fù)制,DRBD

是由內(nèi)核模塊和相關(guān)腳本而組成,用來構(gòu)建數(shù)據(jù)的高可用性集群。其實現(xiàn)方式是通過網(wǎng)絡(luò)來鏡像整個磁盤設(shè)備(數(shù)據(jù))。你可以把它看作是一種基于網(wǎng)絡(luò)的 RAID1。它允許用戶在遠(yuǎn)程機器上建立一個本地塊設(shè)備的實時鏡像。

二、DRBD工作原理

         (DRBD Primary)負(fù)責(zé)接收數(shù)據(jù),把數(shù)據(jù)寫到本地磁盤并發(fā)送給另一臺主機(DRBD

Secondary)。另一個主機再將數(shù)據(jù)存儲到自己的磁盤中。目前,DRBD每次只允許對一個節(jié)

點進行讀寫訪問,但這對于通常的故障切換高可用集群來說已經(jīng)足夠用了。有可能以后的版本支持兩個節(jié)點進行讀寫存取。

mysql、heartbeat、drbd如何實現(xiàn)數(shù)據(jù)庫高可用群集

三、DRBD與HA的關(guān)系

         一個 DRBD 系統(tǒng)由兩個節(jié)點構(gòu)成,與HA 集群類似,也有主節(jié)點和備用節(jié)點之分,在帶有主要設(shè)備的節(jié)點上,應(yīng)用程序和操作系統(tǒng)可以運行和訪問 DRBD 設(shè)備(/dev/drbd*)。在主節(jié)點寫入的數(shù)據(jù)通過 DRBD 設(shè)備存儲到主節(jié)點的磁盤設(shè)備中,同時,這個數(shù)據(jù)也會自動發(fā)送到備用節(jié)點對應(yīng)的 DRBD 設(shè)備,最終寫入備用節(jié)點的磁盤設(shè)備上,在備用節(jié)點上,DRBD 只是將數(shù)據(jù)從 DRBD 設(shè)備寫入到備用節(jié)點的磁盤中。現(xiàn)在大部分的高可用性集群都會使用共享存儲,而 DRBD 也可以作為一個共享存儲設(shè)備,使用 DRBD 不需要太多的硬件的投資。因為它在TCP/IP 網(wǎng)絡(luò)中運行,所以,利用DRBD 作為共享存儲設(shè)備,要節(jié)約很多成本,因為價格要比專用的存儲網(wǎng)絡(luò)便宜很多;其性能與穩(wěn)定性方面也不錯。

四、DRBD復(fù)制模式

協(xié)議 A :

         異步復(fù)制協(xié)議。一旦本地磁盤寫入已經(jīng)完成,數(shù)據(jù)包已在發(fā)送隊列中,則寫被認(rèn)為是完成的。在一個節(jié)點發(fā)生故障時,可能發(fā)生數(shù)據(jù)丟失,因為被寫入到遠(yuǎn)程節(jié)點上的數(shù)據(jù)可能仍在發(fā)送隊列。盡管,在故障轉(zhuǎn)移節(jié)點上的數(shù)據(jù)是一致的,但沒有及時更新。這通常是用于地理上分開的節(jié)點。

協(xié)議 B :

         內(nèi)存同步(半同步)復(fù)制協(xié)議。一旦本地磁盤寫入已完成且復(fù)制數(shù)據(jù)包達到了遠(yuǎn)程節(jié)點則認(rèn)為寫在主節(jié)點上被認(rèn)為是完成的。數(shù)據(jù)丟失可能發(fā)生在參加的兩個節(jié)點同時故障的情況下,因為在傳輸中的數(shù)據(jù)可能不會被提交到磁盤。

協(xié)議 C :

         同步復(fù)制協(xié)議。只有在本地和遠(yuǎn)程節(jié)點的磁盤已經(jīng)確認(rèn)了寫操作完成,寫才被認(rèn)為完成。沒有任何數(shù)據(jù)丟失,所以這是一個群集節(jié)點的流行模式,但 I / O 吞吐量依賴于網(wǎng)絡(luò)帶寬一般使用協(xié)議 C,但選擇 C 協(xié)議將影響流量,從而影響網(wǎng)絡(luò)時延。為了數(shù)據(jù)可靠性,我們在生產(chǎn)環(huán)境使用時須慎重選項使用哪一種協(xié)議。

Heartbeat

一、heartbeat簡介

         Heartbeat 是 Linux-HA 工程的一個組件,自1999 年開始到現(xiàn)在,發(fā)布了眾多版本,是目前開源Linux-HA項目最成功的一個例子,在行業(yè)內(nèi)得到了廣泛的應(yīng)用,這里分析的是2007年1月18日發(fā)布的版本 2.0.8。

         隨著 Linux 在關(guān)鍵行業(yè)應(yīng)用的逐漸增多,它必將提供一些原來由 IBM 和 SUN 這樣的大型商業(yè)公司所提供的服務(wù),這些商業(yè)公司所提供的服務(wù)都有一個關(guān)鍵特性,就是高可用集群。

二、heartbeat  工作原理

         Heartbeat 最核心的包括兩個部分,心跳監(jiān)測部分和資源接管部分,心跳監(jiān)測可以通過

網(wǎng)絡(luò)鏈路和串口進行,而且支持冗余鏈路,它們之間相互發(fā)送報文來告訴對方自己當(dāng)前的狀態(tài),如果在指定的時間內(nèi)未收到對方發(fā)送的報文,那么就認(rèn)為對方失效,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務(wù)。

三、高可用集群

         高可用集群是指一組通過硬件和軟件連接起來的獨立計算機,它們在用戶面前表現(xiàn)為一個單一系統(tǒng),在這樣的一組計算機系統(tǒng)內(nèi)部的一個或者多個節(jié)點停止工作,服務(wù)會從故障節(jié)點切換到正常工作的節(jié)點上運行,不會引起服務(wù)中斷。從這個定義可以看出,集群必須檢測節(jié)點和服務(wù)何時失效,何時恢復(fù)為可用。這個任務(wù)通常由一組被稱為“心跳”的代碼完成。在 Linux-HA 里這個功能由一個叫做heartbeat 的程序完成。

環(huán)境描述:

操作系統(tǒng)

 IP地址

主機名

軟件包列表

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

配置過程:

mysql、heartbeat、drbd如何實現(xiàn)數(shù)據(jù)庫高可用群集

安裝前準(zhǔn)備配置:

所有主機需要添加一塊60G的SCSI接口硬盤

配置所有機器:

關(guān)閉防火墻和selinux機制

[root@localhost ~]# service iptables stop

[root@localhost ~]# setenforce 0

主從都要配置,分區(qū)不需要格式化

[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

從主機改為 server2

[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

Heartbeat安裝:

主從都需要安裝

把包上傳到/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

安裝配置 DRBD:

主從都需要安裝

[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


 

//此目錄下所有以.res    結(jié)尾的都為資源文件

 

include"drbd.d/global_common.conf";


include "drbd.d/*.res";                                     

配置global_common.conf文件(主從一致)

[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;                                                 // 是否對使用信息作統(tǒng)計, 默認(rèn)為 yes

}

common {

startup {

wfc-timeout 120;                                                  // 等待連接的超時時間

degr-wfc-timeout 120;

}

disk {

on-io-error detach;                                             //當(dāng)IO出現(xiàn)錯誤時執(zhí)行的動作

}

net {

protocol C;                                                             // 復(fù)制模式為第 3種

}

}

配置資源文件(主從一致)

[root@server1 drbd.d]# vim r0.res

resource r0 {                                                          //r0資源名稱

on server1 {

device /dev/drbd0;                                            // 邏輯設(shè)備路徑

disk /dev/sdb1;                                                   // 物理設(shè)備

address 192.168.200.101:7788;                      //主節(jié)點

meta-disk internal;

}

on server2 {

device /dev/drbd0;

disk /dev/sdb1;

address 192.168.200.102:7788;                       // 備節(jié)點

meta-disk internal;

}

}

 

[root@server1 drbd.d]# scp global_common.conf r0.res

192.168.200.102:/usr/local/drbd/etc/drbd.d

創(chuàng)建元數(shù)據(jù)(兩個節(jié)點上操作)

[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 ”時,出現(xiàn)以下錯誤信息。

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

解決辦法:初始化磁盤文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

啟動 DRBD(主從節(jié)點都要執(zhí)行)

[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ò)磁盤(主節(jié)點上執(zhí)行)

[root@server1 drbd.d]# drbdadm -- --overwrite-data-of-peerprimary r0

[root@server1 drbd.d]#watch -n 2  cat /proc/drbd                   //動態(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ù)同步測試(主節(jié)點上操作前 6 6  步驟,次節(jié)點上操作后三步驟)

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             // 建立測試文件

[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é)點上查看數(shù)據(jù)

file lost+found                                                                                 // 可以看到創(chuàng)建的文件

安裝 MySQL:

更改Mysql數(shù)據(jù)庫的存儲位置為共享目錄(主從都要執(zhí)行)

[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ù)據(jù)目錄和其屬主和權(quán)限,有時會因為此操作導(dǎo)致數(shù)據(jù)庫無法啟動,

解決方法:

一,查看你的 selinux 是否處于打開狀態(tài),將其關(guān)閉。

二,/etc/apparmor.d/usr.sbin.mysqld文件中,有兩行內(nèi)容規(guī)定了 mysql 使用數(shù)據(jù)文件的路徑權(quán)限,改掉即可,重啟/etc/init.d/apparmor restart。

進行數(shù)據(jù)庫測試

因為此前的操作,現(xiàn)在把server2 節(jié)點降為次

[root@server2 ~]# umount /dev/drbd0

[root@server2 ~]# drbdadm secondary r0

 

把server1 升為主節(jié)點

[root@server1 ~]# drbdadm primary r0

[root@server1 ~]# mount /dev/drbd0 /mysqldata

[root@server1 ~]# /etc/init.d/mysqld start

 

在 server1上創(chuàng)建一個庫 crushlinux,然后主降為備,把server2 升為主查看庫有沒有同步。

[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

配置 heartbeat :

配置ha.cf文件(主從大體一致)

[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                                                                          //多長時間檢測一次

56 deadtime 10                                                                       //連續(xù)多長時間聯(lián)系不上后認(rèn)為對方掛掉(秒)

61 warntime 5                                                                          //連續(xù)多長時間聯(lián)系不上開始警告提示

71 initdead 100                                                                       //主要是給重啟后預(yù)留的一段忽略時間

76 udpport 694                                                                       //UDP端口

121 ucast eth0 192.168.200.102                                        //填寫對方 IP (主從的差異點)

157 auto_failback on                                                            //節(jié)點修復(fù)后是否切換回來

211 node server1                                                                   //節(jié)點名稱

212 node server2                                                                   //節(jié)點名稱

253 respawn hacluster /usr/lib64/heartbeat/ipfail   //控制 IP切換的程序

配置hasresources件(主從一致)

[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      #主機名,后跟虛擬IP地址、接口

drbddisk::r0                                                                #管理drbd資源

Filesystem::/dev/drbd0::/mysqldata::ext4mysqld   #文件系統(tǒng),目錄及格式,后跟nfs資源腳本

配置authkeys文件(主從一致)

[root@server1 ha.d]# vim authkeys

23 auth 1

24 1 crc

[root@server1 ha.d]# chmod 600 authkeys

HA驗證:

主從節(jié)點啟動heartbeat

[root@server1 ha.d]# service heartbeat start

 

查看主節(jié)點VIP  是否存在

[root@server1 ha.d]# ip a  // 需要等待 10  秒

inet 192.168.200.254/24 brd 192.168.200.255 scopeglobal secondary eth0:0

驗證:先停掉server1上的heartbeat服務(wù),查看 VIP是否能轉(zhuǎn)移

此時 server2 上的mysql服務(wù)是關(guān)閉的

server1

[root@server2 ha.d]# mysqladmin -uroot ping                            //備節(jié)點操作

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é)點操作

Stopping High-Availability services: Done.

[root@server2 ha.d]# ip a                                                           //備節(jié)點操作

inet 192.168.200.254/24 brd 192.168.0.255 scope globalsecondary eth0:0

[root@server2 ha.d]# mysqladmin -uroot ping                   //備節(jié)點操作,發(fā)現(xiàn) mysql隨之啟動

Mysqld is alive

此時還不具備停掉mysql后VIP漂移的功能,需要添加腳本實現(xiàn),當(dāng)發(fā)現(xiàn)mysql 服務(wù)出現(xiàn)掛掉,就停掉heartbeat服務(wù),實現(xiàn) VIP轉(zhuǎn)移(雙方都要在后臺執(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

配置主從復(fù)制

保持時間同步(主從都要配)

[root@server1 ~]# crontab –e

*/10 * * * * ntpdate time.nist.gov

 

修改四臺數(shù)據(jù)庫主機的配置文件(注意server_id不要一樣)開啟binlog日志

[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

重啟服務(wù)

[root@server1 ~]# /etc/init.d/mysqld restart

停止 mysqld:                                              [確定]

正在啟動 mysqld:                                          [確定]

在serve1上授權(quán),允許從云服務(wù)器同步,查看主云服務(wù)器的binlog

[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)

從云服務(wù)器同步server1,查看從云服務(wù)器狀態(tài)。

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

在帶有VIP的主數(shù)據(jù)庫創(chuàng)建庫,驗證從云服務(wù)器是否同步

server1

mysql> create database abc;

 

slave

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| abc                |

| b                 |

| mysql             |

| test              |

+--------------------+

5 rows in set (0.00 sec)

配置LVS+keepalived實現(xiàn)負(fù)載

安裝keepalived服務(wù),并配置VIP和節(jié)點健康檢查

在主節(jié)點上操作

[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é)點與主節(jié)點的操作一樣,只有配置文件有一些區(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

        }

}

}

編寫腳本,配置從數(shù)據(jù)庫(主從都要做)

[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

啟動keepalived

[root@localhost keepalived]# /etc/init.d/keepalivedstart

正在啟動 keepalived:                                      [確定]

安裝ipvsadm用于查看節(jié)點記錄(主從節(jié)點都要配置)

[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

驗證

驗證主主切換是否同步從數(shù)據(jù)庫

server1上關(guān)閉heartbeat

[root@server1 ~]# service heartbeat stop

Stopping High-Availability services: Done.

slave上查看同步信息

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)

如果不同步,停一下同步,再重啟查看。

驗證從數(shù)據(jù)庫是否輪詢

在主lvs上查看連接信息

 [root@localhost~]# watch ipvsadm -Lnc           //實時查看遠(yuǎn)程連接信息

-c (--connection) 顯示LVS目前的連接信息

在其他主機通過VIP進行連接測試

 [root@localhostkeepalived]# mysql -umydb -h292.168.200.100 -p123456 -e 'show databases;'

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql             |

| slave1             |

| test              |

+--------------------+

查看主lvs信息,等第一次連接斷開再測試。

[root@localhost keepalived]# mysql -umydb-h292.168.200.100 -p123456 -e 'show databases;'

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql             |

| slave2             |

| test              |

+--------------------+

 看完mysql、heartbeat、drbd如何實現(xiàn)數(shù)據(jù)庫高可用群集這篇文章后,很多讀者朋友肯定會想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI