mysqld_multi+keepalived高可用實踐
系統環境Centos6.3x64
拓撲如下
一、配置mysql(四臺都安裝)
1.安裝mysql
#./lnmp.shinstallmysql
mysql安裝目錄為/home/soft/mysql
為mysql新增預設搜尋路徑
#exportPATH=$PATH:/home/soft/mysql/bin
#echo“exportPATH=$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
啟動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
關閉服務,對應啟動的數字
#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
顯示主庫資訊
showmasterstatus;(記錄file、position,從庫設定將會用到)
修改master2配置檔案my.cnf
在下面欄位新增
[mysqld1],[mysqld2],[mysqld3],[mysqld4],
server-id=2
在master2上設定同步
#mysql–uroot-h127.0.0.1–P3306
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
說明已經於主庫同步
測試,在master1上面建立一個庫,看master2是否同步過來
如果能看到主庫中建立的庫那麼表示成功同步了
這裡才是主主複製的開始,我們之前可以實現主從複製也就是說,再把從做為主,主再做為從,就實現主主複製了
7.編輯master2,my.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上登入資料庫檢視file和position
在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
看到上兩個程序為資料庫與另一邊的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上登入資料庫檢視file和position
登陸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
分別登陸mysql,3306,3307,3308,3309,操作如下:
#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309
mysql>stopslave;
changemasterto
mysql>startslave;
檢視從庫狀態
mysql>showslavestatus\G
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上登入資料庫檢視file和position
登陸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
分別登陸mysql,3306,3307,3308,3309,操作如下:
#mysql-uroot-h127.0.0.1-P3306#分別登陸3306,3307,3308,3309
mysql>stopslave;
changemasterto
mysql>startslave;
檢視從庫狀態
mysql>showslavestatus\G
二、安裝與配置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{
}
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{
}
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
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