zoukankan      html  css  js  c++  java
  • SaltStack入门篇(二)之远程执行和配置管理

    1.远程执行

    第一条命令:
    [root@linux-node1 master]# salt '*' test.ping
    linux-node2.example.com:
        True
    linux-node1.example.com:
        True
    
    说明:
    salt:命令
    *:匹配目标,使用通配符
    test.ping:模块.方法   
    #此处的ping并非ICMP的ping命令,而是master向minion发送了一个包,minion收到了,返回一个True
    
    [root@linux-node1 ~]# salt '*' cmd.run 'uptime'
    linux-node1.example.com:
         11:51:47 up 21 days,  5:57,  2 users,  load average: 0.04, 0.03, 0.05
    linux-node2.example.com:
         11:51:47 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05
    [root@linux-node1 ~]# salt '*' cmd.run 'w'
    linux-node1.example.com:
         11:52:11 up 21 days,  5:58,  2 users,  load average: 0.03, 0.02, 0.05
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/2    192.168.56.1     06Jan18  6:51   3.27s  3.27s -bash
        root     pts/3    192.168.56.1     06Jan18  3.00s  6:17   0.46s /usr/bin/python /usr/bin/salt * cmd.run w
    linux-node2.example.com:
         11:52:11 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.56.1     Mon10   21:59m  0.28s  0.28s -bash
        root     pts/3    192.168.56.1     06Jan18  6:59   4.82s  0.02s -bash
    [root@linux-node1 ~]# salt '*' cmd.run 'df -h'
    linux-node2.example.com:
        Filesystem               Size  Used Avail Use% Mounted on
        /dev/mapper/centos-root   18G   17G  1.1G  95% /
        devtmpfs                 905M     0  905M   0% /dev
        tmpfs                    916M   12K  916M   1% /dev/shm
        tmpfs                    916M   41M  876M   5% /run
        tmpfs                    916M     0  916M   0% /sys/fs/cgroup
        /dev/sda1                497M  171M  326M  35% /boot
        tmpfs                    184M     0  184M   0% /run/user/0
        /dev/loop0               4.1G  4.1G     0 100% /mnt
    linux-node1.example.com:
        Filesystem               Size  Used Avail Use% Mounted on
        /dev/mapper/centos-root   18G   11G  7.2G  60% /
        devtmpfs                 905M     0  905M   0% /dev
        tmpfs                    916M   28K  916M   1% /dev/shm
        tmpfs                    916M   57M  860M   7% /run
        tmpfs                    916M     0  916M   0% /sys/fs/cgroup
        /dev/sda1                497M  171M  326M  35% /boot
        tmpfs                    184M     0  184M   0% /run/user/0
    
    [root@linux-node1 ~]# netstat -tulnp|grep minion
    minion不需要监听端口,说明minion需要主动去链接master,master监听端口为4505、4506
    [root@linux-node1 ~]# netstat -tulnp|grep python
    tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      37039/python        
    tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      37045/python       
    
    #master和minion默认使用一个叫zeroMQ进行并行通信,zeroMQ属于底层(传输层)的消息队列,
    #相当于一个发布与订阅系统,比如你订了一个教室听课,那么所有订了此间课室的人都能听到老师的课程。
    
    [root@linux-node1 ~]# lsof -ni:4505
    COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    salt-mast 37039 root   16u  IPv4 3394584      0t0  TCP *:4505 (LISTEN)
    salt-mast 37039 root   18u  IPv4 3412804      0t0  TCP 192.168.56.11:4505->192.168.56.12:43126 (ESTABLISHED)
    salt-mast 37039 root   19u  IPv4 3412811      0t0  TCP 192.168.56.11:4505->192.168.56.11:38262 (ESTABLISHED)
    salt-mini 39623 root   27u  IPv4 3412810      0t0  TCP 192.168.56.11:38262->192.168.56.11:4505 (ESTABLISHED)

    查看4505端口,我们可以发现salt-minion使用一个随机端口通过4505端口与salt-master通信,master使用4505端口发送指定到salt-minion上进行执行。而4606端口是用于接收数据的返回,用于zeroMQ的请求与响应的系统。

    可以通过date命令查看salt的并行通信,可以看到是同时返回
    [root@linux-node1 ~]# salt '*' cmd.run 'date'
    linux-node2.example.com:
        Tue Jan 16 12:01:52 CST 2018
    linux-node1.example.com:
        Tue Jan 16 12:01:52 CST 2018

    2.配置管理

    (1)saltstack是使用YAML的格式作为管理文件的格式,下面的YAML的样例:

    YAML样例:
    house:
    family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
    address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

    (2)YAML的规则:

    ①缩进表示层级关系,默认缩进是2个空格、4个空格、6个空格 
    ②冒号后面有个空格,以冒号结尾可以有空格,可以无空格 
    ③短横线代表一个列表,短横线后面有个空格

    (3)定义yaml文件放的位置:salt内置一个fileserver,在master文件配置:file_roots

    [root@linux-node1 ~]# vim /etc/salt/master     #定义yaml文件放的位置,base环境是必备的
    file_roots:
      base:
        - /srv/salt/base
      dev:
        - /srv/salt/dev
      test:
        - /srv/salt/test
      prod:
        - /srv/salt/prod
    [root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}
    [root@linux-node1 ~]# systemctl restart salt-master
    [root@linux-node1 ~]# cd /srv/salt/base/
    [root@linux-node1 base]# mkdir web
    [root@linux-node1 web]# vim apache.sls    #编写安装apache的YAML文件
    apache-install:
      pkg.installed:---------->模块pkg,方法installed,会匹配操作系统进行选择安装的方法
        - name: httpd--------->装的包的名称
    
    apache-service:----------->id要唯一
      service.running:-------->状态模块service,running为模块的方法
        - name: httpd--------->管理服务的名称
        - enable: True-------->设置开机自动启动
    
    [root@linux-node1 ~]# salt 'linux-node2.example.com' state.sls web.apache
    #如果apache.sls的位置是在prod目录下,需要在后面增加saltenv=prod
    #salt 'linux-node2.example.com' state.sls web.apache saltenv=prod
    
    实现自动化安装,需要写一个top.sls
    top.sls是state系统的入口文件,它在大规模配置管理工作中负责制定哪些设备调用哪些states.sls文件。top.sls入口文件不是必须的,如果只需要简单地对某台机器进行配置管理工作,我们可以直接使用state.sls命令来指定states.sls文件即可。
    [root@linux-node1 base]# pwd
    /srv/salt/base
    [root@linux-node1 base]# vim top.sls    #必须在base环境下写
    base:
      'linux-node1.example.com':
        - web.apache
      'linux-node2.example.com':
        - web.apache
    ****************************
    如果只有一个任务在全部机子上执行,也可以:
    base:
      '*'
        - web.apache
    ****************************
    [root@linux-node1 ~]# salt '*' state.highstate   #去top.sls读取,*代表通知哪些主机
    [root@linux-node1 ~]# salt '*' state.highstate test=True
    #在不想影响当前主机的运行情况,可以使用test=True 进行预测试
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/linuxk/p/9273314.html
Copyright © 2011-2022 走看看