安装Ansible自动化工具:
查看 Python 版本
python -V
查看 yum 仓库中是否存在 ansible 的 rpm 包
yum list |grep ansible
安装 ansible 服务
yum install -y ansible
修改ansible配置和主机列表hosts
1)关闭第一次使用ansible连接客户端时输入命令提示:
sed -i "s@\#host_key_checking = False@host_key_checking = False@g" /etc/ansible/ansible.cfg
指定日志路径:
sed -i "s@\#log_path = \/var\/log\/ansible.log@log_path = \/var\/log\/ansible.log@g" /etc/ansible/ansible.cfg
2)将所有主机ip加入到/etc/ansible/hosts文件中:
定义主机组和主机
cat >/etc/ansible/hosts<<EOF
[app]
192.168.137.132
192.168.137.133
EOF
补充:
默认ssh的端口为22端口,如果为其他端口号,可在主机名后面加上端口号;
如:192.168.159.131:9604 ,也可以修改配置文件中的remote_port变量值;
/etc/ansible/hosts也可以定义一个主机范围,如192.168.159.[100:200] ,表示192.168.159.100 - 192.168.159.200 的主机。
创建和配置 SSH 公钥认证(免密码登录):
按提示使用默认配置一路回车即可:
ssh-keygen -t rsa
通过ansible命令将公钥分发至各主机上:
ansible all -m authorized_key -a "user=root key='{
{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko
登陆 192.168.137.133 进行查看:
修改ansible配置,指定私钥文件路径:
sed -i "s@\#private_key_file = \/path\/to\/file@private_key_file = \/root\/.ssh\/id_rsa@g" /etc/ansible/ansible.cfg
ping 命令测试:
ansible all -m ping
使用ansible-playbook批量安装mysql:
cd /etc/ansible #进入目录
mkdir deploy-yml #创建目录
cat >/etc/ansible/deploy-yml/mysql.yml<<EOF #创建 mysql.yml 文件
- hosts: mysql-test
remote_user: root
gather_facts: False
roles:
- mysql
EOF
进入roles 创建mysql 目录 ,并创建以下目录及文件:
暂时用不到的目录为空:templates、files、handlers、meta
创建 /etc/ansible/roles/mysql/ 下的目录结构
mkdir files handlers meta tasks templates vars
tasks 下创建copy.yml
cat >tasks/copy.yml<<EOF
#复制源码至目标服务器
- name: copy mysql source code to client
copy: src={
{
mysql_package}} dest={
{
install_dir}} owner=root group=root
#复制模板文件至目标服务器
- name: copy mysql install script to client
template: src={
{
shell_dir}} dest={
{
install_dir}} owner=root group=root mode=0775
EOF
tasks 下创建install.yml
cat >tasks/install.yml<<EOF
#执行模板文件进行安装
- name: install mysql
shell: bash {
{
install_dir}}/{
{
shell_name}}
EOF
tasks 下创建main.yml
cat >tasks/main.yml<<EOF
#引用copy、install模块
- include: copy.yml
- include: install.yml
EOF
vars 下创建main.yml
cat >vars/main.yml<<EOF
mysql_version: mysql-5.7.12
#这里事先下好了包 放在指定路径下即可
mysql_package: /usr/local/mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz
shell_name : insmysql.sh
install_dir: /usr/local
shell_dir: /install/insmysql.sh
EOF
在/etc/ansible/hosts 中创建一个mysql-test的组 然后把需要安装mysql 的ip加进去
此处只做一台进行测试,批量直接在mysql-test组下添加机器即可 - - 所有机器必须做SSH免密登录
cat >>/etc/ansible/hosts<<EOF
[mysql-test]
192.168.137.133
EOF
使用 ansible-playbook -C mysql.yml 进行测试
测试没问题之后“ ansible-playbook mysql.yml ” 执行