CSE lab4,在四台腾讯云服务器上部署Hadoop。
Ansible
Python编写的运维工具,在我看来很好地解决了一些常见问题,比如,自己编写shell的话,会需要编写很多关于ssh、loop等等的内容,但实际上没有什么业务意义,我更关心的是软件安装包、上传下载、运行脚本等等。
公钥认证
一般的机器都默认开启了公钥认证,就是第一次连接时会验证一下地址,并交互式的确定,然后存在kown_hosts文件中。
这是为了安全考虑,但是不便于脚本执行,可以关闭掉这个验证。
配置文件/etc/ansible/ansible.cfg的[defaults]中打开注释
1
2# uncomment this to disable SSH key host checking
host_key_checking = False
主要模块
User, Group
- 用于管理用户和用户组,语法简单,基本靠state就够了。
- 用户shell设为bash会比较强大。
- 设置密码有点麻烦,需要sha加密。
- 使用这个模块需要root权限。
Authorized_keys, hostname
- 添加key,主要参数有user和key。
- hostname用name参数就可以。
template(jinja2)
- 功能非常强大的模板,平时就用于修改配置文件。
- 分布式系统,不同节点上的配置文件可能会不一样,即使是一样也可能部分配置是动态读取的。这个时候就可以用jinja2的一些语法,替换变量、条件分支、循环等等。
- 这里的变量可以依靠facts获取。
apt, yum
- 安装软件包的模块。
copy, unarchive, lineinfile
- 传送文件、文件夹和压缩包。
- lineinfile可能更适合修改profile、hosts等文件,它具有幂等性。
shell, command, script
- 执行命令,command更安全,shell会起实例。
register与when
- register写在一个task里,用于获取返回值,when是条件判断,用于决定任务执行时间。
setup, facts
- 获取巨量硬件信息,比如系统版本,节点名称,然后会作为变量被使用。
- 可以设定参数,gather-fact false关闭这个功能。