mha+mysql+keepalived部署
最终完整版:3节点 二进制部署 MySQL 8.0.25 + MHA 0.58 + Keepalived
(无第四台机器、全部3台搞定、直接复制上线)
一、架构信息
db1 (192.168.1.10) → 初始主库
db2 (192.168.1.11) → 备主库 + MHA Manager
db3 (192.168.1.12) → 从库
VIP:192.168.1.100
系统:CentOS 7
MySQL:二进制 8.0.25
全部3台安装:
- MySQL(二进制)
- MHA Node
- Keepalived
仅 db2 额外安装:MHA Manager
二、所有节点统一初始化(3台都执行)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
hostnamectl set-hostname db1 # db2/db3分别改
echo -e "192.168.1.10 db1\n192.168.1.11 db2\n192.168.1.12 db3" >> /etc/hosts
ssh-keygen -t rsa -N ''
ssh-copy-id root@db1
ssh-copy-id root@db2
ssh-copy-id root@db3
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
三、二进制安装 MySQL 8.0.25(3台都执行)
cd /usr/local
wget https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
tar xf mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.25-linux-glibc2.12-x86_64 mysql
useradd -r -s /sbin/nologin mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /usr/local/mysql
my.cnf(3台都配置)
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
port=3306
user=mysql
server-id=10 # db1=10 db2=11 db3=12
log-bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
relay_log=relay-bin
log_slave_updates=1
read_only=1
super_read_only=1
初始化(3台)
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
修改初始密码(3台)
grep password /var/log/mysqld.log
# 登录后执行
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456';
创建账号(3台都执行)
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
CREATE USER 'mha'@'%' IDENTIFIED WITH mysql_native_password BY 'Mha@123456';
GRANT ALL ON *.* TO 'mha'@'%';
FLUSH PRIVILEGES;
搭建主从(db2、db3执行)
CHANGE MASTER TO
MASTER_HOST='db1',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123456',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
四、安装 MHA(3台都装 Node,仅 db2 装 Manager)
1)3台安装 Node
rpm -ivh https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpm
2)仅 db2 安装 Manager
rpm -ivh https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm
mkdir -p /etc/mha /var/log/mha
db2:MHA 配置文件 /etc/mha/mha.cnf
[server_default]
user=mha
password=Mha@123456
repl_user=repl
repl_password=Repl@123456
ssh_user=root
ping_interval=3
manager_workdir=/var/log/mha
manager_log=/var/log/mha/mha.log
[server1]
hostname=db1
candidate_master=1
[server2]
hostname=db2
candidate_master=1
[server3]
hostname=db3
no_master=1
db2:启动 MHA
masterha_check_ssh --conf=/etc/mha/mha.cnf
masterha_check_repl --conf=/etc/mha/mha.cnf
nohup masterha_manager --conf=/etc/mha/mha.cnf &
五、Keepalived 配置(3台都装)
安装
yum install -y keepalived
systemctl enable keepalived
检测脚本 /etc/keepalived/check_mysql.sh(3台一样)
#!/bin/bash
MY_USER="mha"
MY_PASS="Mha@123456"
SOCK="/tmp/mysql.sock"
mysql -u$MY_USER -p$MY_PASS -S $SOCK -e "select 1" >/dev/null 2>&1
if [ $? -ne 0 ];then
exit 1
fi
SRO=$(mysql -u$MY_USER -p$MY_PASS -S $SOCK -N -e "SELECT @@super_read_only")
if [ "$SRO" = "0" ]; then
exit 0
else
exit 1
fi
chmod +x /etc/keepalived/check_mysql.sh
Keepalived 配置(3台分别修改 priority)
db1:priority 100
db2:priority 90
db3:priority 80
global_defs {
router_id db1
}
vrrp_script chk_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight -30
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_mysql
}
}
启动
systemctl start keepalived
浙公网安备 33010602011771号