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

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

 

Ansible工做机制

 
 
从图中能够看出ansible分为如下几个部份:
 
1> Control Node:控制机器
2> Inventory:主机清单,配置管理主机列表
3> Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行。
4> Modules(Core | Custom):模块,用于执行某个具体的任务
5> connection plugin(链接插件):Ansible经过不一样的协议链接到远程主机上,执行指定的命令。默认采用ssh协议链接远程主机。
 

2、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.五、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
 
 
相关文章
相关标签/搜索