通過KeepAlived搭建MySQL雙主模式的高可用集群系統(tǒng)_第1頁
通過KeepAlived搭建MySQL雙主模式的高可用集群系統(tǒng)_第2頁
通過KeepAlived搭建MySQL雙主模式的高可用集群系統(tǒng)_第3頁
通過KeepAlived搭建MySQL雙主模式的高可用集群系統(tǒng)_第4頁
通過KeepAlived搭建MySQL雙主模式的高可用集群系統(tǒng)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

2、QL Server只能進(jìn)行讀操作,這樣可保證數(shù)據(jù)的一致性。整個(gè)架構(gòu)下圖所示。二、MySQL主主互備模式配置環(huán)境第一步要做的工作是在這兩天機(jī)器上都安裝mysql,在做主從復(fù)制的時(shí)候mysql的版本盡量保持一致。即使不一樣一定要以主服務(wù)的版本為最高的版本,從服務(wù)器的版本不能高于主服務(wù)器的版本。1、Mysql的安裝與配置Mysql5.6版本之后,編譯mysql方式變?yōu)閏make安裝cmake:#yum install cmake#cd mysql-5.6.17#cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/loc

3、al/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT

4、_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_cimake && make install如果沒有就創(chuàng)建用戶就創(chuàng)建如下用戶:#groupadd mysql#useradd -g mysql mysql修改/usr/local/mysql權(quán)限:#chown -R mysql:mysql /usr/local/mysql#cd /usr/local/mysql進(jìn)入安裝路徑,執(zhí)行初始化配置腳本,創(chuàng)建系統(tǒng)自帶的數(shù)據(jù)庫和表:#scripts/mysql_install_db-basedir=/usr/local/mysql-datadir=

5、/usr/local/mysql/data -user=mysql2、啟動(dòng)MySQL添加服務(wù),拷貝服務(wù)腳本到init.d目錄,并設(shè)置開機(jī)啟動(dòng)#cd /usr/local/mysql#cp support-files/mysql.server /etc/init.d/mysql#chkconfig mysql on#service mysql start -啟動(dòng)MySQL三、配置mysql主從服務(wù)器1、修改MySQL配置文件在默認(rèn)情況下MySQL的配置文件是/etc/f。但我們需要修改的路徑是自己安裝MySQL的路徑。首先修改DB1主機(jī)的配置文件,在/usr/local/mysql/f文件中的“

6、mysqld”段添加如下內(nèi)容:server-id = 1log-bin=mysql-binrelay-log = mysql-relay-binreplicate-wild-ignore-table=mysql.%replicate-wild-ignore-table=test.%replicate-wild-ignore-table=information_schema.%然后修改DB2主機(jī)的配置文件,在/usr/local/mysql/f文件中的“mysqld”段添加如下內(nèi)容:server-id = 2log-bin=mysql-bin(如果只有一主一從,在從庫上是不需要開啟binlog日

7、志的,后面是為了演示互為主從這才加上去的)relay-log = mysql-relay-binreplicate-wild-ignore-table=mysql.%replicate-wild-ignore-table=test.%replicate-wild-ignore-table=information_schema.%其中,server-id是節(jié)點(diǎn)標(biāo)識,主、從節(jié)點(diǎn)不能相同,必須全局唯一。log-bin表示開啟MySQL的binlog日志功能?!癿ysql-bin”表示日志文件的命名格式,會(huì)生成文件名為mysql-bin.000001、mysql-bin.000002等的日志文件。re

8、lay-log用來定義relay-log日志文件的命名格式。replicate-wild-ignore-table是個(gè)復(fù)制過濾選項(xiàng),可以過濾掉不需要復(fù)制的數(shù)據(jù)庫或表,例如“mysql.%“表示不復(fù)制mysql庫下的所有對象,其他依此類推。與此對應(yīng)的是replicate_wild_do_table選項(xiàng),用來指定需要復(fù)制的數(shù)據(jù)庫或表。2、手動(dòng)同步數(shù)據(jù)庫如果DB1上已經(jīng)有mysql數(shù)據(jù),那么在執(zhí)行主主互備之前,需要將DB1和DB2上兩個(gè)mysql的數(shù)據(jù)保持同步,首先在DB1上備份mysql數(shù)據(jù),執(zhí)行如下SQL語句:mysql>FLUSH TABLES WITH READ LOCK; (解鎖:u

9、nlock tables;)Query OK, 0 rows affected (0.00 sec)在不退出終端的情況下,再開啟一個(gè)終端直接打包壓縮數(shù)據(jù)文件或使用mysqldump工具來導(dǎo)出數(shù)據(jù)。這里通過打包mysql文件來完成數(shù)據(jù)的備份,操作過程如下:rootDB1 # cd /usr/localrootDB1 lib# tar zcvf mysql.tar.gz mysqlrootDB1 lib# scp mysql.tar.gz DB2:/usr/local/將數(shù)據(jù)傳輸?shù)紻B2后,依次重啟DB1和DB2上面的mysql。3、創(chuàng)建復(fù)制用戶并授權(quán)首先在DB1的mysql庫中創(chuàng)建復(fù)制用戶,操作

10、過程如圖所示。mysql> grant replication slave on *.* to 'repl_user''192.168.1.89' identified by 'repl_passwd'然后在DB2的mysql庫中將DB1設(shè)為自己的主服務(wù)器,操作如下所示。Change master to master_host='192.168.1.85', master_user='repl_user',master_password='repl_passwd',master_log_fil

