MySQL數據庫高可用安裝配置

一、分析

  • 本文所說的高可用

本文所說的MySQL高可用主要是通過Keepalived來實現多個節點的服務的可用性檢測和故障轉移,對外提供VIP地址供客戶端連接,由keepalived根據服務的狀態,負責將vip漂移到真實可用的機器上,從而實現服務的高可用。

  • 架構

兩臺MySQL或者多臺做主主互備,VIP對外提供連接

機器 IP/VIP 組件 版本
mysql1 10.10.0.1 MySQL/Keepalived 5.7.25/2.0.20
mysql2 10.10.0.2 MySQL/Keepalived 5.7.25/2.0.20
10.10.0.3

二、基礎環境

1、修改主機名及hosts

hostnamectl set-hostname mysql1
hostnamectl set-hostname mysql2
...
cat >> /etc/hosts <<EOF
10.10.0.1 mysql1
10.10.0.2 mysql2
EOF

2、修改系統進程打開最大文件數

echo "*   soft    nofile  65535" >> /etc/security/limits.conf
echo "*   hard    nofile  65535" >> /etc/security/limits.conf

3、關閉防火牆及selinux

systemctl stop firewalld && systemctl disable firewalld

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

三、MySQL

分別在mysql1及mysql2節點安裝同一版本的mysql,本文以5.7.25爲例說明

1、卸載mariadb數據庫

rpm -qa | grep mariadb

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-55n6CvaQ-1586742202371)(F597C4AF54524F458E75AFC1839F410D)]

yum -y remove mariadb-libs-5.5.52-1.el7.x86_64

2、依賴檢查安裝

  • 安裝MySQL需要libaio組件,默認的操作系統自帶,可檢查一下,如果沒有需自行安裝
rpm -qa | grep libaio

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QaY9z7GR-1586742202372)(138AC878CDF34FD6898ACC4CF333B649)]

  • 安裝net-tools組件,默認系統沒有需自行安裝
rpm -ivh net-tools-2.0-0.24.20131004git.el7.x86_64.rpm

3、解壓安裝MySQL

僅安裝必須的幾個包即可

tar -xvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

4、修改配置文件

vim /etc/my.cnf
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
max_allowed_packet = 500M
innodb_buffer_pool_size = 512M
max_connections = 20000
expire_logs_days = 10
max_binlog_size = 512M

5、初始化並啓動數據庫

mysqld --initialize

chown mysql:mysql /var/lib/mysql -R

systemctl enable mysqld && systemctl start mysqld

6、修改密碼及權限添加

默認MySQL安裝完有一個臨時密碼,可通過這個臨時密碼修改我們數據庫的密碼

cat /var/log/mysqld.log | grep password

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-D6FRtThz-1586742202373)(06FA158204B54F39857594027D9D25B7)]

通過臨時密碼登陸MySQL,修改密碼

mysql -uroot -pSlg.ieA+j8Dn

set password for root@localhost = password('Test1234!');

添加遠程登錄權限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Test1234\!';
FLUSH PRIVILEGES;

四、主主互備

1、主機mysql1配置

創建用於存放bin日誌文件的目錄

mkdir -p /usr/local/mysql

創建bin日誌文件並修改權限及用戶屬組

touch /usr/local/mysql/mysql-bin.log

chmod 777 /usr/local/mysql/mysql-bin.log && chown -R mysql:mysql /usr/local/mysql/

修改配置文件my.cnf

vim /etc/my.cnf
log_bin = /usr/local/mysql/mysql-bin.log
server_id = 1
binlog_ignore_db=mysql
auto_increment_increment = 2
auto_increment_offset = 1

重啓MySQL

service mysqld stop && service mysqld start

登陸MySQL配置mysql2的同步賬號

mysql -uroot -p
grant replication slave on *.* to'slave'@'10.10.0.2' identified by 'Test1234!';

FLUSH PRIVILEGES;

2、主機mysql2配置

創建用於存放bin日誌文件的目錄

mkdir -p /usr/local/mysql

創建bin日誌文件並修改權限及用戶屬組

touch /usr/local/mysql/mysql-bin.log

chmod 777 /usr/local/mysql/mysql-bin.log && chown -R mysql:mysql /usr/local/mysql/

修改配置文件my.cnf

vim /etc/my.cnf
log_bin = /usr/local/mysql/mysql-bin.log
server_id = 2
binlog_ignore_db=mysql
auto_increment_increment = 2
auto_increment_offset = 1

