本人MySQL DBA课程:
DBA MySQL数据库工程师(2021年最新版)课程:https://edu.51cto.com/course/27002.html 作者:张岩峰,转载请注明出处
本章主要介绍MySQL+Keepalived高可用架构实战,列出来详细操作过程。MySQL数据库在日常运维中是一定会接触到的,所以玩⑥MySQL架构与日常运维是我们涨薪的关键。
DBA MySQL数据库工程师(2021年最新版)课程由浅入深讲解数据库相关知识,原理+实战。深入讲解了关系型数据库+非关系数据库(MySQL、MongoDB、ES、Redis)。里面覆盖了MySQL数据库所有核心知识点,原理+实战,真实生产环境案例讲解。提供24小时售后答疑,张老师带大家起飞,欢迎大家前来咨询。
MySQL+Keepalived配置:
环境说明
准备4台服务器
环境 |
IP |
软件 |
说明 |
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服务器,操作如下:
1、下载并上传软件至/server/tools
mkdir -p /server/tools
cd /server/tools/
上传软件包
2、解压软件
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
3、创建数据路径并授权
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
4、授权
chown -R mysql.mysql /application/*
chown -R mysql.mysql /data
5、初始化数据(创建系统数据)
mkdir /data/mysql/data -p
chown -R mysql.mysql /data
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
6、配置文件的准备
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
7、启动数据库
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,可以做个快照操作
1、清理环境(全部节点)
mkdir /data/binlog
chown mysql.mysql /data/*
pkill mysqld
\rm -rf /data/mysql/data/*
\rm -rf /data/binlog/*
2、准备配置文件
#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
3、初始化数据(4台都执行)
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
4、启动数据库(三台都执行)
systemctl restart mysqld
5、构建主从
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;
6、配置主/被调度器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
7、配置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
8、测试
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)