自动化运维工具--ansible的安装配置

1.ansible是新出现的自动化运维工具,基于Python开发
集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点
实现了批量系统配置、批量程序部署、批量运行命令等功能。
2.ansible是基于模块工作的,本身没有批量部署的能力。
真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

实验环境:
server21 172.25.70.2 ansible端,服务端
server3 172.25.70.3 客户端

**注意:**
Ansible是用Python开发的,使用ansible需要操作系统有Python,建议Python版本2.6以上。
Ansible安装所依赖插件较多,具体安装过程如下:
注:所有的软件包全部在/usr/local/目录下进行安装 
基本安装
安装gcc,用于编译Python源码
yum install gcc
安装zlib(如果没安装,在安装setuptools时可能会出现的错误RuntimeError:Compression requires the (missing) zlib module)
yum install zlib zlib-devel -y
安装openssl(如果不安装,使用easy_install时可能会出现的错误:error:Could not find suitable distribution for Requirement.parse('jinja2'))
本实践未使用这种安装方式,就如下一个一个模块来安装(具体命令:easy_install pycrypto pyyaml jinja2 markupsafe ecdsa paramiko simplejson)

yum install openssl openssl-devel gcc zlib zlib-devel -y
这里写图片描述

(1)、python2.7安装
https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
# tar xvzf Python-2.7.8.tgz
# cd Python-2.7.8
# ./configure --prefix=/usr/local
# make
# make install

这里写图片描述
这里写图片描述
这里写图片描述

## 将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件
# cd /usr/local/include/python2.7
# cp -a ./* /usr/local/include/


## 备份旧版本的python,并符号链接新版本的python
# cd /usr/bin
# mv python python.old
# ln -s /usr/local/bin/python2.7 /usr/local/bin/python
# rm -f /usr/bin/python && cp /usr/local/bin/python2.7 /usr/bin/python
这两条命令均执行不然后面测试会报错文件/usr/bin/python不存在

## 修改yum脚本,使其指向旧版本的python,已避免其无法运行
# vim /usr/bin/yum
#!/usr/bin/python  -->  #!/usr/bin/python2.4

这里写图片描述
这里写图片描述

(2)、setuptools模块安装
https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
# tar xvzf setuptools-7.0.tar.gz
# cd setuptools-7.0
# python setup.py install

这里写图片描述
这里写图片描述

(3)、pycrypto模块安装
https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
[root@server2 setuptools-7.0]# cd 
[root@server2 ~]# ls
pycrypto-2.6.1.tar.gz  Python-2.7.8.tgz  setuptools-7.0.tar.gz
Python-2.7.8           setuptools-7.0
[root@server2 ~]# tar zxf pycrypto-2.6.1.tar.gz 
[root@server2 ~]# cd pycrypto-2.6.1
[root@server2 pycrypto-2.6.1]# python setup.py install

这里写图片描述

(4)、PyYAML模块安装
[root@server2 ~]# tar zxf PyYAML-3.11\(1\).tar.gz 
[root@server2 ~]# cd PyYAML-3.11
[root@server2 PyYAML-3.11]# ls
CHANGES   ext  lib3     PKG-INFO  setup.cfg  tests
examples  lib  LICENSE  README    setup.py
[root@server2 PyYAML-3.11]# python setup.py install

这里写图片描述
这里写图片描述

(5)、Jinja2模块安装
[root@server2 ~]# tar xvzf MarkupSafe-0.9.3.tar.gz
[root@server2 ~]# cd MarkupSafe-0.9.3
[root@server2 MarkupSafe-0.9.3]# ls
AUTHORS  MANIFEST.in  MarkupSafe.egg-info  README.rst  setup.py
LICENSE  markupsafe   PKG-INFO             setup.cfg
[root@server2 MarkupSafe-0.9.3]# python setup.py install

这里写图片描述

[root@server2 ~]#  tar xvzf Jinja2-2.7.3.tar.gz
[root@server2 ~]# cd Jinja2-2.7.3
[root@server2 Jinja2-2.7.3]# ls
artwork  docs      jinja2           Makefile     README.rst    setup.py
AUTHORS  examples  Jinja2.egg-info  MANIFEST.in  run-tests.py
CHANGES  ext       LICENSE          PKG-INFO     setup.cfg
[root@server2 Jinja2-2.7.3]# python setup.py install

这里写图片描述

(6)、paramiko模块安装
[root@server2 ~]# tar xvzf ecdsa-0.11.tar.gz
[root@server2 ~]# cd ecdsa-0.11
[root@server2 ecdsa-0.11]# ls
ecdsa  LICENSE  MANIFEST.in  NEWS  PKG-INFO  README.md  setup.py
[root@server2 ecdsa-0.11]# python setup.py install

这里写图片描述

[root@server2 ~]#  tar xvzf paramiko-1.15.1.tar.gz
[root@server2 ~]# cd paramiko-1.15.1
[root@server2 paramiko-1.15.1]# ls
demos    MANIFEST.in        PKG-INFO   setup_helper.py  tests
docs     paramiko           README     setup.py
LICENSE  paramiko.egg-info  setup.cfg  test.py
[root@server2 paramiko-1.15.1]# python setup.py install

这里写图片描述

(7)、simplejson模块安装
[root@server2 ~]#  tar xvzf simplejson-3.6.5.tar.gz
[root@server2 ~]# cd simplejson-3.6.5
[root@server2 simplejson-3.6.5]# ls
CHANGES.txt  LICENSE.txt  README.rst  setup.py
conf.py      MANIFEST.in  scripts     simplejson
index.rst    PKG-INFO     setup.cfg   simplejson.egg-info
[root@server2 simplejson-3.6.5]#  python setup.py install

