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

posted @ 2026-05-09 10:03  wuyingchun1987  阅读(22)  评论(0)    收藏  举报