MySQL高可用架构与自动化运维实践
一、MySQL主从及双主复制配置
1.1 主从架构部署 在主节点(192.168.119.146)上配置二进制日志并启用唯一标识:
# /etc/my.cnf 添加以下内容
[mysqld]
server-id=146
log-bin=/data/mysql/binlog/mysql-bin
创建日志目录并重启服务:
mkdir -p /data/mysql/binlog
touch /data/mysql/binlog/mysql-bin
chown -R mysql:mysql /data/mysql/
systemctl restart mariadb
查看当前日志位置并创建复制用户:
SHOW MASTER LOGS;
CREATE USER repl_user@'192.168.119.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO repl_user@'192.168.119.%';
在从节点(192.168.119.145)配置:
# /etc/mysql/my.cnf
[mysqld]
server-id=145
read-only
启动复制进程:
CHANGE MASTER TO
MASTER_HOST='192.168.119.146',
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;
START SLAVE;
验证同步状态,确认两个线程均运行正常。
1.2 双主复制实现 两台服务器均需开启二进制日志并设置不同ID:
# 节点1 (192.168.119.145)
server-id=145
log-bin=/data/mysql/binlog/mysql-bin
# 节点2 (192.168.119.146)
server-id=146
log-bin=/data/mysql/binlog/mysql-bin
在节点1上配置指向节点2的复制关系:
CHANGE MASTER TO
MASTER_HOST='192.168.119.146',
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;
START SLAVE;
在节点2上反向配置:
CHANGE MASTER TO
MASTER_HOST='192.168.119.145',
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;
START SLAVE;
通过跨节点创建数据库验证双向同步功能。
二、基于XtraBackup的备份恢复体系
2.1 环境准备 安装Percona XtraBackup工具包,并配置MySQL开启二进制日志:
yum install -y percona-xtrabackup-80
vim /etc/my.cnf
[mysqld]
log-bin=/data/mysql/binlog/mysql-bin
2.2 备份流程 执行全量备份:
xtrabackup --backup --target-dir=/backup/full
进行增量备份(基于前一次备份):
xtrabackup --backup --incremental-basedir=/backup/full --target-dir=/backup/inc1
xtrabackup --backup --incremental-basedir=/backup/inc1 --target-dir=/backup/inc2
刷新日志并提取最新二进制日志:
FLUSH LOGS;
SHOW MASTER STATUS; -- 记录文件名和位置
mysqlbinlog /data/mysql/binlog/mysql-bin.000007 > /backup/inc.sql
2.3 恢复操作 在目标服务器上合并所有备份数据:
xtrabackup --prepare --apply-log-only --target-dir=/backup/full
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1
xtrabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2
还原到数据库目录:
xtrabackup --copy-back --target-dir=/backup/full
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
最后通过导入二进制日志文件恢复至最新状态。
三、MyCAT实现读写分离
3.1 安装与配置 部署MyCAT中间件并修改默认端口和认证信息:
<!-- server.xml -->
<property name="serverPort">3306</property>
<user name="root" password="wuhao">
<!-- schema.xml -->
<dataHost name="localhost1" balance="1" writeType="0">
<writeHost host="master" url="192.168.119.146:3306" user="root" password="123456">
<readHost host="slave" url="192.168.119.138:3306" user="root" password="123456"/>
</writeHost>
</dataHost>
3.2 功能验证 连接测试:
mysql -uroot -pwuhao -h 192.168.119.148
通过监控通用日志观察读写流量分布。当从库宕机时,读请求自动切换至主库;主库故障后,写操作无法继续。
四、Ansible核心模块应用
4.1 执行控制
配置控制节点与被管理主机之间的SSH密钥信任,修改ansible.cfg设置远程用户为root。
4.2 常用模块示例
- command/shell:执行命令,支持特殊字符使用shell模块
- script:在远程执行本地脚本
- copy:将文件从控制端复制到目标主机
- get_url:下载远程文件
- fetch:从远程获取单个文件
- file:创建目录或链接
- stat:检查文件状态
- unarchive:解压压缩包
- archive:打包生成归档文件
- hostname:修改主机名
- cron:管理定时任务
- yum/apt:软件包管理
- service:控制服务启停
- user/group:用户组管理
- lineinfile/replace:文本行替换
- selinux:策略管理
- reboot:重启系统
- mount:挂载文件系统
- setup:收集系统信息
- debug:输出调试信息