日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

mysql 集群操作系统_高性能MySQL集群详解(二)

發(fā)布時(shí)間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 集群操作系统_高性能MySQL集群详解(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.通過(guò)Keepalived搭建MySQL雙主模式的高可用集群系統(tǒng)

1.MySQL Replication介紹:

MySQL Replication是MySQL自身提供的一個(gè)主從復(fù)制功能,其實(shí)也就是一臺(tái)MySQL服務(wù)器(稱(chēng)為Slave)從另一臺(tái)MySQL服務(wù)器(稱(chēng)為Master)上復(fù)制日志,然后解析日志并應(yīng)用到自身的過(guò)程。MySQL Replication是單向、異步復(fù)制,基本復(fù)制過(guò)程為:Master服務(wù)器首先將更新寫(xiě)入二進(jìn)制日志文件,并維護(hù)文件的一個(gè)索引以跟蹤日志的循環(huán),這些日志文件可以發(fā)送到Slave服務(wù)器進(jìn)行更新。當(dāng)一臺(tái)Slave服務(wù)器連接Master服務(wù)器時(shí),它從Master服務(wù)器日志中讀取上一次成功更新的位置。然后Slave服務(wù)器開(kāi)始接收從上一次完成更新后發(fā)生的所有更新,所有更新完成,將等待主服務(wù)器通知新的更新。

MySQL Replication支持鏈?zhǔn)綇?fù)制,也就是說(shuō)Slave服務(wù)器下還可以再鏈接Slave服務(wù)器,同時(shí)Slave服務(wù)器也可以充當(dāng)Master服務(wù)器角色。這里需要注意的是,在MySQL主從復(fù)制中,所有表的更新必須在Master服務(wù)器上進(jìn)行,Slave服務(wù)器僅能提供查詢(xún)操作。

基于單向復(fù)制的MySQL Replication技術(shù)有如下優(yōu)點(diǎn):

□增加了MySQL應(yīng)用的健壯性,如果Master服務(wù)器出現(xiàn)問(wèn)題,可以隨時(shí)切換到Slave服務(wù)器,繼續(xù)提供服務(wù)。

■可以將MySQL讀、寫(xiě)操作分離,寫(xiě)操作只在Master服務(wù)器完成,讀操作可在多個(gè)Slave服務(wù)器上完成,由于Master服務(wù)器和Slave服務(wù)器是保持?jǐn)?shù)據(jù)同步的,因此不會(huì)對(duì)前端業(yè)務(wù)系統(tǒng)產(chǎn)生影響。同時(shí),通過(guò)讀、寫(xiě)的分離,可以大大降低MySQL的運(yùn)行負(fù)荷。

□在網(wǎng)絡(luò)環(huán)境較好,業(yè)務(wù)量不是很大的環(huán)境中,Slave服務(wù)器同步數(shù)據(jù)非???#xff0c;基本可以達(dá)到實(shí)時(shí)同步,并且,Slave服務(wù)器在同步過(guò)程中不會(huì)干擾Master服務(wù)器。

MySQL Replication支持多種類(lèi)型的復(fù)制方式,常見(jiàn)的有基于語(yǔ)句的復(fù)制、基于行的復(fù)制和混合類(lèi)型的復(fù)制。下面分別進(jìn)行介紹。

(1)基于語(yǔ)句的復(fù)制

MySQL默認(rèn)采用基于語(yǔ)句的復(fù)制,效率很高?;痉绞绞?#xff1a;在Master服務(wù)器上執(zhí)行的SQL語(yǔ)句,在Slave服務(wù)器上再次執(zhí)行同樣的語(yǔ)句。而一旦發(fā)現(xiàn)沒(méi)法精確復(fù)制時(shí),會(huì)自動(dòng)選擇基于行的復(fù)制。

(2)基于行的復(fù)制

基本方式為:把Master服務(wù)器上改變的內(nèi)容復(fù)制過(guò)去,而不是把SQL語(yǔ)句在從服務(wù)器上執(zhí)行一遍,從MySQL5.0開(kāi)始支持基于行的復(fù)制。

(3)混合類(lèi)型的復(fù)制

