saltstack技术入门与实践

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

修改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
posted @ 2017-07-26 12:52  hzxPeter  阅读(769)  评论(0编辑  收藏  举报