使用Ansible自动化部署MySQL数据库的详细教程与实践案例
引言
在当今快速发展的IT环境中,自动化部署和管理工具已经成为运维工程师的必备利器。Ansible作为一款开源的自动化运维工具,以其简单易用、功能强大而广受欢迎。本文将详细介绍如何使用Ansible自动化部署MySQL数据库,并通过实际案例展示其在生产环境中的应用。
一、Ansible与MySQL简介
Ansible是一款基于Python开发的自动化运维工具,通过SSH协议实现对远程主机的管理,无需在目标主机上安装客户端。其核心特点是无代理(agentless)架构,配置简单,扩展性强。
MySQL是一个广泛使用的关系型数据库管理系统,以其高性能、可靠性和易用性著称,广泛应用于Web应用程序和大型企业级应用。
二、环境准备
- 在控制机上安装Ansible:
sudo apt update sudo apt install ansible
- 生成SSH密钥:
ssh-keygen -t rsa -b 4096
- 将公钥复制到目标主机:
ssh-copy-id user@target_host
- 确保目标主机已安装Python(Ansible运行依赖)。
安装Ansible
配置SSH免密登录
准备目标主机
三、Ansible项目结构
一个典型的Ansible项目结构如下:
ansible_project/
├── ansible.cfg
├── hosts
├── roles/
│ ├── mysql/
│ │ ├── tasks/
│ │ │ ├── main.yaml
│ │ ├── templates/
│ │ │ ├── my.cnf.j2
│ │ ├── files/
│ ├── web/
│ │ ├── tasks/
│ │ │ ├── main.yaml
│ │ ├── templates/
│ │ ├── files/
├── playbooks/
│ ├── deploy_mysql.yaml
│ ├── deploy_web.yaml
四、编写Ansible Playbook
- Restart MySQL
- name: Restart MySQL service: name: mysql state: restarted
- name: Deploy MySQL
hosts: dbservers
become: yes
vars:
mysql_root_password: “old_password”
mysql_new_root_password: “new_password”
roles:
- mysql
配置Inventory文件(hosts)
[dbservers]
db1 ansible_host=192.168.1.10 ansible_user=root
db2 ansible_host=192.168.1.11 ansible_user=root
创建MySQL角色(roles/mysql)
tasks/main.yaml “`yaml
name: Install MySQL apt: name: mysql-server state: present update_cache: yes
name: Configure MySQL template: src: my.cnf.j2 dest: /etc/mysql/my.cnf notify:
name: Secure MySQL installation mysql_secure_installation: login_password: “{{ mysql_root_password }}” new_password: “{{ mysql_new_root_password }}” remove_anonymous_users: yes remove_test_database: yes disallow_root_login_remotely: yes
”`
templates/my.cnf.j2
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
handlers/main.yaml “`yaml
”`
编写Playbook(playbooks/deploy_mysql.yaml)
”`yaml
”`
五、执行Playbook
在控制机上执行以下命令,部署MySQL数据库:
ansible-playbook -i hosts playbooks/deploy_mysql.yaml
六、实践案例:部署MySQL高可用集群
- 三台MySQL服务器(主从复制)
- 一台负载均衡器(如HAProxy)
- name: Configure MySQL replication
mysql_replication:
mode: master
login_password: “{{ mysql_new_root_password }}”
replicate_do_db:
- mydatabase
- tasks/main.yaml
- templates/haproxy.cfg.j2
环境描述
配置主从复制
roles/mysql/tasks/main.yaml中添加主从配置任务: “`yaml
”`
对于从服务器,修改mode
为slave
并配置主服务器信息。
配置HAProxy
创建HAProxy角色(roles/haproxy):
- name: Install HAProxy
apt:
name: haproxy
state: present
- name: Configure HAProxy
template:
src: haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
notify:
- Restart HAProxy
”`cfg frontend mysql_front bind *:3306 default_backend mysql_back
backend mysql_back
balance roundrobin
server db1 192.168.1.10:3306 check
server db2 192.168.1.11:3306 check
- **handlers/main.yaml**
```yaml
- name: Restart HAProxy
service:
name: haproxy
state: restarted
编写高可用集群Playbook(playbooks/deploy_ha_mysql.yaml)
”`yaml
name: Deploy MySQL HA Cluster hosts: dbservers become: yes vars: mysql_root_password: “old_password” mysql_new_root_password: “new_password” roles:
- mysql
name: Deploy HAProxy hosts: loadbalancer become: yes roles:
- haproxy
”`
执行高可用集群部署
ansible-playbook -i hosts playbooks/deploy_ha_mysql.yaml
七、总结
通过本文的详细教程和实践案例,我们展示了如何使用Ansible自动化部署MySQL数据库,包括单机版本和高可用集群。Ansible的强大功能和灵活性,使得复杂的环境部署变得简单高效,极大地提升了运维工作的效率和质量。