其實(shí)就是上面兩種類(lèi)型的組合,默認(rèn)采用基于語(yǔ)句的復(fù)制,如果發(fā)現(xiàn)基于語(yǔ)句的復(fù)制無(wú)法精確完成,就會(huì)采用基于行的復(fù)制。

2.MySQL Replication實(shí)現(xiàn)原理:

MySQL Replication是一個(gè)從Master復(fù)制到一臺(tái)或多臺(tái)Slave的異步過(guò)程,在Master與Slave之間實(shí)現(xiàn)整個(gè)復(fù)制過(guò)程主要由三個(gè)線(xiàn)程來(lái)完成,其中一個(gè)IO線(xiàn)程在Master端,另兩個(gè)線(xiàn)程(SQL線(xiàn)程和IO線(xiàn)程)在Slave端。

要實(shí)現(xiàn)MySQL Replication,首先在Master服務(wù)器上打開(kāi)MySQL的Binary Log(產(chǎn)生二進(jìn)制日志文件)功能,因?yàn)檎麄€(gè)復(fù)制過(guò)程實(shí)際上就是Slave從Master端獲取該日志,然后在自身上將二進(jìn)制文件解析為SQL語(yǔ)句并完全順序地執(zhí)行SQL語(yǔ)句所記錄的各種操作。更詳細(xì)的過(guò)程如下。

1)首先Slave上的IO線(xiàn)程連接上Master,然后請(qǐng)求從指定日志文件的指定位置或者從最開(kāi)始的日志位置之后的日志內(nèi)容。

2)Master在接收到來(lái)自Slave的IO線(xiàn)程請(qǐng)求后,通過(guò)自身的IO線(xiàn)程,根據(jù)請(qǐng)求信息讀取指定日志位置之后的日志信息,并返回給Slave端的IO線(xiàn)程。返回信息中除了日志所包含的信息之外,還包括此次返回的信息在Master端對(duì)應(yīng)的Binary Log文件的名稱(chēng)以及在Binary Log中的位置。

3)Slave的IO線(xiàn)程接收到信息后,將獲取到的日志內(nèi)容依次寫(xiě)入Slave端的Relay Log文件(類(lèi)似于mysql-relay-bin.xxxxxx)的最后,并且將讀取到的Master端的Binary Log的文件名和位置記錄到一個(gè)名為master-info的文件中,以便在下一次讀取的時(shí)候能迅速定位開(kāi)始往后讀取日志信息的位置。

4)Slave的SQL線(xiàn)程在檢測(cè)到Relay Log文件中新增加了內(nèi)容后,會(huì)馬上解析該Relay Log文件中的內(nèi)容,將日志內(nèi)容解析為SQL語(yǔ)句,然后在自身執(zhí)行這些SQL,由于是在Master端和Slave端執(zhí)行了同樣的SQL操作,所以?xún)啥说臄?shù)據(jù)是完全一樣的。至此整個(gè)復(fù)制過(guò)程結(jié)束。

3.MySQL Replication常用架構(gòu)

MySQL Replication技術(shù)在實(shí)際應(yīng)用中有多種實(shí)現(xiàn)架構(gòu),常見(jiàn)的有:

☆一主一次,即一臺(tái)Master服務(wù)器和一臺(tái)Slave服務(wù)器。這是最常見(jiàn)的架構(gòu)。

★一主多從,即一臺(tái)Master服務(wù)器和兩臺(tái)或兩臺(tái)以上Slave服務(wù)器,經(jīng)常用在寫(xiě)操作不頻繁、查詢(xún)量比較大的業(yè)務(wù)環(huán)境中。

☆主主互備,又稱(chēng)雙主互備,即兩臺(tái)MySQL Server互相將對(duì)方作為自己的Master,自己又同時(shí)作為對(duì)方的Slave來(lái)進(jìn)行復(fù)制。主要用于對(duì)MySQL寫(xiě)操作要求比較高的環(huán)境中,避免了MySQL單點(diǎn)故障。

★雙主多從,其實(shí)就是雙主互備,然后再加上多臺(tái)Slave服務(wù)器。主要用于對(duì)MySQL寫(xiě)操作要求比較高,同時(shí)查詢(xún)量比較大的環(huán)境中。

