## 1.什么是自动化批量管理
重复性工作与内容: 思考如何自动化完成.
部署环境,批量查看信息,批量检查:自动化
一般步骤:
1.如何手动实现
2.如何自动化管理工具,批量实现
3.注意事项:想要自动化一定要先标准化(所有环境,软件,目录一致)
4.注意事项:尽量进行分组(比如:所有web服务器是1组)
2.自动化工具选择
自动化批量管理工具 | ||
---|---|---|
Ansible | 基于python语言编写,使用极其简单,不需要客户端 | |
Saltstack | 基于python语言编写,需要安装客户端 | |
TereForm | 批量管理平台,批量创建阿里云服务器,批量创建aws服务器 | |
Fabric | python使用它 | |
Chef | 了解即可 | |
puppet | 古老一些的批量管理工具 | |
… |
3.Ansible架构
4.Ansible极速使用指南
4.1 环境准备
ansible环境 | ||
---|---|---|
ansible管理端 | m01,10.0.0.210 | |
被管理机器 | web01 10.0.0.7 | |
被管理机器 | backup 10.0.0.41 | |
被管理机器 | nfs01 10.0.0.31 | |
被管理机器 | db01 10.0.0.51 |
sh /server/scripts/ssh_check.sh hostname
4.2 ansible部署
m01
yum install -y ansible
#epel源中的软件包
4.3 初步配置主机清单(inventory)
root@m01 /etc/ansible]# cat hosts
[hbinz]
172.16.1.7
172.16.1.31
172.16.1.41
172.16.1.51
4.4与ansible的第一次接触
ansible hbinz -m ping
#第一次会提示yes/no
4.5 小结
1.密钥认证
2.环境准备,部署ansible
3.修改ansible 主机清单
4.测试,ansible hbinz -m ping
ansible命令格式 | |||
---|---|---|---|
ansible | 主机分组 | -m指定模块 | |
ansible | 主机分组 | -m指定模块 | -a 指定模块中的选项 |
module | action |
5.ansible配置文件
ansible.cfg #ansible配置文件
#71:host_key_checking = False 主机校验关掉
hosts #ansible默认的主机清单
6.ansible主机清单
6.1 基本格式
[root@m01 /etc/ansible]# cat hosts
[hbinz] #[组的名字]
172.16.1.7
172.16.1.31
172.16.1.41
172.16.1.51
[web]
172.16.1.7
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41
6.2指定用户名,密码,端口
主机清单中指定信息 | ||
---|---|---|
连接的ssh端口 | ansible_ssh_root=22 | |
连接的ssh端口 | ansible_ssh_user=root | |
连接的ssh端口 | ansible_ssh_pass=‘thinker’ |
[web]
172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41
6.3 子组
我想把多个主机分组进行合并,比如把db,nfs,backup合并成一个组叫data组.
[web]
172.16.1.7
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41
[data:children] #data:children表示data是创建的子组,组里面包含 db,nfs,backup3个组.
db
nfs
backup
6.4主机清单案例
1)案例1:查看与使用指定的子组 dataansible data -m command -a 'hostname'
2)案例2:查看指定的组dbansible db -m command -a 'hostname'
3)案例3:查看所有主机情况ansible all -m command -a 'hostname'
4)案例4:查看某一机器ansible 172.16.1.7 -m command -a 'hostname'
7.ansible核心模块
7.1模块概述
模块分类 | |
---|---|
命令和脚本模块 | command模块,默认的模块,执行简单命令,不支持特殊符号 |
shell模块,执行命令,支持特殊符号 | |
script模块,分发脚本并执行 | |
文件 | file,创建目录,文件,软链接 |
copy,远程分发文件,修改权限,所有者,备份 | |
服务 | systemd服务管理 |
service服务管理(了解) | |
软件包 | yum源,yum repository |
yum命令 | |
get_url下载软件 | |
系统管理 | mount模块,挂载 |
cron模块,定时任务 | |
用户管理 | group模块,管理用户组 |
user模块,管理用户 | |
其他可以研究 | 压缩解压(unarchive),rsync模块(synchronize),数据库模块(mysql_db,mysql_user)… |
其他 | ansible管理docker k8s zabbix grafana… |
用于调试模块 | ping 模块检查,ansible与其他节点连通性 |
debug模块,检查/显示变量 |
7.2如何查询帮助
通过命令: ansible-doc -s command
查看官网:
传送门
7.3ansible命令与脚本类模块
1)command模块
仅支持简单命令,不支持特殊符号,管道....
⚠ 这个模块是默认模块,ansible不加上模块,默认就使用这个模块.
ansible all -m command -a '命令'
ansible all -a 'hostname' #相当于省略 -m command
2)shell模块
与command类似,shell模块支持特殊符号,执行脚本...
ansible all -m shell -a 'ip a s eth0|sed -n 3p' #command不支持特殊符号
- ansible颜色
- 绿色表示正常
- 黄色表示执行正常,状态变化
- 红色表示错误,输出错误信息
- 紫色表示警告,建议
3)script模块-传输脚本到被管理端并执行脚本
传输脚本
执行脚本
安装ipvsadm
cat /server/scripts/yum.sh
yum install -y ipvsadm
#安装
ansible db -m script -a '/server/scripts/yum.sh'
#检查
ansible db -m shell -a 'rpm -qa|grep ipvsadm'
[root@m01 /etc/ansible]# ansible db -m shell -a 'rpm -qa|grep ipvsadm'
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'. If you need to use command because yum, dnf or zypper is insufficient you can add 'warn: false' to this command task
or set 'command_warnings=False' in ansible.cfg to get rid of this message.
172.16.1.51 | CHANGED | rc=0 >>
ipvsadm-1.27-8.el7.x86_64
4)命令与脚本模块
模块 | 含义 | 应用 |
---|---|---|
command模块 | 执行命令 | 简单命令,不含特殊符号,默认的模块ansible all -a 'hostname'
|
shell模块 | 执行命令或脚本 | 执行含有特殊符号:管道,反引号,{}的命令,运行脚本(脚本在管理端). |
script模块 | 先传输脚本,然后运行脚本 | 一般用于执行脚本 |
7.4ansible-文件与目录管理模块
- file 创建文件,目录
- copy 远程传输文件,目录,类似于scp
1)file模块管理文件或目录,软链接
file模块中的选项 | |
---|---|
path | 路径(目录,文件)必须要写 |
src(source源) | 源文件一般用于link(创建软链接模式)用于指定源文件 |
state | (状态)(模式)state=directory 创建目录state=file (默认)更新文件,如果文件不存在也不创建state=link 创建软链接state=touch 创建文件state=absent 删除 |
案例01-创建目录/hbinz/目录
ansible all -m file -a 'path=/hbinz state=directory'
案例02-创建文件/hbinz/hbinz.txt文件
ansible all -m file -a 'path=/hbinz/hbinz.txt state=touch'
ansible all -a 'ls -l /hbinz'
案例03-创建软链接 /hbinz/hbinz.txt到/tmp/hbinz.txt.soft
ansible all -m file -a 'src=/hbinz/hbinz.txt path=/tmp/hbinz.txt.soft state=link'
ansible all -a 'ls -l /tmp/hbinz.txt.soft'
案例04-删除文件、目录、软链接
ansible all -m file -a 'path=/hbinz/hbinz.txt state=absent'
ansible all -m file -a 'path=/hbinz state=absent'
ansible all -m file -a 'path=/tmp/hbinz.txt.soft state=absent'
案例05-创建文件/tmp/hbinz.txt,所有者root,用户组root,权限755
ansible all -m file -a 'path=/tmp/hbinz.txt owner=root group=root mode=755 state=touch'
ansible all -a 'ls -l /tmp/oldboy.txt'
2)copy远程传输模块
copy模块 | |
---|---|
src | source源文件 |
dest | destination目标 |
backup | backup=yes 则会在覆盖前备份 |
mode | 修改权限 |
owner | 修改为指定所有者 |
group | 修改为指定用户组 |
案例01-传输/etc/hosts文件到/etc/hosts
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts'
案例02–传输/etc/hosts文件到/etc/hosts-先备份然后修改
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
3)文件传输小结
文件管理与传输 | 含义 |
---|---|
file | 创建/删除 文件/目录,软链接 |
copy | 远程分发文件/目录,软件包,压缩包… |
7.5ansible-服务管理模块
就是用了systemctl 命令
启动/关闭/重启服务
开机自启动/开机不自启动
1)systemd
systemd | |
---|---|
name | 用于指定服务名称 |
enabled | 控制服务的开机自启动 enabled=yes /enable=no |
state | 表示服务开,关,重启…state=started 开启state=stopped 关闭state=reloaded 重读配置文件(服务支持的情况下sshd nfs nginx)state=restarted 重启(关闭再开启) |
daemon-reload | yes是否重新加载对应的服务的管理配置文件(讲解了systemctl配置文件.) |
案例01-关闭firewalld |
ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
ansible all -a 'systemctl state firewalld'
案例02-开启sshd服务
ansible all -m systemd -a 'name=sshd enabled=yes stat=started'
ansible all -a 'systemctl state sshd'
案例03-重启backup这台机器上面的rsync服务
ansible backup -m systemd -a 'name=rsyncd state=restarted'
2)service
服务管理模块 | systemd模块 | service模块 |
---|---|---|
开机自启动 | enabled | enabled |
服务名称 | name | name |
服务开关重启 | state | state |
运行级别 | 无 | runlevel(运行级别) |
重启加载systemctl配置 | daemon_reload=yes systemctl daemon-reload
|
无 |
3)服务管理模块小结
模块 | ||
---|---|---|
systemd | 管理linux 红帽7以上推荐使用,ubuntu… | |
service | 6及一下 |