11、e='mysql-bin.000001',master_log_pos=431;這里需要注意master_log_file和master_log_pos兩個(gè)選項(xiàng),這兩個(gè)選項(xiàng)的值剛好是在DB1上通過SQL語句“show master status”查詢到的結(jié)果。接著就可以在DB2上啟動(dòng)slave服務(wù)了,可執(zhí)行如下SQL命令:mysql> start slave;下面查看DB2上slave的運(yùn)行狀態(tài),如圖所示。通過查看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)

12、行的主從復(fù)制線程,正常情況下這兩個(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è)是之前在f中添加過的,通過此選項(xiàng)的輸出值可以知道過濾掉了哪些數(shù)據(jù)庫。到這里位置,從DB1到DB2的mysql主從復(fù)制已經(jīng)完成了。接下來開始配置從DB2到DB1的mysq

13、l主從復(fù)制,這個(gè)配置過程與上面的完全一樣,首先在DB2的mysql庫中創(chuàng)建復(fù)制用戶,操作如圖grant replication slave on *.* to 'repl_user''192.168.1.85' identified by 'repl_passwd'然后在DB1的mysql庫中將DB2設(shè)為自己的主服務(wù)器,操作如下change master to master_host='192.168.1.89',master_user='repl_user',master_password='repl_p

14、asswd',master_log_file='mysql-bin.000001',master_log_pos=862;接著就可以在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ù)制已經(jīng)配置完畢了。四、配置KeepAlived實(shí)現(xiàn)MySQL雙主高可用在進(jìn)行高可用配置之前,首先需要在DB1和DB2服務(wù)器上安裝Keep

15、Alived軟件。KeepAlived的安裝和配置過程如下:rootkeepalived-master app#tar zxvf keepalived-1.2.12.tar.gzrootkeepalived-master app#cd keepalived-1.2.12rootkeepalived-master keepalived-1.2.12#./configure -sysconf=/etc > -with-kernel-dir=/usr/src/kernels/2.6.32-431.5.1.el6.x86_64rootkeepalived-master keepalived-1.

16、2.12#makerootkeepalived-master keepalived-1.2.12#make installrootkeepalived-master keepalived-1.2.12#ln -s /usr/local/sbin/keepalived /sbin/rootkeepalived-master keepalived-1.2.12# chkconfig -add keepalivedrootkeepalived-master keepalived-1.2.12# chkconfig -level 35 keepalived on安裝完成后,進(jìn)入keepalived的配

17、置過程。下面是DB1服務(wù)器上/etc/keepalived/keepalived.conf文件的內(nèi)容。global_defs notification_email acassenfirewall.loc failoverfirewall.loc sysadminfirewall.loc notification_email_from Alexandre.Cassenfirewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVELvrrp_script check_mysqld script &q

18、uot;/etc/keepalived/mysqlcheck/check_slave.pl 127.0.0.1" #檢測mysql復(fù)制狀態(tài)的腳本 interval 2 vrrp_instance VI_1 state BACKUP #在DB1和DB2上均配置為BACKUP interface eth0 virtual_router_id 80 priority 100 advert_int 2 nopreempt #不搶占模式,只在優(yōu)先級高的機(jī)器上設(shè)置即可,優(yōu)先級低的機(jī)器不設(shè)置 authentication #效驗(yàn)DB1和DB2需一致 auth_type PASS auth_pass

19、 qweasdzxc track_script check_mysqld virtual_ipaddress 192.168.1.84/24 dev eth0 #mysql的對外服務(wù)IP,即VIP 其中,/etc/keepalived/mysqlcheck/check_slave.pl文件的內(nèi)容為:#!/usr/bin/perl -wuse DBI;use DBD:mysql;# CONFIG VARIABLES$SBM = 120;$db = "mysql"$host = $ARGV0;$port = 3306;$user = "root"$pw =

20、"xxxxxx"# SQL query$query = "show slave status"$dbh = DBI->connect("DBI:mysql:$db:$host:$port", $user, $pw, RaiseError => 0,PrintError => 0 );if (!defined($dbh) exit 1;$sqlQuery = $dbh->prepare($query);$sqlQuery->execute;$Slave_IO_Running = ""$S

21、lave_SQL_Running = ""$Seconds_Behind_Master = ""while (my $ref = $sqlQuery->fetchrow_hashref() $Slave_IO_Running = $ref->'Slave_IO_Running' $Slave_SQL_Running = $ref->'Slave_SQL_Running' $Seconds_Behind_Master = $ref->'Seconds_Behind_Master'$sqlQuery->finish;$dbh->disconnect();if ( $Slave_IO_Running eq "No" | $Slave_SQL_Running eq "No" ) exit 1; else if ( $Seconds_Behind_Master > $SBM ) exit 1; else exit 0; 這是個(gè)用perl寫的檢測mysql復(fù)制狀態(tài)的腳本,ixdba是本例中的一個(gè)數(shù)據(jù)庫名,讀者只需修改文件中數(shù)據(jù)庫名、數(shù)據(jù)庫的端口、用戶名和密碼即可直接使用,但在使用前要保證此腳本有可執(zhí)行權(quán)限。接著將keepal

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論