Ansible简介:Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用、安装软件、执行命令、配置和编排任务。后面会提到批量安装zabbix_agenet客户端

一、Ansible工作机制,原理说明

从图中可以看出ansible分为以下几个部分:

1)Control Node:控制机器

2)Inventory:主机清单

3)Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行

4)Modules(Core|Custom):模块,用于执行某个具体的任务

5)connection plugin (连接插件):ansible 通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机

二、Ansible执行流程

简单的说,运行ansible时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

三、安装Ansible准备工作

一台控制主机:192.168.0.202

三台管理主机:(作为测试)

  192.168.0.200

  192.168.0.201

  192.168.0.203

备注:如果被管理主机有外网IP地址,控制主机可以是自己的虚拟机

安装要求:

  centos6版本以上以及能使用python命令和pip命令

  备注:centos6系统自动python2.6 。centos7系统自动python2.7。pip命令是基于python安装python模块的命令

四、安装ansiable

  1、安装方法一,yum安装(推荐)

  yum install epel-release -y

  yum install ansible -y

  2、安装方法二,安装python下的ansible模块

  pip install ansible

五、配置控制主机管理服务器

  1)vim /etc/ansible/hosts  添加被管理的机器

  192.168.0.200

  192.168.40.70:88 ansible_ssh_user=root ansible_ssh_pass=1234567899
  server ansible_ssh_host=192.168.40.20 ansible_ssh_pass="1234567899" ansible_ssh_port=8822
   备注。这几种写法都行。默认端口为22。默认用户为root。server为主机名。推荐后面2种,将公钥拷贝到管理主机中时,可以免密码

  2)在控制主机中生成ssh密钥对

  ssh-keygen -t rsa

  一直回车,即在$HOME/.ssh目录下生成id_rsa和id_rsa.put私钥和公钥两个文件

  备注:为了安全也可在生成密钥的时候设置密码,ansible每次执行命令的时候,都会提示输入密钥密码,可通过下面的命令记住密码。

    ssh-agent bsh

    ssh-add ~/.ssh/id_rsa

  3) 将公钥拷贝到管理主机中.ssh/authorized_keys文件中,实现免密码登录远程管理主机

  ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.200  # 默认端口22

  ssh-copy-id -i  ~/.ssh/id_rsa.pub "-p 502 root@119.75.216.201"  # 修改了特殊端口

  如果在/etc/ansible/hosts中的主机有用户名,端口,密码。这里后面不需要再次输入密码

  注:ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中

  4)调整ansible.cfg参数,优化

  vim /etc/ansible/ansible.cfg

  1、禁用每次执行ansible命令检查 ssh key host.

    host_key_checking = False

  2、开启日志记录

    log_path = /var/log/ansible.log

  3、ansible连接加速配置

1
2
3
4
5
6
7
8
9
10
11
[accelerate]
#accelerate_port = 5099
accelerate_port = 10000
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0
 
# If set to yes, accelerate_multi_key will allow multiple
# private keys to be uploaded to it, though each user must
# have access to the system via SSH to add a new key. The default
# is "no".
accelerate_multi_key = yes

六、测试。

6.1)测试在管理机器批量执行一个ping 命令

说明,每台机器都成功执行了ping 命令

6.2)批量安装zabbix_agent客户端

vim /root/tools/zabbix.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
# yum 安装,# 号为注释
# 注意需要关闭selinux
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
# setenforce 0 
# 仅适用于centos6版本,并且zabbix为第一次安装
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpm
yum install zabbix-sender zabbix-agent zabbix -y
cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf_ori.bak
# 192.168.40.21 位zabbix服务端的监控地址
sed -"s/Server=127.0.0.1/Server=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf
#sed -i "s/ServerActive=127.0.0.1/ServerActive=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf
#sed -i "s/Hostname=Zabbix server/Hostname=192.168.40.21/" /etc/zabbix/zabbix_agentd.conf
cp  /etc/sysconfig/iptables /etc/sysconfig/iptables_ori.bak
sed -'/^COMMIT/i\-A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT' /etc/sysconfig/iptables
service iptables restart
service zabbix-agent start
chkconfig zabbix-agent on

 ansible all -m copy -a "src=/root/tools/zabbix.sh dest=/root"   # 推送文件至管理主机

 ansible all -a "/bin/sh /root/zabbix.sh"  # 远程执行脚本文件

执行完毕后,连接一下管理主机,查看zabbix_agent是否启动成功

七、分组测试结果

1)hosts文件,分组

[web01]
myredis ansible_ssh_host=192.168.10.25 ansible_ssh_pass="123456" ansible_ssh_port=22
myweb ansible_ssh_host=192.168.10.242 ansible_ssh_pass="123456" ansible_ssh_port=22

[db01]
server ansible_ssh_host=192.168.10.5 ansible_ssh_pass="123456" ansible_ssh_port=22

如果可以使用ssh 免密登录服务器的话

[web]
k1 ansible_ssh_host=192.168.10.41 ansible_ssh_user=root ansible_ssh_pass=123456
k3 ansible_ssh_host=192.168.10.20

 k3 ansible_ssh_host=192.168.10.20  

ansible_ssh_host=192.168.10.20  

只要有IP在,就可以

2)执行web01组内容

[root@web01 ansible]# ansible web01 -a "df -h"
myweb | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  2.0G   13G  14% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   32M  149M  18% /boot

myredis | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   17G  10% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   27M  153M  15% /boot

3)执行单台机器内容

[root@web01 ansible]# ansible myweb -a "df -h"
myweb | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  2.0G   13G  14% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   32M  149M  18% /boot

4)特别注意前面定义的主机名,最好不要重名,建议使用IP地址

5)ls显示文件

[root@k8s6 .ansible]# ansible web -a 'ls /root/.ssh/'
k5 | CHANGED | rc=0 >>
authorized_keys
id_rsa
id_rsa.pub

k4 | CHANGED | rc=0 >>
authorized_keys
id_rsa.pub

k3 | CHANGED | rc=0 >>
authorized_keys
id_rsa
id_rsa.pub

八、ansible命令的总结

hosts文件写法===》可考虑加密该文件

  192.168.40.70:88 ansible_ssh_user=root ansible_ssh_pass=1234567899
  server ansible_ssh_host=192.168.40.20 ansible_ssh_pass="1234567899" ansible_ssh_port=8822

ssh-copy-id -i  ~/.ssh/id_rsa.pub "-p 8822 root@192.168.1.167" # 拷贝公钥

ansible + 主机组名称 + -m + 模块名称 + -a + 参数

主机组名称,即hosts中定义的主机组名称 

all 指所有主机
-m 指使用模块,后加指定的模块名称 
-a 指传给模块的参数

ansible all -a "mkdir -p /python/python"             # 执行管理主机中的命令

ansible all -m copy -a "src=/root/tools/zabbix.sh dest=/root"    # 拷贝文件至管理主机

ansible all -a "/bin/sh /root/zabbix.sh"             # 远程执行脚本文件

ansible zabbix -m shell  -a "free -g"                                                  # 调用shell命令

 

ansible命令的并发

-f 参数。默认为 5。执行很多机器的时候,可以选择加该参数

 

ansible命令自主选择执行的文件host

-i 参数。默认为 /etc/ansible/hosts

 

实例:ansible zk -m shell -a "sudo yum install wget -y" -f 1 -i /etc/ansible/hosts      循环执行,线程数为1

原文链接:http://blog.csdn.net/xyang81/article/details/51568227

posted on 2018-07-18 19:14  可口_可乐  阅读(4109)  评论(0编辑  收藏  举报