01 Saltstack快速入门

2018-06-07 分类:SaltStack 阅读(1009) 评论(2)

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

1.1Saltstack基本概述

SaltStack是一个异构平台基础设施管理工具,具有远程执行、配置管理、云管理, 只需要花费数分钟即可运行起来,扩展性组以支撑管理上万台服务器,速度快,服务器之间秒级通讯数秒钟即可完成数据传递。

SaltStack三大功能

  • 远程执行
  • 配置管理(状态)
  • 云管理

SaltStack四种运行方式

  • Local本地运行
  • Minion/Master 传统方式运行
  • Syndic分布式
  • Salt SSH

SaltStack常用网址

1.2Saltstack快速安装

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

1.配置salt官方阿里云yum仓库

[root@salt0-master ~]# yum install -y  \
https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@salt0-master ~]# sed -i \
"s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo
[root@salt0-master ~]# yum makecache

2.安装Master,并启动服务

[root@salt0-master ~]# yum install salt-master -y
[root@salt0-master ~]# systemctl enable salt-master
[root@salt0-master ~]# systemctl start salt-master

3.安装Salt-Minion指向Salt-Master网络地址

[root@salt1-minion ~]# yum install salt-minion -y
#配置master地址或主机名, 建议使用主机名方式
[root@salt1-minion ~]# sed -i '/master: /c\master: salt-master' /etc/salt/minion
[root@salt1-minion ~]# systemctl enable salt-minion
[root@salt1-minion ~]# systemctl start salt-minion

4.如启动时发生异常可以查看SaltStack相关日志

#服务端日志
[root@salt0-master ~]# tail -f /var/log/salt/master
#客户端日志
[root@salt1-minion ~]# tail -f /var/log/salt/minion

1.3Saltstack认证方式

Salt的数据传输是通过AES加密,MasterMinion之间在通信之前,需要进行认证。
Salt通过认证的方式保证安全性,完成一次认证后,Master就可以控制Minion来完成各项工作了。

  • 1.minion在第一次启动时, 会在/etc/salt/pki/minion/下自动生成minion.pem(private key)minion.pub(public key)然后将minion.pub发送给master
  • 2.master在第一次启动时, 会在/etc/salt/pki/master下自动生成master.pem和master.pub会接收到minionpublic key通过salt-key命令接收minion public key, 则会在master/etc/salt/pki/master/minions目录下存放以minion id命名的public key同时minion会保存一份master public key/etc/salt/pki/minion_master.pub

Salt认证原理小结

minion将自己的公钥发送给master
mastr认证后会将自己的公钥也放置minion端

Master端Key认证示例

在上面一个小节已经提到了MasterMinion的认证方式,只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key常用的有如下命令。

[root@linux-node1 ~]# salt-key -L
Accepted Keys:  #已经接受的key
Denied Keys:    #拒绝的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊销的key

#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

#在master端/etc/salt/master配置
auto_accept: True   #如果对Minion信任,可以配置master自动接受请求

salt-key使用

#列出当前所有的key
[root@salt0-master ~]# salt-key 
Accepted Keys:
salt1-minion.example.com
salt2-minion.example.com
salt3-minion.example.com
salt4-minion.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

#添加指定minion的key
[root@salt0-master ~]# salt-key  -a salt1-minion.example.com -y
#添加所有minion的key
[root@salt0-master ~]# salt-key  -A  -y

#删除指定的key
[root@salt0-master ~]# salt-key -d salt1-minion.example.com -y
#删除所有的key
[root@salt0-master ~]# salt-key -D -y

1.4Saltstack远程执行

远程执行是SaltStack的核心功能之一。主要使用salt模块可以批量给选定的Minion端执行相应的命令,并获得返回结果。

1.判断SaltMinon主机是否存活

[root@salt0-master ~]# salt '*' test.ping
salt3-minion.example.com:
    True
salt2-minion.example.com:
    True
salt1-minion.example.com:
    True
salt4-minion.example.com:
    True

# salt 是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法。

2.SaltStack可以使用cmd.run模块远程执行shell命令

