CentOS7系统 ansible自动化部署多台服务器部署



 



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的优点

简单易用,学习门槛低、问题少、安装快、执行快,可进行批量命令和模块扩展,操作完全依赖 SSH 而不需要安装 agent。Ansible 结合 Docker、Mesos、Puppet、Vagrant、Git 等系统可以构建出非常好的自动化运维平台。


 


ansible的缺点

简单的设计从而导致没有依赖管理功能,另外当被管理的服务器达到一定数量时,执行效率会大大降低。


 


一台控制主机:192.168.222.137


 


三台管理主机:


l 192.168.222.135


l 192.168.222.136


l 192.168.222.129


 


安装要求:


l 控制服务器:需要安装 Python2.6/2.7


l 管理服务器:需要安装 Python2.4 以上版本,若低于 Python2.5 需要安装 pythonsimplejson; 若启用了 selinux,则需要安装 libselinux-python。


 


临时关闭selinux


setenforce 0


 


本次安装基于CentOS7系统环境、Python2.7.5、root用户。


 


yum安装

yum -y install epel-release ansible


 


配置

控制主机:用于控制其它机器的主机 


管理主机:被控制主机管理的主机


配置管理主机

vim /etc/ansible/hosts


在hosts文件中添加管理主机的IP地址列表:


 


 


 


配置控制主机SSH密钥

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


ssh-keygen -t rsa


 


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



 


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


 


ssh-agent bsh


ssh-add ~/.ssh/id_rsa


 


 


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

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.135


ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.136


ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.129


 


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


 


 


 


 


 


扩展内容:

免交互批量分发公钥脚本:


      #!/bin/bash


            \rm  /root/.ssh/id_dsa*


            ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""


 


            for ip in 31 41 7


            do


            sshpass -p333333 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"


            done            


done密码


ssh-copy-id 指定ssh  17524端口在/root/.ssh/下添加config文件内容为port 17524


 


检查是否可以进行基于密钥远程管理

   ssh 172.16.1.31 uptime


   免交互批量检查测试脚本


 


   #!/bin/bash/


 


   if [ $# -ne 1 ];then


   echo "input one agrs"


   exit 1


   fi


 


   for ip in 31 41 7 8 9


   do


   echo ===== info 172.16.1.$ip =====


   ssh -p17524 172.16.1.$ip $1


   echo ""


   done


ansible配置

vim /etc/ansible/ansible.cfg


 


1> 禁用每次执行ansbile命令检查ssh key host


host_key_checking = False


 


2> 开启日志记录


log_path = /var/log/ansible.log


 


3> ansible连接加速配置



 


 


测试

最后测试下在三台管理机器批量执行一个date命令


ansible all -m command -a 'date'



 


 


主机分组管理

vim /etc/ansible/hosts


 


 


 


测试ansible


 


 


 


#参数解释:

 


n -i:  指定主机列表文件        


n -u: 指定远程主机登陆用户        


n -m:指定使用ansible 的模块                


n -a: 指定模块下使用的参数        


n -k: 指定远程登陆用户的密码


 


测试远程主机状态,查看是否存活


 


ansible all -m ping