91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

mysql、heartbeat、drbd如何實現數據庫高可用群集

發布時間:2020-05-22 16:06:32 來源:網絡 閱讀:346 作者:三月 欄目:數據庫

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

DRBD  概述

一、DRBD簡介

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

是由內核模塊和相關腳本而組成,用來構建數據的高可用性集群。其實現方式是通過網絡來鏡像整個磁盤設備(數據)。你可以把它看作是一種基于網絡的 RAID1。它允許用戶在遠程機器上建立一個本地塊設備的實時鏡像。

二、DRBD工作原理

         (DRBD Primary)負責接收數據,把數據寫到本地磁盤并發送給另一臺主機(DRBD

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

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

mysql、heartbeat、drbd如何實現數據庫高可用群集

三、DRBD與HA的關系

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

四、DRBD復制模式

協議 A :

         異步復制協議。一旦本地磁盤寫入已經完成,數據包已在發送隊列中,則寫被認為是完成的。在一個節點發生故障時,可能發生數據丟失,因為被寫入到遠程節點上的數據可能仍在發送隊列。盡管,在故障轉移節點上的數據是一致的,但沒有及時更新。這通常是用于地理上分開的節點。

協議 B :

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

協議 C :

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

Heartbeat

一、heartbeat簡介

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

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

二、heartbeat  工作原理

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

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

三、高可用集群

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

環境描述:

操作系統

 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如何實現數據庫高可用群集

安裝前準備配置:

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

配置所有機器:

關閉防火墻和selinux機制

[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

從主機改為 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    結尾的都為資源文件

 

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;                                                 // 是否對使用信息作統計, 默認為 yes

}

common {

startup {

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

degr-wfc-timeout 120;

}

disk {

on-io-error detach;                                             //當IO出現錯誤時執行的動作

}

net {

protocol C;                                                             // 復制模式為第 3種

}

}

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

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

resource r0 {                                                          //r0資源名稱

on server1 {

device /dev/drbd0;                                            // 邏輯設備路徑

disk /dev/sdb1;                                                   // 物理設備

address 192.168.200.101:7788;                      //主節點

meta-disk internal;

}

on server2 {

device /dev/drbd0;

disk /dev/sdb1;

address 192.168.200.102:7788;                       // 備節點

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.        //當輸出成功信息后可 Ctrl+C結束

 

注意:

當執行命令”drbdadm create-md r0 ”時,出現以下錯誤信息。

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(主從節點都要執行)

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

手動驗證主從切換:

初始化網絡磁盤(主節點上執行)

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

[root@server1 drbd.d]#watch -n 2  cat /proc/drbd                   //動態顯示同步內容

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/

 

數據同步測試(主節點上操作前 6 6  步驟,次節點上操作后三步驟)

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                                   // 在備節點上查看數據

file lost+found                                                                                 // 可以看到創建的文件

安裝 MySQL:

更改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

注意:此時我們修改了數據目錄和其屬主和權限,有時會因為此操作導致數據庫無法啟動,

解決方法:

一,查看你的 selinux 是否處于打開狀態,將其關閉。

二,/etc/apparmor.d/usr.sbin.mysqld文件中,有兩行內容規定了 mysql 使用數據文件的路徑權限,改掉即可,重啟/etc/init.d/apparmor restart。

進行數據庫測試

因為此前的操作,現在把server2 節點降為次

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

[root@server2 ~]# drbdadm secondary r0

 

把server1 升為主節點

[root@server1 ~]# drbdadm primary r0

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

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

 

在 server1上創建一個庫 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                                                                       //連續多長時間聯系不上后認為對方掛掉(秒)

61 warntime 5                                                                          //連續多長時間聯系不上開始警告提示

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

76 udpport 694                                                                       //UDP端口

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

157 auto_failback on                                                            //節點修復后是否切換回來

211 node server1                                                                   //節點名稱

212 node server2                                                                   //節點名稱

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               //注意是一行內容

[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   #文件系統,目錄及格式,后跟nfs資源腳本

配置authkeys文件(主從一致)

[root@server1 ha.d]# vim authkeys

23 auth 1

24 1 crc

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

HA驗證:

主從節點啟動heartbeat

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

 

查看主節點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服務,查看 VIP是否能轉移

此時 server2 上的mysql服務是關閉的

server1

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

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                      //主節點操作

Stopping High-Availability services: Done.

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

inet 192.168.200.254/24 brd 192.168.0.255 scope globalsecondary eth0:0

[root@server2 ha.d]# mysqladmin -uroot ping                   //備節點操作,發現 mysql隨之啟動

Mysqld is alive

此時還不具備停掉mysql后VIP漂移的功能,需要添加腳本實現,當發現mysql 服務出現掛掉,就停掉heartbeat服務,實現 VIP轉移(雙方都要在后臺執行)

[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

 

修改四臺數據庫主機的配置文件(注意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

重啟服務

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

停止 mysqld:                                              [確定]

正在啟動 mysqld:                                          [確定]

在serve1上授權,允許從云服務器同步,查看主云服務器的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)

從云服務器同步server1,查看從云服務器狀態。

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的主數據庫創建庫,驗證從云服務器是否同步

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實現負載

安裝keepalived服務,并配置VIP和節點健康檢查

在主節點上操作

[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

        }

}

}

 

備節點與主節點的操作一樣,只有配置文件有一些區別

! 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

 

添加執行權限,執行腳本

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用于查看節點記錄(主從節點都要配置)

[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

驗證

驗證主主切換是否同步從數據庫

server1上關閉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)

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

驗證從數據庫是否輪詢

在主lvs上查看連接信息

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

-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如何實現數據庫高可用群集這篇文章后,很多讀者朋友肯定會想要了解更多的相關內容,如需獲取更多的行業信息,可以關注我們的行業資訊欄目。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梅州市| 宝丰县| 拉萨市| 正安县| 昌宁县| 内乡县| 金乡县| 东安县| 弋阳县| 肇庆市| 广南县| 永济市| 平遥县| 登封市| 嘉荫县| 康马县| 大庆市| 岳池县| 台南市| 莱阳市| 德阳市| 剑川县| 调兵山市| 高州市| 昌宁县| 武功县| 工布江达县| 伽师县| 叙永县| 闽清县| 勃利县| 鹿泉市| 长武县| 固始县| 江阴市| 南昌市| 拜城县| 渝中区| 鄂托克旗| 渭源县| 资源县|