SaltStack 简介

  SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。遵守Apache2协议,

  通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

基本原理:

  SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

  minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

  master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。

主要功能

• Saltstack最主要的两个功能是:配置管理与远程执行

• Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器

• Saltstack已经支持Docker相关模块

• 在友好地支持各大云平台之后,配合Saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展

SaltStack 常用模块

1.pkg 模块

pkg 模块的作用是包管理,包括增删更新。

2.file 模块

file 模块的作用是管理文件的操作,包括同步文件、设置权限和所属用户组、删除文件等操作。

3.cmd 模块

cmd 模块的作用是在 minion 上执行命令或脚本。

4.user 模块

user 模块的作用是管理系统账户的操作。

5.service 模块

service 模块的作用是管理系统服务的操作。

6.cron 模块

cron 模块的作用是管理 cron 服务操作。

salt部署基本架构

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

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

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

运行salt依赖包

python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2

解决依赖包最简单的办法就是用安装包管理器,yum工具

服务器环境准备

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

ip地址

192.168.178.131 192.168.178.132

身份

master slave

软件包

salt-master salt-minion

准备工作

1.修改虚拟机ip地址为静态地址,并且确保可上网

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7d4f9ede-810f-4976-a01b-250b845c99cc"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.11.131
NETMASK=255.255.255.0
GATEWAY=192.168.11.1
DNS1=119.29.29.29

master网卡配置

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="f9fc5929-8594-466e-a041-34caee8c1e32"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.11.132
NETMASK=255.255.255.0
GATEWAY=192.168.11.1
DNS1=119.29.29.29

slave网卡配置

查看linux的dns文件
cat /etc/resolv.conf #如果本地机器出现 “未知的域名” 报错时,请检查这个dns文件是否配置了dns服务器
#配置dns就是写入
nameserver 119.29.29.29
#常见dns服务器
8.8.8.8 google
114.114.114.114
119.29.29.29 腾讯
8.8.4.4
223.5.5.5 #阿里巴巴的dns服务器
223.6.6.6 #同上

DNS配置文件

#设置好本地/etc/hosts解析
vim /etc/hosts#写入以下解析记录
192.168.12.44 master
192.168.12.45 slave
#关闭服务器安全策略
/etc/init.d/iptables stop
iptables -F
#关闭服务器selinux
getenforce #检测selinux是否开启
setenforce 0 #临时关闭selinux
#使用sed永久关闭selinux(此步骤需要重启linux)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

/etc/hosts和关闭服务器安全策略

2.安装saltstack

salt软件包需要epel源的支持,那么下载

EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

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缓存

安装好epel源就可以开始安装salt了

查看salt包
yum list salt 安装salt-master # 中心服务器安装salt-master
yum install salt-master -y
安装salt-minion
yum install salt-minion -y

salt端口

安装好salt之后开始配置,salt-master默认监听两个端口:

4505   publish_port 提供远程命令发送功能
4506 ret_port 提供认证,文件服务,结果收集等功能
确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙。

配置文件

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

配置salt-master---->/etc/salt/master

 # 绑定到本地的端口
 interface: 0.0.0.0
# 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

salt-master配置结果

[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #绑定到本地的0.0.0.0地址
publish_port: 4505  #管理端口,命令发送
user: root      #运行salt进程的用户
worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506  #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master  #日志文件地址 #自动接收minion的key
auto_accept: False

salt-minion的配置文件

# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
id: slave # 特别注意次数,是一个坑,id:与后面的名字之间一定要加一个空格,否则报错 # 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的配置结果

[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion

启动salt-master和salt-minion

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

在master上接收minion秘钥

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

在salt-master执行

salt-key命令用于管理mionion秘钥

[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave    #此时已经出现slave
Rejected Keys:

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

检查master和minion的秘钥匹配

在master上执行

[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

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

[root@slave ~]# salt-call --local key.finger
local:
0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

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

[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted.

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

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

  这样,秘钥接收就完成了,就可以执行通过中心节点master远程控制执行子slave了

第一条salt命令

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

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

查看salve的ip和主机名

自动化运维之saltstack的使用安装的更多相关文章

  1. saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3

    saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...

  2. saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix

    saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...

  3. saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived

    saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...

  4. saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy

    saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...

  5. 1、自动化运维之SaltStack实践

    自动化运维之SaltStack实践 1.1.环境 linux-node1(master服务端) 192.168.0.15 linux-node2(minion客户端) 192.168.0.16 1.2 ...

  6. 自动化运维之Saltstack

    第三十八课 自动化运维之Saltstack 目录 一.自动化运维介绍 二. saltstack安装 三. 启动saltstack服务 四. saltstack配置认证 五. saltstack远程执行 ...

  7. saltstack自动化运维系列⑩SaltStack二次开发初探

    saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...

  8. 自动化运维工具 SaltStack 搭建

    原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...

  9. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

随机推荐

  1. Nginx 配置解析

    概述:本篇文章主要对Nginx配置文件中一些常用配置进行了讲解,和如何使用Docker进行安装Nginx.因为该文章是回首在工作闲暇之余整理的,还有待完善,如果有疑义和更好的建议的朋友可以留言给我. ...

  2. PC蓝牙通信C#代码实现

    PC蓝牙通信C#代码实现 这篇文章主要为大家详细介绍了PC蓝牙通信C#代码实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了C#实现PC蓝牙通信代码,供大家参考,具体内容如下 ...

  3. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)A模拟 B三分 C dfs D map

    A. Andryusha and Socks time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  4. Ubuntu修改系统语言为英文可支持中文

    简单来说,就行修改/etc/default/locale文件,设置语言位UTF-8,如果没有这个语言,就执行命令locale-gen en_US.UTF-8进行安装,没有即时生效的话就重启. 查看当前 ...

  5. Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】【转】

    Nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 另外一个功能就是作为反向代理服 ...

  6. UVA 1393 Highways

    https://vjudge.net/problem/UVA-1393 题意: a*b的点阵中能画多少条非水平非竖直的直线 方向‘/’ 和 方向 ‘\’ 对称 枚举直线所在矩形的i*j 直线可能重复的 ...

  7. Php扩展--seasLog日志扩展安装

    安装/配置 编译安装 wge thttp://pecl.php.net/get/SeasLog-1.4.4.tgz tar -zxvfSeasLog-1.4.4.tgz cd SeasLog-1.4. ...

  8. jQuery简单日历插件版

    先来看demo:http://codepen.io/jonechen/pen/xOgZMz 插件代码: ; (function($) { var Calendar = function(ele, op ...

  9. Html5学习2(Html表格、Html列表、Html5新元素、Canvas (坐标、路径、画圆、文本、渐变、图像))

    Html表格 1.表格中的表头:<th></th>.其中表头部分字体加粗,颜色深绿色 <h4>水平标题:</h4> <table border=& ...

  10. javascript延迟对象

    1.模拟任务队列: function taskQueue() { var taskList = []; var isRun = false; this.addTask = function (task ...