数据库架构:双主复制
master:192.168.8.57
slave1:192.168.8.58
keepalived工具包
keepalived-1.4.5.tar.gz
一、添加非本机IP绑定支持 一、添加非本机IP绑定支持
echo
|
二、下载并安装 keepalived
tar
zxvf keepalived-1.4.5.
tar
.gz
cd
keepalived-1.4.5
.
/configure
--prefix=
/usr/local/keepalived/
make
&&
make
install
keepalived 开机自动启动
systemctl
enable
keepalived
三、配置keepalived
192.168.8.57
# vi /etc/keepalived/keepalived.conf
! Configuration
file
for
keepalived
global_defs {
router_id 8.57
notification_email {
zdd5503@163.com
}
notification_email_from zdd5503@163.com
smtp_server stmp.163.com
smtp_connect_timeout 30
}
vrrp_script chk_mysql {
script
"/etc/keepalived/check_mysql.sh"
interval 3
}
vrrp_instance V_mysql_1 {
state BACKUP
interface enp0s3
virtual_router_id 200
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass steven
}
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.8.88
/24
}
}
192.168.8.58
! Configuration
file
for
keepalived
global_defs {
router_id 8.58
notification_email {
zdd5503@163.com
}
notification_email_from zdd5503@163.com
smtp_server stmp.163.com
smtp_connect_timeout 30
}
vrrp_instance V_mysql_1 {
state BACKUP
interface enp0s3
virtual_router_id 200
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass steven
}
notify_master
/etc/keepalived/notify_master_mysql
.sh
virtual_ipaddress {
192.168.8.88
/24
}
}
check_mysql.sh
#!/bin/bash
#/etc/keepalived/check_mysql.sh
#chmod u+x /etc/keepalived/check_mysql.sh
if
[ `
ps
-ef|
grep
-w
"$0"
|
grep
"/bin/sh*"
|
grep
"?"
|
grep
"?"
|
grep
-
v
"grep"
|
wc
-l` -gt 2 ];
then
#
exit
fi
mysql_con=
'/usr/local/mysql/bin/mysql -uroot -pmysql'
function
excute_query {
$mysql_con -e
"select 1 from dual;"
2>>
/mysql/log/check_mysql
.err
}
function
service_error {
echo
-e
"`date "
+%F %H:%M:%S
"` -----mysql service error,now stop keepalived-----"
>>
/mysql/log/check_mysql
.err
/sbin/service
keepalived stop &>>
/mysql/log/check_mysql
.err
echo
-e
"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
>>
/mysql/log/check_mysql
.err
}
function
query_error {
echo
-e
"`date "
+%F %H:%M:%S
"` -----query error, but mysql service ok, retry after 30s-----"
>>
/mysql/log/check_mysql
.err
sleep
30
excute_query
if
[ $? -
ne
0 ];
then
echo
-e
"`date "
+%F %H:%M:%S
"` -----still can't execute query-----"
>>
/mysql/log/check_mysql
.err
echo
-e
"`date "
+%F %H:%M:%S
"` -----set read_only = 1 on DB1-----"
>>
/mysql/log/check_mysql
.err
$mysql_con -e
"set global read_only = 1;"
2>>
/mysql/log/check_mysql
.err
echo
-e
"`date "
+%F %H:%M:%S
"` -----kill current client thread-----"
>>
/mysql/log/check_mysql
.err
rm
-f
/mysql/log/kill
.sql &>
/dev/null
$mysql_con -NB -e
'select concat("kill ",id,";") from information_schema.PROCESSLIST where command="Query" or command="Execute"'
>
/mysql/log/kill
.sql
$mysql_con -e
"source /mysql/log/kill.sql"
sleep
2
echo
-e
"`date "
+%F %H:%M:%S
"` -----stop keepalived-----"
>>
/mysql/log/check_mysql
.err
systemctl stop keepalived &>>
/mysql/log/check_mysql
.err
echo
-e
"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
>>
/mysql/log/check_mysql
.err
else
echo
-e
"`date "
+%F %H:%M:%S
"` -----query ok after 30s-----"
>>
/mysql/log/check_mysql
.err
echo
-e
"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
>>
/mysql/log/check_mysql
.err
fi
}
excute_query
if
[ $? -
ne
0 ];
