zoukankan      html  css  js  c++  java
  • 企业——saltstack自动化部署软件、高级推、负载均衡

    1.saltstack概念及原理

       SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。自动化运维软件,自动化配置系统
       SaltStack
    作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。实现这一点,此时Salt Master可以发出命令,如salt '*' cmd.run 'ls -l /'。没有UI界面
       Saltstack
    是基于python开发的一套C/S架构配置管理工具;一种全新的基础设施管理方式,部署轻松
       SaltStack
    三大功能:
        ●
    远程执行
        ●
    配置管理
        ●
    云管理

    saltstack的三中运行模式:

    Local 本地
    Master/minion 传统运行方式(server端跟agent端)
    Salt SSH SSH

    saltstack内的组件:

      中央管理系统。此系统用于将命令和配置发送到在受管系统上运行的Salt minion。

          

      管理系统。该系统运行Salt minion,它从Salt master接收命令和配置。slave要向master发起授权的请求,master上用 salt-key  -L查看

          

      

    从命令行针对一个或多个受管系统执行的临时命令。对...有用:

    • 实时监控,状态和库存
    • 一次性命令和脚本
    • 部署关键更新

          

      系统配置的声明性或命令式表示

          

      系统变量。Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。您还可以为任何系统定义自定义颗粒。

          

           

    2.环境要求
    需要两个干净的6.5的虚拟机
    查看虚拟机的信息的命令: qemu-img info 虚拟机名

     
    在真机上:
       cd /var/lib/libvirt/
       ls
       qemu-img info new.qcow2    ##
    查看虚拟机的信息
       qemu-img create -f qcow2 -b new.qcow2 wf1
       qemu-img create -f qcow2 -b new.qcow2 wf2
       virt-manager
      
    创建新的虚拟机 wf1 wf2


      
    注意:虚拟机的解析

       cat /etc/redhat-release    ##
    查看系统版本
       uname -r   ##
    查看系统内核版本
       getenforce   ##
    查看selinux的状态,selinux必须是关闭的
       /etc/init.d/iptables stop    ##
    关闭防火墙


    3.saltstack
    的配置

     
    在真机上:
       lftp 172.25.254.250
       cd pub/docs/saltstack
       ls
       mirror rhel6     ##
    rhel6的文件放在http的默认发布目录上
       mv rhel6/ /var/www/html/
       systemctl start httpd.service

     
    wf1,2,3上:   需要重新配置yum
       vim /etc/yum.repos.d/rhel-source.repo
        [saltstack]
        name=saltstack
        baseurl=http://172.25.8.250/rhel6
        gpgcheck=0
       yum repolist
      
     
    wf1上(master):
       yum install -y salt-master
       cd /etc/salt
       ls
       vim master      ##master
    端编辑master的文件,不过这个没有要编辑的
       /etc/init.d/salt-master start
          


     
    wf2,3上(slave):
       yum install -y salt-minion

     chkconfig salt-minion on  ##可以设置开机自启,设不设置都可以
       cd /etc/salt/
       ls
       vim minion      ##minion
    端编辑minion的文件
        master: 172.25.8.1     ##
    设置masterip,指定master主机,修改配置文件之后才可以开启minion的服务
       /etc/init.d/salt-minion start

     

     必要的时候可以增加主机名的解析:

      vim /etc/hosts

        172.25.8.1  server1

      在slave上面可以用来测试,master和slave之间时候网络连通:

       ping 172.25.8.1  或者  ping server1


           

     

           


     
    wf1上:salt远程执行命令,此处的命令相当于是秘钥认证,如果没有被授权的话,主机会显示在 Unaccepted Keys里面
       salt-key -L     ##
    查看接受的和没有被授权的请求
       salt-key -A     ##
    批量处理没有被处理的没有授权的请求
       salt-key -a     ##
    处理某一个为授权的请求

     

    在认证之前,查看salt的结构:在指定的目录下面 /etc/salt/pki/master 下

        

      可以看到没有认证授权之前的,申请授权的主机在树状结构的 minions_pre 里面

    接下来开始授权:
        

     

        

     

    现在是授权之后:

         

      之前的需要被授权的主机的信息发生了改变

      并且在客户端相应的目录下面,/etc/salt/pki/minion 下面生成了 master 的秘钥  minion_master.pub

     测试:保持长链接
     -
    wf1上操作,输入命令:
     -salt wf2/3 test.ping
            ##salt
    命令  test.ping的含义是,test是一个模块,ping是模块内的方法
     -salt wf2/3 cmd.run hostname

         ##使用cmd.run直接调用远程shell命令(功能同上),远程主机上面调用hostname这个命令
          
    ===============================================================================
    lsof
    list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
       lsof -i
    用以显示符合条件的进程情况

       lsof -i :4505
    ===============================================================================

    4.saltstack
    的配置管理  YAML 配置服务需要开启base默认的目录

    ===============================================================================
     
    默认的SLS文件的rendererYAML rendererYAML是一个有很多强大特性的标记性语言。salt使用了一个YAML的小型子集,映射非常常用的数据,像列表和字典
      pki
    加密 
    base
    目录:用来部署服务使用,需要调用很多的模块,没有base目录需要自己建立

    ================================================================================

     
    wf1上:
       vim master
        file_roots:    ##
    开启base的默认目录,不能将注释去掉,需要自己按照格式重新写,后面的salt的服务的自动化部署和sls配置的文件都会默认从该路径下读取
          base:
            - /srv/salt/
       mkdir /srv/salt
       /etc/init.d/salt-master restart
            
       cd /srv/salt
       mkdir apache
       vim install.sls     ##
    进入到/srv/salt/目录下创建,python语法注意空格缩进,不能用tab
        http:  
    软件包名称
          pkg.installed
       salt wf2 state.sls apache.install    ##salt
    调用客户端的命令  wf2客户端名称  state.sls调用sls这个文件 在base下的
          

     

          


     
    wf2上:
       yum install tree -y
       cd /var/cache/salt
       tree .
          
     
    wf1上:
       vim /srv/salt/apache/install.sls
        http:  
    软件包名称
          pkg.installed   ##
    安装
        apache:  ##软件名称不能重复,所以将HTTP写成apache
          service.running:    ##
    执行 开启服务
            - name: httpd
            - enable: True
       salt wf2 state.sls apache.install
          

     

          


     
    wf2上:
       ps ax   ##
    查看进程信息,是否有开启服务

          


       chkconfig --list httpd

     
    wf1上:
       vim /srv/salt/apache/install.sls
        httpd:
          pkg.installed:
           - pkgs:
             - httpd
             - php
             - php-mysql

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

          

          

       注意:但是如果修改wf2上的http的配置文件的话,wf1将命令推过来的时候,就会将更改的配置文件覆盖掉,就相当于没有更改。所以需要将wf2上的httpde配置文件scpwf1的一个目录当中,并且监控,如果修改过的话,就要重启服务
      
     
    wf1上:
       cd /srv/salt/apache
       mkidr files

          


     
    wf2上:
       scp /etc/httpd/conf/httpd.conf root@172.25.8.1:/srv/salt/apache/files  ##将配置文件发送到wf1(master)上,并建立连接。
            
     
    wf1上:
       cd /srv/salt/apache
       vim install.sls
        httpd:
          pkg.installed:  ##pkg.install方式:制定主机安装软件
           - pkgs:    ##需要安装的安装包有哪些?下面行进行定义
             - httpd
             - php
             - php-mysql

        service.running:
          - name: httpd
          - enable: True
          - watch:    ##监控命令
            - file: /etc/httpd/conf/httpd.conf     ##
    监控配置文件,如果修改,就重启服务

        /etc/httpd/conf/httpd.conf:
          file.managed:  ##文件管理(文件同步操作)
            - source: salt://apache/files/httpd.conf
            - mode: 644
            - user: root
            - group: root

          
       salt wf2 state.sls apache.install

     
    测试:
     
    wf1上:
       cd /srv/salt/apache
       cd files/
       vim httpd.conf
          Listen 8080   ##
    将端口改成8080
       salt wf2 state.sls apache.install
           

          


     
    wf2上:
       netstat -antlp  ##
    可以看到http的端口改成了8080
          


    5.
    开启服务 和 安装 这两个功能分开进行,编写两个sls文件

          
       cd /srv/salt/apache
       ls
       vim install.sls    ##这是原来上面编写的配置文件
        httpd:     ##文件的名字
          pkg.installed:    ##这个是安装模块,类型及其动作
           - pkgs:
             - httpd
             - php
             - php-mysql

          file.managed:    ##文件管理(文件同步操作)
            - name: /etc/httpd/conf/httpd.conf
            - source: salt://apache/files/httpd.conf
            - mode: 644
            - user: root
            - group: root

          

     

    更改以后的文件的内容如下:


       vim service.sls  ##这里是启动服务的文件
        include:    ##这里表示,在开启服务之前,先检测是否安装服务;如果没有安装服务,需要先安装。
          - apache.install  ##调用的模块是:apache.install
        apache-service:  
          service.running:  ##如果安装了服务,那么就直接开启服务
            - name: httpd
            - enable: True
            - watch:
              - file: apache-install

          
       salt wf2 state.sls apache.install

    6.
    wf3上配置nginx服务  并将开启和安装分开进行,编写两个sls文件

    (1).
    nginx的服务器的配置文件scpwf1
       scp /usr/local/nginx/conf/nginx.conf root@172.25.8.1:/srv/salt/nginx/files          ##
    如果配置文件更改的话,将配置文件也发到虚拟机上去,然后覆盖原来的配置文件,注意,如果要更改配置文件的话,需要在master上更改,如果在minion上更改的话,在master执行salt操作的话,文件会被salt上的文件覆盖掉,更改的内容也就不见了。所以在minion上面修改配置文件是没有用的。当master一推,就会将原来的配置文件的内容覆盖掉。

    (2)
    nginx的安装包放在files目录下
       cd /srv/salt/
       mkdir nginx
       mkdir nginx/files
       mv nginx-1.14.0.tar.gz nginx/files
          

          


    (3)
    nginx的配置文件scpwf1nginxfiles目录下
       scp nginx.conf root@172.25.254.1:/srv/salt/nginx/files

          


    (4)
    将开启服务的命令放到另一个sls的文件里
       vim install.sls   ##
    配置如下图,pkgs里面需要安装的,都是在源码编译nginx的时候,解决相应的依赖性的安装包

          

      文件内的 file.managed那个模块里面的意思是: - name: 就是将即将要推出去的服务的压缩包,放在那个主机的 /mnt 目录下。 - source:就是这个压缩包,在本机的(推文件的,推服务的master)salt的默认的路径下。 - mode:给文件的权限,如644,755等。

          
    ==================================================================================
      
    注意:也可以将安装全部放在一个文件中,只需要调用就好了
       cd /srv/salt
       mkdir pkgs
       cd pkgs
       vim make.sls
        pkg.installed:
          - pkgs:
          - gcc
          - pcre-devel
          - openssl-devel
    ==================================================================================


       salt wf3 state.sls nginx.install
          


    (5)
    安装nginx的发布目录
      
    用已经编译好的nginx的发布的文件,放到默认发布目录下就好
       mv nginx /etc/init.d
       cd /etc/init.d
       chmod +x nginx

      
    测试一下,看发布文件能否使用:
       /etc/init.d/nginx start
       curl localhost      ##
    出现nginx的页面就代表可以使用
       /etc/init.d/nginx stop
       scp nginx root@172.25.254.1:/srv/salt/nginx/files

          


          

     wf3上: ps ax  ##查看执行的进程


    7.
    高级推  (一次推很多的服务器上的不同的服务)

      top.sls:作为“最高同步”操作的入口文件,执行“最高同步”操作时,将从此sls文件中获取状态对minion进行同步
       cd /srv/salt
       ls
       vim top.sls  ##高级推需要读取的项目的名称
        base:
           "wf2":
              - apache.service
           "wf3":
              - nginx.install
       salt '*' state.highstate
          

          

          

          

      

    salt '*' test.ping     ## * 匹配的是salt里面的所有的远程主机

          

     


    8.
    wf1上下载salt-minion配置和wf23一样   wf1haproxy的服务器  用作负载均衡
       salt-key -L
       salt-key -a wf1
       salt-key -L  

       cd /srv/salt/
       ls
       mkdir haproxy
       cd haproxy/
       mkdir files      ##
    haproxy的压缩包放在files文件中。
       vim install.sls
       vim service.sls
       salt wf1 state.sls haproxy.install
          

          
       cd ..
       cd haproxy-1.6.11/examples
       ls
       cp haproxy.init content-sw-sample.cfg  /srv/salt/haproxy/files/

       cd /srv/salt/haproxy/files
       mv content-sw-sample.cfg haproxy.cfg
      
       mkdir users
       cd users/
       vim install.sls
        haproxy-group:
          group.present:
            - name: haproxy
            - group: 200

        haproxy-user:  ##自动创建用户的函数方法
          user.present:
            - name: haproxy
            - uid: 200
            - gid: 200
            - home: /usr/local/haproxy
            - shell: /sbin/nologin
            - createhome: False
       cd ..
       cd haproxy/
       vim service.sls
        - users.install

      
    编辑haproxy的配置文件:如下所示:

      cd files/
      pwd
        /srv/salt/haproxy/files
      ls
        haproxy.cfg
      vim haproxy.cfg
        stats uri /status
        #---------------------------------------------------------------------
        # main frontend which proxys to the backends
        #---------------------------------------------------------------------
        frontend main *:80
        default_backend app

        backend server

        balance roundrobin
        server server1 172.25.8.2:80 check
        server server2 172.25.8.3:80 check


     
       vim top.sls
        "wf1":
           - haproxy.install
      
     
    在 wf2/3 上编写http的默认发布文件:
       cd /var/www/html/
       ls
       vim index.html
         server2/server3
     
     
    在网页上测试,会出现轮询的效果: 172.25.18.1

     

    9.配置 Salltstack 的高可用

    (1)在 wf1 的/srv/salt目录下,建立keepalived目录,进到目录里边编辑安装keepalived的sls推送文件

     

  • 相关阅读:
    java基础知识要点总结之几个重要关键字(关于static、this、final、)
    网上大篇幅的坑人的struts2入门案例
    oc4j(oracle container for j2EE)使用笔记一
    清空数据库中某个表的两种操作
    MyEclipse下将应用部署到tomcat严重: Error initializing endpoint java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
    jsp----错误页设置
    jsp设置MIME类型
    jsp输出显示表格
    jsp输出方式
    Linux操作
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9937582.html
Copyright © 2011-2022 走看看