使用Ansible自动化部署MySQL MHA高可用集群的实践指南
一、环境准备
在开始部署之前,我们需要准备以下环境:
- 操作系统:CentOS 7.x 或其他兼容的Linux发行版。
- MySQL版本:MySQL 5.6 或更高版本。
- Ansible版本:Ansible 2.9 或更高版本。
- 主机配置:至少三台服务器,分别用作MySQL主节点、从节点和MHA管理节点。
二、安装Ansible
首先,在管理节点上安装Ansible。可以通过以下命令进行安装:
sudo yum install epel-release -y
sudo yum install ansible -y
安装完成后,验证Ansible版本:
ansible --version
三、编写Ansible playbook
Ansible playbook是Ansible的核心配置文件,用于定义任务和角色。以下是一个示例playbook,用于部署MySQL MHA集群。
1. 目录结构
mysql_mha_ansible/
├── inventory
├── roles
│ ├── common
│ │ ├── tasks
│ │ │ └── main.yml
│ ├── mysql
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── my.cnf.j2
│ ├── mha
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── app1.cnf.j2
├── site.yml
2. inventory文件
inventory
文件用于定义主机和组:
[master]
master_node ansible_host=192.168.1.10
[slaves]
slave1_node ansible_host=192.168.1.11
slave2_node ansible_host=192.168.1.12
[mha_manager]
mha_manager_node ansible_host=192.168.1.13
3. common角色
common
角色用于配置基础环境:
# roles/common/tasks/main.yml
- name: Install common packages
yum:
name: "{{ item }}"
state: present
loop:
- epel-release
- git
- vim
- ntp
4. mysql角色
mysql
角色用于安装和配置MySQL:
# roles/mysql/tasks/main.yml
- name: Install MySQL
yum:
name: mysql-community-server
state: present
- name: Copy MySQL configuration
template:
src: my.cnf.j2
dest: /etc/my.cnf
notify:
- Restart MySQL
- name: Start MySQL service
service:
name: mysqld
state: started
enabled: yes
# roles/mysql/templates/my.cnf.j2
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id={{ ansible_fqdn }}
5. mha角色
mha
角色用于安装和配置MHA:
# roles/mha/tasks/main.yml
- name: Install MHA Node
yum:
name: mha4mysql-node
state: present
- name: Install MHA Manager
yum:
name: mha4mysql-manager
state: present
when: inventory_hostname in groups['mha_manager']
- name: Copy MHA configuration
template:
src: app1.cnf.j2
dest: /etc/mha/app1.cnf
when: inventory_hostname in groups['mha_manager']
- name: Start MHA Manager
command: masterha_manager --conf=/etc/mha/app1.cnf
when: inventory_hostname in groups['mha_manager']
# roles/mha/templates/app1.cnf.j2
[server default]
user=mha_user
password=mha_password
repl_user=repl_user
repl_password=repl_password
[server1]
hostname=master_node
candidate_master=1
[server2]
hostname=slave1_node
[server3]
hostname=slave2_node
[binlog_server]
hostname=slave2_node
[mysql_server]
hostname=mha_manager_node
6. site.yml文件
site.yml
文件用于定义整个部署流程:
# site.yml
- name: Deploy MySQL MHA Cluster
hosts: all
become: yes
roles:
- common
- mysql
- mha
四、执行Ansible playbook
在管理节点上执行以下命令,开始部署MySQL MHA集群:
ansible-playbook -i inventory site.yml
五、验证部署结果
部署完成后,可以通过以下步骤验证集群状态:
- 检查MySQL服务:
ansible all -m shell -a "systemctl status mysqld"
- 检查MHA管理节点状态:
ansible mha_manager -m shell -a "masterha_check_status --conf=/etc/mha/app1.cnf"
六、总结
通过使用Ansible自动化部署MySQL MHA高可用集群,我们可以极大地简化部署过程,提高运维效率。本文提供了一个基本的实践指南,读者可以根据实际需求进行扩展和定制。希望本文能对你有所帮助,祝你在高可用数据库运维的道路上越走越远!