这里写图片描述

(8)、ansible安装
[root@server2 ~]# tar xvzf ansible-1.7.2.tar.gz 
[root@server2 ~]# cd ansible-1.7.2
[root@server2 ansible-1.7.2]# ls
bin                   docs      lib          plugins       ticket_stubs
CHANGELOG.md          docsite   library      README.md     VERSION
CODING_GUIDELINES.md  examples  Makefile     RELEASES.txt
CONTRIBUTING.md       hacking   MANIFEST.in  setup.py
COPYING               legacy    packaging    test
[root@server2 ansible-1.7.2]# python setup.py install

这里写图片描述
ansible的基础配置:

[root@server2 ansible-1.7.2]# cd examples/
[root@server2 examples]# ls
ansible.cfg  DOCUMENTATION.yml  hosts  issues  playbooks  scripts
[root@server2 examples]# mkdir /etc/ansible
[root@server2 examples]# cp hosts ansible.cfg /etc/ansible/
[root@server2 examples]# ls -l /etc/ansible/
total 12
-rw-r--r-- 1 root root 7172 816 23:44 ansible.cfg
-rw-r--r-- 1 root root  965 816 23:44 hosts
[root@server2 examples]# pwd
/root/ansible-1.7.2/examples

默认配置文件位置为/etc/ansible/ansilble.cfg,配置文件位置可以修改。
Ansible 按照如下位置和顺序来查找ansible.cfg 文件:
1.ANSIBLE_CONFIG 环境变量所指定的文件。
2../ansible.cfg(当前目录下的ansible.cfg)。
3.~/.ansible.cfg(家目录下的.ansible.cfg)。
4./etc/ansible/ansible
配置ssh登录
[root@server2 examples]# ssh-keygen
这里写图片描述

[root@server2 ~]# ssh-copy-id server2
The authenticity of host 'server2 (172.25.70.2)' can't be established.
ECDSA key fingerprint is 73:38:80:eb:76:e9:67:50:6c:2e:33:42:3e:23:a6:94.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@server2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'server2'"
and check to make sure that only the key(s) you wanted were added.

[root@server2 ~]# scp -r .ssh/ server3:/root
The authenticity of host 'server3 (172.25.70.3)' can't be established.
ECDSA key fingerprint is 6c:df:26:2b:73:6c:15:cc:55:3b:48:9c:0b:52:cc:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server3,172.25.70.3' (ECDSA) to the list of known hosts.
root@server3's password: 
id_rsa                                        100% 1679     1.6KB/s   00:00    
id_rsa.pub                                    100%  406     0.4KB/s   00:00    
known_hosts                                   100%  362     0.4KB/s   00:00    
authorized_keys                               100%  406     0.4KB/s   00:00    
[root@server2 ~]# getenforce 
Disabled
[root@server2 ~]# ssh 172.25.70.3
Last login: Thu Aug 16 21:56:04 2018 from 172.25.70.250
[root@server3 ~]# logout
Connection to 172.25.70.3 closed.

这里写图片描述
在客户端(server3):

[root@server3 Python-2.7.8]# cd
[root@server3 ~]# getenforce  ##查看selinux状态
Disabled
[root@server3 ~]# ssh root@172.25.70.2  ##可以免密链接
Last login: Thu Aug 16 21:55:30 2018 from 172.25.70.250
[root@server2 ~]# logout
Connection to 172.25.70.2 closed.

修改ansible的hosts文件
在末尾添加:
vim /etc/ansible/hosts 如果文件中写的是名字得添加解析/etc/hosts
这里写图片描述
进行测试可以Ping的通:
[root@server2 ~]# ansible all -m ping
这里写图片描述

vim /etc/ansible/ansible.cfg
1> 禁用每次执行ansbile命令检查ssh key host
host_key_checking = False
2> 开启日志记录
log_path = /var/log/ansible.log
3> ansible连接加速配置
将179181182注释,在180行写入

这里写图片描述
这里写图片描述

172.25.70.2的机器:
 vim  /etc/ansible/hosts
在末尾添加:
[testhosts]    #testhosts 是服务器组的名字,用来统一管理服务器
127.0.0.1
xbw.com  #xbw.com是172.25.70.3 这台服务器,也可以直接写IP地址。

这里写图片描述

如果写成域名的形式,则需要修改一下dns的指向或者/etc/hosts ,让dns可以找到xbw.com的IP指向了哪个服务器。
 vim  /etc/hosts
加入:172.25.70. xbw.com

这里写图片描述
执行w命令,查看服务器的状态:
ansible testhosts -m command -a ‘w‘
这里写图片描述

ansible拷贝文件或者目录
在服务端创建文件
 vi  /tmp/test.sh
  #!/bin/bash
  echo `date` > /tmp/ansible_test.txt
利用ansible可以方便地将本地的目录或者文件同步到远程服务器,
具体命令:
ansible testhosts -s -m copy -a 'src=/tmp/test.sh dest=/tmp/test.sh mode=0755'

这里写图片描述
可以批量执行该脚本:
这里写图片描述
已经创建了/tmp/ansible_test.txt文件了,并在该文件中成功写入了结果。测试成功
这里写图片描述

ansible实现远程任务执行

利用ansible的cron模块,给远程的服务器批量增加任务计划
每个星期天都重新创建一个文件/tmp/day.txt
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值