zoukankan      html  css  js  c++  java
  • saltstack技术入门与实践


    基本原理

    SaltStack 采用`C/S`模式,server端就是salt的master,client端就是minion,minion与master之间通过`ZeroMQ`消息队列通信。

    minion上线后先与master端联系,把自己的`pub key`发过去,这时master端通过`salt-key -L`命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信。

    master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,`locate salt | grep /usr/`可以看到salt自带的所有东西。
    这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行`salt '*' cmd.run 'uptime'`的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。

    master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。 具体步骤如下

    ``` 1、Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc 2、salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。 3、master接收到命令后,将要执行的命令发送给客户端minion。 4、minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理 5、minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master 6、master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中 7、salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
    ```

    #### saltstack 安装

    [saltstack install](http://repo.saltstack.com/#rhel)

    #### 修改minion配置文件
    ```
    [root@linux-node2 ~]# vim /etc/salt/minion
    master: 192.168.56.11
    [root@linux-node2 ~]# vim /etc/salt/minion
    master: 192.168.56.11
    [root@linux-node1 pki]# pwd
    /etc/salt/pki
    [root@linux-node1 pki]# tree
    .
    ├── master
    │   ├── master.pem
    │   ├── master.pub
    │   ├── minions
    │   ├── minions_autosign
    │   ├── minions_denied
    │   ├── minions_pre
    │   │   ├── linux-node1.example.com
    │   │   └── linux-node2.example.com
    │   └── minions_rejected
    └── minion
    ├── minion_master.pub
    ├── minion.pem
    └── minion.pub
    [root@linux-node1 pki]# salt-key -A
    [root@linux-node1 pki]# tree
    .
    ├── master
    │   ├── master.pem
    │   ├── master.pub
    │   ├── minions
    │   │   ├── linux-node1.example.com
    │   │   └── linux-node2.example.com
    │   ├── minions_autosign
    │   ├── minions_denied
    │   ├── minions_pre
    │   └── minions_rejected
    └── minion
    ├── minion_master.pub
    ├── minion.pem
    └── minion.pub
    ```

    #### 远程执行
    ```
    [root@linux-node1 pki]# salt "*" test.ping
    linux-node2.example.com:
    True
    linux-node1.example.com:
    True
    [root@linux-node1 pki]# salt "*" cmd.run 'w'
    linux-node1.example.com:
    07:20:24 up 17:10, 1 user, load average: 0.00, 0.01, 0.05
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root pts/0 192.168.56.1 07:04 0.00s 0.30s 0.26s /usr/bin/python /usr/bin/salt * cmd.run w
    linux-node2.example.com:
    08:26:25 up 22:40, 2 users, load average: 0.15, 0.05, 0.06
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root tty1 Sat09 13:12m 0.02s 0.02s -bash
    root pts/0 192.168.56.1 08:09 13:53 0.04s 0.04s -bash
    ```

    #### 配置管理
    ##### YAML

    - 缩进:
    - 两个空格
    - 不能使用tab键
    - 缩进代表层级关系

    - 冒号:
    - key: value

    - 短横线代表list

    #### satate模块
    ```
    # vim /etc/salt/master
    file_roots:
    base:
    - /srv/salt
    # mkdir /srv/salt
    # mkdir /srv/salt
    # cd /srv/salt
    # mkdir web
    # cd web
    # pwd
    /srv/salt/web
    # vim apache.sls
    apache-install:
    pkg.installed:
    - names:
    - httpd
    - httpd-devel

    apache-service:
    service.running:
    - name: httpd
    - enable: True

    # salt '*' state.sls web.apache
    [root@linux-node2 salt]# cd /var/cache/salt/
    [root@linux-node2 salt]# tree
    .
    `-- minion
    |-- extmods
    |-- files
    | `-- base
    | `-- web
    | `-- apache.sls
    |-- pkg_refresh
    `-- proc
    `-- 20160605081351939477
    # cat /var/cache/salt/minion/files/base/web/apache.sls
    apache-install:
    pkg.installed:
    - names:
    - httpd
    - httpd-devel

    apache-service:
    service.running:
    - name: httpd
    - enable: True
    # ps -ef|grep yum
    root 34129 34103 1 08:13 ? 00:00:00 /usr/bin/python /usr/bin/yum --quiet check-update
    root 34204 34149 0 08:14 pts/1 00:00:00 grep --color=auto yum

    # cd /srv/salt/
    # vim top.sls
    base:
    'linux-node1.example.com':
    - web.apache
    'linux-node2.example.com':
    - web.apache
    # salt '*' state.highstate test=True
    # salt '*' state.highstate

    # lsof -i:4505 -n
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    salt-mast 24739 root 13u IPv4 4637762 0t0 TCP *:4505 (LISTEN)
    salt-mast 24739 root 15u IPv4 4640421 0t0 TCP 192.168.56.11:4505->192.168.56.11:48344 (ESTABLISHED)
    salt-mast 24739 root 16u IPv4 4640542 0t0 TCP 192.168.56.11:4505->192.168.56.12:53039 (ESTABLISHED)
    salt-mini 25378 root 25u IPv4 4640888 0t0 TCP 192.168.56.11:48344->192.168.56.11:4505 (ESTABLISHED)
    ```

    #### 数据系统

    ##### Grains
    静态数据 当minion启动时收集的minion本地相关信息
    ##### Pillar

  • 相关阅读:
    The 2021 CCPC Guilin Onsite【A,I,G(二分),D(思维+构造),E(最短路】
    第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(沈阳)
    The 2021 CCPC Weihai Onsite【G:组合数学(好模板) D:Exkmp利用Z数组跑后缀】
    第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(上海)【I:线性DP】
    项目中基于Rest的Wcf服务发布以及iBatisNet框架的使用(下)
    linq to xml 学习整理
    项目中基于Rest的Wcf服务发布以及iBatisNet框架的使用(上)
    java 工具PDF使用——itextpdf
    在 jQuery 中弹出层中如何实现点击空白处关闭弹出层
    人生,有时候就是这样
  • 原文地址:https://www.cnblogs.com/xuaijun/p/7265099.html
Copyright © 2011-2022 走看看