saltstack自动化运维(一)

saltstack简介

(1)saltstack介绍

SaltStack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。SaltStack是使用Python语言开发的,同时提供Rest API方便二次开发以及和其它平台进行集成,同时官方也发布了一个Web管理界面halite。

(2)saltstack运行方式

saltstack有三种运行方式

  • Local
  • Master/Minion
  • Salt SSH
    SaltStack的传统运行模式为Master/Minion(C/S结构),需要在被管理的节点上安装Minion。同时SaltStack也支持SSH的方式,无需安装Agent,通过SSH实现管理。

(3)saltstack目前拥有三大功能

  • 远程执行
  • 配置管理
  • 云管理

saltstack实战部署

SaltStack支持多种操作系统,如CentOS、RedHat、Debian、Ubuntu、FreeBSD、Solaris、Fedora、SuSe、Gentoo、MAC OS X、Archlinux等,以及Windows(仅支持Minion)。

saltstack服务器基本设置:CentOS7.2最小化安装,关闭防火墙,selinux设置为disabled,虚拟机网卡这里为桥接模式

安装saltstack源

对于Centos和RedHat用户,使用yum安装时最直接和快捷的。首先需要CentOS和epel仓库。saltstack官方源在国外下载使用需要vpn,我直接将saltstack2016.3的源同步到本地搭建了一个本地yum源,需要下载saltstack源的朋友请自带小飞机到https://repo.saltstack.com去下载,以下是我的repo的配置文件:

CentOS和epel的repo:

[centos]
name=centos7.2
baseurl= http://192.168.16.198:8080/centos7.2/7.2/os/x86_64/
enabled=1
gpgcheck=0

[epel]
name=epel
baseurl= http://192.168.16.198:8080/epel/7/x86_64/
enabled=1
gpgcheck=0

saltstack的repo:

[saltstack]
name=saltstack-2016.3
baseurl= http://192.168.16.198:8080/saltstack-2016.3/
enabled=1
gpgcheck=0

安装saltstack

saltstack01为master,saltstack02为minion

在saltstack01

yum -y install salt-master salt-minion

在saltstack02

yum -y install salt-minion

启动saltstack

在saltstack01上

systemctl start salt-master
systemctl enable salt-master

修改配置文件

在saltstack01上

vim /etc/salt/minion

2-1

启动salt-minion

systemctl start salt-minion
systemctl enable salt-minion

在saltstack02上

vim /etc/salt/minion2

启动salt-minion

systemctl start salt-minion
systemctl enable salt-minion

远程执行

2-2

认证命令:salt-key

2-3

同意公钥key

salt-key -a saltstack01

2-4

还可以使用通配符:

salt-key -a saltstack*  #-A表示同意所有

2-5

同意后查看pki

2-6

远程执行命令:

语法: 命令 目标 模块.方法 方法参数
salt '*' test.ping

上面的命令用来查看有哪些Minion节点连接到Master。* 指的是选定的目标Minion,很显然代表所有。就是所有Minion端了。test.ping是salt远程执行的一个模块。(注意:这并不是一个ICMP ping。)

2-7

salt 'saltstack01' cmd.run 'w'

2-8

salt 'saltstack01' cmd.run 'mkdir /tmp/yjscloud'

2-9

配置管理

Salt使用State模块文件进行配置管理,使用YAML编写,以.sls结尾。如果进行配置管理首先需要再Master的配置文件中指定”file roots”的选项,Salt支持环境的配置,比如开发环节、测试环境、生产环境,但是base环境是必须的。而且Base环境必须包含入口文件top.sls。

YAML: 三板斧

1.缩进
     2个空格,不能试用Tab。
2.冒号 
     key: value
3.短横线  
      - list1
      - list2

第一步:设置file_roots
在saltstack01修改Master配置文件,指定file_roots:vim /etc/salt/master

2-10

重启master: systemctl restart salt-master

创建目录:mkdir /srv/salt

第二步:设置top.sls

在top.sls入口文件设置环境(如生产、开发、测试对应不同的minion和模块)。

2-11

解释:所有的Minion均执行base目录下的init模块下的pkg-init.sls。我们可以把很多的sls放在一个目录中,方便管理。在top.sls只需要指定目录结构即可。

第三步:编写状态文件
在这个目录下创建web目录,在这个目录下编辑文件apache.sls,文件内容为:

2-12

第四步:执行状态

执行这个文件:salt '*' state.sls web.apache

根据上面的设置,执行完状态后。Salt会检查Minion上是否有上面编写的三个软件包。如果没有就会自动使用Yum安装上。

