1. 程式人生 > 實用技巧 >mysqld_multi+keepalived高可用實踐

mysqld_multi+keepalived高可用實踐

系統環境Centos6.3x64

拓撲如下

153944173.png

一、配置mysql(四臺都安裝)

1.安裝mysql

#./lnmp.shinstallmysql

mysql安裝目錄為/home/soft/mysql

mysql新增預設搜尋路徑

#exportPATH=$PATH:/home/soft/mysql/bin

#echoexportPATH=$PATH:/home/soft/mysql/bin>>/etc/profile

2.建立資料存放目錄和日誌存放目錄,並修改目錄許可權

#mkdir-p/home/data/dbdata

#cd/home/data/dbdata/

#mkdir/data_3306data_3307data_3308data_3309logs

#chownmysql.mysql-R.

3.初始化資料庫

#/home/soft/mysql/scripts/mysql_install_db--basedir=/home/soft/mysql--datadir=/home/data/dbdata/data_3306--user=mysql

#/home/soft/mysql/scripts/mysql_install_db--basedir=/home/soft/mysql--datadir=/home/data/dbdata/data_3307--user=mysql

#/home/soft/mysql/scripts/mysql_install_db--basedir=/home/soft/mysql--datadir=/home/data/dbdata/data_3308--user=mysql

#/home/soft/mysql/scripts/mysql_install_db--basedir=/home/soft/mysql--datadir=/home/data/dbdata/data_3309--user=mysql

初始化完成後,檢視data_3306,data_3307,data_3308,data_3309目錄下是否生成資料

4.編輯/etc/my.cnf配置檔案

#vim/etc/my.cnf

[mysqld_multi]

mysqld=/home/soft/mysql/bin/mysqld_safe

mysqladmin=/home/soft/mysql/bin/mysqladmin


[mysqld1]

port=3306

basedir=/home/soft/mysql

datadir=/home/data/dbdata/data_3306

pid-file=/home/data/dbdata/data_3306/mysql_3306.pid

socket=/home/data/dbdata/data_3306/mysql_3306.sock

log_error=/home/data/dbdata/logs/mysql_3306_error.log

user=mysql


[mysqld2]

port=3307

basedir=/home/soft/mysql

datadir=/home/data/dbdata/data_3307

pid-file=/home/data/dbdata/data_3307/mysql_3307.pid

socket=/home/data/dbdata/data_3306/mysql_3307.sock

log_error=/home/data/dbdata/logs/mysql_3307_error.log

user=mysql



[mysqld3]

port=3308

basedir=/home/soft/mysql

datadir=/home/data/dbdata/data_3308

pid-file=/home/data/dbdata/data_3308/mysql_3308.pid

socket=/home/data/dbdata/data_3308/mysql_3308.sock

log_error=/home/data/dbdata/logs/mysql_3308_error.log

user=mysql


[mysqld4]

port=3309

basedir=/home/soft/mysql

datadir=/home/data/dbdata/data_3309

pid-file=/home/data/dbdata/data_3309/mysql_3309.pid

socket=/home/data/dbdata/data_3309/mysql_3309.sock

log_error=/home/data/dbdata/logs/mysql_3309_error.log

user=mysql

啟動服務並檢視

#mysqld_multistart1

#ps-ef|grepmysql

154102999.png

啟動3307,3308,3309

#mysqld_multistart2,3,4

登陸檢視

#mysql-uroot-h127.0.0.1-P3306

或者

#mysql-uroot-S/home/data/dbdata/data_3306/mysql_3306.sock

154140120.png

關閉服務,對應啟動的數字

#mysqld_multistop1

6.配置mysql主主同步(現在配置master1為主,master2為從)

修改my.cnf主要設定個不一樣的ID(mysql_master1)

#vim/etc/my.cnf


[mysqld1],[mysqld2],[mysqld3],[mysqld4]中加入內容如下

server-id=1

log-bin=binlog

replicate-ignore-db=test#這是指定不需要同步的資料庫

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

重啟服務使配置生效

#mysqld_mulitstop1-4

