ansible是一款deops运维工具,使用它可以方便的管理多个主机。目前参照网上的使用教程,记录下使用的方式:
安装ansible
yum install ansible
配置ssh免密登录
ssh-keygen localhost -P ""
ssh-copy-id localhost
SSH配置过程可以参考:安装 Hadoop 伪分布式环境
配置固定IP可以参考:CentOS 7配置固定IP
修改hosts
vi /etc/ansible/hosts
[hadoop]
192.168.2.[200:203]
这里:
[hadoop]
对主机进行分组
192.168.2.[200:203]
[200:203]指的是192.168.2.200~203共四台主机,当然也可以单个配置。
调整ansible配置
vi /etc/ansible/ansible.cfg
找到:
...
host_key_checking = False #禁用每次执行ansbile命令检查ssh key host
...
log_path = /var/log/ansible.log #开启日志记录
...
[accelerate] #ansible连接加速配置
#accelerate_port = 5099
accelerate_port = 10000
...
accelerate_multi_key = yes
...
deprecation_warnings = False #屏蔽弃用告警提示,减少不必要的信息显示
...
测试
ansible all -m ping
192.168.2.203 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.2.201 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.2.202 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.2.200 | SUCCESS => {
"changed": false,
"ping": "pong"
}
其中:
ansible all -m ping
是对配置的所有配置的主机,如果只想对指定的分组执行操作替换为指定的分组名称即可,例如:ansible hadoop -m ping。
ansible all -m ping
-m 指定模块,这里使用的是ping模块
Ad-Hoc工作模式示例
ansible hadoop -m copy -a "src=~/Labixiaoxin.jpeg dest=~/Lbxx.jpeg"
这里使用的是Copy模块,这个用于将ansible管理主机上的文件复制到远程主机上。使用Ad-Hoc时,需要两个参数:
src ansible上的文件
dest 远程主机上的保存目录
执行结果类似:
192.168.2.201 | SUCCESS => {
"changed": true,
"checksum": "eb55604c965d10308902b4e442fbe394e1e51b7f",
"dest": "/home/hadoop/Lbxx.jpeg",
"gid": 1000,
"group": "hadoop",
"md5sum": "81bf4920a96f2a76f7d86865a8b3b1b1",
"mode": "0664",
"owner": "hadoop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 263804,
"src": "/home/hadoop/.ansible/tmp/ansible-tmp-1580216948.9-101431322413807/source",
"state": "file",
"uid": 1000
}
192.168.2.203 | SUCCESS => {
"changed": true,
"checksum": "eb55604c965d10308902b4e442fbe394e1e51b7f",
"dest": "/home/hadoop/Lbxx.jpeg",
"gid": 1000,
"group": "hadoop",
"md5sum": "81bf4920a96f2a76f7d86865a8b3b1b1",
"mode": "0664",
"owner": "hadoop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 263804,
"src": "/home/hadoop/.ansible/tmp/ansible-tmp-1580216949.12-46651644536986/source",
"state": "file",
"uid": 1000
}
192.168.2.202 | SUCCESS => {
"changed": true,
"checksum": "eb55604c965d10308902b4e442fbe394e1e51b7f",
"dest": "/home/hadoop/Lbxx.jpeg",
"gid": 1000,
"group": "hadoop",
"md5sum": "81bf4920a96f2a76f7d86865a8b3b1b1",
"mode": "0664",
"owner": "hadoop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 263804,
"src": "/home/hadoop/.ansible/tmp/ansible-tmp-1580216949.14-40512167503252/source",
"state": "file",
"uid": 1000
}
192.168.2.200 | SUCCESS => {
"changed": true,
"checksum": "eb55604c965d10308902b4e442fbe394e1e51b7f",
"dest": "/home/hadoop/Lbxx.jpeg",
"gid": 1000,
"group": "hadoop",
"md5sum": "81bf4920a96f2a76f7d86865a8b3b1b1",
"mode": "0664",
"owner": "hadoop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 263804,
"src": "/home/hadoop/.ansible/tmp/ansible-tmp-1580216949.59-146227527744584/source",
"state": "file",
"uid": 1000
}
如果想查看远程主机上的文件情况,可以使用shell模块:
ansible hadoop -m shell -a "ls /home/hadoop"
playbook剧本模式示例
可以将上面的Ad-Hoc任务转换为playbook模式执行:
步骤1、编写yml文件:
vi copyFile.yml
内容:
---
- hosts: hadoop
tasks:
- name: copy file to hosts
copy: src=~/Labixiaoxin.jpeg dest=~/Lbxx.jpeg
playbook文件简要介绍:
--- 只能出现在文件头,而且只能出现一次,代表文件的开始
- hosts: hadoop -和:后都需要跟随一个空格,hadoop代表的是hosts文件中的分组,可多个
tasks: 代表任务清单
- name: .....用于说明任务的内容
copy: .....是具体执行的指令
playbook更详细介绍见:http://www.ansible.com.cn/docs/playbooks.html
YAML 语法详细见:http://www.ansible.com.cn/docs/YAMLSyntax.html
步骤2、执行剧本
ansible-playbook copyFile.yml
使用ansible-playbook 执行剧本文件,执行结果类似:
PLAY [hadoop] *************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.2.203]
ok: [192.168.2.202]
ok: [192.168.2.201]
ok: [192.168.2.200]
TASK [copy file to hosts] *************************************************************
changed: [192.168.2.201]
changed: [192.168.2.202]
changed: [192.168.2.203]
changed: [192.168.2.200]
PLAY RECAP ****************************************************************************
192.168.2.200 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.201 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.202 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.203 : ok=2 changed=1 unreachable=0 failed=0
相关链接
Ansible中文权威指南:http://www.ansible.com.cn/
使用ansible控制Hadoop服务的启动和停止:https://www.cnblogs.com/sfccl/p/11247129.html