//让指定目标Minion节点运行uptime命令
[root@salt0-master ~]# salt 'salt1-minion.example.com' cmd.run 'uptime'
salt1-minion.example.com:
     14:45:50 up 1 day,  1:25,  2 users,  load average: 0.00, 0.02, 0.05

# Salt提供了大量的模块执行不同的操作, 不建议生产频繁使用cmd.run

1.5Saltstack配置管理

salt通过状态模块来识别配置描述文件State状态文件,格式是YAML扩展名后缀是.sls

1.YAML基础语法

YAML:
    1.缩进(层级关系)  2个空格,不能试用Tab。
    2.冒号  key: value
    3.短横线 - list1
            - list2
  • 1.缩进
    • YAML使用一个固定的缩进风格表示数据层级结构关系,每个缩进由两个空格组成, 不要使用tabs。
  • 2.冒号
    • 以冒号结尾, 以冒号为路径的除外,其他所有冒号后面所有必须有空格。
  • 3.短横线
    • 表示列表项,使用一个短横杠加一个空格。
    • 多个项使用同样的缩进级别作为同一列表。

2.YAML配置,设置base环境

#定义基础环境目录位置
[root@salt0-master ~]# vim /etc/salt/master
file_roots:
  base:
    - /srv/salt
#修改配置必须重启服务
[root@salt0-master ~]# systemctl restart salt-master

3.编写yaml语法文件

[root@salt0-master ~]# mkdir -p /srv/salt/app
[root@salt0-master ~]# cd /srv/salt/app

#编写sls文件, apache安装并启动
[root@salt0-master app]# cat apache.sls 
apache-install:
  pkg.installed:
    - name: httpd

apache-systemctl:
  service.running:
    - name: httpd
    - enable: True

#编写sls文件, vsftpd安装并启动
[root@salt0-master app]# cat vsftpd.sls 
vsftpd_install:
  pkg.installed:
    - names:
      - vsftpd
      - httpd-tools

vsftpd_systemctl:
  service.running:
    - name: vsftpd
    - enable: True

#编写sls文件, nginx安装并启动
[root@salt0-master app]# cat nginx.sls
nginx-install:
  pkg.installed:
    - name: nginx

nginx-systemctl:
  service.running:
    - name: nginx

4.使用salt命令的state状态模块让所有Minion都应用该配置

[root@linux-node1]# salt '*' state.sls app.vsftpd
[root@linux-node1]# salt '*' state.sls app.vsftpd 

5.如果想不同的主机应用不同的配置, 则需要使用到salt高级状态模块

# topfile入口文件只能放置在base环境
[root@salt0-master ~]# cat /srv/salt/top.sls 
base:
  'salt1-minion.example.com':
    - app.nginx
  'salt2-minion.example.com':
    - app.nginx
  'salt3-minion.example.com':
    - app.apache
    - app.vsftpd
  'salt4-minion.example.com':
    - app.apache
    - app.vsftpd

6.当使用salt命令执行高级状态, 会将topfile当做入口文件,进行调用

# 将高级状态应用到所有主机
[root@linux-node1]# salt '*' state.highstate

1.6SaltStack消息队列

SaltStack可以支数以千计,甚至更多的服务器。这些性能的提供主要来自于ZeroMQ, 因为SaltStack底层是基于ZeroMQ进行高效的网络通信。ZeroMQ是一个简单好用的传输层,像框架一样的一个套接字库,他使得Socket编程更加简单、简洁和性能更高。

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

Salt Master运行两个网络服务
一个是ZeroMQ PUB消息发布与订阅系统,默认监听4505端口, 主要用于MasterMinion下发指令

#所有的Minion连接到Master的4505端口TCP状态持续保持为ESTABLISHED
[root@linux-node1]# yum install lsof -y
[root@linux-node1]# lsof -i :4505

注意: 可以修改/etc/salt/master配置文件的publish_port参数设置端口。

请求与响应

ZeroMQ支持Request-Reply请求与响应模式,简称REQ/REP

Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口salt客户端与服务端通信的端口
同时也主要用于Master接收Minion执行某个命令后的返回值

注意: 可以修改/etc/salt/master配置文件的ret_port参数设置。

显示SaltStack进程名称方式

