一、Ansible概述
Ansible是一款开源的自动化运维工具,由Michael DeHaan于2012年创建,2015年被红帽(Red Hat)收购(收购金额超1亿美元)。它基于Python开发,通过SSH协议实现远程节点管理,无需在被控端安装任何客户端代理(Agentless)。这种设计使其成为轻量级、易部署的自动化解决方案,特别适合批量系统配置、应用程序部署和任务编排等场景。
核心特点
无代理架构:直接通过SSH管理节点,减少环境复杂性。
声明式语言:使用YAML格式的Playbook描述任务,降低学习成本。
模块化设计:提供超过3000个内置模块(如 copy 、 service ),支持Python扩展自定义模块。
幂等性:同一任务多次执行结果一致,避免意外变更。
一、安装与配置
1. 安装步骤(以CentOS为例)
# 安装EPEL源
yum install epel-release -y
# 安装Ansible
yum install ansible -y
# 验证安装
ansible --version
2. 关键配置
主机清单(/etc/ansible/hosts)
示例配置:
[web_servers]
192.168.95.11 ansible_ssh_port=22 ansible_ssh_user=root
192.168.95.12
[db_servers]
192.168.95.13
[all:vars]
ansible_ssh_private_key_file=/root/.ssh/id_rsa
SSH免密登录设置
ssh-keygen -t rsa -P ""
ssh-copy-id [email protected] # 向所有节点分发公钥
配置文件(/etc/ansible/ansible.cfg)调优项
forks = 50 # 并发连接数
host_key_checking = False # 跳过SSH指纹验证
log_path = /var/log/ansible.log
2. Playbook编写示例
---
- name: 部署Web应用
hosts: web_servers
vars:
app_version: "2.0"
tasks:
- name: 安装Nginx
yum:
name: nginx
state: latest
- name: 复制配置文件
copy:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
backup: yes
notify: 重启Nginx # 触发处理器
- name: 启动服务
service:
name: nginx
state: started
enabled: yes
handlers:
- name: 重启Nginx
service:
name: nginx
state: restarted
此Playbook实现了应用部署→配置更新→服务启动的全流程,并包含配置回滚(备份)和服务重启的联动机制。
二、下面开始部署MySQL 5.7
小编我采用MySQL脚本的方式传输到目标主机,并执行此脚本方式,这样配置相对简单且高效
2.1,创建文件
Playbook文件 ( deploy_mysql.yml )
---
- name: 部署MySQL 5.7到目标主机
hosts: target_server
become: yes
vars:
src_dir: /usr/local/
tasks:
- name: 上传MySQL安装脚本
copy:
src: mysql5.7.sh
dest: "{{ src_dir }}/mysql5.7.sh"
mode: 0755
- name: 上传MySQL安装包
copy:
src: mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
dest: "{{ src_dir }}/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz"
- name: 执行安装脚本
command: "{{ src_dir }}/mysql5.7.sh"
args:
chdir: "{{ src_dir }}"
async: 600
poll: 0
2.2,使用方法
创建Inventory文件
创建 hosts.ini 文件:
[target_server]
192.168.1.128
[target_server:vars]
ansible_user=your_username # 替换为目标主机的用户名
ansible_ssh_private_key_file=~/.ssh/id_rsa # 替换为SSH密钥路径
ansible_become_password=your_sudo_password # 若需要sudo密码
2.3,准备文件
确保以下文件与Playbook在同一目录:
mysql5.7.sh (MySQL安装脚本)
mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz (MySQL二进制包)
2.4,运行Playbook
ansible-playbook -i hosts.ini deploy_mysql.yml
2.5,安装脚本示例 ( mysql5.7.sh )
#!/bin/bash
set -e
SRC_DIR=/usr/local/src
MYSQL_DIR=/usr/local/mysql
DATA_DIR=/data/mysql
# 解压安装包
tar zxvf $SRC_DIR/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
mv /usr/local/mysql-5.7.44-linux-glibc2.12-x86_64 $MYSQL_DIR
# 创建MySQL用户
if ! id mysql &>/dev/null; then
useradd -M -s /sbin/nologin mysql
fi
# 创建数据目录
mkdir -p $DATA_DIR
chown -R mysql:mysql $DATA_DIR
# 初始化MySQL
$MYSQL_DIR/bin/mysqld --initialize-insecure --user=mysql --basedir=$MYSQL_DIR --datadir=$DATA_DIR
# 创建配置文件
cat > /etc/my.cnf <
basedir = $MYSQL_DIR
datadir = $DATA_DIR
port = 3306
socket = /tmp/mysql.sock
EOF
# 创建systemd服务
cat > /etc/systemd/system/mysqld.service <
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=$MYSQL_DIR/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 启动MySQL
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
echo "MySQL 5.7 安装完成!"
注意事项
脚本权限:
确保 mysql5.7.sh 有可执行权限 ( chmod +x mysql5.7.sh )
重要安全提示:
初始化命令 --initialize-insecure 会创建空密码的root账户
生产环境必须 在安装后运行 mysql_secure_installation
自定义调整:
修改 DATA_DIR 变量指定数据存储位置
在 my.cnf 中添加额外配置参数
总结:根据实际情况调整参数,免密配置,目标主机配置,编排配置,最后运行等待安装完成