#mysqld_mulitstart1-4

登陸主庫master1賦予master2許可權賬號

#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309

grantreplicationslaveon*.*to'admin'@'192.168.240.83'identifiedby'[email protected]#';

為驗證賬號我們可以在master2的機器上用命令做如下測試

mysql-uadmin-p[email protected]#-h192.168.240.82

154228531.png

顯示主庫資訊

showmasterstatus(記錄fileposition,從庫設定將會用到)

154300231.png

修改master2配置檔案my.cnf

在下面欄位新增

[mysqld1],[mysqld2],[mysqld3],[mysqld4],

server-id=2

master2上設定同步

#mysqluroot-h127.0.0.1P3306

mysql>stopslave;

changemasterto

master_host='192.168.240.82',master_user='admin',master_password='[email protected]#',master_log_file='binlog.000001,master_log_pos=120;

mysql>startslave;

檢視從庫狀態

mysql>showslavestatus\G

154346264.png

說明已經於主庫同步

測試,在master1上面建立一個庫,看master2是否同步過來

如果能看到主庫中建立的那麼表示成功同步了

這裡才是主主複製的開始,我們之前可以實現主從複製也就是說,再把從做為主,主再做為從,就實現主主複製了

7.編輯master2my.cnf配置檔案

vim/etc/my.cnf

[mysqld1],[mysqld2],[mysqld3],[mysqld4]中加入內容如下

log-bin=binlog

replicate-ignore-db=test

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

重啟資料庫使配置生效

#mysqld_multistop1-4

#mysqld_multistart1-4

登入master2資料庫賦予master資料庫許可權賬號

#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309

grantreplicationslaveon*.*to'admin'@'192.168.240.82'identifiedby'[email protected]#';

master2上登入資料庫檢視fileposition

160443631.png

master1上登入資料庫做如下配置

#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309

mysql>stopslave;

changemasterto

master_host='192.168.240.83',master_user='admin',master_password='[email protected]#',master_log_file='binlog.000001,master_log_pos=411;

mysql>startslave;

檢視從庫狀態

mysql>showslavestatus\G

160534773.png

看到上兩個程序為資料庫與另一邊的master已經建立連線

8.配置mysql_slave1

登入master1資料庫賦予slave1資料庫許可權賬號

#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309

grantreplicationslaveon*.*to'admin'@'192.168.240.84'identifiedby'[email protected]#';

master1上登入資料庫檢視fileposition

160625724.png

登陸slave1修改my.cnf

#vim/etc/my.cnf

[mysqld1],[mysqld2],[mysqld3],[mysqld4]中加入內容如下

server-id=3

log-bin=binlog

replicate-ignore-db=test

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

#mysqld_multistop1-4

#mysqld_multistart1-4

分別登陸mysql3306,3307,3308,3309,操作如下:

#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309

mysql>stopslave;

changemasterto

master_host='192.168.240.82',master_user='admin',master_password='[email protected]#',master_log_file='binlog.000002',master_log_pos=300;

mysql>startslave;

檢視從庫狀態

mysql>showslavestatus\G

160752390.png

8.配置mysql_slave2

登入master2資料庫賦予slave1資料庫許可權賬號

#mysql-uroot-h127.0.0.1-P3306#f分別登陸3306,3307,3308,3309


grantreplicationslaveon*.*to'admin'@'192.168.240.85'identifiedby'[email protected]#';

master2上登入資料庫檢視fileposition

160840312.png

登陸slave2修改my.cnf

#vim/etc/my.cnf

[mysqld1],[mysqld2],[mysqld3],[mysqld4]中加入內容如下

server-id=4

log-bin=binlog

replicate-ignore-db=test

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

#mysqld_multistop1-4

#mysqld_multistart1-4

分別登陸mysql3306,3307,3308,3309,操作如下:

#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309

mysql>stopslave;

changemasterto

master_host='192.168.240.83',master_user='admin',master_password='[email protected]#',master_log_file='binlog.000001',master_log_pos=702;

mysql>startslave;

