当前位置:   article > 正文

自动化工具ansible部署和实践_ansible自动部署hdp(hortonworks data platform)

ansible自动部署hdp(hortonworks data platform)

1 介绍和部署

1.1 介绍

  1. ansible的功能
    ansible是一个基于Python开发的自动化运维工具,基于ssh协议实现远程管理,可以实现多种批量管理操作.
  • 批量系统配置
  • 批量软件部署
  • 批量文件拷贝
  • 批量运行命令
  1. 批量管理服务特征
  • 管理端:不需要启动任何服务,默认服务端不需要任何的配置
  • 受控端:基于ssh免秘钥,没有客户端软件需要安装

1.2 ansible软件安装部署

  1. 环境规划
主机名IP地址用途
master0110.0.0.61管理段
backup10.0.0.41受控端
nfs0110.0.0.31受控端
web0110.0.0.7受控端
  1. 免秘钥配置
    生成秘钥对
ssh-keygen -t dsa
  • 1

分发秘钥

sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.7
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.41
  • 1
  • 2
  • 3

免交互批量分发秘钥参考我的批量免秘钥分发脚本
\3) 口令登录方式配置[备选]
如果企业限制不允许使用ssh免秘钥方式,也可以使用在ansible的主机配置中,制定远程主机用户名和密码的方式

[root@xxxx ~]# vim /etc/ansible/hosts
[noah]
172.16.1.7
172.16.1.31 ansible_user=root ansible_password=123456
172.16.1.41
  • 1
  • 2
  • 3
  • 4
  • 5

要先按装了ansibl软件,才会有该配置文件

  1. 安装ansible
    软件安装
yum install -y ansible
  • 1

若受控主机有启用selinux,会影响ansible链接,在不能禁用的情况下,客户机可以安装以下程序

yum install -y libselinux-python
  • 1
  • 主机列表创建
cp /etc/ansible/hosts{,.bak}
cat >/etc/ansible/hosts <<"EOF"
[noah]
172.16.1.7
172.16.1.31
172.16.1.41
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.3 用法说明

  1. 语法
ansible 主机信息  -m 模块名称 -a "相关模块参数""

主机信息:远程主机IP地址,主机组名称,all代表所有主机
-m:指定使用哪个模块
-a:模块中的参数和功能
  • 1
  • 2
  • 3
  • 4
  • 5

简单示例:ping模块

[root@xxxx ~]# ansible all -m ping
172.16.1.41 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
172.16.1.7 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
172.16.1.31 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

ping模块没有参数,不用跟-e
\2) 返回颜色
ansible会根据返回结果的类型不同,显示不同的颜色

  • 绿色:查看远程主机信息,不会对远程主机系统做任何修改
  • 红色:执行操作出现异常错误
  • 黄色:对远程主机系统进行修改操作
  • 粉色:警告或者忠告信息

2 命令类常用模块

ansible模块列表
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

2.1 command[命令模块]

  1. 官方链接:
    http://docs.ansible.com/ansible/latest/modules/command_module.html
    说明:该模块与shell模块类似,但不能识别特殊符号
  2. 常用参数:
free_form	[必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir		在执行某个命令前,先切换目录
creates		判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes		判断一个文件是否存在,如果不存在,后面的命令就不会执行
  • 1
  • 2
  • 3
  • 4
  1. 举例
  • chdir参数
[root@xxxx ~]# ansible 172.16.1.31 -m command -a "chdir=/tmp/ pwd"
172.16.1.31 | SUCCESS | rc=0 >>
/tmp
  • 1
  • 2
  • 3
  • creates参数
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.conf hostname"
172.16.1.41 | SUCCESS | rc=0 >>
skipped, since /etc/rsyncd.conf exists
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.123456 hostname"
172.16.1.41 | SUCCESS | rc=0 >>
backup
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • removes参数
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.conf hostname"
172.16.1.41 | SUCCESS | rc=0 >>
backup
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.1212213123 hostname"
172.16.1.41 | SUCCESS | rc=0 >>
skipped, since /etc/rsyncd.1212213123 does not exist
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2 shell[万能模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module
    说明:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > | ;
  2. 常用参数
free_form	[必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir		在执行莫个命令前,先切换目录
creates		判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes		判断一个文件是否存在,如果不存在,后面的命令就不会执行
  • 1
  • 2
  • 3
  • 4
  1. 举例
[root@xxxx ~]# ansible 172.16.1.41 -m shell -a "hostname;pwd"
172.16.1.41 | SUCCESS | rc=0 >>
backup
/root
  • 1
  • 2
  • 3
  • 4

可以使用该名模,执行所有linux的命令,所以叫万能模块

2.3 script[脚本模块]

  1. 官方连接
    https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module
  2. 常用参数
free_form	[必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir		在执行莫个命令前,先切换目录
creates		判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes		判断一个文件是否存在,如果不存在,后面的命令就不会执行
  • 1
  • 2
  • 3
  • 4
  1. 举例
  • 先查看脚本
[root@xxxx ~]# cat /server/scripts/mk.sh
#!/bin/sh
mkdir -p /root/abc/def
touch  /root/abc/123.txt
ls -lh /root/abc/*
  • 1
  • 2
  • 3
  • 4
  • 5
  • 在调用这个脚本远程执行
[root@xxxx ~]# ansible 172.16.1.7 -m script -a "/server/scripts/mk.sh"
172.16.1.7 | SUCCESS => {
"changed": true, 
"rc": 0, 
"stderr": "Shared connection to 172.16.1.7 closed.\r\n", 
"stdout": "-rw-r--r-- 1 root root    0 6月  18 17:05 /root/abc/123.txt\r\n\r\n/root/abc/def:\r\n总用量 0\r\n", 
"stdout_lines": [
"-rw-r--r-- 1 root root    0 6月  18 17:05 /root/abc/123.txt", 
"", 
"/root/abc/def:", 
"总用量 0"
]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3 文件类常用模块

3.1 copy[复制模块]

  1. 官方链接:
    https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module
  2. 常用参数
backup	对数据信息进行备份
src		定义要推送数据信息
dest	[必须]定义将数据推送到远程主机什么目录中
owner	设置复制后的文件属主权限
group	设置复制后的文件属组权限
mode	设置复制后的文件权限(600 755)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 举例
  • backup参数
ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/ backup=yes"
  • 1
  • src,dest参数
ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/"
  • 1

3.2 file[文件操作模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module
  2. 常见参数
src		定义要推送数据信息
dest	[必须]定义将数据推送到远程主机什么目录中
owner	设置文件属主权限
group	设置文件属组权限
mode	设置文件权限(600 755)
state	用于指定创建目录或文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 举例
  • 权限参数
ansible 172.16.1.7 -m file -a "dest=/tmp/01.txt owner=oldboy group=oldboy mode=600"
  • 1
  • state创建文件
ansible 172.16.1.41 -m file -a "dest=/tmp/02.txt state=touch"
  • 1
  • state创建目录
ansible 172.16.1.41 -m file -a "dest=/tmp/01dir state=directory"
  • 1

4 包管理.系统服务管理.定时任务模块

4.1 yum[包管理模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/yum_module.html#yum-module
  2. 常用参数
name	[必须]执行要安装软件的名称,以及软件的版本
state	installed安装  absent(卸载)
list	指定软件名称,查看软件是否可以安装,以及是否安装过
  • 1
  • 2
  • 3
  1. 举例
ansible 172.16.1.41 -m yum -a "name=iftop state=installed"
ansible 172.16.1.41 -m yum -a "name=iftop state=absent"
ansible 172.16.1.41 -m yum -a "list=iftop"
  • 1
  • 2
  • 3

4.2 service[系统服务管理模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module
  2. 常用参数
name	[必须]指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state	stopped started restarted reloaded
enabled	yes表示服务开机自启动 no表示服务开机不要自动启动
  • 1
  • 2
  • 3
  1. 举例
ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"
  • 1

4.3 cron[定时任务模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module
  2. 常用参数
minute	分,写法同系统定时任务,如[0-59] [*] [*/n]   
hour	时,写法同上
day		日,写法同上
month	月,写法同上
weekday	周,写法同上
job		执行命令,如job='/bin/sh /server/scripts/test.sh &>/dev/null'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 举例
  • 添加定时任务
ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
  • 1
  • 2
  • 删除定时任务
ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent"
  • 1
  • 2
  • 注释定时任务
ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"a
ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no"
  • 1
  • 2

| https://mp.weixin.qq.com/s/sOrHvnGEbLaYp1bXOn0UUA

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/743328
推荐阅读
相关标签
  

闽ICP备14008679号