其實(shí)可以根據(jù)具體的情況靈活地將Master/Slave結(jié)構(gòu)進(jìn)行變化組合,但萬(wàn)變不離其宗,在進(jìn)行MySQL Replication的各種部署之前,必須遵守的規(guī)則如下:

◇同一時(shí)刻只能有一臺(tái)Master服務(wù)器進(jìn)行寫(xiě)操作。

◆一臺(tái)Master服務(wù)器可以有多臺(tái)Slave服務(wù)器。

◇無(wú)論是Master服務(wù)器還是Slave服務(wù)器,都要確保各自的ServerID唯一,否則雙主互備就會(huì)出現(xiàn)問(wèn)題。

◆一臺(tái)Slave服務(wù)器可以將其從Master服務(wù)器獲得的更新信息傳遞給其他的Slave服務(wù)器。

4.MySQL主主互備模式架構(gòu)

企業(yè)級(jí)MySQL集群具備高可用、可擴(kuò)展、易管理、低成本的特點(diǎn)。下面將介紹企業(yè)環(huán)境中經(jīng)常應(yīng)用的一個(gè)解決方案,即MySQL的雙主互備架構(gòu),主要設(shè)計(jì)思路是通過(guò)MySQL Replication技術(shù)將兩臺(tái)MySQL Server互相將對(duì)方作為自己的Master,自己又同時(shí)作為對(duì)方的Slave來(lái)進(jìn)行復(fù)制。這樣就實(shí)現(xiàn)了高可用架構(gòu)中的數(shù)據(jù)同步功能,同時(shí),將采用Keepalived來(lái)實(shí)現(xiàn)MySQL的自動(dòng)failover。在這種架構(gòu)中,雖然兩臺(tái)MySQL Server互為主從,但同一時(shí)刻只能有一臺(tái)MySQL Server可讀寫(xiě),而另一臺(tái)MySQL Server只能進(jìn)行讀操作,這樣可保證數(shù)據(jù)的一致性。整個(gè)架構(gòu)如下圖:

5.MySQL主主互備模式配置

MySQL主從復(fù)制的配置還是比較簡(jiǎn)單的,僅僅需要修改MySQL配置文件即可,這里要配置的是主主互備模式,但配置過(guò)程和一主一從結(jié)構(gòu)是完全一樣的,配置環(huán)境如下:

主機(jī)名? ? ? 操作系統(tǒng)版本? ? ??MySQL版本? ? 主機(jī)IP? ? MySQL VIP

DB1(Master)??CentOS release 6.7? mysql-5.1.73? 10.0.0.35? 10.0.0.40

DB2(Slave)? ?CentOS release 6.7? mysql-5.1.73? 10.0.0.36

1.修改MySQL配置文件

在默認(rèn)情況下,MySQL的配置文件是/etc/my.cnf,首先修改DB1主機(jī)的配置文件,在/etc/my.cnf文件中的“[mysqld]”段添加如下內(nèi)容:

server-id=1

log-bin=mysql-bin

relay-log=mysql-relay-bin

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

然后修改DB2主機(jī)的配置文件,在/etc/my.cnf文件中的“[mysqld]”段添加如下內(nèi)容:

server-id=2

log-bin=mysql-bin

relay-log=mysql-relay-bin

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

其中,server-id是節(jié)點(diǎn)標(biāo)識(shí),主、從節(jié)點(diǎn)不能相同,必須全局唯一。log-bin表示開(kāi)啟MySQL的binlog日志功能。“mysql-bin”表示日志文件的命名格式,會(huì)生成文件名為mysql-bin.000001、mysql-bin.000002等的日志文件。relay-log用來(lái)定義relay-log日志文件的命名格式。replicate-wild-ignore-table是個(gè)復(fù)制過(guò)濾選項(xiàng),可以過(guò)濾不需要復(fù)制的數(shù)據(jù)庫(kù)或表,例如“mysql.%”表示不復(fù)制MySQL庫(kù)下的所有對(duì)象,其他以此類(lèi)推。與此對(duì)應(yīng)的是replicate-wild-do-table選項(xiàng),用來(lái)指定需要復(fù)制的數(shù)據(jù)庫(kù)或表。

