设为首页 收藏本站
查看: 1300|回复: 0

[经验分享] ansible 安装与基本功能的使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-6 10:28:58 | 显示全部楼层 |阅读模式
实验环境:
centos6.6  IP 192.168.38.152 (安装ansible)
centos6.6  IP 192.168.38.155(hostname: web155.com,实验用的客户机)

  • 安装方法:

  利用yum 安装ansible,要求系统的python要是2.6以上

1.1  开始安装:
  1.1.1 需要在152的机器安装一下epel外部源,可以使用阿里云的源:
  更新源的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1. 首先卸载以前装的epel 以免影响
  rpm -e epel-release
2. 下载阿里提供的epel ,PS  感谢马云。
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo
3. yum clean all
4. yum makecache


  好了,其实到这里,就已经更新完毕了。

如果想全部改成阿里云的源,可以按照下面的方法进行。进行前请先将自己的源做一下备份。


1. rm -rf /etc/yum.repos.d/*    (执行此操作的时候记得事先装好wget    不然 你就得挂载光盘用rpm装wget了。)
2. wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo http://mirrors.aliyun.com/repo/Centos-6.repo

这个时候,执行 yum repolist的结果如下
[iyunv@di02 ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com




1.1.2 yum安装ansible:
   yum  install  -y  ansible

1.1.3 配置ssh 登陆

  由于ansible使用的登陆方式是ssh所以,在做实验的两台主机需要配置ssh秘钥对,这样ansible才能正常使用。
  在152 的主机上,执行:
  ssh-keygen -t rsa  直接回车即可,不用设置密钥密码。
  然后将公钥(id_rsa.pub)拷贝到155的机器上:copy-id  -i  root@IP 这个命令就能生成authorized_keys文件的,没必要一个一个无复制.pub文件,那样反而麻烦容易错误的
  本机152也要操作:
  cat  /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  chmod  600 /root/.ssh/authorized_keys
  在152和155的机器上关闭selinux: setenforce  0
  测试ssh是否可以登录:
  在152的机器:ssh   192.168.38.155 ,成功登录155的机器。

1.2 修改ansible的hosts文件
  在152的机器:
  vim  /etc/ansible/hosts  在末尾添加:
wKiom1iReHTj3iTqAAAPnu_72fc691.jpg
testhosts 是服务器组的名字,用来统一管理服务器。
web155.com是192.168.38.155 这台服务器,当然,这里可以直接写IP地址。
如果写成域名的形式,则需要修改一下dns的指向或者/etc/hosts ,让dns可以找到web155.com的IP指向了哪个服务器。
  修改/etc/hosts :
wKioL1iReVDC673cAAAvAW9sE-E315.jpg

修改完/etc/ansible/hosts 保存后退出。
现在就可以用ansible进行远程操作的测试了。

2. ansible远程操作
  2.1 执行w命令,查看服务器的状态:
  ansible  testhosts  -m command -a  'w'

wKioL1iRew_zEanfAACaomeh68U671.jpg
testhosts 是刚刚配置的远程服务器的组名,-m 后面的是ansible 的模块名字,这里用的是command 模块,-a 后面是在远程服务器是执行的命令。
由于做实验只用了两天服务器,所以将127.0.0.1的IP地址也加到了testhosts 组里了。可以看到,ansible同样也是可以将127.0.0.1 和192.168.38.155 的w 命令的执行结果返回的。

如果发现ansible执行远程命令的速度响应很慢,慢到有十几秒,可以尝试修改一下:

  • 编辑配置文件 /etc/ssh/sshd_config vim /etc/ssh/sshd_config 找到 UseDNS选项,如果没有注释,将其注释 #UseDNS yes 添加 UseDNS no
  • 找到 GSSAPIAuthentication选项,如果没有注释,将其注释 #GSSAPIAuthentication yes 添加 GSSAPIAuthentication no

    保存配置文件
  • 重启 OpenSSH服务器 /etc/init.d/sshd restart



2.2 ansible 拷贝文件或者目录
  利用ansible可以很方便地将本地的目录或者文件同步到远程的服务器:
  命令格式:

1
ansible  testhosts -m copy -a  "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mode=0644"



注意:源目录放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。如果拷贝的是文件,dest指定的名字和源的不同,并且它不是已经存在的目录,相当于拷贝过去后,又重命名。但相反,如果dest是目标机器已经存在的目录,则会直接把文件拷贝到该目录下。

ansible  testhosts -m copy  -a "src=/etc/passwd dest=/tmp/123"
这里的/tmp/123和源机器上的/etc/passwd是一致的,但如果目标机器上已经有了/tmp/123,即123是一个目录名的时候,则passwd将被拷贝到123目录下面。

2.3 ansible远程执行脚本

首次按创建一个简单的脚本:
vim  /tmp/test.sh

1
2
#!/bin/bash
echo  `date` > /tmp/ansible_test.txt




然后,将脚本分发到各个服务器,并且赋予执行权限:
ansible  testhosts  -m command -a "src=/tmp/test.sh dest=/tmp/test.sh  mode=0755"
复制的结果:
wKioL1iRlP2goGg8AABNXO-_lyg128.jpg
可以看到,已经在155的机器上复制成功了。


然后,就可以批量执行该脚本了:
ansible  testhosts  -m shell  -a  '/tmp/test.sh'
在客户端,检查一下:
wKioL1iRldeAamDjAABy3GQ6gTQ877.jpg
已经创建了/tmp/ansible_test.txt 文件了,并且在ansible_test.txt文件里写入了结果。测试成功。


这里用到了shell模块,它是支持远程执行命令,并且能够使用管道符号:
ansible  testhosts -m shell -a  'cat /etc/passwd | wc -l'


2.4 ansible实现远程任务执行
  利用ansible 的cron 模块,给远程的服务器批量增加任务计划
  ansible  testhosts -m cron  -a "name='test cron' job='/bin/touch  /tmp/124.txt'  weekday=6"
  每个星期天都重新创建一个文件/tmp/124.txt
wKioL1iRmdbiQe0eAACYBFKhN0w264.jpg

如果想删除任务计划,则只要增加state=absent,如下图,已经在任务计划里,将刚刚增加的任务删除了:
wKiom1iRmxOBPAKDAAB3yqObvLU564.jpg

2.5 ansible安装rpm包和管理服务
   安装rpm包,用yum模块,参数name是必须的,还可以加上state,但不是必须的。
         state的状态有state must be one of: running,started,stopped,restarted,reloaded

    wKioL1iSnGXRW_JgAABbiZiYrqc720.jpg

   管理系统服务,则用到service模块,enabled控制是否和系统一起启动。
    wKiom1iSnYCx64kAAABJVCpLXrY816.jpg

2.6 ansible-doc  -l  查看ansible的模块
  遇到的报错:

1
2
3
4
5
6
7
8
9
# ansible-doc -l
[DEPRECATION WARNING]: docker is kept for backwards compatibility but usage is discouraged. The module documentation details page may explain more about this rationale..
This feature will be removed in
a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[ERROR]: unable to parse /usr/lib/python2.6/site-packages/ansible/modules/extras/cloud/misc/rhevm.py
ERROR! module rhevm has a documentation error formatting or is missing documentation
解决方法:
sed -i 's/^#deprecation_warnings = True/deprecation_warnings = False/' /etc/ansible/ansible.cfg
rm -f /usr/lib/python2.6/site-packages/ansible/modules/extras/cloud/misc/rhevm.py



重新执行 ansible-doc -l
wKiom1iSn87BkxehAAFMaAkBNtw894.jpg

也可以单独查看某个模块,例如:
ansible-doc cron
   wKioL1iSoIWwWFcKAAEPa4JgrS0605.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-338178-1-1.html 上篇帖子: ansible自动化部署之第三方模块添加(时间计时模块) 下篇帖子: ansible-playbook管理nginx配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表