一、環境
1、服務器兩臺
CentOS Linux release 7.5.1804 (Core)
192.168.1.34
192.168.1.99
vip地址:192.168.1.200
2、軟件包
mysql-community-client-5.7.24-1.el7.x86_64.rpm
mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm
keepalived-2.0.10.tar.gz
二、安裝mysql服務,在兩臺服務器上都要執行
1、關閉服務器的selinux
編輯/etc/selinux/config文件,將SELINUX設置為disabled
2、關閉防火牆或者開放3306端口
systemctl stop firewalld
或
firewalld-cmd --zone=public --add-port=3306/tcp --permanent
firewalld-cmd --reload
3、卸載系統上自帶的mariadb系統包
rpm -qa |grep mariadb
rpm -e mariadb 去卸載
如果不卸載系統自帶的mariadb包,在安裝mysql時會因為包的衝突而安裝失敗
4、安裝mysql5.7
rpm -ivh mysql-community-client-5.7.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-common-5.7.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.24-1.el7.x86_64.rpm
以上步驟需要在兩臺服務器上都執行
5、修改mysql的配置文件
192.168.1.34上操作,編輯/etc/my.cnf文件.在文件中添加如下內容
server-id = 34 # 兩邊不能重複
log-bin = mysq34 #bin-log的文件名
skip-name-resolve #禁止DNS解析
binlog-ignore-db = mysql #無需開啟二進制日誌的數據庫
binlog-ignore-db = information_schema #無需開啟二進制日誌的數據庫
binlog-do-db = integrator_db # 需要進行同步的數據庫
192.168.1.99上操作,編輯/etc/my.cnf文件.在文件中添加如下內容
server-id = 99
log-bin = mysql99
skip-name-resolve
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-do-db = integrator_db
配置完成之後,將分別啟動兩臺服務器上的mysql服務
systemctl start mysqld
啟動數據庫之後,數據庫root用戶的默認密碼會在/var/log/mysqld.log中產生
需要使用該臨時密碼登錄到數據庫中,然後對root用戶的密碼進行重置(兩臺服務器都要操作)
mysql -uroot -p
mysql> set global validate_password_length=0; #設置密碼長度限制
mysql> set global validate_password_policy=0; #設置密碼規則限制
mysql> set password for root@localhost = password('rootroot');
6、創建數據庫
分別在兩臺數據庫中創建需要同步的數據庫
mysql -uroot -p
mysql> create database integrator_db;
7、配置數據庫主從
在這裡我們採用的是雙主模式,那麼就需要在192.168.1.34上先設置主從,然後反過來再到192.168.1.99服務器上進行主從設置
首先在192.168.1.34服務器上設置
mysql -uroot -p
mysql> grant replication slave on *.* to 'slaveuser'@'%' identified by 'rootroot';
mysql> show master status; 查看狀態
192.168.1.99服務器上操作
mysql -uroot -p
mysql>grant replication slave on *.* to 'slaveuser'@'%' identified by 'rootroot';
mysql>show master status;
192.168.1.34服務器上操作
mysql -uroot -p
mysql> change master to master_host="192.168.1.99",master_user="slaveuser",master_password="rootroot",master_log_file="mysq34.000002",master_log_pos=607;
對應著192.168.1.99服務器上master的狀態進行相應的修改
192.168.1.99服務器上操作
mysql -uroot -p
mysql>change master to master_host="192.168.1.34",master_user="slaveuser",master_password="rootroot",master_log_file="mysq34.000002",master_log_pos=607;
對應著192.168.1.34服務器上master的狀態進行相應的修改
8、啟動主從,查看狀態
192.168.1.34服務器上操作
mysql -uroot -p
mysql> start slave;
mysql> show slave status\\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
必須保證這兩者都為yes
192.168.1.99服務器上操作
mysql -uroot -p
mysql> start slave;
mysql> show slave status\\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
必須保證這兩者都為yes
第三、安裝keepalive
1、安裝基礎環境
yum install openssl openssl-devel
如果沒有yum源,可以採用rpm的方式進行安裝,首先掛載光盤鏡像,然後依次安裝所需要的依賴包
2、安裝keepalive
tar -zxf keepalived-2.0.10.tar.gz
cd keepalived-2.0.10
./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/3.10.0-862.el7.x86_64/
內核版本通過uname -a 獲得3.10.0-862.el7.x86_64
編譯完成之後執行make && make install
3、更改配置文件
配置文件的位置在/etc/keepalive目錄下有一個keepalive.conf
首先對其文件進行備份
cp keepalive.conf keepalive.conf_bak
編輯配置文件keepalive.conf
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id MYSQL_HA
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #兩臺服務上都設置為BACKUP
interface ens33
virtual_router_id 51
priority 90 #從服務器的優先級稍微低於主服務器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #兩臺服務器密碼保持一致
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 3306 {
delay_loop 2
#lb_algo rr
#lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.34 3306 {
weight 5
notify_down /usr/local/keepalived/mysql.sh #檢測mysql服務狀態
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 3306
}
}
}
其中的mysql.sh腳本內容如下:
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=192.168.1.34
MYSQL_USER=root
MYSQL_PASSWORD=rootroot
CHECK_TIME=3
MSQYL_OK=1
function check_mysql_helth(){
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -e "show status;" > /dev/null 2>&1
if [ $? = 0 ]; then
MYSQL_OK=1
else
MYSQL_OK=0
fi
return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME -= 1"
check_mysql_helth
if [ $MYSQL_OK = 1 ]; then
CHECK_TIME=0
exit 0
fi
if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
then
pkill keepalived
exit 1
fi
sleep 1
done
閱讀更多 猿人生活 的文章