在saltstack02端查看:

2-13

saltstack01将描述文件发往saltstack02让其执行

saltstack与ZeroMQ

saltstack底层是基于ZeroMQ进行高效的网络通信

ZeroMQ简介

ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库。它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(message broker)。该库设计成常见的套接字风格的API。能够提供进程内(inproc)、进程间(IPC)、网络(TCP)和广播方式的消息信道, 并支持扇出(fan-out)、发布-订阅(pub-sub)、任务分发(task distribution)、请求/响应(request-reply)等通信模式。

saltstack第一种模式:发布与订阅

ZeroMQ支持Publish/Subscribe,即发布与订阅模式,我们经常简称Pub/Sub。

2-14

Salt Master运行两个网络服务,其中一个是ZeroMQ PUB系统,默认监听4505端口。可以通过修改/etc/salt/master配置文件的publish_port参数设置。它是salt的消息发布系统,如果查看4505端口,会发现所有的Minion连接到Master的4505端口,TCP状态持续保持为ESTABLISHED。

2-15

saltstack第一种模式:请求与响应

ZeroMQ支持Request-Reply,即请求与响应模式,我们经常简称REQ/REP。

2-16

Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口,可以通过修改/etc/salt/master配置文件的ret_port参数设置。

它是salt客户端与服务端通信的端口。比如说Minion执行某个命令后的返回值就是发送给Master的4506这个REP端口

如果安装了python-setproctitle软件包,所以我们可以直接看到Salt Master启动的进程的名称。

yum  install  -y python-setproctitle

重启master和minion

systemctl restart salt-master
systemctl restart salt-minion

2-17

备注:

/usr/bin/salt-master  -d ProcessManager   # 中心进程管理器
/usr/bin/salt-master  -d _clear_old_jobs   # 清除旧的Jobs文件及更新fileserver
/usr/bin/salt-master  -d Publisher        # 将任务PUB到Minion端
/usr/bin/salt-master  -d EventPublisher   # Event Publisher进程
/usr/bin/salt-master  -d ReqServer_ProcessManager  # ReqServer进程管理器
/usr/bin/salt-master  -d MWorker   # 工作进程
/usr/bin/salt-master  -d MWorker   # 工作进程
/usr/bin/salt-master  -d MWorker   # 工作进程
/usr/bin/salt-master  -d MWorker   # 工作进程
/usr/bin/salt-master  -d MWorker   # 工作进程
/usr/bin/salt-master  -d MWorkerQueue  # 将Ret接口(ROUTER)数据转发到Worker(DEALER)

saltstack数据系统

saltstack数据系统分为Grian和Pillar

Grains

静态数据,当Minion启动的时候收集的MInion本地的相关信息。(包含操作系统版本、内核版本、CPU、内存、硬盘、设备型号等)

备注:不重启minion,这些信息数据是不会改变的。

1)信息管理,包括资产管理

eg:

salt  'saltstack01'  grains. ls   # 列出ID为saltstack01的主机,grains的所有key
salt  ' saltstack*'  grains.items   # 列出主机的详细信息,可用于资产管理
salt  '*'  grains.item os   # 列出所有主机的系统版本
salt  '*'  grains.item fqdn_ip4   # 列出所有主机的IP地址

2)用于目标选择(查询具体id的主机,查询系统版本为centos的主机等场景)

eg:

salt -G  'os:Centos'  test . ping   # 所有主机系统为centos版本ping测试
salt -G  'os:Centos'  cmd.run  'echo 123'   # 所有主机系统为centos版本执行命令'echo 123'

3)配置管理中使用

自定义grains的item

方式一:修改配置文件 vim /etc/salt/minion

重启:systemctl restart salt-minion

2-18

通过自定义的item,可以实现重启所有角色为apache的主机

salt  '*'  grains.item roles   # 获取所有主机的roles
salt -G  'roles:apache'  cmd.run  'systemctl restart httpd'   # 所有主机roles为apache的执行命令systemctl restart httpd

方式二:(生产环境使用)

修改配置文件 vim /etc/salt/grains,写法

cloud: openstack

重启:

systemctl restart salt-minion
salt  '*'  grains.item cloud   # 获取所有主机的cloud

修改/etc/salt/grains不重启服务的方法,刷新命令如下(备注:方式一和方式二修改配置文件,通过此命令都可以不用重启服务)

salt '*' saltutil.sync_grains

3)grains在top file中的使用案例

vim /srv/salt/top.sls

2-19

grains脚本目录,必须是base下创建_grains目录(如:/srv/salt/_grains)

