• 234 saltstack安装配置与使用


    自动化运维saltstack

    一、基础介绍
    ==========================================================================================
    saltstack简单介绍

    Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中化管理平台,几分钟内便可运行起来,速度够快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器,显著降低人力与运维成本;它具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func;通过部署SaltStack环境,可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)(SaltStack的通信模式总共分为2种模式:ZeroMQ、REAT,鉴于REAT目前还不是太稳定,通常会选择ZeroMQ模式)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

    Saltstack运行模式

    Local:本地,一台机器玩,不建议

    Master/Minion:通过server/agent的方式进行管理,效率很高(批量管理1000台机器,25秒搞定)

    Salt SSH:通过SSH方式进行管理,效率相对来说比较低(批量管理1000台机器,83秒搞定)

    Saltstack三大功能

    远程执行(执行远程命令)

    配置管理(状态管理)

    云管理

    Saltstack特征

    1)部署简单、方便;

    2)支持大部分UNIX/Linux及Windows环境;

    3)主从集中化管理;

    4)配置简单、功能强大、扩展性强;

    5)主控端(master)和被控端(minion)基于证书认证,安全可靠;

    6)支持API及自定义模块,可通过Python轻松扩展。

     

    Master与Minion认证

    1)minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。

    2)master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

    Master与Minion的连接

    1)SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。

     

    2)minion与master之间的通信模式

     

    二、SaltStack 安装配置过程

    服务端:Xuegod63:

    IP:192.168.0.63

    Hostname:xuegod63.cn

    被控端:xuegod64

    IP:192.168.0.64

    Hostname:xuegod64.cn

    1、配置FQDN,让ip和主机名对应

    [root@xuegod63 ~]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.0.63 xuegod63 xuegod63.cn

    192.168.0.64 xuegod64 xuegod64.cn

    [root@xuegod64 ~]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.0.64 xuegod64 xuegod64.cn

    192.168.0.63 xuegod63 xuegod63.cn

    2、两台机器都关闭防火墙和selinux

    3、服务组件安装:

    [root@xuegod63 ~]# yum install epel-release

    [root@xuegod63 ~]# yum install salt-master salt-minion  -y  ##安装服务端和被监控端

    [root@xuegod64 ~]# yum install epel-release -y && yum install salt-minion –y  ##

    被监控服务安装被监控端

    这个如果提示,使用下面的操作

    No package salt-master available.

    No package salt-minion available.

    Error: Nothing to do

    安装服务端

    sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub

    curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

    sudo yum clean expire-cache

    yum install salt-master -y # 我看到中间会安装python36

    sudo yum install salt-minion -y

    sudo yum install salt-ssh -y

    sudo yum install salt-syndic -y

    sudo yum install salt-cloud -y

    sudo yum install salt-api -y

    systemctl start salt-minion

    systemctl enable salt-minion

    systemctl enable salt-master.service && systemctl restart salt-master.service

    安装客户端

    sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub

    curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

    sudo yum clean expire-cache

    sudo yum install salt-minion -y

    systemctl restart salt-minion

    systemctl enable salt-minion

    4、服务启动:

    启动服务:

    [root@xuegod63 ~]# vim /etc/salt/minion

    在16行下面增加一行:

    master: 192.168.0.63   ##说明服务端的地址

    启动主控端服务:

    root@xuegod63 ~]# vim /etc/salt/minion

    [root@xuegod63 ~]# /etc/init.d/salt-master start

    Starting salt-master daemon:                               [  OK  ]

    [root@xuegod63 ~]# /etc/init.d/salt-minion start

    Starting salt-minion daemon:                               [  OK  ]

    启动被监控端服务:

    [root@xuegod64 ~]# vim /etc/salt/minion

    在16行下面增加一行:

    master: 192.168.0.63   ##说明服务端的地址

    启动被监控服务:

    [root@xuegod64 ~]# /etc/init.d/salt-minion start

    Starting salt-minion daemon:                               [  OK  ]

    启动完,可以查看下进程,可以看到相关服务是python来执行运行的

    [root@xuegod63 ~]# ps aux|grep salt

    root       1772  0.0  2.0 288104 21088 ?        S    09:46   0:00 /usr/bin/python2.6 /usr/bin/salt-master –d

    root       2166  0.1  2.5 442228 25216 ?        S    09:46   0:00 /usr/bin/python2.6 /usr/bin/salt-minion –d

    5、配置认证

    下面认证操作都是在xuegod63上操作:

    salt-key -a xuegod64.cn  ##增加一个xuegod64的密钥认证

    [root@xuegod63 ~]# salt-key -a xuegod64.cn

    The following keys are going to be accepted:

    Unaccepted Keys:

    xuegod64.cn

    Proceed? [n/Y] y      

    Key for minion xuegod64.cn accepted.

    查看已经签名的客户端:

    [root@xuegod63 ~]# salt-key

    Accepted Keys:

    xuegod64.cn

    Denied Keys:

    Unaccepted Keys:

    xuegod63.cn

    Rejected Keys:

    签名完成,可以在被监控端看到生成的密钥minion_master.pub

    [root@xuegod64 ~]# cd /etc/salt/pki/minion/

    [root@xuegod64 minion]# ls

    minion_master.pub  minion.pem  minion.pub

    补充: salt-key 可以使用-A 来签名所有主机,也可以使用-d 删除指定的主机

    6、saltstack 远程执行命令演示:

    探测主机是否在线

    [root@xuegod63 ~]# salt '*' test.ping

    xuegod64.cn:

      True

    查看分区等信息:

    [root@xuegod63 ~]# salt 'xuegod64.cn' cmd.run 'df -h'

    xuegod64.cn:

      Filesystem      Size  Used Avail Use% Mounted on

      /dev/sda2       9.5G  2.0G  7.1G  22% /

      tmpfs           491M   12K  491M   1% /dev/shm

     /dev/sda1       2.9G   39M  2.7G   2% /boot

    /dev/sda3       5.7G   12M  5.4G   1% /usr/local

    可以调用cmd.run 来执行其他的命令,比如负载,时间,主机名等等

    这里的*  表示所以已经签名的客户端,也可以指定其中特定的一个,比如 xuegod64.cn,但是这些客户端必须是在master上被接受认证的客户端,

    如果有多个被监控的客户端,我们可以通过通配符,列表,正则等来一次性的控制多个主机,比如我们现在有两个客户端,web10 web11.可以写成:

    salt ‘web*’或者salt ‘web1[01]’或者 salt  -L ‘web10,web11’使用列表的时候,多个机器用逗号隔开

    7、saltstack 之grains介绍

    grains 是在minion启动收集到的一些信息,比如操作系统的类型,网卡IP,内存版本,CPU信息等

    [root@xuegod63 ~]# salt 'xuegod64.cn' grains.ls    ##列出所有的grains项目名称

    xuegod64.cn:

        - SSDs

        - biosreleasedate

        - biosversion

        - cpu_flags

        - cpu_model

    - cpuarch

    等等

    [root@xuegod63 ~]# salt 'xuegod64.cn' grains.items  ##列出所有的grains项和对应的值

    xuegod64.cn:

        ----------

        SSDs:

        biosreleasedate:

            05/20/2014

        biosversion:

            6.00

        cpu_flags:

            - fpu

            - vme

           - de

    启动grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的,我们可以根据grains收集到的一些信息,做配置管理工作,可以支持自定义一些监控项

    8、自定义grains

    在被监控端xuegod64上添加grains:

    [root@xuegod64 ~]# vim /etc/salt/grains    ##此文件默认没有,需要创建

    添加如下信息,监控项:对应的信息

     role: zabbix_server

     env: test

     myname: xuegodlinux

     myhostname: xuegod64.cn

    重启minion服务

    [root@xuegod64 ~]# /etc/init.d/salt-minion restart



    可以再次执行salt 'xuegod64.cn' grains.items 查看是否存在自定义的项,或者使用

    [root@xuegod63 ~]# salt 'xuegod64.cn' grains.item env  单独查看

    我们可以借助grains的一些属性信息来执行一些命令

    [root@xuegod63 ~]# salt -G env:test cmd.run 'w'

    9、saltstack 之pillar介绍

    pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息,可以自定义变量等

    自定义配置pillar过程:

    [root@xuegod63 ~]# vim /etc/salt/master

    找到pillar_roots 这项,取消下面三行的注释

    529 pillar_roots:

    530   base:

    531     - /srv/pillar

    创建pillar文件的存放目录:

    [root@xuegod63 ~]# mkdir /srv/pillar

    创建配置文件,编辑如下内容:

    [root@xuegod63 pillar]# vim test.sls

    conf: /etc/123.conf

    myname: saltstack-server

    创建编写入口配置文件

    [root@xuegod63 ~]# vim /srv/pillar/top.sls

    base:

      'xuegod64.cn':

    - test

    重启服务:

    [root@xuegod63 pillar]# /etc/init.d/salt-master restart

    可以通过刷新来获取新的状态

    [root@xuegod63 pillar]# salt '*' saltutil.refresh_pillar

    查看:

    [root@xuegod63 pillar]# salt '*' pillar.items

    xuegod64.cn:

        ----------

        conf:

            /etc/123.conf

        myname:

            saltstack-server

    xuegod63.cn:

    ----------

    pillar 同样可以用作salt的匹配对象,比如:

    [root@xuegod63 pillar]# salt -I 'myname:saltstack-server' cmd.run 'w'

    三、Saltstack 配置管理服务

    1、  配置安装apache

    [root@xuegod63 ~]# vim /etc/salt/master

    取消406-408行的注释

    406 file_roots:

    407    base:

    408      - /srv/salt/

    创建配置文件存储目录

    [root@xuegod63 ~]# mkdir /srv/salt

    创建入口配置文件

    [root@xuegod63 salt]# vim top.sls

    base:

      'xuegod64.cn':

    - apache

    意思是在所以的客户端上执行apache的模块

    重启服务:

    [root@xuegod63 salt]# /etc/init.d/salt-master restart

    创建编写apache模块的配置文件

    [root@xuegod63 salt]# vim /srv/salt/apache.sls

    apache-service:

      pkg.installed:

        - names:

          - httpd

          - httpd-devel

      service.running:

        - name: httpd

    - enable: True

    apache-service是ID的名称,自定义的。pkg.installed为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

    配置好文件,执行

    [root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

    xuegod64.cn:

    ----------

              ID: apache-service

        Function: pkg.installed

            Name: httpd

          Result: True

         Comment: The following packages were installed/updated: httpd

         Started: 14:41:53.099793

        Duration: 9075.212 ms

         Changes:  

                  ----------

                  apr-util-ldap:

                      ----------

                      new:

                          1.3.9-3.el6_0.1

    查看被控端,已经安装成功。

    2、  配置远程文件管理

    创建一个文件管理的模块

    [root@xuegod63 salt]# vim filetest.sls

    file_test:

      file.managed:

        - name: /tmp/xuegodlinux.txt

        - source: salt://test/xuegod.php

        - user: root

        - group: root

    - mode: 644

    在入口文件里添加模块

    [root@xuegod63 salt]# vim top.sls

    base:

      'xuegod64.cn':

        - apache

    - filetest

    测试执行:

    [root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

    ----------

              ID: file_test

        Function: file.managed

            Name: /tmp/xuegodlinux.txt

          Result: True

         Comment: File /tmp/xuegodlinux.txt updated

         Started: 14:55:43.405748

        Duration: 9.272 ms

         Changes:  

                  ----------

                  diff:

                      New file

                  mode:

                      0644

    3、配置文件夹管理:

    创建一个文件夹管理的模块

    [root@xuegod63 salt]# vim filedir.sls

    file_dir:

      file.recurse:

        - name: /tmp/testdir

        - source: salt://test

        - user: root

        - file_mode: 644

        - dir_mode: 755

        - mkdir: True

    - clean: True

    在入口文件里添加模块

    [root@xuegod63 salt]# vim top.sls

    base:

      'xuegod64.cn':

    - filedir

    测试文件夹管理:

    [root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

    xuegod64.cn:

    ----------

              ID: file_dir

        Function: file.recurse

            Name: /tmp/testdir

          Result: True

         Comment: Recursively updated /tmp/testdir

         Started: 15:07:48.516708

        Duration: 314.122 ms

         Changes:  

                  ----------

                  /tmp/testdir/xuegod.php:

                      ----------

                      diff:

                          New file

                      mode:

                          0644

    Summary

    ------------

    Succeeded: 1 (changed=1)

    3、  saltstack远程执行命令

    创建执行命令的配置文件

    [root@xuegod63 salt]# vim cmd.sls

    cmd_test:

     cmd.run:

      - unless: test -f /tmp/xuegodtext.txt

      - names:

        - touch /tmp/11.txt

        - mkdir /tmp/1233

      - user: root

    在入口文件里添加模块

     [root@xuegod63 salt]# vim top.sls

    base:

      'xuegod64.cn':

    - cmd

    测试执行命令:

    [root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

    xuegod64.cn:

    ----------

              ID: cmd_test

        Function: cmd.run

            Name: mkdir /tmp/1233

          Result: True

         Comment: Command "mkdir /tmp/1233" run

         Started: 15:24:59.832268

        Duration: 297.728 ms

         Changes:  

                  ----------

                  pid:

                      5309

                  retcode:

                      0

                  stderr:

                  stdout:

    5、saltstack远程执行shell脚本

    [root@xuegod63 salt]# vim shell.sls

    shell_test:

     cmd.script:

      - source: salt://test/1.sh

      - user: root

    [root@xuegod63 salt]# cat test/1.sh

    #!/bin/bash

    touch /tmp/111222333.jsp

    echo 'this is jsp page'>> /tmp/111222333.jsp

    [root@xuegod63 salt]# vim top.sls

    base:

      'xuegod64.cn':

    - shell

    测试执行命令:

    [root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

  • 相关阅读:
    awt
    登录校验 简单实现
    事务隔离级别
    事务的四大特性(ACID)
    多线程简单了解
    Eureka bug
    什么是存储过程
    filter和servlet的区别
    说说你对多线程锁机制的理解
    session的生命周期,session何时创建,何时销毁,session销毁的方式
  • 原文地址:https://www.cnblogs.com/hailun1987/p/15647698.html
Copyright © 2020-2023  润新知