自动化运维之saltstack的使用安装
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

# 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的使用安装的更多相关文章
- saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3
saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...
- saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix
saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...
- 1、自动化运维之SaltStack实践
自动化运维之SaltStack实践 1.1.环境 linux-node1(master服务端) 192.168.0.15 linux-node2(minion客户端) 192.168.0.16 1.2 ...
- 自动化运维之Saltstack
第三十八课 自动化运维之Saltstack 目录 一.自动化运维介绍 二. saltstack安装 三. 启动saltstack服务 四. saltstack配置认证 五. saltstack远程执行 ...
- saltstack自动化运维系列⑩SaltStack二次开发初探
saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...
- 自动化运维工具 SaltStack 搭建
原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...
- 自动化运维工具SaltStack详细部署【转】
==========================================================================================一.基础介绍==== ...
随机推荐
- bzoj1483: [HNOI2009]梦幻布丁(链表+启发式合并)
题目大意:一个序列,两种操作. ①把其中的一种数修改成另一种数 ②询问有多少段不同的数如1 2 2 1为3段(1 / 2 2 / 1). 昨晚的BC的C题和这题很类似,于是现学现写居然过了十分开心. ...
- 目标世界上最小的Linux系统—ttylinux体验
ttylinux的官方网址:http://ttylinux.net/ 简单翻译一下: 你当前访问的是ttylinux的主页,一个针对多种CPU架构的极小的GNU/Linux系统.最小的ttylinux ...
- ringbuffer
http://blog.csdn.net/xiaolang85/article/details/38419163
- shell编程:条件测试与比较(六)
条件测试方法综述 test条件测试的简单语法及测试 范例6-1 测试文件(在test命令中使用-f选项:文件存在且为不同文件则表达式成立) [root@adminset ~]# test -f fil ...
- 正确理解WPF中的TemplatedParent
(注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和Logical ...
- HTML或者JSP页面--执行完某事件后刷新页面,重置表单,清空数据
在提交表单或者执行某个事件之后,如果需要重置表单(即清空表单里的数据) 可以执行下面代码来完成 方式一: self.location.href="userController.do?goAd ...
- PowerDesigner逆向工程
再用PD建表完成后导成SQL脚本然后在SQL Server中运行后生成数据库后,就想到,可不可以将直接将数据库的内容生成PD文档?经过上网查,当然可以的. 要将SQL Server中的数据库导入到PD ...
- 【Foreign】Uria [欧拉函数]
Uria Time Limit: 20 Sec Memory Limit: 512 MB Description 从前有个正整数 n. 对于一个正整数对 (a,b),如果满足 a + b ≤ n 且 ...
- Linux 命令行生成密码的 10 种方式
内容来自: 10 Ways to Generate a Random Password from the Linux Command Line Linux 好玩的事儿是达成一件事情可以用上百种方式. ...
- Linux系统网络基础知识及配置
一:DNS(domain name system)简介 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而 ...