這里需要注意的是,不要在主庫(kù)上使用binlog-do-db或binlog-ignore-db選項(xiàng),也不要在從庫(kù)上使用replicate-do-db或replicate-ignore-db選項(xiàng),因?yàn)檫@樣可能產(chǎn)生跨庫(kù)更新失敗的問(wèn)題。推薦在從庫(kù)使用replicate-wild-do-table和replicate-wild-ignore-table兩個(gè)選項(xiàng)來(lái)解決復(fù)制過(guò)濾問(wèn)題。

2.手動(dòng)同步數(shù)據(jù)庫(kù)

如果DB1上已經(jīng)有MySQL數(shù)據(jù),那么在執(zhí)行主主互備之前,需要將DB1和DB2上兩個(gè)MySQL的數(shù)據(jù)保持同步,首先在DB1上備份MySQL數(shù)據(jù),執(zhí)行如下SQL語(yǔ)句:

mysql> FLUSH TABLES WITH READ LOCK;

Query OK, 0 rows affected (0.01 sec)

不要退出這個(gè)終端,否則這個(gè)鎖就失效了。在不退出終端的情況下,再開(kāi)啟一個(gè)終端直接打包壓縮數(shù)據(jù)文件或使用mysqldump工具導(dǎo)出數(shù)據(jù)。這里通過(guò)打包mysql文件來(lái)完成數(shù)據(jù)的備份,操作過(guò)程如下:

[root@db1 ~]# cd /var/lib/

[root@db1 ~]# tar zcvf mysql.tar.gz mysql

[root@db1 ~]# scp mysql.tar.gz db2:/var/lib/

將數(shù)據(jù)傳輸?shù)紻B2后,依次重啟DB1和DB2上面的MySQL。

3.創(chuàng)建復(fù)制用戶(hù)并授權(quán)

首先在DB1的MySQL庫(kù)中創(chuàng)建復(fù)制用戶(hù),操作過(guò)程如下:

mysql> grant replication slave on *.* to 'repl_user'@'10.0.0.36' identified by 'repl_passwd';

Query OK, 0 rows affected (0.01 sec)

mysql> show master status;

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

| File? ? ? ? ? ? ?| Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000001 |? ? ?1698 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |

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

然后在DB2的MySQL庫(kù)中將DB1設(shè)為自己的主服務(wù)器,操作如下:

mysql> change master to master_host='10.0.0.35',master_user='repl_user',master_password='repl_passwd',master_log_file='mysql-bin.000001',master_log_pos=1698;

這里需要注意master_log_file和master_log_pos兩個(gè)選項(xiàng),這兩個(gè)選項(xiàng)的值剛好是在DB1上通過(guò)SQL語(yǔ)句“show master status”查詢(xún)到的結(jié)果。

接著就可以在DB2上啟動(dòng)slave服務(wù)了,可執(zhí)行如下SQL命令:

mysql> start slave;

查看DB2上slave的運(yùn)行狀態(tài):

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.0.0.35

Master_User: repl_user

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 1698

Relay_Log_File: mysql-relay-bin.000016

Relay_Log_Pos: 411

Relay_Master_Log_File: mysql-bin.000001

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: mysql.%,test.%,information_schema.%

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1698

Relay_Log_Space: 711

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)

通過(guò)查看slave的運(yùn)行狀態(tài)可以發(fā)現(xiàn),一切運(yùn)行正常,這里需要重點(diǎn)關(guān)注的是Slave_IO_Running和Slave_SQL_Running,這兩個(gè)就是在Slave節(jié)點(diǎn)上運(yùn)行的主從復(fù)制線(xiàn)程,正常情況下這兩個(gè)值都應(yīng)該為Yes。另外,還需要注意的是Slave_IO_State、Master_Host、Master_Log_File、Read_Master_Log_Pos、Relay_Log_File、Relay_Log_Pos和Relay_Master_Log_File幾個(gè)選項(xiàng),可以查看出MySQL復(fù)制的運(yùn)行原理及執(zhí)行規(guī)律。最后還有一個(gè)Replicate_Wild_Ignore_Table選項(xiàng),這個(gè)是之前在my.cnf中添加過(guò)的,通過(guò)此選項(xiàng)的輸出值可以知道過(guò)濾了哪些數(shù)據(jù)庫(kù)。

