本人MySQL DBA課程:html
DBA MySQL數據庫工程師(2021年最新版)課程:https://edu.51cto.com/course/27002.html 做者:張巖峯,轉載請註明出處 筆名:雲煙舊夢mysql
本章主要介紹MySQL+Keepalived高可用架構實戰,列出來詳細操做過程。MySQL數據庫在平常運維中是必定會接觸到的,因此玩⑥MySQL架構與平常運維是咱們漲薪的關鍵。sql
DBA MySQL數據庫工程師(2021年最新版)課程由淺入深講解數據庫相關知識,原理+實戰。深刻講解了關係型數據庫+非關係數據庫(MySQL、MongoDB、ES、Redis)。裏面覆蓋了MySQL數據庫全部核心知識點,原理+實戰,真實生產環境案例講解。提供24小時售後答疑,張老師帶你們起飛,歡迎你們前來諮詢。數據庫
MySQL+Keepalived配置:bash
環境說明服務器
準備4臺服務器架構
環境app |
IP運維 |
軟件socket |
說明 |
db01主庫 |
192.168.43.101 |
mysql、keepalived |
101和102是主從 103和104是主從 |
db02從庫 |
192.168.43.102 |
mysql |
|
db03主庫 |
192.168.43.103 |
mysql、keepalived |
|
db04從庫 |
192.168.43.104 |
mysql |
VIP:192.168.43.200
準備四臺安裝好的mysql服務器,操做以下:
一、下載並上傳軟件至/server/tools
mkdir -p /server/tools
cd /server/tools/
上傳軟件包
二、解壓軟件
tar zxvf mysql-5.7.31-el7-x86_64.tar.gz
mkdir /application
mv mysql-5.7.31-el7-x86_64 /application/mysql
yum remove mariadb-libs -y
useradd -s /sbin/nologin mysql
echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
source /etc/profile
mysql -V
三、建立數據路徑並受權
mkfs.xfs /dev/sdb
[root@localhost ~]# blkid
/dev/sdb: UUID="4f4bed6c-4d81-434d-918d-8148a6591d84" TYPE="xfs"
[root@localhost ~]# vi /etc/fstab
UUID="4f4bed6c-4d81-434d-918d-8148a6591d84" /data xfs defaults 0 0
mkdir /data
mount -a
四、受權
chown -R mysql.mysql /application/*
chown -R mysql.mysql /data
五、初始化數據(建立系統數據)
mkdir /data/mysql/data -p
chown -R mysql.mysql /data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
六、配置文件的準備
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF
七、啓動數據庫
cat >/etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
systemctl restart mysqld.service
提示:作完的話,若是使用的是vm,能夠作個快照操做
一、清理環境(所有節點)
mkdir /data/binlog
chown mysql.mysql /data/*
pkill mysqld
\rm -rf /data/mysql/data/*
\rm -rf /data/binlog/*
二、準備配置文件
#db01:
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql/
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=1
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01 [\\d]>
EOF
#db02:
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=2
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db02 [\\d]>
EOF
#db03:
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=3
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db03 [\\d]>
EOF
#db04:
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=4
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db04 [\\d]>
EOF
三、初始化數據(4臺都執行)
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
四、啓動數據庫(三臺都執行)
systemctl restart mysqld
五、構建主從
db01 <==> db03
db01 <== db02
db03 <== db04
#db01和db03:
grant replication slave on *.* to repl@'192.168.43.%' identified by '123';
#db01:
change master to
master_host='192.168.43.103',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
#db02:
change master to
master_host='192.168.43.101',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
#db03:
change master to
master_host='192.168.43.101',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
#db04:
change master to
master_host='192.168.43.103',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
六、配置主/被調度器Keepalived(101和103機器)(在主庫上配置)
101機器:
[root@master ~]# yum -y install keepalived
[root@master ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql1
}
vrrp_script check_run {
script "/etc/keepalived/check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 88
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
192.168.43.200
}
}
[root@master ~]# systemctl restart keepalived
103機器:
[root@backup ~]# yum -y install keepalived
[root@backup ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql2
}
vrrp_script check_run {
script "/etc/keepalived/check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 88
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
192.168.43.200
}
}
[root@backup ~]# systemctl restart keepalived
七、配置mysql狀態檢測腳本(兩臺MySQL一樣的腳本)
[root@master ~]# vi /etc/keepalived/check_mysql.sh
#!/bin/bash
/usr/bin/mysql -uroot -e "show status" &>/dev/null
if [ $? != 0 ];then
systemctl stop keepalived
fi
[root@master ~]# chmod a+x /etc/keepalived/check_mysql.sh
[root@master ~]# systemctl restart keepalived
八、測試
C:\Users\巖峯>mysql -urepl -p123 -h 192.168.43.200
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
[root@master ~]# systemctl stop mariadb
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)