zoukankan      html  css  js  c++  java
  • 009-saltstack之salt-ssh的使用及配置管理LAMP状态的实现

    1、salt-ssh的使用

    官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html

    复制代码
    (1)安装salt-ssh
    [root@linux-node1 ~]# yum install -y salt-ssh
    
    (2)配置salt-ssh
    [root@linux-node1 ~]# vim /etc/salt/roster 
    linux-node1:
      host: 192.168.56.11
      user: root
      passwd: 123123
    linux-node2:
      host: 192.168.56.12
      user: root
      passwd: 123123
    
    (3)使用ssh远程执行
    [root@linux-node1 ~]# salt-ssh '*' -r 'uptime'
    linux-node2:
        ----------
        retcode:
            0
        stderr:
        stdout:
            root@192.168.56.12's password: 
             14:07:19 up 14 days,  8:41,  2 users,  load average: 0.04, 0.08, 0.07
    linux-node1:
        ----------
        retcode:
            0
        stderr:
        stdout:
            root@192.168.56.11's password: 
             14:07:20 up 23 days,  8:13,  2 users,  load average: 2.86, 0.81, 0.34
    复制代码

    2、配置管理

    (1)什么是状态?

    States是Saltstack中的配置语言,在日常进行配置管理时需要编写大量的States文件。比如我们需要安装一个包,然后管理一个配置文件,最后保证某个服务正常运行。这里就需要我们编写一些states sls文件(描述状态配置的文件)去描述和实现我们的功能。编写的states sls文件都是YAML语法,states sls文件也支持使用Python语言编写。 
    所谓的状态就是希望系统运行某些命令之后的结果。描述状态使用YAML格式的文件。SLS:salt state 
    举例安装apache,如下:

    复制代码
    [root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls 
    apache:
      pkg.installed:
        - name: httpd
      service.running:
        - name: httpd
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://apache/files/httpd.conf
        - user: root
        - group: root
        - mode: 644
    
    解释说明:
    apache:id声明,在所有环境(base、prod)下全局唯一
    pkg:状态模块
    .:引用关系
    installed:模块中的方法
    ::代表层级关系
    name:可以理解为参数,后面跟的是参数值
    file.managed:文件管理模块,必须要有source指定文件的来源路径
    source:文件的来源路径,salt://代表着环境的根路径,这的根路径为:/srv/salt/base/
    user、group、mode:分别指定文件的所属者,所属组和权限
    
    以上的文件还可以使用分id的写法:
    apache-install:
      pkg.installed:
        - name: httpd
    
    apache-service:
      service.running:
        - name: httpd
    
    apache-config:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://apache/files/httpd.conf
        - user: root
        - group: root
        - mode: 644
    
    存在指定多个配置文件,还可以使用一下写法:(不适用name作为参数传递时,id就是name)
    /etc/httpd/conf/httpd.conf:
      file.managed:
        - source: salt://apache/files/httpd.conf
        - user: root
        - group: root
        - mode: 644
    /etc/httpd/conf/php.conf:
      file.managed:
        - source: salt://apache/files/php.conf
        - user: root
        - group: root
        - mode: 644
    复制代码

    (2) LAMP的状态设计与实现部署

    1、设计分析

    1 名称                  软件包                                  配置文件                 服务
    2 使用模块                pkg                                    file                 service
    3 LAMP    httpd、php、mariadb、mariadb-server、php-mysql、php-pdo、php-cli    /etc/httpd/conf/httpd.conf、/etc/php.ini    httpd、mysqld

    2、Aapche的状态配置

    复制代码
     1 [root@linux-node1 prod]# pwd
     2 /srv/salt/prod
     3 [root@linux-node1 prod]# mkdir apache php mysql
     4 [root@linux-node1 prod]# tree 
     5 .
     6 ├── apache
     7 ├── mysql
     8 └── php
     9 
    10 3 directories, 0 files
    11 
    12 [root@linux-node1 prod]# cd apache/
    13 [root@linux-node1 apache]# vim apache.sls      #编写apache的状态模块
    14 apache-install:
    15   pkg.installed:
    16     - name: httpd
    17 
    18 apache-config:
    19   file.managed:
    20     - name: /etc/httpd/conf/httpd.conf
    21     - source: salt://apache/files/httpd.conf    #salt://代表着环境的根路径
    22     - user: root
    23     - group: root
    24     - mode: 644
    25 
    26 apache-service:
    27   service.running:
    28     - name: httpd
    29     - enable: True
    30 [root@linux-node1 apache]# mkdir files    #创建source目录
    31 [root@linux-node1 apache]# cd files/
    32 [root@linux-node1 files]# cp /etc/httpd/conf/httpd.conf .
    33 [root@linux-node1 apache]# tree 
    34 .
    35 ├── apache.sls
    36 └── files
    37     └── httpd.conf
    38 
    39 1 directory, 2 files
    40 [root@linux-node1 apache]# salt 'linux-node1' state.sls apache.apache saltenv=prod
    复制代码

    3、php的状态配置

    复制代码
    [root@linux-node1 prod]# cd php
    [root@linux-node1 php]# mkdir files
    [root@linux-node1 php]# vim init.sls
    php-install:
      pkg.installed:
        - pkgs:
          - php
          - php-pdo
          - php-mysql
    
    php-config:
      file.managed:
        - name: /etc/php.ini
        - source: salt://php/files/php.ini
        - user: root
        - group: root
        - mode: 644
    [root@linux-node1 php]# cp /etc/php.ini files/
    [root@linux-node1 php]# tree 
    .
    ├── files
    │   └── php.ini
    └── init.sls
    
    1 directory, 2 files
    复制代码

    4、mysql的状态配置

    [root@linux-node1 prod]# cd mysql/
    [root@linux-node1 mysql]# vim init.sls
    mysql-install:
      pkg.installed:
        - pkgs:
          - mariadb
          - mariadb-server
    
    mysql-config:
      file.managed:
        - name: /etc/my.cnf
        - source: salt://mysql/files/my.cnf
        - user: root
        - gourp: root
        - mode: 644
    
    mysql-service:
      service.running:
        - name: mariadb-server
        - enable: True
    [root@linux-node1 mysql]# mkdir files
    [root@linux-node1 mysql]# cp /etc/my.cnf files/
    [root@linux-node1 prod]# tree 
    .
    ├── apache
    │   ├── files
    │   │   └── httpd.conf
    │   └── init.sls
    ├── mysql
    │   ├── files
    │   │   └── my.cnf
    │   └── init.sls
    └── php
        ├── files
        │   └── php.ini
        └── init.sls
    [root@linux-node1 prod]# salt -S '192.168.56.11' state.sls php.init saltenv=prod
    linux-node1.example.com:
    ----------
              ID: php-install
        Function: pkg.installed
          Result: True
         Comment: The following packages were installed/updated: php-mysql
                  The following packages were already installed: php-pdo, php
         Started: 10:30:14.780998
        Duration: 118711.436 ms
         Changes:   
                  ----------
                  php-mysql:
                      ----------
                      new:
                          5.4.16-43.el7_4
                      old:
    ----------
              ID: php-config
        Function: file.managed
            Name: /etc/php.ini
          Result: True
         Comment: File /etc/php.ini is in the correct state
         Started: 10:32:13.556562
        Duration: 51.913 ms
         Changes:   
    
    Summary for linux-node1.example.com
    ------------
    Succeeded: 2 (changed=1)
    Failed:    0
    ------------
    Total states run:     2
    Total run time: 118.763 s

    5、写入top file,执行高级状态

    [root@linux-node1 base]# pwd
    /srv/salt/base
    [root@linux-node1 base]# vim top.sls
    prod:
    'linux-node1.example.com':
    - apache.init
    - php.init
    - mysql.init
    [root@linux-node1 base]# salt 'linux-node1*' state.highstate
    linux-node1.example.com:
    ----------
    ID: apache-install
    Function: pkg.installed
    Name: httpd
    Result: True
    Comment: All specified packages are already installed
    Started: 10:39:04.214911
    Duration: 762.144 ms
    Changes:
    ----------
    ID: apache-config
    Function: file.managed
    Name: /etc/httpd/conf/httpd.conf
    Result: True
    Comment: File /etc/httpd/conf/httpd.conf is in the correct state
    Started: 10:39:04.979376
    Duration: 13.105 ms
    Changes:
    ----------
    ID: apache-service
    Function: service.running
    Name: httpd
    Result: True
    Comment: The service httpd is already running
    Started: 10:39:04.992962
    Duration: 36.109 ms
    Changes:
    ----------
    ID: php-install
    Function: pkg.installed
    Result: True
    Comment: All specified packages are already installed
    Started: 10:39:05.029241
    Duration: 0.65 ms
    Changes:
    ----------
    ID: php-config
    Function: file.managed
    Name: /etc/php.ini
    Result: True
    Comment: File /etc/php.ini is in the correct state
    Started: 10:39:05.029987
    Duration: 10.642 ms
    Changes:
    ----------
    ID: mysql-install
    Function: pkg.installed
    Result: True
    Comment: All specified packages are already installed
    Started: 10:39:05.040793
    Duration: 0.422 ms
    Changes:
    ----------
    ID: mysql-config
    Function: file.managed
    Name: /etc/my.cnf
    Result: True
    Comment: File /etc/my.cnf is in the correct state
    Started: 10:39:05.041301
    Duration: 7.869 ms
    Changes:
    ----------
    ID: mysql-service
    Function: service.running
    Name: mariadb
    Result: True
    Comment: The service mariadb is already running
    Started: 10:39:05.049284
    Duration: 28.054 ms
    Changes:

    Summary for linux-node1.example.com
    ------------
    Succeeded: 8
    Failed: 0
    ------------
    Total states run: 8
    Total run time: 858.995 ms

    复制代码
    [root@linux-node1 base]# pwd
    /srv/salt/base
    [root@linux-node1 base]# vim top.sls 
    prod:
      'linux-node1.example.com':
       - apache.init
       - php.init
       - mysql.init
    [root@linux-node1 base]# salt 'linux-node1*' state.highstate
    linux-node1.example.com:
    ----------
              ID: apache-install
        Function: pkg.installed
            Name: httpd
          Result: True
         Comment: All specified packages are already installed
         Started: 10:39:04.214911
        Duration: 762.144 ms
         Changes:   
    ----------
              ID: apache-config
        Function: file.managed
            Name: /etc/httpd/conf/httpd.conf
          Result: True
         Comment: File /etc/httpd/conf/httpd.conf is in the correct state
         Started: 10:39:04.979376
        Duration: 13.105 ms
         Changes:   
    ----------
              ID: apache-service
        Function: service.running
            Name: httpd
          Result: True
         Comment: The service httpd is already running
         Started: 10:39:04.992962
        Duration: 36.109 ms
         Changes:   
    ----------
              ID: php-install
        Function: pkg.installed
          Result: True
         Comment: All specified packages are already installed
         Started: 10:39:05.029241
        Duration: 0.65 ms
         Changes:   
    ----------
              ID: php-config
        Function: file.managed
            Name: /etc/php.ini
          Result: True
         Comment: File /etc/php.ini is in the correct state
         Started: 10:39:05.029987
        Duration: 10.642 ms
         Changes:   
    ----------
              ID: mysql-install
        Function: pkg.installed
          Result: True
         Comment: All specified packages are already installed
         Started: 10:39:05.040793
        Duration: 0.422 ms
         Changes:   
    ----------
              ID: mysql-config
        Function: file.managed
            Name: /etc/my.cnf
          Result: True
         Comment: File /etc/my.cnf is in the correct state
         Started: 10:39:05.041301
        Duration: 7.869 ms
         Changes:   
    ----------
              ID: mysql-service
        Function: service.running
            Name: mariadb
          Result: True
         Comment: The service mariadb is already running
         Started: 10:39:05.049284
        Duration: 28.054 ms
         Changes:   
    
    Summary for linux-node1.example.com
    ------------
    Succeeded: 8
    Failed:    0
    ------------
    Total states run:     8
    Total run time: 858.995 ms   
  • 相关阅读:
    圈子
    限制我们的最大敌人不是自己,也不是思维,是时空。
    社交的本质就是生活!
    没有归零思维,就不会有突破
    什么是老板思维,什么是员工思维,深有体会,最近被N个行业洗脑……
    太相信书的人,格局不会太大
    在一个规则没有被建立好的时代,那些活生生的牛人,就是仅存的有效教科书
    个人发展阶段与回报对应表
    分布式,去中心化,协作性,可适应性
    [测试题]line
  • 原文地址:https://www.cnblogs.com/xuefy/p/11592351.html
Copyright © 2011-2022 走看看