到這里,從DB1到DB2的MySQL主從復(fù)制已經(jīng)完成。接下來(lái)開(kāi)始配置從DB2到DB1的MySQL主從復(fù)制,這個(gè)配置過(guò)程與上面的過(guò)程完全一樣,首先在DB2的MySQL庫(kù)中創(chuàng)建復(fù)制用戶(hù),操作如下:

mysql>grant replication slave on *.* to 'repl_user'@'10.0.0.35' identified by 'repl_passwd';

mysql>show master status;

然后在DB1的MySQL庫(kù)中將DB2設(shè)為自己的主服務(wù)器,操作如下:

mysql>change master to master_host='10.0.0.36',master_user='repl_user',master_password='repl_passwd',master_log_file='mysql-bin.000001',master_log_pos=266;

最后,就可以在DB1上啟動(dòng)slave服務(wù)了,可以執(zhí)行如下SQL命令:

mysql>start slave;

查看DB1上slave的運(yùn)行狀態(tài),Slave_IO_Running和Slave_SQL_Running都是Yes狀態(tài),表明DB1上復(fù)制服務(wù)運(yùn)行正常。至此,MySQL雙主模式的主從復(fù)制配置完畢。

6.配置Keepakived實(shí)現(xiàn)MySQL雙主高可用

在進(jìn)行高可用配置之前,首先需要在DB1和DB2服務(wù)器上安裝Keepalived軟件。我這里是直接yum安裝,關(guān)于keepalived的安裝這里不再說(shuō)明,直接進(jìn)入Keepalived的配置過(guò)程。下面是DB1服務(wù)器上/etc/keepalived/keepalived.conf文件的內(nèi)容。

[root@db1 ~]# cat /etc/keepalived/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_script check_mysqld {

script "/etc/keepalived/mysqlcheck/slave.sh"? #檢測(cè)MySQL復(fù)制狀態(tài)的腳本

interval 2

weight 21

}

vrrp_instance HA_1 {

state BACKUP? ? ? ? ? ? #在DB1和DB2上均配置為BACKUP

interface eth0

virtual_router_id 80

priority 100

advert_int 2

nopreempt? ? ? ? ? ? ? #不搶占模式,只在優(yōu)先級(jí)高的機(jī)器上設(shè)置即可,優(yōu)先級(jí)低的機(jī)器可不設(shè)置

authentication {

auth_type PASS

auth_pass aaaavvv

}

track_script {

check_mysqld

}

virtual_ipaddress {

10.0.0.40/24 dev eth0? ? #MySQL的對(duì)外服務(wù)Ip,即VIP

}

}

其中,/etc/keepalived/mysqlcheck/slave.sh文件的內(nèi)容為:

[root@db1 mysqlcheck]# cat slave.sh

#!/bin/bash

#Date: 2017-07-16

#Mail: 1135757611@qq.com

#Function: 監(jiān)控mysql主從同步

#

. /etc/init.d/functions

Slave_IO=`/usr/bin/mysql -uroot -e "show slave status\G;" | grep -i " Slave_IO_R"|awk -F ": " '{print $2}'`

Slave_SQL=`/usr/bin/mysql -uroot -e "show slave status\G;" | grep -i "Slave_SQL_R"|awk -F ": " '{print $2}'`

if [[ $Slave_IO = 'Yes' &&? $Slave_SQL = 'Yes' ]]

then

action "Slave is Running" /bin/true

MYSQL_SLAVE_STATUS=0

else

action "Slave is not Running" /bin/false

MYSQL_SLAVE_STATUS=1

fi

exit $MYSQL_SLAVE_STATUS

使用前要保證此腳本有執(zhí)行權(quán)限。

