一、Ansible目录结构介绍
1.通过rpm -ql ansible获取ansible所有文件存放的目录
有配置文件目录 /etc/ansible/
执行文件目录 /usr/bin/
其中 /etc/ansible/ 该文件目录的主要功能是 inventory主机信息配置,ansible工具功能配置。
ansible自身的配置文件是ansible.cfg,其中所有的配置内容均可以在命令行通过参数的形式传递或定义在playbooks中。
二、Ansible命令用法详解
1.Ansible命令行执行的方式有Ad-Hoc(临时命令执行)、Ansible-playbook(Ad-Hoc的集合)两种方式,web化执行方式有Tower(10台以内免费)。
2.Ansible默认使用公私钥认证。
ssh-keygen -N " " -b 4096 -t rsa -C "test@qq.com" -f /root/.ssh/stanley.rsa
随机生成公私钥对
ssh-copy-id -i /root/.ssh/stanley.rsa root@localhost
为本机添加密钥认证
3.Ansible 的命令格式:ansible <host-pattern> [options](可选项)
其中<host-pattern> 是Inventory中定义的主机或者主机组,一般可以是ip,hostname等
例如:ansible all -m ping -u test 表示以test用户的身份执行ping命令
ansible all -m ping -u test --sudo 表示以test的身份sudo到root身份执行ping存活检测
ansible all -m ping -u test -b 表示以test身份至root身份执行ping进行存活检测,上面的同效果命令的操作在新版本中已经被-b所替换
三、Ansible命令使用场景介绍
1.ansible一般用在非固化或者临时一次性的操作的命令中(非固化/临时一次性操作:没有规律或者是临时要做的任务)
例如:ansible web1 -m ping 检查服务器web1的存活情况
2.ansible-galaxy 为github的pip功能
命令格式如下:
3.ansible-pull(默认使用push模式)
适用的场景是:数量巨大的机器需要配置;在刚启动没有网络的主机上运行ansible
4.ansible-doc 模块名 用来查看文档的用法说明
5.ansible-playbook 通过读取预先编写的playbook文件实现批量管理,是ansible的任务集
例如:ansible-playbook playbook.yml 表示执行playbook.yml中所有的任务集合
6.ansible-vault 用于配置文件加密
例如:ansible-vault encrypt a.yml 加密a.yml
7.ansible-console 用来虚拟一个终端
四、Ansible Inventory配置及详解
1.定义主机和组
[组名],支持将同一个主机归并到多个不同的组中且以行作为单位分割配置
2.定义主机变量
上述示例是修改web服务的端口为808
3.自定义组变量
4.其他inventory参数列表
五、Ad-Hoc命令集
1.使用场景:
空闲时期关闭所有不必要的服务器并对其进行健康检测
临时更新Apache和Nginx的配置文件并将其分发到所有需要更新该配置的web服务器
需要使用Ansible-playbook的场景
对新的服务器进行安装完系统之后的一些列固化的初始工作
定期对生产环境发布更新程序代码
2.Ad-Hoc命令集用法介绍
例如:ansible web --list 表示列出web组所有的主机列表
ansible 10.20.40.61 -B 5 -P 2 -T 2 -m command -a 'sleep 20' -u root
上述命令表示以root执行sleep 20,设置最大连接超时时长为2且为后台运行的模式,执行过程中每2秒输出依次进度如果5s还没有还未执行完就终止该任务。
为所有的服务器安装ntp服务并设置为开机启动
ansible apps -s -m yum -a ''name=ntp state=present''
ansible apps -m service -a "name=ntpd state=started enabled=yes"
上述这两条命令分别表示给所有主机安装ntp服务然后启动ntp服务并设置为开机启动
六、Ad-Hoc组管理和特定主机变更
1.一般我们需要会将负责相同场景应用的主机划分为一个组便于统一管理,这是就需要组管理并且可以对组中特定的主机进行变更。
2.组配置需要编辑/etc/ansible/hosts,下图是简化后的web服务架构:
3.配置Proxy和web servers实践
ansible proxy -m yum -a "name=nginx state=present" 利用ansible安装nginx
ansible app -m yum -a "name=nginx state=present"
ansible app -m yum -a "name=php state=present" 安装nginx和php
...... 同上述命令安装 mysql-python python-setuptools依赖包
ansible app -m pip -a "name=django state=present" 安装Django
同上述安装nginx命令安装后端的数据库redis
以下命令为安装mariadb的命令:
以上配置命令即可配置完所有主机的应用需求
4.Ad-Hoc特定主机变更
通过limit参数限定主机做变更
ansible app -m command -a "service ntpd status" --limit "192.168.37.158"
上述命令的作用是在app组中查看192.168.37.158的状态
ansible "192.168.37.158:192.168.37.159" -m command -a "service ntpd status"
上述命令的作用是查看上述两个ip地址对应的主机的ntp服务的状态
七、Ad-Hoc用户与组管理
1.ansible系统用户模块
linux系统用户管理:user
windows系统用户管理:win_user
2.与用户相关的应用场景新增用户:增加test用户并为其创建家目录
ansibledb -m user -a "name=test shell=/bin/bash groups=admins,testgroup append=yes home=/home/test/ state=present"
修改用户属组
ansibledb -m user -a "name=test groups=testgroup append=no"
修该用户的属性
ansibledb -m user -a "name=test expires=19999999"
删除用户
ansibledb -m user -a "name=test state=absent remove=yes"
变更用户密码
ansible -m user -a "name=test shell=/bin/bash password=igrjiFDF update_password=lovexiao"
password后面的密码是加密后的密文
八、应用层用户管理
1.新增mysql用户test
ansible db -m mysql_user -a 'login_host=localhost login_password=xiao login_user=root name=test password=testxiao priv=zabbix.*:ALL state=present'