zoukankan      html  css  js  c++  java
  • 自动化运维工具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 0      #关闭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
    
    6 directories, 2 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的私钥
    
    
    3 directories, 4 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
    
    9 directories, 9 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-36
    saltstack-41
    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
    
    8 directories, 9 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:
         20:26:56 up  2:10,  1 user,  load average: 0.00, 0.01, 0.05

      8、saltstack远程执行之service模块

    8.1、.available判断sshd是否正在运行

    # salt '*' service.available sshd
    saltstack-41:
        True  #True则表正在运行
    db02-36:
        True

    8.2、.missing如果sshd服务正在运行则返回False

    # salt '*' service.missing sshd
    db02-36:
        False    #False则表示服务正在运行
    saltstack-41:
        False

    8.3、.reload重启服务

    # salt '*' service.reload httpd
    saltstack-41:
        True    #重启成功
    db02-36:
    True

    8.4、.status查看服务状态

    # salt '*' service.status httpd
    db02-36:
        True    #apache服务器是启动的状态
    saltstack-41:
    True

    8.5、.stop关闭服务

    # salt '*' service.stop httpd
    saltstack-41:
        True    #关闭成功
    db02-36:
    True

    8.6、.start启动服务

    # salt '*' service.start httpd
    saltstack-41:
        True     #启动成功
    db02-36:
    True

    8.7、.get_all显示所有运行的服务

    # salt '*' service.get_all
    saltstack-41:
        - -.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-36:
        ----------
        0:
            ----------
            local_addr:
                0.0.0.0
            local_port:
                22
            remote_addr:
                0.0.0.0
            remote_port:
                0

    9.2、返回arp

    # salt '*' network.arp
    db02-36:
        ----------
        00:0c:29:ab:27:57:
            172.16.1.41
        00:50:56:c0:00:08:
            10.0.0.1
        00:50:56:e2:2c:42:
            10.0.0.2
        <incomplete>:
            172.16.1.35

    9.3、检测主机的连接状态

    salt '*' network.connect archlinux.org 80      #检查80端口是否打开
    
    salt '*' network.connect archlinux.org 80 timeout=3     #检查80端口是否打开,超时时间3s
    
    salt '*' network.connect archlinux.org 80 timeout=3 family=ipv4    #检查ipv4的ip地址段的80端口是否打开
    
    salt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3     #检查udp的53端口是否打开,超时时间3s

    9.4、返回网卡eth0的IP地址

    # salt '*' network.interface eth0
    saltstack-41:
        |_
          ----------
          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 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master

    10.3、重启master并测试

    1、重启
    # systemctl restart salt-master
    2、测试权限之内的命令
    $ salt '*' test.ping
    [WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
    db02-36:
        True     #执行成功
    saltstack-41:
        True
    3、测试执行权限之外的命令
    $ 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-36:
        True    #对db开头的主机名执行成功,证明配置生效

    12、在salt-master里配置黑名单

    vim /etc/salt/master
    259 #client_acl_blacklist:   #黑名单
    260 #  users:
    261 #    - root    #黑名单的用户,即root用户不可以使用salt执行命令
    262 #    - '^(?!sudo_).*$'   #  all non sudo users    #未使用sudo的用户不可以使用salt执行命令
    263 #  modules:
    264 #    - 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.10
    Up to date:
        ----------
        linux-node1.example.com:
            2015.5.10
        linux-node2.example.com:
            2015.5.10

    说明:状态模块一样,但是有些minion端不能执行,可以用上面的命令查看版本是否一样

  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/hei-ma/p/9645101.html
Copyright © 2011-2022 走看看