• SaltStact自动化运维工具01


     什么是saltstack
    Saltstack是基于python开发的一套C/S架构配置管理工具
    使用SSL证书签方的方式进行认证管理
    底层使用ZeroMQ消息队列pub/sub方式通信
        – 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作
        – 采用RSA Key方式确认身


    主要功能
    Saltstack最主要的两个功能是:配置管理与远程执行
    Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器
    Saltstack已经支持Docker相关模块
    在友好地支持各大云平台之后,配合Saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展


    Saltstack架构
    • Saltstack基于C/S架构
        – 服务器端称作Master
        – 客户端称作Minion
    • 可以实现传统处理方式,即:客户端发送请求给服务器,服务器收到请求后处理请求,再将结果返回
    • 也可以使用消息队列中的发布与订阅(pub/sub)服务模式

     Saltstack工作机制
    • Master和Minion都以守护进程的方式运行
    • Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
    • 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
    • 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了

     

    SaltStack安装 ---CentOS7  官网安装方法:http://repo.saltstack.com/#rhel
        1. python2.6 ~ python3.0
        2. ZeroMQ or RAET
        3. mako(可选):一个可选的Salt States解析器
        4. gcc(可选)

    node01: 192.168.0.2  (同时启动一个master和一个minion)    minion主动连接master端口
    #停止firewall服务systemctl stop firewalld.service
    #禁止firewall开机启动 systemctl disable firewalld.service
    yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
    yum -y install salt-master
    yum -y install salt-minion #自己本身也可以开启minion
    systemctl start salt-master

    systemctl enable salt-master #开机自启

    cd /etc/salt/
    vim /etc/salt/minion
     16 #master: salt  改成master的IP  maser: 192.168.0.2
    systemctl start salt-minion
    systemctl status salt-minion.service

    启动salt-master 会在/etc/salt/下生成pki文件夹 存放master的公私钥等一些maser信息
    启动salt-minion 同一台机器 也会生成minion公私钥

    目前node1(minion)和node2(minion)的公钥还处于 minion_pre状态下

    node02: 192.168.0.3
    #停止firewall服务 systemctl stop firewalld.service
    #禁止firewall开机启动 systemctl disable firewalld.service
    yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm 
    yum -y install salt-minion
    vim /etc/salt/minion
     16 #master: salt  改成master的IP  maser: 192.168.0.2
     systemctl start salt-minion
    systemctl status salt-minion.service
    启动salt-minion 也会 生成minion公私钥


    目前node1(minion)和node2(minion)的公钥还处于 minion_pre状态下,没有建立互信 ([root@linux-node1 ~]# salt-key -L

    使用 salt-key -a t添加信任

    此时node2的pki文件夹下多了node1的master的公钥

    此时node1 minion的pki文件夹下多了node1的master的公钥

    同时node1和node2的公钥都从minions_pre目录下到了node1 maser的minions目录下

     

     #saltstack支持通配符‘*’表示当前信任的所有的minion,test模块的ping方法

    [root@linux-node1 ~]#  salt '*' test.ping
    linux-node1.localdomain:
        True
    linux-node2.localdomain:
        True

    可以执行远程执行大部分linux命令(需要调用cmd模块的run方法)
    • Master和Minion都以守护进程的方式运行
    • Master监听配置文件里定义的ret_port 4505(接收minion请求),和publish_port(发布消息)的4506端口
    • 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
    • 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了


    [root@linux-node1 ~]# salt '*' cmd.run 'uptime' linux-node1.localdomain: 20:53:00 up 6:37, 1 user, load average: 0.00, 0.01, 0.05 linux-node2.localdomain: 20:52:57 up 6:37, 0 users, load average: 0.00, 0.01, 0.05

    [root@linux-node1 ~]# salt '*' cmd.run 'df -h'
    linux-node1.localdomain:
        Filesystem               Size  Used Avail Use% Mounted on
        /dev/mapper/centos-root   38G  5.7G   32G  16% /
        devtmpfs                 1.9G     0  1.9G   0% /dev
        tmpfs                    1.9G   28K  1.9G   1% /dev/shm
        tmpfs                    1.9G   12M  1.9G   1% /run
        tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
        /dev/mapper/centos-home   19G   33M   19G   1% /home
        /dev/sda1               1014M  146M  869M  15% /boot
        tmpfs                    378M     0  378M   0% /run/user/0
    linux-node2.localdomain:
        Filesystem               Size  Used Avail Use% Mounted on
        /dev/mapper/centos-root   17G  1.3G   16G   8% /
        devtmpfs                 475M     0  475M   0% /dev
        tmpfs                    487M   12K  487M   1% /dev/shm
        tmpfs                    487M  7.7M  479M   2% /run
        tmpfs                    487M     0  487M   0% /sys/fs/cgroup
        /dev/sda1               1014M  133M  882M  14% /boot
        tmpfs                     98M     0   98M   0% /run/user/0

     简单配置管理

     vim /etc/salt/master  设置配置环境目录
    file_roots:
      base: #基础目录
        - /srv/salt/base
      dev: #例如开发环境
        - /srv/salt/dev
      test: #例如测试环境
        - /srv/salt/test
      prod: #例如生成环境
        - /srv/salt/prod
    
    144  mkdir -p /srv/salt/{base,test,prod,dev}
    145  systemctl restart salt-master 

    配置01

     [root@linux-node1 ~]# cd /srv/salt/base/

    [root@linux-node1 base]# mkdir web

     [root@linux-node1 base]# cd web/
    [root@linux-node1 web]# vim apache.sls

    apache-install:
      pkg.installed:
        - name: httpd
    
    apache-service:
      service.running:
        - name: httpd
        - enable: True

    执行该命令 先按装httpd  再启动

     默认是base目录

     

    vim /etc/salt/master

    #state_top: top.sls去掉注释

    [root@linux-node1 base]# vim /srv/salt/base/top.sls

    [root@linux-node1 base]# salt '*' state.highstate  #此处的‘*’通知所有人去执行top.sls

    加入test =True 只说明一下不执行

    node01: 192.168.0.2
    #停止firewall服务 systemctl stop firewalld.service
    #禁止firewall开机启动 systemctl disable firewalld.service
    yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm #官方源安装
    yum -y install salt-master
    yum -y install salt-minion #自己本身也可以开启minion
    systemctl start salt-master
    systemctl enable salt-master
     [root@linux-node1 ~]# netstat -anptu | grep -E '4505|4506'
    tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      26893/python        
    tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      26899/python # 端口一收一发

    cd
    /etc/salt/ vim /etc/salt/minion 16 #master: salt 改成master的IP maser: 192.168.0.2 systemctl start salt-minion systemctl status salt-minion.service

    [root@linux
    -node1 salt]# cat /etc/salt/minion_id linux-node1.localdomain salt '*' test.ping #ping 所以得minion vim /etc/salt/master file_roots: base: - /srv/salt/base dev: - /srv/salt/dev test: - /srv/salt/test prod: - /srv/salt/prod 144 mkdir -p /srv/salt/{base,test,prod,dev} 145 systemctl restart salt-master [root@linux-node1 ~]# cd /srv/salt/base/ [root@linux-node1 base]# mkdir web [root@linux-node1 base]# cd web/ [root@linux-node1 web]# vim apache.sls apache-install: pkg.installed: - name: httpd apache-service: service.running: - name: httpd - enable: True salt 'linux-node2.localdomain' state.sls web.apache cd /srv/salt/base/ vim top.sls base: '*': - web.apache salt '*' state.highstate 另外一种匹配方法(grain): base: 'os:CentOS': - match: grain - web.apache salt '*' state.highstate 数据系统---grains 1.收集信息 2.远程执行 进行匹配目标 3.top.sls 进行匹配目标 4.配合模板来 node02: 192.168.0.3 #停止firewall服务 systemctl stop firewalld.service #禁止firewall开机启动 systemctl disable firewalld.service yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm yum -y install salt-minion vim /etc/salt/minion 16 #master: salt 改成master的IP maser: 192.168.0.2 systemctl start salt-minion
    systemctl status salt-minion.service

     

    Master与Minion互信:
    • Minion上线后先与Master端联系,把自己的pubkey发过去
    • Master接受Minion的公钥后,互信建立完成

    查看密钥信息
    [root@linux-node1 ~]# salt-key -L
    Accepted Keys:
    linux-node1.localdomain
    linux-node2.localdomain
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    
    [root@linux-node1 ~]# salt-key -h(or --help)
     -L: 列出密钥
     -a: 接受一个密钥
     -A: 接受全部密钥
     -D: 删除全部密钥
    
    
    远程执行命令:
    salt命令使用方法如下
    • salt [options] '<target>' <function> [arguments]
    • target指的是在哪些Minion上执行,如果在全部Minion上运行,可以采用通配符 '*’
        -L 列表
        -E 正则
        -N 分组
        -S CIDR
    • function一般采用python的 模块.方法 样式
    • arguments是传递给方法的参数
    批量管理主机
    • 测试所有主机连通性
    [root@linux-node1 ~]# salt '*' test.ping
    linux-node1.localdomain:
        True
    linux-node2.localdomain:
        True
    
    [root@linux-node1 ~]# salt '*' cmd.run 'uptime'
    linux-node1.localdomain:
         20:53:00 up  6:37,  1 user,  load average: 0.00, 0.01, 0.05
    linux-node2.localdomain:
         20:52:57 up  6:37,  0 users,  load average: 0.00, 0.01, 0.05
    
    
    使用列表 -L
    [root@linux-node1 ~]# salt -L 'linux-node1.localdomain ,linux-node2.localdomain' cmd.run 'uptime'
    linux-node1.localdomain:
         20:55:39 up  6:40,  1 user,  load average: 0.00, 0.01, 0.05
    linux-node2.localdomain:
         20:55:36 up  6:40,  0 users,  load average: 0.00, 0.01, 0.05
    
    
    使用正则表达式 -E 
        # salt -E "webd" test.ping     
         
         
    使用分组  -N
        定义分组
        # vim /etc/salt/master
        //1085 行
        nodegroups:
            test: 'L@db1,web2,cache'
            other: 'E@db[0-9] or N@test'
        使用分组
        [root@sm ~]# salt -N 'test' test.ping
    
    
    传输文件
    [root@linux-node1 ~]# salt '*' cmd.run 'mkdir /test'
    linux-node1.localdomain:
    linux-node2.localdomain:
    [root@linux-node1 ~]# cp /etc/passwd /srv/salt/base/users    //添加测试文件
    [root@linux-node1 ~]# salt 'linux-node2.localdomain' cp.get_file salt://users /test/user
    linux-node2.localdomain:
        /test/user
        
    [root@linux-node1 ~]# salt '*' cmd.run 'ls /test' 
    linux-node2.localdomain:
        user
    linux-node1.localdomain:




    salt -G 'os:Arch.*' [ options ] test.ping 满足条件才执行


    [root@linux-node1 salt]# tree
    .
    ├── cloud
    ├── cloud.conf.d
    ├── cloud.deploy.d
    ├── cloud.maps.d
    ├── cloud.profiles.d
    ├── cloud.providers.d
    ├── master
    ├── master.d
    ├── minion
    ├── minion.d
    │   └── _schedule.conf
    ├── minion_id
    ├── pki
    │   ├── master           # 当启动salt-master时会生成公私秘钥 
    │   │   ├── master.pem   # 私钥
    │   │   ├── master.pub   # 公钥
    │   │   ├── minions
    │   │   │   ├── linux-node1.localdomain  #已接收的ID
    │   │   │   └── linux-node2.localdomain
    │   │   ├── minions_autosign
    │   │   ├── minions_denied
    │   │   ├── minions_pre
    │   │   └── minions_rejected
    │   └── minion
    │       ├── minion_master.pub  #minion也会接受master传来的公钥
    │       ├── minion.pem
    │       └── minion.pub
    ├── proxy
    ├── proxy.d
    └── roster
    
    16 directories, 14 files
    
    
    
    [root@linux-node2 ~]# tree /etc/salt/
    /etc/salt/
    ├── cloud
    ├── cloud.conf.d
    ├── cloud.deploy.d
    ├── cloud.maps.d
    ├── cloud.profiles.d
    ├── cloud.providers.d
    ├── master
    ├── master.d
    ├── minion
    ├── minion.d
    │   └── _schedule.conf
    ├── minion_id
    ├── pki
    │   ├── master
    │   └── minion
    │       ├── minion_master.pub #minion也会接受master传来的公钥
    │       ├── minion.pem  # 当启动salt-minion时会生成公私秘钥 
    │       └── minion.pub
    ├── proxy
    ├── proxy.d
    └── roster
    
    11 directories, 10 files

    模块及功能:
    列出所有可用模块
    salt '随便一台主机名' sys.list_modules

    查看模块所有功能
    salt '随便一台主机名'  sys.list_functions 模块名

    查看模块用法
    salt '随便一台主机名' sys.doc 模块名
    salt '随便一台主机名' sys.doc 模块名.方法

    什么是YAML:
    • YAML:YAML Ain't Markup Language
    • YAML的结构通过空格来展示
    • 项目使用"-"来表示
    • 键值对使用":"来表示
    • Master和Minion的配置文件均采用YAML语法
    • YAML使用一个固定的缩进风格表示数据层级结构关
    • 一般每个缩进级别由两个空格组成
    • 注意不要使用tab
    • 缩进是初学者容易出错的地方之一
    • YAML的键值对采用冒号分隔
    • YAML键值对对应python的字典
    • YAML表示形式
        name: test
        或
        name:
          test

    • Python字典
        {'name': 'test'}
    • 字典可以嵌套
        hosts:
            name: test

    • 字典表示形式为
        {
           'hosts': {
           'name': 'test'
           }
        }


    • 列表项使用一个短横杠加一个空格
        -  test1
        -  test2

    • 列表可以作为一个键值对的value
        pkg-http:
          - httpd
          - php

    • Python语法
        {'pkg-http': ['httpd', 'php']}
     

  • 相关阅读:
    zoj3299 Fall the Brick
    hdu4533 威威猫系列故事——晒被子
    FZU 1650 1752 a^b mod c
    Codeforces Round #136 (Div. 1) B. Little Elephant and Array
    Codeforces Round #292 (Div. 1) C. Drazil and Park
    Uva 12436 Rip Van Winkle's Code
    Codeforces Beta Round #19 D. Points
    hdu1513 Palindrome
    poj1160 Post Office
    zjnu1181 石子合并【基础算法・动态规划】——高级
  • 原文地址:https://www.cnblogs.com/linux985/p/10502797.html
Copyright © 2020-2023  润新知