关于ansible
1.Ansible 是什么
Ansible 简单的说是一个配置管理系统(configuration management system)。
你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它
使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将
代码部署到任意数量的服务器上!
2.Ansible能做什么
ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。
比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。
比如:将某个文件一次性拷贝到100台服务器上。
比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。
这些场景中我们都可以使用到ansible。
3.Ansible特性
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
4.Ansible架构
5.Ansible工作原理
Test1 172.25.44.11 服务端
Test2 172.25.44.12 客户端
[root@test1 ~]# yum install gcc zlib zlib-devel openssl openssl-devel -y
[root@test1 ~]# ls
ansible-1.7.2.tar.gz MarkupSafe-0.9.3.tar.gz Python-2.7.8.tgz
ecdsa-0.11.tar.gz paramiko-1.15.1.tar.gz setuptools-7.0.tar.gz
Jinja2-2.7.3.tar.gz pycrypto-2.6.1.tar.gz simplejson-3.6.5.tar.gz
[root@test1 ~]# tar xvzf Python-2.7.8.tgz
[root@test1 ~]# cd Python-2.7.8
[root@test1 Python-2.7.8]# ./configure --prefix=/usr/local
[root@test1 Python-2.7.8]# make && make install
[root@test1 Python-2.7.8]# cd /usr/local/include/python2.7/
[root@test1 python2.7]# cp -a ./* /usr/local/include/
#备份旧版本的pyrhon,并链接新版本的python
[root@test1 python2.7]# cd /usr/bin/
[root@test1 bin]# mv python python.old
[root@test1 bin]# ln -s /usr/local/bin/python2.7 /usr/local/bin/python
[root@test1 bin]# rm -fr /usr/local/python
[root@test1 bin]# cp /usr/local/bin/python2.7 /usr/bin/python
[root@test1 bin]# vim /usr/bin/yum #修改yum脚本,使其指向旧版本python,以避免其无法运行
1 #!/usr/bin/python --> #!/usr/bin/python2.4
# setuptools模块安装
[root@test1 bin]# cd
[root@test1 ~]# tar zxf setuptools-7.0.tar.gz
[root@test1 ~]# ls
ansible-1.7.2.tar.gz paramiko-1.15.1.tar.gz setuptools-7.0
ecdsa-0.11.tar.gz pycrypto-2.6.1.tar.gz setuptools-7.0.tar.gz
Jinja2-2.7.3.tar.gz Python-2.7.8 simplejson-3.6.5.tar.gz
MarkupSafe-0.9.3.tar.gz Python-2.7.8.tgz
[root@test1 ~]# cd setuptools-7.0
[root@test1 setuptools-7.0]# python setup.py install
# pycrypto模块安装
[root@test1 setuptools-7.0]# cd
[root@test1 ~]# tar zxf pycrypto-2.6.1.tar.gz
[root@test1 ~]# cd pycrypto-2.6.1
[root@test1 pycrypto-2.6.1]#
[root@test1 pycrypto-2.6.1]# python setup.py install
# pyYAML模块安装
[root@test1 pycrypto-2.6.1]# cd
[root@test1 ~]# tar zxf PyYAML-3.11.tar.gz
[root@test1 ~]# cd Py
Python-2.7.8/ PyYAML-3.11/
Python-2.7.8.tgz PyYAML-3.11.tar.gz
[root@test1 ~]# cd PyYAML-3.11
[root@test1 PyYAML-3.11]# python setup.py install
# jinja2模块安装
[root@test1 PyYAML-3.11]# cd
[root@test1 ~]# tar zxf MarkupSafe-0.9.3.tar.gz
[root@test1 ~]# cd MarkupSafe-0.9.3
[root@test1 MarkupSafe-0.9.3]# python setup.py install
[root@test1 MarkupSafe-0.9.3]# cd
[root@test1 ~]# tar zxf Jinja2-2.7.3.tar.gz
[root@test1 ~]# cd Jinja2-2.7.3
[root@test1 Jinja2-2.7.3]# python setup.py install
# paramiko 模块安装
[root@test1 Jinja2-2.7.3]# cd
[root@test1 ~]# tar zxf ecdsa-0.11.tar.gz
[root@test1 ~]# cd ecdsa-0.11
[root@test1 ecdsa-0.11]# python setup.py install
[root@test1 ecdsa-0.11]# cd
[root@test1 ~]# tar zxf paramiko-1.15.1.tar.gz
[root@test1 ~]# cd paramiko-1.15.1
[root@test1 paramiko-1.15.1]# python setup.py install
# simplejson模块安装
[root@test1 paramiko-1.15.1]# cd
[root@test1 ~]# tar zxf simplejson-3.6.5.tar.gz
[root@test1 ~]# cd simplejson-3.6.5
[root@test1 simplejson-3.6.5]# python setup.py install
# ansible安装
[root@test1 simplejson-3.6.5]# cd
[root@test1 ~]# tar zxf ansible-1.7.2.tar.gz
[root@test1 ~]# cd ansible-1.7.2
[root@test1 ansible-1.7.2]# python setup.py install
#配置免密登陆
[root@test1 ~]# ssh-keygen #生成密钥
[root@test1 ansible]# ssh-copy-id server1
[root@test1 ansible]# cd
[root@test1 ~]# scp -r .ssh/ server2:/root #把钥匙传给客户端
#测试免密连接
[root@test1 ~]# ssh server2 #免密连接成功
Last login: Thu Aug 16 17:14:58 2018 from server1
[root@test2 ~]# ssh server1
Last login: Thu Aug 16 18:00:15 2018 from gateway
[root@test1 ~]# exit
logout
#创建文件
[root@test1 ~]# vim /etc/ansible/hosts
45 [testhosts]
46
47 127.0.0.1
48 server2 #客户端的解析
[root@test1 ~]# ansible testhosts -m command -a 'w' # 查看服务器状态,‘w’表示查看
[root@test1 ~]# vim /tmp/test.sh #在服务端创建文件
1 #!/bin/bash
2 echo `date` > /tmp/ansible_test.txt
[root@test1 ~]# ansible testhosts -s -m copy -a 'src=/tmp/test.sh dest=/tmp/test.sh mode=0755' #利用ansible可以方便地将本地的目录或者文件同步到远程服务器
[root@test1 ~]# ansible testhosts -m shell -a '/tmp/test.sh' #批量执行该脚本
server2 | success | rc=0 >>
127.0.0.1 | success | rc=0 >>
#测试
[root@test2 ~]# vim /tmp/ansible_test.txt #时间成功导入