创建一个python脚本在/srv/salt/_grains目录下

脚本名:my_grains.py

2-20

通过master同步脚本文件至每台minion

salt '*' saltutil.sync_grains

2-21

文件放在minion主机的/var/cache/salt/minion/extmods/grains目录下

2-22

salt  '*'  grains.item edu   # 获取所有主机的edu

2-23

grains优先级(item名称相同的情况下):

  • 系统自带
  • grains文件写到
  • minion配置文件写的
  • 自己写的脚本

Pillar

动态数据,给特定的minion指定特定的数据。只有指定的minion自己能看到自己的数据。

salt  '*'  pillar.items

开启系统自带,修改配置文件

vim /etc/salt/master

2-24

重启systemctl restart salt-master

执行salt '*' pillar.items 可以看到系统自带的item

piller存在文件路径设置

2-25

mkdir /srv/pillar

重启systemctl restart salt-master

实现pillar流程

1)创建一个piller文件,python jinja2写法

mkdir  /srv/pillar/web
cd  /srv/pillar/web
vim apache.sls

2-26

2)创建top file文件

2-27

salt  '*'  saltutil.refresh_pillar   # 刷新
salt  '*'  pillar.items apache

2-28

目标选择

salt -I  'apache:httpd'  test . ping

2-29

Grains VS Pillar

2-30

深入学习saltstack远程执行

语法例: salt '*' cmd.run 'w'

命令: salt

目标: ‘*’

模块: cmd.run 自带150+模块。 自己写模块

返回: 执行后结果返回,Returnners

目标:Targeting

两种:一种和Minion ID有关

   一种和Minion ID无关

1)Minion ID有关的方法

指定具体的minion ID

salt 'saltstack01' test.ping

通配符

salt  '*'  test . ping 
salt  'saltstack *'  test . ping
salt  ' saltstack[1|2]'  test . ping
salt  ' saltstack[1-2]'  test . ping
salt  ' saltstack[!2]'  test . ping
salt  ' saltstack?'  test . ping

列表

salt -L  'saltstack01 ,saltstack02 '  test . ping

正则表达式

salt -E 'saltstack(01|02)' test.ping
salt -E 'saltstack(01|02)*' test.ping

备注: 所有匹配目标的方式,都可以用到top file里面来指定目标。minion ID设置方案:IP地址、根据业务来进行设置

eg:

redis-node1-redis04-idc04-h5web.example.com
redis-node1   # redis第一个节点
redis04   # 集群
idc04   # 机房
h5web   # 业务线

2)minion ID无关的方法

IP地址、子网

salt -S 192.168.16.100 test.ping
salt -S 192.168.16.0/24 test.ping

2-31

分组,需要配置master文件

vim  /etc/salt/master

2-32

重启systemctl restart salt-master

混合匹配

具体内容查看官方文档

批处理

可用于重启所有主机或进程场景,百分比或固定数量的一点一点重启主机或进程

具体内容查看官方文档

执行模块

具体内容查看官方文档

列出salt所有模块,以及如何使用的帮助文档

通过yum默认安装salt所有模块存放路径 /usr/lib/python2.7/site-packages/salt/modules(centos 7)

eg:

salt  '*'  network.active_tcp   # 列出所有主机运行的tcp连接
salt  '*'  network.arp   # 列出所有主机arp
salt  '*'  service.available sshd   # 列出所有主机sshd
salt  '*'  service.get_all   # 列出所有主机的所有运行服务
salt  '*'  service.status sshd   # 列出所有主机sshd运行状态
salt- cp  '*'  /etc/hosts  /tmp/test   # 将master上/etc/hosts文件拷贝到所有主机的/tmp/test 
salt  '*'  state.show_top   # 查看top
salt  '*'  state.single pkg.installed name= lsof   # 所有主机安装lsof

编写执行模块

放置路径

cd  /srv/salt
mkdir  _modules

命名

文件名就是模块名

eg:

my_disk.py

vim  /srv/salt/_modules/my_disk .py
def list():
    cmd =  'df -h'
    ret = __salt__[ 'cmd.run' ](cmd)
    return  ret

刷新

salt  '*'  saltutil.sync_modules

2-33

会放到指定目标的/var/cache/salt/minion下:

2-34

执行

salt  '*'  my_disk.list

2-35

|| 版权声明
作者:废权
链接:https://blog.yjscloud.com/archives/58
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
saltstack自动化运维(一)
saltstack简介 (1)saltstack介绍 SaltStack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数……
<<上一篇
下一篇>>
文章目录
关闭
目 录