keepalive+mysql雙主模式,高可用測試搭建手冊

一、環境

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

keepalive+mysql雙主模式,高可用測試搭建手冊

3、更改配置文件

配置文件的位置在/etc/keepalive目錄下有一個keepalive.conf

首先對其文件進行備份

cp keepalive.conf keepalive.conf_bak

編輯配置文件keepalive.conf

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]

[email protected]

[email protected]

}

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


分享到:


相關文章: