MySQL高可用部署
目录
一、MHA(一主多从模式)
1.环境准备(所有节点)
2. 部署 MySQL 主从复制(Master+Slave)
3.部署 MHA Manager(管理节点)
(1)安装 MHA Manager
(2)配置 SSH 无密码登录
(3)创建 MHA 配置文件
4.部署 MHA Node(所有 MySQL 节点)
5.验证和启动 MHA
二、PXC(多主模式)
1.环境准备
2.安装 PXC 相关软件(所有节点)
3.配置 PXC(所有节点)
(1)创建数据目录并设置权限
(2)修改配置文件
4.启动 PXC 集群
5.初始化配置和测试
一、MHA(一主多从模式)
1.环境准备(所有节点)
# 关闭防火墙和 SELinux
systemctl stop ufw
systemctl disable ufw
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0# 配置主机名和 hosts 文件
# 主库(master)
hostnamectl set-hostname mysql-master
echo "192.168.10.61 mysql-master" >> /etc/hosts
echo "192.168.10.62 mysql-slave1" >> /etc/hosts
echo "192.168.10.63 mha-manager" >> /etc/hosts# 从库1(slave1)和从库2(slave2)执行相同操作,修改hostnamectl为对应主机名# 安装依赖包
sudo apt-get install -y make gcc libc6-dev libssl-dev libdbd-mysql-perl libdbi-perl libnet-daemon-perl libplrpc-perl libio-socket-ssl-perl
2. 部署 MySQL 主从复制(Master+Slave)
参照Mysql主从复制部署_mysql replication部署操作-CSDN博客
3.部署 MHA Manager(管理节点)
(1)安装 MHA Manager
wget https://mirrors.aliyun.com/ubuntu/pool/universe/m/mha4mysql-manager/mha4mysql-manager_0.58-1.1_all.deb
sudo dpkg -i mha4mysql-manager_*.deb
sudo apt-get install -f # 解决依赖问题
(2)配置 SSH 无密码登录
参考ssh免密登录-CSDN博客
(3)创建 MHA 配置文件
mkdir -p /etc/mha/masterha/app1
vim /etc/mha/masterha/app1.cnf
配置内容:
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/var/lib/mysql
user=mha_admin # MHA管理用户
password=password # MHA管理用户密码
ping_interval=1 # 检测间隔(秒)
repl_user=repl # 复制用户
repl_password=password # 复制用户密码
ssh_user=root # SSH用户
secondary_check_script="masterha_secondary_check -s mysql-slave1 -s mysql-slave2" # 双节点检测[server1]
hostname=mysql-master
port=3306[server2]
hostname=mysql-slave1
port=3306
candidate_master=1 # 候选主库
check_repl_delay=0 # 不检查复制延迟[server3]
hostname=mysql-slave2
port=3306
candidate_master=1
check_repl_delay=0
4.部署 MHA Node(所有 MySQL 节点)
# 1.安装 MHA Node
# 在所有MySQL节点(master、slave1、slave2)执行
wget https://mirrors.aliyun.com/ubuntu/pool/universe/m/mha4mysql-node/mha4mysql-node_0.58-1.1_all.deb
sudo dpkg -i mha4mysql-node_*.deb
sudo apt-get install -f # 解决依赖问题# 2.创建 MHA 管理用户
# 在所有MySQL节点执行
CREATE USER 'mha_admin'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'mha_admin'@'%';
FLUSH PRIVILEGES;
5.验证和启动 MHA
# 检查 SSH 连通性
# 在mha-manager节点执行
masterha_check_ssh --conf=/etc/mha/masterha/app1.cnf# 检查复制状态
masterha_check_repl --conf=/etc/mha/masterha/app1.cnf# 启动 MHA Manager
nohup masterha_manager --conf=/etc/mha/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &# 查看 MHA 状态
masterha_check_status --conf=/etc/mha/masterha/app1.cnf
注意事项:
二进制日志保留:主库需保留足够的 binlog(expire-logs-days设置长一些),避免故障转移时从库需要旧 binlog。
VIP 管理:生产环境建议配合 Keepalived 或 LVS 实现 VIP 自动漂移。
监控告警:监控 MHA Manager 日志(/var/log/masterha/app1/manager.log)和 MySQL 复制状态。
参数优化:根据实际情况调整ping_interval(检测频率)和secondary_check_script(双节点检测)。
二、PXC(多主模式)
1.环境准备
# 关闭防火墙和 SELinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0# 配置主机名和 hosts 文件
# 节点1
hostnamectl set-hostname pxc-node1
echo "192.168.4.1 pxc-node1" >> /etc/hosts
echo "192.168.4.2 pxc-node2" >> /etc/hosts
echo "192.168.4.3 pxc-node3" >> /etc/hosts# 节点2和节点3执行相同操作,修改hostnamectl为对应主机名
2.安装 PXC 相关软件(所有节点)
# 1.安装依赖包
yum install -y epel-release
yum install -y libev lsof perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-DBD-MySQL perl-DBI perl-Digest perl-Digest-MD5 perl-IO-Compress perl-Net-Daemon perl-PlRPC qpress socat openssl openssl-devel# 2.卸载 mariadb(如果已安装)
rpm -e mariadb-libs --nodeps# 3.安装 XtraBackup
yum -y install percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm# 4.创建 MySQL 用户和组
groupadd -r mysql
useradd -M -s /bin/false -r -g mysql mysql# 5.安装 Percona XtraDB Cluster
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install Percona-XtraDB-Cluster-57
3.配置 PXC(所有节点)
(1)创建数据目录并设置权限
mkdir -p /data/local/percona-xtradb-cluster/data
chown -R mysql:mysql /data/local/percona-xtradb-cluster/data
mkdir -p /data/local/percona-xtradb-cluster/run
chown -R mysql:mysql /data/local/percona-xtradb-cluster/run
mkdir -p /data/logs/mysql
chown -R mysql:mysql /data/logs/mysql
touch /data/logs/mysql/error.log
(2)修改配置文件
默认的/etc/my.cnf文件可以删除或重新指定路径,写入以下内容(以节点 1 为例,节点 2 和节点 3 需修改server_id、wsrep_node_name、wsrep_node_address)
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
datadir = /data/local/percona-xtradb-cluster/data
socket = /data/local/percona-xtradb-cluster/run/mysql.sock
pid-file = /data/local/percona-xtradb-cluster/run/mysql.pid
wsrep_cluster_address=gcomm://192.168.4.1,192.168.4.2,192.168.4.3
pxc_strict_mode=ENFORCING
wsrep_cluster_name=test-pxc
wsrep_node_name=pxc-node1
wsrep_node_address=192.168.4.1
4.启动 PXC 集群
# 引导第一个节点(以节点 1 为例)
systemctl start mysql@bootstrap.service# 启动其他节点(节点 2 和节点 3)
systemctl start mysql
systemctl disable mysql
5.初始化配置和测试
获取初始密码并修改:
在任意节点上通过grep password /data/logs/mysql/error.log获取临时密码,然后登录 MySQL 修改密码。
创建 SST 传输账号:
登录 MySQL 后执行以下命令创建 SST 传输所需的账号
grant all privileges on *.* to'sst'@'localhost' identified by 'password';
查看集群状态:
在任意节点上登录 MySQL,执行show status like 'wsrep%';命令,查看集群状态相关信息,确保wsrep_cluster_size显示正确的节点数,wsrep_local_state值为 4(表示正常),wsrep_ready为ON。
测试集群:
可以在一个节点上创建数据库、表并插入数据,然后在其他节点上查看是否能同步数据,或者停止某个节点的 MySQL 服务,观察其他节点的集群状态和数据是否正常,再重新启动该节点,查看数据是否能恢复同步。