[root@linux-node1]# yum install -y python-setproctitle
[root@linux-node1]# ps aux | grep salt
/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)

1.7SaltStack常用配置

1.Salt Master配置

Salt Master端的配置是修改/etc/salt下master配置文件。以下是Master端常用的配置。

interface: //指定bind 的地址(默认为0.0.0.0)
publish_port: //指定发布端⼝(默认为4505)
ret_port: //指定结果返回端⼝,  与minion配置⽂件中的master_port对应(默认为4506)
user: //指定master进程的运⾏⽤户,如果调整, 则需要调整部分目录的权限(默认为root)
timeout: //指定timeout时间,  如果minion规模庞⼤或⺴络状况不好,建议增⼤该值(默认5s)
keep_jobs: //minion执⾏结果返回master, master会缓存到本地的cachedir目录,该参数指定缓存多⻓时间,可查看之间执行结果会占⽤磁盘空间(默认为24h)
job_cache: //master是否缓存执⾏结果,如果规模庞⼤(超过5000台),建议使⽤其他⽅式来存储jobs,关闭本选项(默认为True)
file_recv : //是否允许minion传送⽂件到master 上(默认是Flase)
file_roots: //指定file server目录,  默认为:
    file_roots:    
       base:    
        - /srv/salt     
pillar_roots : //指定pillar ⺫录,  默认为:
    pillar_roots:     
      base:     
        - /srv/pillar     
log_level: //⽇志级别
⽀持的⽇志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)

2.Salt Minion配置
Minion端配置非常简单,一般只需要修改两个配置即可。

[root@minion ~]# vim /etc/salt/minion
master: 192.168.56.11 //修改master为master的IP地址
id: //客户端的id,默认不设置会取客户端的完整主机名

Salt Minion端常用配置

master: //指定master 主机(默认为salt)
master_port: //指定认证和执⾏结果发送到master的哪个端⼝,  与master配置⽂件中的ret_port对应(默认为4506)
id: //指定本minion的标识, salt内部使⽤id作为标识(默认为主机名)
user: //指定运⾏minion的⽤户.由于安装包,启动服务等操作需要特权⽤户, 推荐使⽤root( 默认为root)
cache_jobs : //minion是否缓存执⾏结果(默认为False)
backup_mode: //在⽂件操作(file.managed 或file.recurse) 时,  如果⽂件发⽣变更,指定备份目录.当前有效
providers : //指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5
renderer: //指定配置管理系统中的渲染器(默认值为:yaml_jinja )
file_client : //指定file clinet 默认去哪⾥(remote 或local) 寻找⽂件(默认值为remote)
loglevel: //指定⽇志级别(默认为warning)
tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为True)
打赏作者
很喜欢这篇文章,打赏犒劳下作者,以此激励作者创作更多! (点击"打赏按钮",文章界面会变灰,往上翻阅可看见微信二维码)

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

您可能也喜欢:

Cobbler自动化部署最佳实践

运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的。 面对生产环境中不同服务器的需求,该如何实现批量部署多版本的操作系统呢?Cobbler便可以的满足这一实际需求,实现多版本操作系统批量部署。 在这就...

more

什么是自动化运维?

每个人的工作的年限不同、不同的行业、不同的爱好、不同的专长、对自动化的理解也都不一样 运维知识体系---http://www.unixhot.com/page/ops 1(标准化、自动化)沉淀、流程(流程是约束人  而无法管住人)、标准、能力 (大部分人处在工具化和标准化之间) 每一个层面都是...

more

自动化部署流程设计

1.自动化安装   1.采购-->验货-->签字,验货单,盖公章。 2.资产管理:资产录入-->机房、区域、排、机柜、位置、配置(资产管理,验收单)(自动化获取) 3.RAID-(验货的时候)RAID。自动化进行配置 4.CMDB:资产录入-->机房、区域、排、...

more

欢迎新朋友你的到来!
已经有2 条评论抢在你前面了~
  1. 沙发

    第一次看,感觉还挺新鲜!

    回复 2个月前 (06-17)
  2. 板凳
    阳光总在风雨后

    学习了!致敬

    回复 2周前 (08-05)

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

切换登录

注册

    - 00:00 / 00:00