接著將Keepalived.conf文件中priority值修改為90。由于配置的是不搶占模式,因此,還需要去掉nopreempt選項(xiàng)。

在完成所有配置后,分別在DB1和DB2上啟動(dòng)Keepalived服務(wù),在正常情況下VIP地址應(yīng)該運(yùn)行在DB1服務(wù)器上。

7.測(cè)試MySQL主從同步功能

為了驗(yàn)證MySQL的復(fù)制功能,可以編寫(xiě)一個(gè)簡(jiǎn)單的程序進(jìn)行測(cè)試,也可以通過(guò)遠(yuǎn)程客戶(hù)端登錄進(jìn)行測(cè)試。這里通過(guò)一個(gè)MySQL客戶(hù)端,然后利用MySQL的VIP地址登錄,看能否登錄,并在登錄后進(jìn)行讀、寫(xiě)操作,看看DB1和DB2之間能否實(shí)現(xiàn)數(shù)據(jù)同步。由于采用遠(yuǎn)程登錄測(cè)試,因此DB1和DB2兩臺(tái)MySQL服務(wù)器都要事先做好授權(quán),允許從遠(yuǎn)程登錄。

1.在遠(yuǎn)程客戶(hù)端通過(guò)VIP登錄測(cè)試

首先通過(guò)遠(yuǎn)程MySQL客戶(hù)端命令行登錄VIP為“10.0.0.40”的數(shù)據(jù)庫(kù),操作如下:

[root@zabbix ~]# mysql -u test -h 10.0.0.40 -pyan123

Welcome to the MySQL monitor.? Commands end with ; or \g.

Your MySQL connection id is 51298

Server version: 5.1.73-log Source distribution

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like "%hostname%";

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

| Variable_name | Value |

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

| hostname? ? ? | db1? ?|

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

1 row in set (0.00 sec)

mysql> show variables like "%server_id%";

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

| Variable_name | Value |

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

| server_id? ? ?| 1? ? ?|

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

1 row in set (0.01 sec)

從SQL輸出結(jié)果看,可以通過(guò)VIP登錄,并且登錄了DB1服務(wù)器。

2.數(shù)據(jù)復(fù)制功能測(cè)試

接著上面的SQL操作過(guò)程,通過(guò)遠(yuǎn)程的MySQL客戶(hù)端連接VIP,進(jìn)行讀、寫(xiě)操作測(cè)試,操作過(guò)程如下:

mysql> create database bbs;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

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

| Database? ? ? ? ? ?|

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

| information_schema |

| bbs? ? ? ? ? ? ? ? |

| blog? ? ? ? ? ? ? ?|

| mysql? ? ? ? ? ? ? |

| test? ? ? ? ? ? ? ?|

| wordpress? ? ? ? ? |

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

6 rows in set (0.00 sec)

mysql> use bbs;

Database changed

mysql> create table user (id int,email varchar(80),password varchar(40) not null);

Query OK, 0 rows affected (0.20 sec)

mysql> show tables;

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

| Tables_in_bbs |

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

| user? ? ? ? ? |

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

1 row in set (0.01 sec)

mysql> insert into user (id,email,password) values(1,"bbs@163.com","aa1234");

Query OK, 1 row affected (0.00 sec)

這個(gè)過(guò)程創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)bbs,然后在bbs庫(kù)中創(chuàng)建了一張表user。為了驗(yàn)證數(shù)據(jù)是否復(fù)制到DB2主機(jī)上,登錄DB2主機(jī)的MySQL命令行,查詢(xún)過(guò)程如下:

[root@db2 ~]# mysql

mysql> show databases;

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

| Database? ? ? ? ? ?|

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

| information_schema |

| bbs? ? ? ? ? ? ? ? |

| blog? ? ? ? ? ? ? ?|

| mysql? ? ? ? ? ? ? |

| wordpress? ? ? ? ? |

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

5 rows in set (0.00 sec)

mysql> use bbs;

Database changed

mysql> show tables;

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

| Tables_in_bbs |

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

| user? ? ? ? ? |

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

1 row in set (0.00 sec)

mysql> select * from user;

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

| id? ?| email? ? ? ?| password |

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

