首页 > 其他 > 详细

slatstack高效运维

时间:2019-04-24 19:20:11      阅读:129      评论:0      收藏:0      [点我收藏+]

一.简介

  saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。

二.诞生的背景

  

系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等。如果主机数量庞大,单靠人工维护实在让人难以忍受。技术分享图片

  早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是

  1、系统配置管理,

  2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。

  salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。

  不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 

  Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。

三.运行方式 

  • Local  本地运行,交付管理
  • Master/Minion   <<<   常用方式   
  • Salt SSH   不需要客户端

四.架构

  

在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。

salt架构中的一种就是master > minion。

技术分享图片

在远程执行系统中,salt用python通过函数调用完成任务。

运行salt需要的依赖包:

python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2

 

五.salary的实现流程

  1.准备两台虚拟机

服务器环境 centos7(master) centos7(slave)

ip地址

192.168.226.128 192.168.226.128

身份

master slave

软件包

salt-master salt-minion

  2.确保虚拟机之间可通讯

#在192.168.226.128中编辑host文件 ,把从机的进行解析
vim /etc/hosts
192.168.226.131 centos
技术分享图片
技术分享图片
#同样的在从机也是如配置
vim /etc/hosts
192.168.226.128 qishi
技术分享图片
技术分享图片
 

  3.关闭两台机器的防火墙

setenforce 0
systemctl stop firewalld systemctl disable firewalld
iptable -F

  4. 配置yum的源为阿里(先备份原来有的再操作)

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all  # 清空缓存
yum makecache  # 生成yum缓存

查看salt包
yum list salt

  5.安装

    在主机(192.168.226.128)上安装master

yum install salt-master -y

    在主机(192.168.226.131)上安装monion

安装salt-minion
yum install salt-minion -y

  6.编辑salt服务端的配置软件

    准备master和minion的配置文件

salt-master的配置文件是/etc/salt/master
salt-minion的配置文件是/etc/salt/minion
配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面

    配置salt-master

技术分享图片
# salt运行的用户,影响到salt的执行权限
user: root

#s alt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
worker_threads: 10

# master的管理端口
publish_port : 4505

# master跟minion的通讯端口,用于文件服务,认证,接受返回结果等
ret_port : 4506

# 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口
syndic_master_port : 4506

# 指定pid文件位置
pidfile: /var/run/salt-master.pid

常用配置解析
解析版
interface: 0.0.0.0
publish_port: 4505
user: root
worker_threads: 5
ret_port: 4506
pidfile: /var/run/salt-master.pid
log_file: /var/log/salt/master

#自动接收minion的key
#auto_accept: False

   技术分享图片 

    配置salt-monion

技术分享图片
# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
id: slave
 
# salt运行的用户权限
user: root
 
# master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
master : master
 
# master通信端口
master_port: 4506
 
# 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
backup_mode: minion
 
# 执行salt-call时候的输出方式
output: nested
 
# minion等待master接受认证的时间
acceptance_wait_time: 10
 
# 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
acceptance_wait_time_max: 0
 
# 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
random_reauth_delay: 60
 
# 日志文件位置
log_file: /var/logs/salt_minion.log

salt-minion常用配置
解析版
master: master
master_port: 4506
user: root
id: slave  # id可以自定义,主机通过这个参数来操作指定的从机
acceptance_wait_time: 10
log_file: /var/log/salt/minion

  技术分享图片

  7.分别启动主机和从机(在不用机器上操作)

systemctl start salt-minion
systemctl start salt-master

#检查salt状态
systemctl status salt-minion
systemctl status salt-master

  8.主机接收从机的的秘钥(因为在主机上的自动接收参数设置为false)

    技术分享图片

    在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

    在salt-master执行

   

