ansible与saltstack简介

课前回顾

在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不须要下载客户端,不须要启动,可是要作优化

#centos使用dnf命令安装ansible
[root@m01 ~]# yum provides dnf
dnf-4.0.9.2-1.el7_6.noarch : Package manager

自动化工具对比

同类型软件对比:python

​ 1.puppet学习难,安装ruby环境难,没有远程执行功能mysql

​ 2.ansible轻量级,大规模环境下只经过ssh会很慢,串行的,不须要安装客户端,不须要启动,只支持Python2web

​ 3.saltstack,通常选择sall的c/s结构模式,须要安装客户端,经过端对端的方式链接服务器,可是也能够不安装客户端,经过ssh协议链接服务器,salt-master和salt-minion是并行的,大规模批量操做的时候,会比ansible快一些,底层使用的是zero-MQ消息队列,可是比较占资源,saltstack既有Python2和Python3sql

saltstack官网shell

saltstack服务端

cs/s结构中,服务端与客户端的链接不须要sshd进程,甚至能够开启或者关闭ssh服务数据库

saltstack服务端能够管理全部的saltstack客户端vim

[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客户端centos

客户端的使用不须要端口ruby

[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,内存,磁盘bash

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官网

TP

由于ansible只安装在服务端,不用安装客户端(由于ansible基于ssh协议),这种服务端也叫控制端,客户端叫被控端,受控端

ansible服务之星流程:

​ 1.ansible读取playbook剧本(host),剧本中会记录对哪些主机之星哪些任务

​ 2.首先ansible经过主机清单找到要执行的主机,而后调用具体的模块

​ 3.其次ansible会经过链接插件链接对应的主机并推送对应的任务列表

​ 4.最后被管理的主机将ansible发送过来的任务解析为本地shell命令执行

saltmast和ansible不能同时安装,否则会致使Python环境发生冲突,两个软件都用不了

Ansible的架构

一、链接插件connection plugins用于链接主机 用来链接被管理端
二、核心模块core modules链接主机实现操做, 它依赖于具体的模块来作具体的事情
三、自定义模块custom modules根据本身的需求编写具体的模块(通常开发使用)
四、插件plugins完成模块功能的补充
五、剧本playbook,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
六、主机清单inventor定义ansible须要操做主机的范围

最重要的一点是 ansible是模块化的 它全部的操做都依赖于模块

img

Ansible的执行流程

1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2.首先Ansible经过主机清单找到要执行的主机,而后调用具体的模块。
3.其次Ansible会经过链接插件链接对应的主机并推送对应的任务列表。
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。

ad-hoc与playbook

[ansible任务执行模式]
ad-hoc:
ad-hoc模式使用单个模块,支持批量执行单条命令。'ad-hoc命令是一种能够快速输入的命令',并且不须要保存起来的命令。至关于bash中的一句shell。
playbook:
playbook模式是ansible主要管理方式,也是ansible功能强大的关键所在。playbook经过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等。'能够简单地把playbook理解为经过组合多条ad-hoc操做的配置文件。'


[ansible命令执行过程]
一、加载本身的'主配置文件',默认/etc/ansible/ansible.cfg
二、查找对应的'playbook',找到要执行的主机或者组。
三、加载本身对应的'模块文件',如command
四、经过ansible将模块或命令生成对应的'临时py文件',并将该'文件传输'至远程服务器
五、'对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件'
六、给文件+x执行
七、执行并返回结果
八、删除临时py文件,sleep 0 退出。
相关文章
相关标签/搜索