|? ? 1 | bbs@163.com | aa1234? ?|

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

1 row in set (0.00 sec)

從SQL輸出結(jié)果看,剛才創(chuàng)建的庫(kù)和表都已經(jīng)同步到了DB2服務(wù)器上。其實(shí)也可以直接登錄DB2服務(wù)器,然后執(zhí)行數(shù)據(jù)庫(kù)的讀、寫(xiě)操作,看數(shù)據(jù)能否迅速同步到DB1的MySQL數(shù)據(jù)庫(kù)中。

8.測(cè)試Keepalived實(shí)現(xiàn)MySQL故障轉(zhuǎn)移

為了測(cè)試Keepalived實(shí)現(xiàn)的故障轉(zhuǎn)移功能,需要模擬一些故障,比如,可以通過(guò)斷開(kāi)DB1主機(jī)的網(wǎng)絡(luò)、關(guān)閉DB1主機(jī)、關(guān)閉DB1上MySQL服務(wù)等各種操作實(shí)現(xiàn)。這里在DB1服務(wù)器上關(guān)閉MySQL的日志接收功能,以此來(lái)模擬DB1上MySQL的故障。由于在DB1和DB2服務(wù)器上都添加了監(jiān)控MySQL運(yùn)行狀態(tài)的腳本slave.sh,因此當(dāng)關(guān)閉DB1的MySQL日志接收功能后,Keepalived會(huì)立刻檢測(cè)到,接著執(zhí)行切換操作。

1.停止DB1服務(wù)器的日志接收功能

首先在遠(yuǎn)程MySQL客戶(hù)端以VIP地址登錄MySQL系統(tǒng),不用退出這個(gè)連接,然后在DB1服務(wù)器的MySQL命令行執(zhí)行如下操作:

[root@db1 ~]# mysql

mysql> stop slave;

2.在遠(yuǎn)程客戶(hù)端測(cè)試

繼續(xù)在剛才打開(kāi)的遠(yuǎn)程MySQL連接中執(zhí)行命令,操作如下:

mysql> select * from user;

ERROR 2013 (HY000): Lost connection to MySQL server during query

mysql> select * from user;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id:? ? 62855

Current database: bbs

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

| id? ?| email? ? ? ?| password |

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

|? ? 1 | bbs@163.com | aa1234? ?|

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

1 row in set (0.24 sec)

mysql> show variables like "%hostname%";

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

| Variable_name | Value |

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

| hostname? ? ? | db2? ?|

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

1 row in set (0.00 sec)

mysql> show variables like "%server_id%";

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

| Variable_name | Value |

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

| server_id? ? ?| 2? ? ?|

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

1 row in set (0.00 sec)

從這個(gè)操作過(guò)程可以看出,在Keepalived切換后,之前的session連接失效,所以第一查詢(xún)命令失敗。然后重新執(zhí)行查詢(xún)命令,MySQL會(huì)執(zhí)行重新連接,隨后輸出了查詢(xún)結(jié)果,從后面兩個(gè)SQL的查詢(xún)結(jié)果可知,MySQL服務(wù)已經(jīng)從DB1服務(wù)器切換到DB2服務(wù)器。Keepalived的切換過(guò)程非常迅速,整個(gè)過(guò)程大概持續(xù)1~3s,重新切換到新的服務(wù)器后,之前所有的MySQL連接失效,重新連接可以恢復(fù)正常。

接著,重新打開(kāi)DB1上MySQL的日志接收功能,可以發(fā)現(xiàn)Keepalived將不再執(zhí)行切換操作,因?yàn)樯厦鎸eepalived配置為不搶占模式,此時(shí),MySQL服務(wù)將一直在DB2服務(wù)器上運(yùn)行,直到DB2主機(jī)或服務(wù)出現(xiàn)故障才再次進(jìn)行切換操作。這樣做的原因是在數(shù)據(jù)庫(kù)環(huán)境下,每次切換的代價(jià)很大,因而關(guān)閉了Keepalived的主動(dòng)搶占模式。

總結(jié)

以上是生活随笔為你收集整理的mysql 集群操作系统_高性能MySQL集群详解(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。