#salt-key命令用于管理mionion秘钥
[root@qishi ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
tom
Rejected Keys:

技术分享图片

  此时tom已经出现在unaccepted keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令。

  9.主从及秘钥配对

    在master上执行

[root@qishi ~]# salt-key -f tom
Unaccepted Keys:
tom:  c0:1a:5c:61:a9:0a:a2:4e:9a:46:e9:22:44:90:d4:05
技术分享图片

    然后可以在minion上获取minion的秘钥

[root@centos2 ~]# salt-call --local key.finger
local:
    c0:1a:5c:61:a9:0a:a2:4e:9a:46:e9:22:44:90:d4:05
技术分享图片

    因此可确认秘钥匹配,在master上接收秘钥

 

[root@qishi ~]# salt-key -a tom
The following keys are going to be accepted:
Unaccepted Keys:
tom
Proceed? [n/Y] y
Key for minion tom accepted.
技术分享图片

    确认接收秘钥后,检验minion秘钥是否被接收

[root@qishi ~]# salt-key -L
Accepted Keys:
tom
Denied Keys:
Unaccepted Keys:
Rejected Keys:

技术分享图片

  接收完成后就可以执行salt指令了

六.salt-key

  1.相关参数

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

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

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

  2.增删查

#列出当前所有的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

七.salt的操作

  首先知道master和minion都安装了什么文件,然后才知道怎么操作

  master端

rpm -ql salt-master
/etc/salt/master      # salt master主配置文件
/usr/bin/salt           #salt master 核心操作命令
/usr/bin/salt-cp       #salt 文件传输命令
/usr/bin/salt-key    #salt证书管理
/usr/bin/salt-master    #salt master 服务命令
/usr/bin/salt-run          #salt master runner命令

  slave端

rpm -ql salt-minion
/etc/salt/minion     #minion配置文件
/usr/bin/salt-call    #拉取命令
/usr/bin/salt-minion   #minion服务命令
/usr/lib/systemd/system/salt-minion.service   #minion启动脚本

  1.第一条命令

[root@master ~]#salt ‘*‘ test.ping
slave:
    True

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

  这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活

  test模块实际上还有许多其他的函数

技术分享图片
[root@master 192.168.199.155 ~]$salt * sys.list_functions test
slave:
    - test.arg
    - test.arg_repr
    - test.arg_type
    - test.assertion
    - test.attr_call
    - test.collatz
    - test.conf_test
    - test.cross_test
    - test.echo
    - test.exception
    - test.fib
    - test.get_opts
    - test.kwarg
    - test.module_report
    - test.not_loaded
    - test.opts_pkg
    - test.outputter
    - test.ping
    - test.provider
    - test.providers
    - test.rand_sleep
    - test.rand_str
    - test.retcode
    - test.sleep
    - test.stack
    - test.try_
    - test.tty
    - test.version
    - test.versions_information
    - test.versions_report

test其他函数
View Code

  测试下test.echo

[root@master 192.168.226.128~]$salt * test.echo 你好~
slave:
    你好~

   此前在机器上安装了salt minion和salt master,进行了最简单的连接,然后master接受了minion的秘钥,运行了第一条test.ping命令

八.salt命令的组成

  在命令行输入的命令都是     执行模块

  等到命令写入到文件中,             就叫做状态模块

salt --help #即可查看salt帮助
[root@master 192.168.226.128~]$salt --help
Usage: salt [options] <target> <function> [arguments]

salt命令 参数 目标 salt模块的函数 远程执行的参数

  列出所有salt的sys模块

#与系统交互的sys模块
[root@master 10.0.0.5 ~]$salt slave sys.list_modules

  远程执行命令模块

  cmd是超级模块,所有shell命令都能执行

[root@master 10.0.0.5 ~]$salt slave cmd.run ps -ef|grep python
slave:
    root        905      1  0 07:31 ?        00:00:02 /usr/bin/python -Es /usr/sbin/tuned -l -P
    root       3843      1  0 11:05 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root       3846   3843  0 11:05 ?        00:00:01 /usr/bin/python /usr/bin/salt-minion
    root       4031      1  0 11:31 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root       4032   4031  0 11:31 ?        00:00:00 /bin/sh -c ps -ef|grep python
    root       4034   4032  0 11:31 ?        00:00:00 grep python

  远程安装nginx

#在minion上安装nginx
[root@master 10.0.0.5 ~]$salt slave pkg.install "nginx"
#卸载minion上的nginx
[root@master 10.0.0.5 ~]$salt slave pkg.remove "nginx"
#检查pkg包的版本
[root@master 10.0.0.5 ~]$salt slave pkg.version "nginx"

  远程拷贝文件

远程发送文件
salt-cp "slave" /etc/yum.repos.d/* /etc/yum.repos.d/

  远程管理服务模块

  管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块

[root@master 10.0.0.5 ~]$salt slave service.start "nginx"
slave:
    True
[root@master 10.0.0.5 ~]$salt slave service.status "nginx"
slave:
    True
[root@master 10.0.0.5 ~]$salt slave service.stop "nginx"
slave:
    True

 

slatstack高效运维

原文:https://www.cnblogs.com/tjp40922/p/10764382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!