重啓MySQL

service mysqld stop && service mysqld start

登陸MySQL配置mysql1的同步賬號

mysql -uroot -p
grant replication slave on *.* to'slave'@'10.10.0.1' identified by 'Test1234!';

FLUSH PRIVILEGES;

3、mysql1配置

重啓並登陸MySQL

service mysqld stop && service mysqld start

mysql -uroot -p

配置salve

stop slave;

change master to master_host='10.10.0.2',master_user='slave',master_password='Test1234!';

start slave;

4、mysql2配置

重啓並登陸MySQL

service mysqld stop && service mysqld start

mysql -uroot -p

配置salve

stop slave;

change master to master_host='10.10.0.1',master_user='slave',master_password='Test1234!';

start slave;

5、查看主主互備狀態

分別登陸mysql1及mysql2,查看互備狀態

show slave status \G;

重點關注項爲:

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-K4LuJMxj-1586742202374)(EFB1E5144AF940C2BE836EA81ECD4C2E)]

五、Keepalived

在mysql1和mysql2分別安裝keepalived

1、安裝依賴

yum -y install openssl-devel

2、獲取Keepalived

https://www.keepalived.org/download.html

3、安裝

tar -xvf keepalived-2.0.20.tar.gz && rm -rf keepalived-2.0.20.tar.gz && cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived

make && make install

4、版本查看

/usr/local/keepalived/sbin/keepalived -v

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-17LxkB9i-1586742202374)(FE2C4B0EF49342B199BBE1A0D7CBE60E)]

5、配置文件

  • 配置文件參數詳解

https://www.cnblogs.com/arjenlee/p/9258188.html

  • 創建配置文件目錄及配置文件
mkdir -p /etc/keepalived

自帶配置文件:/usr/local/keepalived/etc/keepalived/keepalived.conf,可作參考,這裏直接創建新的配置文件即可

  • mysql1服務器
vim /etc/keepalived/keepalived.conf


global_defs {
    router_id mysql1
}

vrrp_script mysql_check {
   script "/usr/local/keepalived/check.sh"
   interval 2
   weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    
    track_script {
       mysql_check
    }
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.10.0.3
    }
}
  • mysql2服務器
vim /etc/keepalived/keepalived.conf


global_defs {
    router_id mysql2
}

vrrp_script mysql_check {
   script "/usr/local/keepalived/check.sh"
   interval 2
   weight:-20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 70
    advert_int 1
    
    track_script {
       mysql_check
    }
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.10.0.3
    }
}
  • vrrp_script:檢查腳本,檢查haproxy狀態,如果掛掉,VIP漂移
  • script:腳本命令
  • interval:檢查間隔
  • weight:權重
  • state:標記該節點是master還是backup
  • interface:配置VIP綁定的網卡,這裏使用和外網通信的網卡
  • virtual_router_id:取1-255之間的值,主備需要相同,這樣才能成爲一個組
  • priority:權重,數值高的主機是master,所以主節點要比從節點大,這是影響主備的關鍵
  • advert_int:主備之間通訊的間隔秒數,用於判斷主節點是否存活
  • auth_type:進行安全認證的方式,PASS或者AH方式,推薦PASS
  • auth_pass:PASS的密碼
  • virtual_ipaddress:VIP地址,最多可以寫20個,keepalive啓動後會自動配置該VIP

6、檢測腳本

放置到配置文件所指定目錄並添加權限

vim /usr/local/keepalived/check.sh

#!/bin/bash
count=`ps aux | grep -v grep | grep mysqld | wc -l`
if [ $count -eq 0 ]; then
    exit 1
else
    exit 0
fi
chmod +x /usr/local/keepalived/check.sh

7、啓動

  • 創建service文件
cat > /etc/systemd/system/keepalived.service <<EOF
[Unit]
Description=LVS and VRRP High Availability Monitor
After=syslog.target network-online.target

[Service]
Type=forking
KillMode=process
ExecStart=/usr/local/keepalived/sbin/keepalived

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

systemctl enable keepalived && systemctl start keepalived && systemctl status keepalived

8、主從查看

在主節點查看網絡信息,可以發現我們設置的VIP,當主節點或者MySQL任意一個掛掉時,VIP都會自動漂移到從節點實現mysql的高可用

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-L0SIbq9e-1586742202375)(741D503F4BAD48E8A565C9F651A7B3FE)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章