自动化运维工具saltstack01 -- 之SaltStack介绍、安装与基础使用
SaltStack介绍
- 官网地址:http://www.saltstack.com
- 官方文档地址:http://docs.saltstack.com
- Github:http://Github.com/saltstack
1、saltstack介绍
SaltStack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑上千万台服务器规模,数秒即可完成数据传递;
SaltStack是基于python语言开发的,同时提供Rest API方便二次开发以及和其他平台集成;
2、saltstack的四大功能
- 远程执行:远程执行命令、脚本等
- 配置管理:配置软件、配置文件等
- 云管理:自动化创建虚拟机
- 时间驱动:通过事件驱动另一个进程(发生了一个事件之后会自动触发另一个事件)
3、saltstack的三种运行模式
- 本地运行:再本机执行命令等,(比较鸡肋)
- Master/Minion:需要在被管理端安装客户端(salt-minion)
- Salt SSH:不需要安装客户端,通过ssh的方式连接
4、saltstack支持的操作系统有哪些
- CentOS
- Redhat
- Debian
- Ubuntu
- FreeBSD
- Solaris
- Fedora
- Gentoo
- MAC OS X
- Archlinux
- Windows
- Suse
saltstack部署、配置与基础使用
1、环境准备
| 主机名 | IP地址 | 主机角色 | 操作系统 |
linux-node1.example.com |
192.168.55.11 | salt-server端(salt-master) | CentOS 7.2 |
linux-node2.example.com |
192.168.55.20 | salt-client端(salt-minion) | CentOS 7.2 |
2、环境基础优化
关闭防火墙 、关闭selinux
# systemctl stop firewalld #临时关闭防火墙
# systemctl disable firewalld #永久关闭防火墙
# sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config #修改配置文件需要重启服务器配置才会生效,如何立即生效那?
# setenforce #关闭SELinux立即生效,重启服务器后配置失效。
其他基础优化请参考:https://www.cnblogs.com/hei-ma/p/9506623.html
3、saltstack的安装
3.1、安装yum源
rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
3.2、安装server端(salt-master)和client端(salt-minion)
master端安装:yum install -y salt-master
minion端安装:yum install -y salt-minion
4、配置与启动
4.1、启动master端,然后查看master的配置文件
# systemctl start salt-master
# cd /etc/salt/
# ls
master minion pki
# tree pki
pki
└── master
├── master.pem #salt-master的公钥
├── master.pub #salt-master的私钥
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected directories, files
4.2、配置minion端并启动客户端
# sed -n '16p' /etc/salt/minion
master: 192.168.56.11 #告诉minion salt-master是谁,:冒号后面需要有空格
- 关于salt的通讯ID说明:在salt-minion端里有个ID的配置,如果配置ID则使用配置里的ID作为主机通讯标记,如果不配置ID则默认以主机名作为为主机通讯标记的ID,ID如果修改,需要删除之前认证的KEY,然后重新添加KEY;
- 那么如何重新添加ID那? --> {1.停止需要修改ID的salt-minion 2.master端salt-key -d 删除老的id 3.删除minion端的/etc/salt/minion_id 4.删除minion端/etc/salt/pki 5.修改minion配置文件的id 6.启动minion 7.master端重新salt-key加入}
4.3、启动minion端,然后查看minion端的配置
# systemctl start salt-minion
# cd /etc/salt
# tree . ├── minion ├── minion.d ├── minion_id └── pki └── minion ├── minion.pem #minion的公钥 └── minion.pub #minion的私钥 directories, files
4.4、minion端启动后此时再查看master端的密钥
# cd /etc/salt
# tree
.
├── master
├── minion
├── minion.d
├── minion_id
└── pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ │ ├── linux-node1.example.com #minion启动后会将minio端的公钥发送到master端
│ │ └── linux-node2.example.com #minion启动后会将minio端的公钥发送到master端
│ └── minions_rejected
└── minion
├── minion.pem
└── minion.pub directories, files
注:发现minion端的公钥是通过ID来命名的,所以说如果修改了minion端的id就会导致master端无法和minion端通讯
- SlatStack的master与minion的通讯说明:
salt-master发送一个指令时,所有的minion端都会收到,但是minion端会自己识别要执行的任务里是否包含自己{包含则执行,不包含则忽略},
这样设计是否科学那?{master端计算的话需要发送请求到minion端,minion端接收请求,然后返回master端,然后master再判断},{minion端计算的话需要master端发送请求,minion端判断任务里包含我我就执行,不包含我就不执行,所以minion端计算的方式比master端计算的方式节省资源}
minion端以长链接的方式连接master的4505端口实现发送消息,4506端口接收消息。
5、master端添加minion端的密钥
5.1、查看都有哪些minion端的密钥
# salt-key
Accepted Keys: #已经同意的key有哪些
Denied Keys: #拒绝的key有哪些
Unaccepted Keys: #未同意的key有哪些
linux-node1.example.com
linux-node1.example.com
Rejected Keys: #被拒绝的key有哪些
5.2、同意minion端的key
# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
db02-
saltstack-
Proceed? [n/Y] y #确认信息,是否同意这两个key
Key for minion linux-node1.example.com accepted.
Key for minion linux-node1.example.com accepted.
5.3、salt-key命令的参数及使用说明
-d 删除单个key,也支持*号模糊匹配删除 (针对key的操作)
-D 删除所有key,慎用 (针对key的操作)
-L 列表 (远程执行、列表key等)
-A 同意所有key (针对key的操作)
-a 同意单个,可以用*号迷糊匹配添加 (针对key的操作)
-G 匹配Grains (远程执行)
-I 匹配Pillar (远程执行)
-E 支持正则表达式 (远程执行)
-S 指定客户端的ip地址 (远程执行)
-C 一条远程执行的命令同时支持多个参数 (远程执行)
-N 支持节点组 (远程执行)
5.4、同意KEY后查看minion端会发现master的公钥也发送到了minion端
# tree pki
pki
└── minion
├── minion_master.pub #master端的公钥
├── minion.pem
└── minion.pub
5.5、同意KEY后查看master端的变化
# tree pki
pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ │ ├── linux-node1.example.com #发现之前在minions_pre目录下的KEY文件到了当前目录,表示是被管理的状态
│ │ └── linux-node2.example.com
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ ├── minions_rejected
│ └── ssh
│ ├── salt-ssh.rsa
│ └── salt-ssh.rsa.pub
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub directories, files
6、测试saltstack的master端与minion端通讯
# salt 'linux-node1*' test.ping
linux-node1.example.com:
True #True为通
7、saltstack使用之远程执行shell命令
# salt ' linux-node1.example.com ' cmd.run "w"
linux-node2.example.com:
:: up :, user, load average: 0.00, 0.01, 0.05
8、saltstack远程执行之service模块
8.1、.available判断sshd是否正在运行
# salt '*' service.available sshd
saltstack-:
True #True则表正在运行
db02-:
True
8.2、.missing如果sshd服务正在运行则返回False
# salt '*' service.missing sshd
db02-:
False #False则表示服务正在运行
saltstack-:
False
8.3、.reload重启服务
# salt '*' service.reload httpd
saltstack-:
True #重启成功
db02-:
True
8.4、.status查看服务状态
# salt '*' service.status httpd
db02-:
True #apache服务器是启动的状态
saltstack-:
True
8.5、.stop关闭服务
# salt '*' service.stop httpd
saltstack-:
True #关闭成功
db02-:
True
8.6、.start启动服务
# salt '*' service.start httpd
saltstack-:
True #启动成功
db02-:
True
8.7、.get_all显示所有运行的服务
# salt '*' service.get_all
saltstack-:
- -.mount
- NetworkManager
- NetworkManager-dispatcher
- NetworkManager-wait-online
- README
- abrt-ccpp
- abrt-oops
- abrt-pstoreoops
- abrt-vmcore
- abrt-xorg
- abrtd
- arp-ethers
9、saltstack远程执行之network模块
9.1、返回所有活动的tcp连接
# salt '*' network.active_tcp
db02-:
----------
:
----------
local_addr:
0.0.0.0
local_port: remote_addr:
0.0.0.0
remote_port:
9.2、返回arp
# salt '*' network.arp
db02-:
----------
:0c::ab:::
172.16.1.41
:::c0:::
10.0.0.1
:::e2:2c::
10.0.0.2
<incomplete>:
172.16.1.35
9.3、检测主机的连接状态
salt '*' network.connect archlinux.org #检查80端口是否打开 salt '*' network.connect archlinux.org timeout= #检查80端口是否打开,超时时间3s salt '*' network.connect archlinux.org timeout= family=ipv4 #检查ipv4的ip地址段的80端口是否打开 salt '*' network.connect google-public-dns-a.google.com port= proto=udp timeout= #检查udp的53端口是否打开,超时时间3s
9.4、返回网卡eth0的IP地址
# salt '*' network.interface eth0
saltstack-:
|_
----------
address:
10.0.0.41 #ip地址
broadcast:
10.0.0.255
label:
eth0
netmask:
255.255.255.0
11、远程执行之对模块的访问控制
10.1、再salt-master的配置文件里添加访问限制
# sed -n '245,248p' /etc/salt/master
client_acl: #访问控制标签
ouyang: #指定的用户
- test.ping #该用户可以执行的功能
- network.* #该用户可以执行的功能
10.2、创建用户并授权
# useradd ouyang
#passwd ouyang
# chmod /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master
10.3、重启master并测试
、重启
# systemctl restart salt-master
、测试权限之内的命令
$ salt '*' test.ping
[WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
db02-:
True #执行成功
saltstack-:
True
、测试执行权限之外的命令
$ salt '*' cmd.run 'w'
[WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage). #失败
11、 在master配置文件里配置指定用户对主机能执行模块的权限
11.1、在salt-master配置用户和主机限制并重启master
# sed -n '249,251p' /etc/salt/master
ouyang: #用户
- db*: #指定的主机
- test.ping #指定的用户对指定的主机能执行的模块功能
# systemctl restart salt-master
11.2、测试
$ salt '*' test.ping
[WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage). #对所有主机执行功能失败,因为是没有授权所有主机
$ salt 'db*' test.ping
[WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
db02-:
True #对db开头的主机名执行成功,证明配置生效
12、在salt-master里配置黑名单
vim /etc/salt/master
#client_acl_blacklist: #黑名单
# users:
# - root #黑名单的用户,即root用户不可以使用salt执行命令
# - '^(?!sudo_).*$' # all non sudo users #未使用sudo的用户不可以使用salt执行命令
# modules:
# - cmd #禁止以上匹配的用户使用cmd模块
13、SaltStack的其他执行模块
13.1、salt执行模块之远程安装一个软件包
# salt '*' state.single pkg.installed name=vim
13.2、salt执行模块之查看哪些minion端可连接,哪些不可连接
# salt-run manage.status
down:
up:
- linux-node1.example.com
- linux-node2.example.com
注:up的为可连接,down为不可链接
13.3、salt执行模块之查看版本及更新时间
# salt-run manage.versions
Master:
2015.5.
Up to date:
----------
linux-node1.example.com:
2015.5.
linux-node2.example.com:
2015.5.
说明:状态模块一样,但是有些minion端不能执行,可以用上面的命令查看版本是否一样
自动化运维工具saltstack01 -- 之SaltStack介绍、安装与基础使用的更多相关文章
- 自动化运维工具saltstack03 -- 之SaltStack的数据系统
SaltStack数据系统 saltstack有两种数据系统:grains与pillar 1.SaltStack数据系统之grains grains可以收集minion端的静态数据(即机器启动时收集一 ...
- 自动化运维工具saltstack02 -- 之SaltStack的配置管理
SaltStack的配置管理 1.配置管理说明 配置管理,顾名思义及配置与管理, salt-master的配置文件编写格式之YAML语法说明: 数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如 ...
- 自动化运维工具 SaltStack 搭建
原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...
- 自动化运维工具SaltStack详细部署
==========================================================================================一.基础介绍==== ...
- 自动化运维工具SaltStack详细部署【转】
==========================================================================================一.基础介绍==== ...
- 自动化运维工具之 Ansible 介绍及安装使用
一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...
- 自动化运维工具Ansible介绍
一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...
- CheungSSH国产自动化运维工具开源Web界面
CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...
- 自动化运维工具Ansible详细部署 (转载)
自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...
随机推荐
- Loadrunner之HTTP接口测试
Loadrunner之HTTP接口测试 接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. ...
- linux的虚拟文件系统VFS
虚拟文件系统(virtual file system),别名虚拟文件系统开关,是linux中的一个软件层,向用户空间提供文件系统操作接口. VFS包含的系统调用包括open(2).stat(2).re ...
- iOS项目启动及启动时间优化
app的启动入口Main函数: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc ...
- Java运算符使用总结(重点:自增自减、位运算和逻辑运算)
Java运算符共包括这几种:算术运算符.比较运算符.位运算符.逻辑运算符.赋值运算符和其他运算符.(该图来自网络) 简单的运算符,就不过多介绍使用了,可自行测试.关于赋值运算,可以结合算术运算和位运算 ...
- SQL分页过多时, 如何优化
问题: 我们经常会使用到分页操作,这里有个问题,在偏移量非常大的时候,它会导致MySQL扫描大量不需要的行然后再抛弃掉.如: , ; 上述这条SQL语句需要查询10020条记录然后只返回最后20条.前 ...
- Java---Huffman树的实现
什么是哈弗曼树 1.哈弗曼树是最优二叉树,树的带权路径长度最小的一个二叉树. 2.带权路径长度为根节点到该节点的路径长度和该节点权重的乘积.3.路径长度为当前节点到另一个节点所经过的分支的个数(边的个 ...
- ionic ios 打包 真机测试常见问题
1.ionic 项目在windows下正常打包安卓包时 迁移到mac下打包ios时 不需要复制平台目录platforms即可 不用再mac下去安装各种插件信息 2.ionic 下不能访问api信 ...
- Redis简单介绍与数据类型
介绍 分布式缓存 NoSql:解决高并发.高可用.高可扩展,大数据存储等一系列问题而产生的数据库解决方案. Redis:键值(Key-Value)存储数据库 Redis是使用c语言开发的一个高性能键值 ...
- Flume(3)-安装部署
一. 下载 Flume官网地址 http://flume.apache.org/ 文档查看地址 http://flume.apache.org/FlumeUserGuide.html 下载地址 htt ...
- urllib库使用方法 3 get html
import urllib.requestimport urllib.parse #https://www.baidu.com/s?ie=UTF-8&wd=中国#将上面的中国部分内容,可以动态 ...