檢視從庫狀態

mysql>showslavestatus\G

160920696.png

二、安裝與配置keepalived(每臺都安裝)

1.安裝相容包

#yum-yinstallopensslopenssl-develipvsadmpopt-devel

2.下載並安裝keepalived

#wgethttp://www.keepalived.org/software/keepalived-1.2.7.tar.gz

#tarzxvfkeepalived-1.2.7.tar.gz

#cdkeepalived-1.2.7

#./configure&&make&&makeinstall

#cp/usr/local/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/

#cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/

#mkdir/etc/keepalived

#cp/usr/local/sbin/keepalived/usr/sbin/

#cp/usr/local/etc/keepalived/keepalived.conf/etc/keepalived/

#chkconfig--addkeepalived

3.mysql_master1,mysql_master2keepalived配置

#vi/etc/keepalived/keepalived.conf

!ConfigurationFileforkeepalived


global_defs{

notification_email{

[email protected]

}

[email protected]

smtp_serversmtp.126.com

smtp_connect_timeout30

router_idLVS_DEVEL

}


vrrp_instanceVI_1{

stateBACKUP

interfaceeth0

virtual_router_id54

priority100#master2改為90

advert_int1

nopreempt#不搶佔ip,只在master1上設定

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddress{

192.168.240.91

}

}

4.Mysql_slave1,mysql_slave2keepalived配置

#vi/etc/keepalived/keepalived.conf

!ConfigurationFileforkeepalived

global_defs{

notification_email{

[email protected]

}

[email protected]

smtp_serversmtp.126.com

smtp_connect_timeout30

router_idLVS_DEVEL

}


vrrp_instanceVI_1{

stateBACKUP

interfaceeth0

virtual_router_id55

priority100#mysql_slave2改為90

advert_int1

nopreempt#不搶佔ip,只在slave1上設定

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddress{

192.168.240.92

}

}


5.啟動keepalived,並檢視

#serviceseepalivedstart

161024934.png

161027106.png

6.編寫mysql_master監控指令碼

#vimcheck_mysql_master.sh

#!/bin/sh


#############check_port################

netstat -antlp|grep :::3306 && mysql_port[0]=3306

netstat -antlp|grep :::3307 && mysql_port[1]=3307

netstat -antlp|grep :::3308 && mysql_port[2]=3308

netstat -antlp|grep :::3309 && mysql_port[3]=3309


############check_status###############

mysql -u root -h 127.0.0.1 -P 3306 -e "showdatabases" && mysql_status[0]=1

mysql -u root -h 127.0.0.1 -P 3307 -e "showdatabases" && mysql_status[1]=2

mysql -u root -h 127.0.0.1 -P 3308 -e "showdatabases" && mysql_status[2]=3

mysql -u root -h 127.0.0.1 -P 3309 -e "showdatabases" && mysql_status[3]=4


if [ ${#mysql_port[*]} -ne 4 -o ${#mysql_status[*]} -ne 4 ];

then

echo"service keepalived stop"

fi

加入計劃任務,每隔一分鐘執行一次

7.編寫mysql_slave監控指令碼

#vimcheck_mysql_slave.sh

#!/bin/sh


#############check_status####################

mysql -u root -h 127.0.0.1 -P 3306 -e "showdatabases" && mysql_status[0]=1

mysql -u root -h 127.0.0.1 -P 3307 -e "showdatabases" && mysql_status[1]=2

mysql -u root -h 127.0.0.1 -P 3308 -e "showdatabases" && mysql_status[2]=3

mysql -u root -h 127.0.0.1 -P 3309 -e "showdatabases" && mysql_status[3]=4


#############check_slave_status##############

mysql -u root -h 127.0.0.1 -P 3306 -e "show slaves tatus\G"|head-13|tail-2|grep No\

&& mysql_slave_status=1||mysql_slave_status=0


if [ ${#mysql_status[*]} -ne 4 -o $mysql_slave_status -eq 1 ];then

service keepalived stop

fi

轉載於:https://blog.51cto.com/363070085/1298772