内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

下面一起來(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  概述

一、DRBD簡(jiǎn)介

         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工作原理

         (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ě)存取。

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

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

         一個(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ò)。

四、DRBD復(fù)制模式

協(xié)議 A :

         異步復(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)。

協(xié)議 B :

         內(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)。

協(xié)議 C :

         同步復(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

一、heartbeat簡(jiǎn)介

         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  工作原理

         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 的程序完成。

環(huán)境描述:

操作系統(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

配置過(guò)程:

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

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

所有主機(jī)需要添加一塊60G的SCSI接口硬盤(pán)

配置所有機(jī)器:

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

[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

從主機(jī)改為 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;                                                 // 是否對(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

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

[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

啟動(dòng) DRBD(主從節(jié)點(diǎn)都要執(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 -

手動(dòng)驗(yàn)證主從切換:

初始化網(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:

更改Mysql數(shù)據(jù)庫(kù)的存儲(chǔ)位置為共享目錄(主從都要執(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í)我們修改了數(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。

進(jìn)行數(shù)據(jù)庫(kù)測(cè)試

因?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

配置 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                                                                          //多長(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切換的程序

配置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      #主機(jī)名,后跟虛擬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驗(yàn)證:

主從節(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

配置主從復(fù)制

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

[root@server1 ~]# crontab –e

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

 

修改四臺(tái)數(shù)據(jù)庫(kù)主機(jī)的配置文件(注意server_id不要一樣)開(kāi)啟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:                                              [確定]

正在啟動(dòng) 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ù)庫(kù)創(chuàng)建庫(kù),驗(yàn)證從云服務(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實(shí)現(xiàn)負(fù)載

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

在主節(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

        }

}

}

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

[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

啟動(dòng)keepalived

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

正在啟動(dòng) keepalived:                                      [確定]

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

[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

驗(yàn)證

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

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)

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

驗(yàn)證從數(shù)據(jù)庫(kù)是否輪詢(xún)

在主lvs上查看連接信息

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

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

在其他主機(jī)通過(guò)VIP進(jìn)行連接測(cè)試

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

成都網(wǎng)站建設(shè)
墨江| 萨嘎县| 东莞市| 夹江县| 托克逊县| 清苑县| 华阴市| 明光市| 万宁市| 曲阳县| 涟源市| 堆龙德庆县| 全椒县| 保靖县| 辉南县| 桦甸市| 南汇区| 左权县| 乌鲁木齐市| 长寿区| 永川市| 九龙城区| 察哈| 武隆县| 文成县| 华阴市| 钦州市| 新宾| 常熟市| 峨山| 乌恰县| 巴南区| 惠水县| 达拉特旗| 旅游| 子洲县| 寿光市| 治县。| 五华县| 新绛县| 镇沅|