• SaltStack入门


    SaltStack优点和文档:

    可以远程执行和配置管理

    saltstack所有状态模块:https://www.unixhot.com/docs/saltstack/ref/states/all/index.html#all-salt-states

    一.SaltStack的运行方式

    1.Local:本地运行,对于只有一台机器的话,使用该方式,SaltStack可以通过命令搭建自己;

    2.Master/Minion:主控端/客户端的关系,Minion只是干活的;

    3.Salt SSH:SaltStack也支持ssh的方式控制其他服务器。

    二.安装

    这里介绍的是Linux6版本下yum安装的

    先配置一个repo的yum源

    https://repo.saltstack.com/yum/redhat/6.5/x86_64/saltstack-rhel6.repo

    [saltstack-repo]
    name=SaltStack repo for RHEL/CentOS $releasever
    baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
    enabled=1
    gpgcheck=1
    gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub

    查看一下yum中的salt的版本

    yum list | grep salt

    然后是安装

    #Salt Master安装和启动
    yum -y install salt-master
    service salt-master start
    
    #Salt Minion安装和启动
    yum -y install salt-minion
    service salt-minion start

    安装完之后,SaltStack被安装在/etc/salt 目录下

    三.安装目录

    通过YUM安装的salt,不管是master还是minion,都是安装在/etc/salt目录下的

    cd /etc/salt

    四.进入到安装目录之后先启动master

    service salt-master start

    启动之后会/etc/salt/pki/master 目录下会生成master的密钥文件

    注:master的私钥和公钥文件,在启动的时候才会生成,如果刚安装上,没有启动过,该目录下是没有这些文件的

    五.配置salt-minion

    在启动minion之前,首先要在配置文件中,告诉它谁是master,否则起不来

    [root@linux-node2 master]# cd /etc/salt/
    [root@linux-node2 salt]# vim minion

    注:该配置文件中不能存在tab键和中文,否则会导致salt-minion起不来

    启动minion之后,会发现,pki目录下的minion目录下,也生成了一对密钥

    当minion启动的时候,会自动将自己生成的公钥文件,颁发给master,当master认可了该公钥文件了,双方就可以开始通信了。

    遇到的问题:

    1.这里在启动的时候遇到过一个小问题,就是远程的minion启动以后,不能将自己的公钥办法给master,既然网络走不通,可能是防火墙导致的,关闭双方的防火墙之后,master机器上立刻有了minion颁发的公钥。

    2.通过配置文件中指定id,然后导致minion起不来,原因是因为id: 的后面必须要有一个空格,然后再写主机名。

    六.master上管理公钥文件

    当minion启动之后,我们可以观察一下master的目录结构 

    然后我们可以在master机器上,通过salt-key来查看,有那些公钥文件正在请求认证,那些公钥是通过认证的

    然后我们将所有等待同意的公钥都通过批准

    salt-key -A      #A  这个选项代表将队列中所有的公钥的请求都批准通过

    注:经过master同意过的公钥后,公钥所对应的的minion机器上,在minion存放公钥的目录下,也会多一个master的公钥的文件,这样,master和minion双方都互相有了公钥文件之后,就确保了操作的安全性。

    salt-key的其他选项:

    ## 显示所有minion的认证信息
    salt-key -L
    
    # 接受linux-node1的认证信息
    salt-key -a linux-node1
    
    # 接受linux-node1的认证信息,不需要手动验证
    salt-key -a 192.168.0.100-y
    
    # 接受linux-node1的认证信息,即使该minion是Rejected Keys状态
    salt-key -a linux-node1--include-all
    
    # 接受所有 Unaccepted Keys 状态的minion的认证信息
    salt-key -A
    
    # 拒绝认证linux-node1
    salt-key -d linux-node1
    
    # 拒绝所有 Unaccepted Keys 状态的minion
    salt-key -D

    七.master验证是否和minion之间互通

    salt '*' test.ping          # *代表测试所有的minion

    测试单个minion

    salt 'linux-node1' test.ping       # linux-node1是minion的id

    例:

    八.使用salt命令的cmd执行模块,对minion主机运行命令

    salt  '*'  cmd.run  'pwd'

    说明:salt是salt-master的命令;

        '*' 这里是选择让哪台minion主机执行,而*就代表所有通过认证的minion主机

        cmd是执行模块,也就是python下的一个模块;

        run是cmd模块的一个方法,就是cmd模块下的很多方法的其中一个方法;

        'pwd'是传入的参数,是linux的系统命令。

    注:1.一般salt不建议通过命令来使用,一般都定义YAML脚本来进行使用。 

        2.cmd是一个超级模块,可以支持所有linux命令。

    九.master配置运行作业

    需要了解YAML的用法,可以参考我的另一篇博客:

    https://www.cnblogs.com/Jackie-Chen/articles/10732266.html

    1.配置master配置文件,告诉master作业存放的路径

    vim /etc/salt/master

    在该配置文件中搜索:file_roots,定位到之后,配置如下内容:

    注:1.配置完配置文件之后,需要确定以上配置的目录都必须存在,才可以重启,如果配置的目录不存在,是起不来的。

        2.base目录是必须有的。

    批量创建目录

    mkdir -p /srv/salt/{base,dev,test,prod}

    2.创建saltstack的作业脚本

    cd /src/salt/base
    vim apache.sls

    注:saltstack的作业脚本,必须是.sls结尾的。

    配置内容如下:

    注:一般像上面这样配置来安装服务的话,都是通过yum来进行安装的。 

    3.运行作业脚本

    salt 'linux-node2' state.sls apache

    说明:

    salt:saltstack的master命令
    'linux-node2' :指定执行作业的机器的id
    state.sls :调用运行模块state的sls方法
    apache:运行刚才创建的apache.sls文件
    注:运行作业文件的时候,不用写作业文件的后缀名

    但是我们一般会将作业的脚本通过目录来分类,例如刚才我们创建的apache.sls就可以归为web类,可以在base目录下创建一个web目录,存放这类的作业脚本,然后运行的时候通过点.来区分目录结构,如下:

    cd /srv/salt/base
    mkdir web
    mv apache.sls web
    salt 'linux-node2' state.sls web.apache

    这样方便我们日后来管理作业脚本。

    十.saltstack高级状态

     高级状态是在top.sls中配置的,可以在master的配置文件中,看到该文件的说明,在master配置文件中搜索:top.sls

     该文件是自己创建的,最好创建的base目录下,最好只创建一个top.sls,这是为了日后方便管理。

    top.sls的作用:它的作用就是配置哪台服务器要执行哪个状态,通过该文件可以批量执行,不需要通过在命令行执行。

    cd /srv/salt/base
    vim top.sls

    salt '*' state.highstate

    说明:上条命令是对所有服务器启动高级状态,使用高级状态的会,会去base目录下面执行top.sls

    十一.saltstack管理目录

    方法的参考文档:https://www.unixhot.com/docs/saltstack/ref/states/all/salt.states.file.html#module-salt.states.file

    这里说的管理目录是指同步某个目录,举例来说,当master在sls脚本中,设置了master主机的一个目录,要让其他minon服务器上的httpd的conf.d目录下的文件,和master指定的目录下的文件保持一致,就需要用到状态模块file下的recurse方法。

    例:

    master的top.sls:

    base:
      'linux-node1':
        - web.apache
      'linux-node2':
        - web.apache

    master的web目录下的apache:

    apache-confs:
      file.recurse:
        - name: /etc/httpd/conf.d                #这里设置的是目标目录
        - source: salt://web/file/apache-conf.d  #这里设置的是源目录

    注:1.目标目录会和源目录做对比,如果源目录有新增的文件,那么,执行高级状态命令后,目标目录上也会新增源目录中的文件。

        2.当源目录和目标目录下,有同名的文件,但是源文件的内容发生变化的时候,源文件的内容会覆盖掉目标文件的内容。(如果想要批量删除目标目录下某个文件某行的时候,可以通过,修改源目录下的文件,先把要删的内容删掉,然后,再执行高级状态的命令,然后,所有目标主机下同名文件中想要删掉的内容就会被删掉)。

        3.source也可以指定的是ftp、http等其他的路径,只要可以下载就可以。

        4.salt://  这个路径代表的是master上的base的路径,后面跟的web目录是在base下必须存在的。

    然后执行salt的高级状态命令,即可对比对比master目录下面的文件是否和所有minon下的文件一样,不一样的话,就会新增minon没有的文件。

    十二.saltstack对文件内容进行增加

    cd /srv/salt/base/web
    vim append.sls
    etc/profile:
      file.append:
        - text:
          - "this is new str!!!!!!"
    cd ..
    salt "*" state.sls web/append

    执行完之后,/etc/profile文件最后一行就会添加一行字符串。

    删除在文档中没找到,但是想要删除文件内容的话,可以参考十一的注2的说明,举例说明:

    profile-del:
      file.recurse:
        - name: /etc
        - source: salt://web/file

    /web/file目录下是有一个profile文件,最后一行是没有添加“this is new str!!!!!!”,执行完该状态后,所有minon机器上/etc/profile文件的最后一行“this is new str!!!!!!”内容都会被删掉。

    十三. SaltStack常用模块和方法

    参考我的另一篇博客:https://www.cnblogs.com/Jackie-Chen/articles/10760570.html 

    十四.unless判断的用法

    unless是用来做判断的,如果后面的判断条件为真,那么该方法不执行,举例说明:

    在创建httpd的认证的时候,需要有一个存放用户和密码信息的文件,但是这个文件一般只用创建一次即可,不需要重复创建。

    apache-auth:                                                          #随便起的一个状态id
      pkg.installed:                                                      #执行pkg模块下的installed安装方法
        - name: httpd-tools                                               #安装的rpm包是httpd-tools
        - require_in:                                                     #如果该服务安装成功,那么,执行下面的cmd
          - cmd: apache-auth
      cmd.run:                                                            #运行cmd模块的run方法,该方法就是执行系统命令
        - name: htpasswd -bc /etc/httpd/conf.htpasswd_file admin admin    #执行该命令
        - unless: test -f /etc/httpd/conf/htpasswd_file                        #判断,如果这条命令的结果为真,那么执行name后面的命令将不会被执行

    待续。。。。

    转载于:https://www.cnblogs.com/Jackie-Chen/articles/10720512.html

  • 相关阅读:
    Android Watchdog
    Android Zygote进程是如何fork一个APP进程的
    java多线程面试题小结
    Java Socket通信以及可能出现的问题解决
    Java对象的浅拷贝和深拷贝&&String类型的赋值
    AtomicLong和LongAdder的区别
    JDK中Concurrent包介绍及使用(包含atomic包/lock包/并发容器/执行器)
    final关键字总结
    Java内存模型-final域的内存语义--没明白,预留以后继续理解
    synchronized底层实现原理&CAS操作&偏向锁、轻量级锁,重量级锁、自旋锁、自适应自旋锁、锁消除、锁粗化
  • 原文地址:https://www.cnblogs.com/twodog/p/12134908.html
走看看 - 开发者的网上家园