saltstack简介(1)

一、saltstack简介

saltStack由Python编写,为server-client模式的系统(在salstack中叫Master-Minion),自己本身支持多master,而puppet则需要依赖于web服务器。saltstack除了可以通过在节点安装客户端进行管理还支持直接通过ssh进行管理。运行模式为master端下发指令,客户端接收指令执行。saltstack依赖于zeromq消息队列,采用yaml格式编写配置文件,比较简单。
支持api及自定义python模块,能轻松实现功能扩展。
saltstack是一个分部式远程执行系统,用来在远程节点上归执行命令和查询数据,它的核心功能如下:

  • 使用命令发送到远程系统是并行的而不是串行的
  • 使用安全的加密协议
  • 使用最小最快的网络载荷
  • 提供简单的编程接口

saltstack采用C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口

二、salt-master和salt-minion的安装

node1: salt-master
node2,node3:salt-minion

1.yum源文件的下载

sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm   #官网上给的yum源文件,也可以但是速度较慢
sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo  #替换成阿里源,下载速度较快

在这里插入图片描述
2.安装

node1上:
[root@node1 yum.repos.d]# yum install -y salt-master
[root@node2 yum.repos.d]# yum install -y salt-minion
[root@node3 yum.repos.d]# yum install -y salt-minion

3.服务的开启

[root@node1 yum.repos.d]# systemctl start salt-master
[root@node1 yum.repos.d]# netstat -antlupe


4.mster-node1监听

[root@node1 salt]# yum install -y lsof
[root@node1 salt]# lsof -i :4505
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 5684 root   15u  IPv4  62074      0t0  TCP *:4505 (LISTEN)
[root@node1 salt]# lsof -i :4506
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 5690 root   23u  IPv4  62098      0t0  TCP *:4506 (LISTEN)
[root@node1 salt]# systemctl disable --now firewalld            #关闭防火墙
[root@node2 salt]# systemctl disable --now firewalld            #关闭防火墙
[root@node3 yum.repos.d]# systemctl disable --now firewalld     #关闭防火墙

在node2和node3上/etc/salt/里
[root@node2 salt]# vim minion
在这里插入图片描述
在这里插入图片描述
node3同样添加。启动服务

[root@node2 salt]# systemctl start salt-minion
[root@node3 salt]# systemctl start salt-minion

在这里插入图片描述
此时,查看监听的端口:
在这里插入图片描述
注意
node2中/etc/salt/里
在这里插入图片描述
5.查看彼此的公钥
node1和node2,3彼此交换公钥来进行通信

node1的公钥给node2和node3各一份:
[root@node1 master]# md5sum master.pub
9a71717b5e260bcee14d40c075e7b282  master.pub
[root@node1 master]# pwd
/etc/salt/pki/master
[root@node2 minion]# md5sum minion_master.pub
9a71717b5e260bcee14d40c075e7b282  minion_master.pub
[root@node3 minion]# md5sum minion_master.pub
9a71717b5e260bcee14d40c075e7b282  minion_master.pub

node2和node3也把给ndoe1一份
[root@node1 minions]# pwd
/etc/salt/pki/master/minions
[root@node1 minions]# md5sum node2
b290e7a082fba220fcd601ad261231e4  node2
[root@node1 minions]# md5sum node3
2fe9a30c04feaaa612ed42c9fa5bba7d  node3
[root@node2 minion]# md5sum minion.pub 
b290e7a082fba220fcd601ad261231e4  minion.pub
[root@node3 minion]# md5sum minion.pub 
2fe9a30c04feaaa612ed42c9fa5bba7d  minion.pub

在这里插入图片描述
在这里插入图片描述

三、saltstack远程执行

salt命令由三个主要部分构成:

 1 .  salt  '<target>' <function> [argument]
 target:指定哪些minon,默认的规则是使用glob匹配minion id     #salt '*' test.ping
 target也可以使用正则表达式                                 #salt -E 'node[1-3]' test.ping
 target也可以指定列表                                      #salt -L 'node2,node3' test.ping


[root@node1 salt]# salt node2 test.ping    #saltstack命令模板
node2:
    True  
[root@node1 salt]# ansible node2 -m ping       #ansible命令模版
node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
salt ‘*’ cmd.run ‘uname -a’cmd.run 代表运行远程指令。在所有minion节点上运行’uanme -a’指令
ansibel node2 -a ‘df -h’ansible默认是-m ,所以直接-a 加命令
salt ‘node2’ sys.doc pkg查看模块文档
salt ‘node2’ pkg.install httpd
salt ‘node2’ pkg.remove httpd

在这里插入图片描述
3.1自定义模块
默认目录在/src/salt,此目录没有,需自行创建

[root@node1 _modules]# mkdir /srv/salt/_modules/
[root@node1 _modules]# cd /srv/salt/_modules/
[root@node1 _modules]# vim mydisk.py 
def df():
    return __salt__['cmd.run']('df -h')


[root@node1 _modules]# salt node2 saltutil.sync_modules  #将ndoe1写好的模块同步到node2上
node2:
    - modules.mydisk

[root@node1 _modules]# salt node2 mydisk.df              #运行自己写的模块
node2:
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root   17G  1.5G   16G   9% /
    devtmpfs               484M     0  484M   0% /dev
    tmpfs                  496M   80K  496M   1% /dev/shm
    tmpfs                  496M  6.7M  489M   2% /run
    tmpfs                  496M     0  496M   0% /sys/fs/cgroup
    /dev/sda1             1014M  133M  882M  14% /boot
    tmpfs                  100M     0  100M   0% /run/user/0

在node2上,模块同步前:
在这里插入图片描述
模块同步后:
在这里插入图片描述
运行后:
在这里插入图片描述

四、了解YAML语法

规则一:缩进
salt需要每个缩进级别由两个空格组成,不要使用tabs
规则二:冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串
 - my_keys: my_value
规则三:短横杠
想要表示列表项,使用一个短横杠加一个空格
- list_value_one
- list_vaule_one

创建一个sls文件:

vim /src/salt/apache.sls
  httpd:  #ID声明
    pkg:  #状态声明
      - installed  #函数声明
指定主机执行:
salt ndoe2 state.sls apache

在这里插入图片描述
在这里插入图片描述
若多台主机安装。创建一个top.sls
[root@node1 salt]# cat top.sls
base:
“*”:
- apache

在这里插入图片描述
在这里插入图片描述

sls文件命名:

  • sls文件以".sls"后缀结尾,但在调用是不用写此后缀
  • inin.sls在一个子目录里面表示引导文件,也就表示子目录本身,所以apache/init.sls就是表示apache
  • 如果同时存在apache.sls和apache/init.sls,则apache/init.sls被忽略,apache.sls将被用来表示apache

[root@node1 apache]# scp node2:/etc/httpd/conf/httpd.conf .
[root@node1 apache]# ls
httpd.conf init.sls

node2上原本httpd是80端口

在这里插入图片描述
[root@node1 apache]# vim httpd.conf
在这里插入图片描述
[root@node1 apache]# cat init.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
- httpd-tools
- php

service.running:
- name: httpd
- enable: True
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/httpd.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述再来node2查看端口,已更改为8080:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值