[SaltStack] 基础介绍

今天有时间把以前研究过的saltstack梳理总结下 -😃

salt是干什么的我就不多说了, 大家Google下资料很多的, 简单来说就是func+puppet:

  • 配置文件管理
  • 远程命令调用
  • Crontab管理部署

salt底层使用ZMQ通信, Python编写, 部署比较简单, 很容易管理上万台server.


  • 部署

salt采用C/S架构, 分为Master和Minion; Master即为中心管控机, Minion则为客户端, 接受管控机的管理维护.

部署比较简单, 去官网下载对应的Master和Minion版本; 安装就OK了.

yum install salt-master -y
yum install salt-minion -y
  • 配置

    • Master端配置

        worker_threads: 16
        auto_accept: True
        open_mode: True
        timeout: 300
        master_tops:
        	ext_nodes: "/usr/bin/ext_nodes.py"
        file_roots:
        	base:
        	  - /u01/salt/env/base
      

      参数的含义:

      • worker_threads: salt master端工作的线程数
      • auto_accept: salt master自动接收minion(当minion注册过来时, 只有当master接受后才可以进行通信)
      • open_mode: 保持加密, 但会关闭权限验证, 可以根据自己的安全级别配置
      • timeout: master和minion通信的超时时间
      • master_tops: 代替生成sls数据(后面找时间详细讲下, 这块的作用还是很大的)
      • file_roots: 初始定义环境以及state文件
    • Minion端配置

        master:
           - saltstack.online.xxxxxxxxxxx.net
           - <master-ip-address1>
           - <master-ip-address1>
           - <master-ip-address1>
           - <master-ip-address1>
           - <master-ip-address1>
        id: <minion-id>
      
        return: minion_return
      

      参数的含义:

      • master: 配置master的信息, 可以配置多个master源, minion会逐一去做注册(后面在HA部署上很有用)
      • id: 表示minion去master注册的id信息, 可以用hostname(具有唯一性的)
      • return: 表示对minion进行变更后的日志收集(可以入库, 需要二次开发)
  • 测试

    • 远程命令

        $ salt '<minion-id>' test.ping
        <minion-id>:
        	True
        	
        $ salt '<minion-id>' cmd.run 'uptime'
        <minion-id>:
        	20:58:28 up 91 days, 11:37,  1 user,  load average: 0.79, 0.95, 1.02
      
    • Crontab管理

      • top文件(top.sls)

          $ cat top.sls
          base:
            '<minion-id>':
              - crontab
        
      • crontab文件(init.sls)

          $ cat ./crontab/init.sls
          date > /tmp/crontest:
            cron.present:
              - identifier: Reno_crontest
              - comment: Salt_crontest
              - user: root
              - minute: 7
              - hour: 5
        
      • 推送crontab内容, e.g.

          $ salt '<minion-id>' state.highstate
        
      • 日志信息

          <minion-id>:
          ----------
          		ID: date > /tmp/crontest
            Function: cron.present
              Result: True
             Comment: Cron date > /tmp/crontest added to root's crontab
             Changes:
          		   ----------
          		   root:
          				date > /tmp/crontest
        
          Summary
          ------------
          Succeeded: 1
          Failed:    0
          ------------
          Total:     1
        
      • minion端验证crontab信息

          $ crontab -l
          # Lines below here are managed by Salt, do not edit
          # Salt_crontest SALT_CRON_IDENTIFIER:Reno_crontest
          7 5 * * * date > /tmp/crontest
        

      总结:

      • 以上的测试是在master端主动推送的, 当然可以采取从minion上主动拉取, 大家可以自己去玩下;
      • crontab中init.sls的分, 时等信息是可以随机化的, 使用random代替具体的value;
      • 也可以更新已经存在的crontab信息;

      以后有机会单独对crontab做总结.

    • 配置文件推送

      • top文件(top.sls)

          $ cat top.sls
          base:
            '<minion-id>':
              - file
        
      • crontab文件(init.sls)

          $ cat ./crontab/init.sls
          /etc/salt/minion:
            file.managed:
              - source: salt://minion_conf/minion
              - name: /etc/salt/minion
              - user: root
              - group: root
              - mode: 640
            cmd.wait:
              - name: /etc/init.d/salt-minion restart
              - watch:
              - file: /etc/salt/minion
        

        类似crontab的测试方法, 有兴趣大家可以去测试玩玩.

  • salt执行流程

  • salt二次开发

    salt使用轻量级, 易部署, 易使用. 可以很轻松的使用salt完成线上千万服务器的管理维护, 当然除了这些基本功能的使用, 我们还使用比较高级的, 譬如: grans, pillar, returner等等. 另外, 还做了二次开发, 白屏化, 最主要的是我们实现了可并发, 可灰度, 可回滚!

    以后有机会再一一分享吧 -_-


困了, 早点去睡觉了, 明天早起做OceanBase升级 -😃

From reno

2015-07-02 21:57:00

posted @ 2015-07-02 22:01  Renolei  阅读(566)  评论(0编辑  收藏  举报