课前回顾
在web上使用mariadb客户端,通过命令 mysql -u wp_zh -p1 -h 10.0.0.51 可以检测web与数据库的是否可以连接
批量管理要选择批量管理工具,ansible saltstack
使用:
1.批量命令执行
2.批量安排服务
3.批量配置同步
4.批量任务执行
5.批量代码部署
作用:
1.提高工作效率
2.提高工作准确度
3.减少维护成本
4.减少重复性工作
优势:
1.远程执行
批量执行远程命令,可以对多台主机进行远程操作
2.配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停
3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理
4.管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack.
saltstack本身可以通过saltcloud管理各大云厂商的云平台。
5.二次开发
因为语法是Python,所以便于运维进行二次开发。
6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
7.跨平台,跨系统
ansible不需要下载客户端,不需要启动,但是要做优化
#centos8使用dnf命令安装ansible
[root@m01 ~]# yum provides dnf
dnf-4.0.9.2-1.el7_6.noarch : Package manager
自动化工具对比
同类型软件对比:
1.puppet学习难,安装ruby环境难,没有远程执行功能
2.ansible轻量级,大规模环境下只通过ssh会很慢,串行的,一般不需要安装客户端,但是也可以选择去安装客户端。不需要启动,只支持Python2
3.saltstack,一般选择sall的c/s结构模式,需要安装客户端,通过端对端的方式连接服务器,但是也可以不安装客户端,通过ssh协议连接服务器,salt-master和salt-minion是并行的,大规模批量操作的时候,会比ansible快一些,底层使用的是zero-MQ消息队列,但是比较占资源**,saltstack既有Python2和Python3
zero-MQ(message queue)
消息队列:相当于一个缓冲
堆栈:(先进后出)
面试回答 ansible和saltstack对比
- ansible是基于ssh协议来工作的,但是saltstack也有支持ssh协议的模式
- 但是一般来说,选择saltstack就是为了使用c/s结构的模式(速度快)
- 因为saltstack底层有一个zmq消息队列
- ansible基于ssh,如果ssh服务挂了,ansible也不能工作,但是saltstack可以,saltstack会使用两个端口4505,4506
saltstack官网
saltstack 安装包下载
saltstack服务端
cs/s结构中,服务端与客户端的连接不需要sshd进程,甚至可以开启或者关闭ssh服务
saltstack服务端可以管理所有的saltstack客户端
[root@m01 ~]# yum install -y salt-master salt-minion
[root@m01 ~]# rpm -q salt-master salt-minion
salt-master-2015.5.10-2.el7.noarch
salt-minion-2015.5.10-2.el7.noarch
[root@m01 ~]# rpm -ql salt-master
/etc/salt/master
/usr/bin/salt
/usr/bin/salt-cp
/usr/bin/salt-key
/usr/bin/salt-master
/usr/bin/salt-run
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
[root@m01 ~]# rpm -ql salt-minion
/etc/salt/minion
/usr/bin/salt-call
/usr/bin/salt-minion
/usr/lib/systemd/system/salt-minion.service
#取消注释(指定可以连接谁)(选做)
[root@m01 ~]# vim /etc/salt/master
interface: 0.0.0.0
#启动
[root@m01 ~]# systemctl start salt-master.service
#取消注释,指定master(指定客户端寻找的ip)
[root@m01 ~]# vim /etc/salt/minion
master: 10.0.0.61
#启动
[root@m01 ~]# systemctl start salt-minion.service
#查看saltstack端口(4505发送,4506接收)
[root@m01 ~]# netstat -lntup
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 1415/python
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 1423/python
[root@m01 ~]# salt-key
Accepted Keys: #接受的
Denied Keys: #拒绝的
Unaccepted Keys: #没有被允许的key
m01
Rejected Keys: 拒绝的
[root@m01 ~]# salt-key -A #接受所有客户端密匙
The following keys are going to be accepted:
Unaccepted Keys:
m01
web01
Proceed? [n/Y] y
Key for minion m01 accepted.
Key for minion web01 accepted.
[root@m01 ~]# salt-key -a xx #可以选择接受指定客户端密匙
[root@m01 ~]# salt-key
Accepted Keys:
m01
web01
Denied Keys:
Unaccepted Keys:
Rejected Keys:
#检查服务端和客户端是否可以连通
[root@m01 ~]# salt '*' test.ping
web01:
True
m01:
True
saltstack客户端
客户端的使用不需要端口
[root@web01 ~]# yum install -y salt-minion
#修改配置文件
[root@web01 ~]# vim /etc/salt/minion
master: 10.0.0.61
#启动saltstack客户端
[root@web01 ~]# systemctl start salt-minion.service
#以内saltstack很占服务器资源,所以不用的时候需要关闭
[root@m01 ~]# systemctl stop salt-master.service salt-minion.service
服务端操控客户端
查看客户端主机名,IP,内存,磁盘
cmd.run 可以执行任何操作命令,cmd实际上就是saltstack的一个模块
.就相当于调用函数,方法(playbook)
[root@m01 ~]# salt 'web01' cmd.run 'free -m'
web01:
total used free shared buff/cache available
Mem: 972 209 247 25 515 592
Swap:
#查看客户端详细信息,主机名,IP(内置变量)
[root@m01 ~]# salt '*' grains.items
[root@m01 ~]# salt 'web01' grains.items
#查看客户端主机名
[root@m01 ~]# salt 'm01' grains.get 'fqdn'
m01:
m01
#查看客户端IP
[root@m01 ~]# salt 'm01' grains.get 'fqdn_ip4'
m01:
- 10.0.0.61
- 172.16.1.61
[root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces'
m01:
----------
eth0:
- 10.0.0.61
eth1:
- 172.16.1.61
lo:
- 127.0.0.1
[root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces:eth0'
m01:
- 10.0.0.61
[root@m01 ~]# salt 'm01' grains.get 'master'
m01:
10.0.0.61
#开启或者关闭客户端web01的进程
[root@m01 ~]# salt 'web01' cmd.run 'systemctl start sshd'
[root@m01 ~]# salt 'web01' 'systemctl start sshd'
#使用ansible操作主机组
[root@m01 ~]# salt 'web0_group' cmd.run 'systemctl start sshd'
ansible官网
因为ansible只安装在服务端,不用安装客户端(因为ansible基于ssh协议),这种服务端也叫控制端,客户端叫被控端,受控端
ansible服务之星流程:
1.ansible读取playbook剧本(host),剧本中会记录对哪些主机之星哪些任务
2.首先ansible通过主机清单找到要执行的主机,然后调用具体的模块
3.其次ansible会通过连接插件连接对应的主机并推送对应的任务列表
4.最后被管理的主机将ansible发送过来的任务解析为本地shell命令执行
saltmast和ansible不能同时安装,不然会导致Python环境发生冲突,两个软件都用不了
Ansible的架构
1、连接插件connection plugins
用于连接主机 用来连接被管理端
2、核心模块core modules
连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块custom modules
根据自己的需求编写具体的模块(一般开发使用)
4、插件plugins
完成模块功能的补充
5、剧本playbook
,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单inventor
定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

ad-hoc与playbook
[ansible任务执行模式]
ad-hoc:
ad-hoc模式使用单个模块,支持批量执行单条命令。'ad-hoc命令是一种可以快速输入的命令',而且不需要保存起来的命令。相当于bash中的一句shell。
playbook:
playbook模式是ansible主要管理方式,也是ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等。'可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。'
[ansible命令执行过程]
1、加载自己的'主配置文件',默认/etc/ansible/ansible.cfg
2、查找对应的'playbook',找到要执行的主机或者组。
3、加载自己对应的'模块文件',如command
4、通过ansible将模块或命令生成对应的'临时py文件',并将该'文件传输'至远程服务器
5、'对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件'
6、给文件+x执行
7、执行并返回结果
8、删除临时py文件,sleep 0 退出。