• 自动化运维工具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端不能执行,可以用上面的命令查看版本是否一样

  • 相关阅读:
    表数据驱动之直接访问
    Sam format
    samtools faidx
    bwa index|amb|ann|bwt|pac|sa
    68.26-95.44-99.74 rule|empirical rule
    z-scores|zα
    Normally Distributed|
    数理统计与概率论的关系
    The General Addition Rule|complementation rule|special addition rule|
    Events|sample space|mutually exclusive events
  • 原文地址:https://www.cnblogs.com/hei-ma/p/9645101.html
Copyright © 2020-2023  润新知