• saltstack实战4--综合练习3


    Saltstack配置管理-业务引用haproxy
    在业务模块里写它的配置
    各个业务是不同的,这里有差异性,所以没写在配置模块里。
    对minion02也执行安装haproxy
    [root@master ~]# salt 'minion02' state.sls haproxy.install env=prod
    

    关于系统初始化部分和haproxy安装部分,所有minion都是相同的。而业务这块因前期规划不同,配置有差异。

    我们把因为业务差异的这部分单独拿出来。单独配置

    创建目录,编辑haproxy的配置文件

    [root@master ~]# mkdir /srv/salt/prod/cluster
    [root@master ~]# mkdir /srv/salt/prod/cluster/files
    [root@master ~]# cd /srv/salt/prod/cluster/files/
    [root@master files]# vim haproxy-outside.cfg
    [root@master files]# cat haproxy-outside.cfg 
    global
    maxconn 100000
    chroot /usr/local/haproxy
    uid 99  
    gid 99 
    daemon
    nbproc 1 
    pidfile /usr/local/haproxy/logs/haproxy.pid 
    log 127.0.0.1 local3 info
    
    defaults
    option http-keep-alive
    maxconn 100000
    mode http
    timeout connect 5000ms
    timeout client  50000ms
    timeout server 50000ms
    
    listen stats
    mode http
    bind 0.0.0.0:8888
    stats enable
    stats uri     /haproxy-status 
    stats auth    haproxy:saltstack
    
    frontend frontend_www_example_com
    bind 10.0.1.111:80
    mode http
    option httplog
    log global
    default_backend backend_www_example_com
    
    backend backend_www_example_com
    option forwardfor header X-REAL-IP
    option httpchk HEAD / HTTP/1.0
    balance source 
    server web-node1  10.0.1.172:8080 check inter 2000 rise 30 fall 15
    server web-node2  10.0.1.173:8080 check inter 2000 rise 30 fall 15
    [root@master files]# 
    

    编辑haproxy的业务状态文件

    监控haproxy-service这个id下面的file模块,文件发生改变就reload
    [root@master files]# cd ..
    [root@master cluster]# pwd
    /srv/salt/prod/cluster
    [root@master cluster]# vim haproxy-outside.sls
    [root@master cluster]# cat haproxy-outside.sls 
    include:
      - haproxy.install
    
    haproxy-service:
      file.managed:
        - name: /etc/haproxy/haproxy.cfg
        - source: salt://cluster/files/haproxy-outside.cfg
        - user: root
        - group: root
        - mode: 644
      service.running:
        - name: haproxy
        - enable: True
        - reload: True
        - require:
          - cmd: haproxy-init
        - watch:
          - file: haproxy-service
    [root@master cluster]# 
    

    这次我们想通过top.sls执行

    [root@master base]# pwd
    /srv/salt/base
    [root@master base]# cat top.sls 
    base:
      '*':
        - init.env_init
    
    prod:
      'minion01':
        - cluster.haproxy-outside
      'minion02':
        - cluster.haproxy-outside
    [root@master base]# 
    

    在执行状态文件直线,先对两台minion的apache端口进行更改

    通过cmd.run模块方法,结合grep和sed命令远程更改文件

    [root@master base]# salt 'minion01' cmd.run 'grep  Listen /etc/httpd/conf/httpd.conf'
    
    minion01:
        # Listen: Allows you to bind Apache to specific IP addresses and/or
        # Change this to Listen on specific IP addresses as shown below to 
        #Listen 12.34.56.78:80
        Listen 80
    [root@master base]# salt 'minion01' cmd.run 'grep  '^Listen' /etc/httpd/conf/httpd.conf'
    minion01:
        Listen 80
    [root@master base]# salt 'minion01' cmd.run "sed -i 's#Listen 80#Listen 8080#g' /etc/httpd/conf/httpd.conf"
    minion01:
    [root@master base]# salt 'minion01' cmd.run 'grep  Listen /etc/httpd/conf/httpd.conf'
    minion01:
        # Listen: Allows you to bind Apache to specific IP addresses and/or
        # Change this to Listen on specific IP addresses as shown below to 
        #Listen 12.34.56.78:80
        Listen 8080
    [root@master base]# salt 'minion02' cmd.run "sed -i 's#Listen 80#Listen 8080#g' /etc/httpd/conf/httpd.conf"
    minion02:
    [root@master base]# salt 'minion02' cmd.run 'grep  Listen /etc/httpd/conf/httpd.conf' 
    minion02:
        # Listen: Allows you to bind Apache to specific IP addresses and/or
        # Change this to Listen on specific IP addresses as shown below to 
        #Listen 12.34.56.78:80
        Listen 8080
    [root@master base]# 
    

    重启两台minion的apache服务

    通过service.restart模块操作

    [root@master base]# salt '*'  service.restart  'httpd'
    minion01:
        True
    minion02:
        True
    [root@master base]# salt '*'  cmd.run  'lsof -i:8080'
    minion01:
        COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
        httpd   21438   root    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21443 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21444 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21445 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21446 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21447 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21448 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21449 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
        httpd   21450 apache    4u  IPv6 326215      0t0  TCP *:webcache (LISTEN)
    minion02:
        COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
        httpd   16185   root    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16190 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16191 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16192 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16193 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16194 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16195 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16196 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
        httpd   16197 apache    4u  IPv6 321483      0t0  TCP *:webcache (LISTEN)
    [root@master base]# 
    

    使用命令测试没问题再执行,下面是截图了部分测试的结果

                  newfile:
                      /etc/haproxy/haproxy.cfg
    ----------
              ID: haproxy-service
        Function: service.running
            Name: haproxy
          Result: None
         Comment: Service is set to be started
         Started: 12:38:36.883999
        Duration: 16.114 ms
         Changes:   
    
    Summary
    -------------
    Succeeded: 21 (unchanged=2, changed=1)
    Failed:     0
    -------------
    Total states run:     21
    [root@master base]# salt '*' state.highstate test=True
    

      

    截取部分执行的

    salt '*' state.highstate

    ----------
              ID: haproxy-init
        Function: cmd.run
            Name: chkconfig --add haproxy
          Result: True
         Comment: unless execution succeeded
         Started: 12:41:38.338363
        Duration: 37.244 ms
         Changes:   
    ----------
              ID: net.ipv4.ip_nonlocal_bind
        Function: sysctl.present
          Result: True
         Comment: Sysctl value net.ipv4.ip_nonlocal_bind = 1 is already set
         Started: 12:41:38.375856
        Duration: 17.951 ms
         Changes:   
    ----------
              ID: haproxy-service
        Function: file.managed
            Name: /etc/haproxy/haproxy.cfg
          Result: True
         Comment: File /etc/haproxy/haproxy.cfg updated
         Started: 12:41:38.394036
        Duration: 8.704 ms
         Changes:   
                  ----------
                  diff:
                      New file
                  mode:
                      0644
    ----------
              ID: haproxy-service
        Function: service.running
            Name: haproxy
          Result: True
         Comment: Service haproxy has been enabled, and is running
         Started: 12:41:38.403685
        Duration: 90.121 ms
         Changes:   
                  ----------
                  haproxy:
                      True
    
    Summary
    -------------
    Succeeded: 21 (changed=2)
    Failed:     0
    -------------
    Total states run:     21
    [root@master base]# 
    

    检测结果

    [root@master base]# salt '*' cmd.run 'lsof -i:80'
    minion01:
        COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
        haproxy 21636 nobody    5u  IPv4 329124      0t0  TCP 10.0.1.111:http (LISTEN)
    minion02:
        COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
        haproxy 16385 nobody    5u  IPv4 324420      0t0  TCP 10.0.1.111:http (LISTEN)
    [root@master base]# 
    

     

    检测是否成功:在浏览器输入
    http://10.0.1.172:8888/haproxy-status
    http://10.0.1.173:8888/haproxy-status
    用户名:haproxy 密码:saltstack
    如果能显示haproxy页面即可,下面显示backend是down的状态是因为后端的apache没设置默认主页

    分别设置minion01和minion02 的首页

    [root@minion01 ~]# echo minion01-ip-10.0.1.172>>/var/www/html/index.html
    [root@minion01 ~]# 
    

      minion02的

    [root@minion02 ~]# echo minion02-ip-10.0.1.173>>/var/www/html/index.html
    [root@minion02 ~]# 
    

    再次刷新页面即可

    至此,haproxy的业务部分也结束了。 

    配置keepalived

    我们也把它分解下

    系统初始化(前期配置haproxy之前已经做过了)

    功能模块

    业务模块

    功能模块部分

    采集安装命令

    tar xfz keepalived-1.2.19.tar.gz && cd keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --disable-fwmark &&  make && make install
    

      

    采集文件

    启动脚本和keepalived的配置文件需要修改,这两个文件单独取出来

    [root@master etc]# pwd
    /usr/local/src/keepalived-1.2.19/keepalived/etc
    [root@master etc]# ls
    init.d  keepalived
    [root@master etc]# cp init.d/keepalived.init /srv/salt/prod/keepalived/files/
    [root@master etc]# cp keepalived/keepalived.conf /srv/salt/prod/keepalived/files/
    [root@master etc]# cd /srv/salt/prod/keepalived/files/
    [root@master files]# 
    

    编辑文件  

    改成下面内容,只有启动这里需要
    daemon /usr/local/keepalived/sbin/keepalived ${KEEPALIVED_OPTIONS}

    下面文件也要取出来,从安装后keepalived的目录取出来

    [root@mysql keepalived-1.2.19]# cd /usr/local/keepalived/etc/sysconfig/
    [root@mysql sysconfig]# ls
    keepalived
    

    文件采集3个

    [root@master files]# pwd
    /srv/salt/prod/keepalived/files
    [root@master files]# ls
    keepalived  keepalived.conf  keepalived.init
    [root@master files]# ll
    total 12
    -rw-r--r-- 1 root root  667 Jan  2 13:21 keepalived
    -rw-r--r-- 1 root root 3562 Jan  2 13:10 keepalived.conf
    -rwxr-xr-x 1 root root 1335 Jan  2 13:19 keepalived.init
    [root@master files]# 
    

    修改下文件名

    [root@master files]# mv keepalived keepalived.sysconfig
    [root@master files]# ll
    total 12
    -rw-r--r-- 1 root root 3562 Jan  2 13:10 keepalived.conf
    -rwxr-xr-x 1 root root 1335 Jan  2 13:19 keepalived.init
    -rw-r--r-- 1 root root  667 Jan  2 13:21 keepalived.sysconfig
    [root@master files]# 
    

    上传tar包到此处

    [root@master files]# ll
    total 336
    -rw-r--r-- 1 root root 330164 Dec 17 23:54 keepalived-1.2.19.tar.gz
    -rw-r--r-- 1 root root   3562 Jan  2 13:10 keepalived.conf
    -rwxr-xr-x 1 root root   1335 Jan  2 13:19 keepalived.init
    -rw-r--r-- 1 root root    667 Jan  2 13:21 keepalived.sysconfig
    [root@master files]# 
    

       

    开始编写keepalived的功能模块安装文件

    [root@master keepalived]# pwd
    /srv/salt/prod/keepalived
    [root@master keepalived]# cat install.sls 
    include:
      - pkg.pkg-init
    
    keepalived-install:
      file.managed:
        - name: /usr/local/src/keepalived-1.2.19.tar.gz
        - source: salt://keepalived/files/keepalived-1.2.19.tar.gz
        - user: root
        - group: root
        - mode: 755
      cmd.run:
        - name: cd /usr/local/src && tar xfz keepalived-1.2.19.tar.gz && cd keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --disable-fwmark &&  make && make install
        - unless: test -d /usr/local/keepalived
        - require:
          - pkg: pkg-init
          - file: keepalived-install
    
    keepalived-init:
      file.managed:
        - name: /etc/init.d/keepalived
        - source: salt://keepalived/files/keepalived.init
        - user: root
        - group: root
        - mode: 755
      cmd.run:
        - name: chkconfig --add keepalived
        - unless: chkconfig --list | grep keepalived
        - require:
          - file: keepalived-init
    
    /etc/sysconfig/keepalived:
      file.managed:
        - source: salt://keepalived/files/keepalived.sysconfig
        - user: root
        - group: root
        - mode: 644
    /etc/keepalived:
      file.directory:
        - user: root
        - group: root
        - mode: 755
    [root@master keepalived]# 
    

     先测试执行下

    [root@master keepalived]# salt 'minion01'  state.sls keepalived.install  env=prod test=True
    minion01:
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: gcc
          Result: True
         Comment: Package gcc is already installed.
         Started: 13:50:28.614772
        Duration: 1006.367 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: glibc
          Result: True
         Comment: Package glibc is already installed.
         Started: 13:50:29.621368
        Duration: 0.371 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: openssl
          Result: True
         Comment: Package openssl is already installed.
         Started: 13:50:29.621797
        Duration: 0.239 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: openssl-devel
          Result: True
         Comment: Package openssl-devel is already installed.
         Started: 13:50:29.622091
        Duration: 0.356 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: autoconf
          Result: True
         Comment: Package autoconf is already installed.
         Started: 13:50:29.622506
        Duration: 0.25 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: gcc-c++
          Result: True
         Comment: Package gcc-c++ is already installed.
         Started: 13:50:29.622811
        Duration: 0.234 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: make
          Result: True
         Comment: Package make is already installed.
         Started: 13:50:29.623093
        Duration: 0.305 ms
         Changes:   
    ----------
              ID: keepalived-install
        Function: file.managed
            Name: /usr/local/src/keepalived-1.2.19.tar.gz
          Result: None
         Comment: The file /usr/local/src/keepalived-1.2.19.tar.gz is set to be changed
         Started: 13:50:29.625281
        Duration: 4.081 ms
         Changes:   
                  ----------
                  newfile:
                      /usr/local/src/keepalived-1.2.19.tar.gz
    ----------
              ID: keepalived-install
        Function: cmd.run
            Name: cd /usr/local/src && tar xfz keepalived-1.2.19.tar.gz && cd keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --disable-fwmark &&  make && make install
          Result: None
         Comment: Command "cd /usr/local/src && tar xfz keepalived-1.2.19.tar.gz && cd keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --disable-fwmark &&  make && make install" would have been executed
         Started: 13:50:29.630366
        Duration: 5.103 ms
         Changes:   
    ----------
              ID: keepalived-init
        Function: file.managed
            Name: /etc/init.d/keepalived
          Result: None
         Comment: The file /etc/init.d/keepalived is set to be changed
         Started: 13:50:29.635689
        Duration: 2.641 ms
         Changes:   
                  ----------
                  newfile:
                      /etc/init.d/keepalived
    ----------
              ID: keepalived-init
        Function: cmd.run
            Name: chkconfig --add keepalived
          Result: None
         Comment: Command "chkconfig --add keepalived" would have been executed
         Started: 13:50:29.638708
        Duration: 28.72 ms
         Changes:   
    ----------
              ID: /etc/sysconfig/keepalived
        Function: file.managed
          Result: None
         Comment: The file /etc/sysconfig/keepalived is set to be changed
         Started: 13:50:29.667609
        Duration: 2.362 ms
         Changes:   
                  ----------
                  newfile:
                      /etc/sysconfig/keepalived
    ----------
              ID: /etc/keepalived
        Function: file.directory
          Result: None
         Comment: The following files will be changed:
                  /etc/keepalived: directory - new
         Started: 13:50:29.670063
        Duration: 0.503 ms
         Changes:   
    
    Summary
    ------------
    Succeeded: 13 (unchanged=6, changed=3)
    Failed:    0
    ------------
    Total states run:    13
    [root@master keepalived]# 
    

    测试没问题,两台机器都执行下,下面只截取部分安装过程

              ID: keepalived-init
        Function: file.managed
            Name: /etc/init.d/keepalived
          Result: True
         Comment: File /etc/init.d/keepalived updated
         Started: 13:52:18.885924
        Duration: 8.804 ms
         Changes:   
                  ----------
                  diff:
                      New file
                  mode:
                      0755
    ----------
              ID: keepalived-init
        Function: cmd.run
            Name: chkconfig --add keepalived
          Result: True
         Comment: Command "chkconfig --add keepalived" run
         Started: 13:52:18.895175
        Duration: 39.056 ms
         Changes:   
                  ----------
                  pid:
                      17951
                  retcode:
                      0
                  stderr:
                  stdout:
    ----------
              ID: /etc/sysconfig/keepalived
        Function: file.managed
          Result: True
         Comment: File /etc/sysconfig/keepalived updated
         Started: 13:52:18.934468
        Duration: 13.266 ms
         Changes:   
                  ----------
                  diff:
                      New file
                  mode:
                      0644
    ----------
              ID: /etc/keepalived
        Function: file.directory
          Result: True
         Comment: Directory /etc/keepalived updated
         Started: 13:52:18.947818
        Duration: 0.976 ms
         Changes:   
                  ----------
                  /etc/keepalived:
                      New Dir
    
    Summary
    -------------
    Succeeded: 13 (changed=6)
    Failed:     0
    -------------
    Total states run:     13
    [root@master keepalived]# salt '*'  state.sls keepalived.install  env=prod
    

    keepalived的安装过程至此结束

    接下来是业务模块的部分

    install.sls里面并没有写配置文件差异的东西,纯安装类的,接下来业务的引用
     
    编辑keepalived的配置文件。 为了方便理解这个文件配合谁用的,命名文件名时如下命名
    这里咱们简单的说明一下,首先这里使用了jinja模板的方式,配合sls文件里的pillar
    10.0.1.111是虚拟IP
    [root@master keepalived]# cd /srv/salt/prod/cluster/files/
    [root@master files]# ls
    haproxy-outside.cfg
    [root@master files]# vim haproxy-outside-keepalived.conf
    [root@master files]# cat haproxy-outside-keepalived.conf 
    ! Configuration File for keepalived
    global_defs {
       notification_email {
         saltstack@example.com
       }
       notification_email_from keepalived@example.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id {{ROUTEID}}
    }
    
    vrrp_instance haproxy_ha {
    state {{STATEID}}
    interface eth0
        virtual_router_id 36
    priority {{PRIORITYID}}
        advert_int 1
    authentication {
    auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
           10.0.1.111
        }
    }
    [root@master files]# 
    
     
    编辑keepalived的业务模块的sls文件,使用pillar(pillar建立在grains基础上,我这么认为的)
    [root@master cluster]# pwd
    /srv/salt/prod/cluster
    [root@master cluster]# ll
    total 12
    drwxr-xr-x 2 root root 4096 Jan  2 13:56 files
    -rw-r--r-- 1 root root  602 Jan  2 14:11 haproxy-outside-keepalived.sls
    -rw-r--r-- 1 root root  367 Jan  2 12:12 haproxy-outside.sls
    [root@master cluster]# cat haproxy-outside-keepalived.sls 
    include:
      - keepalived.install
    
    keepalived-service:
      file.managed:
        - name: /etc/keepalived/keepalived.conf
        - source: salt://cluster/files/haproxy-outside-keepalived.conf
        - user: root
        - group: root
        - mode: 644
        - template: jinja
        {% if grains['fqdn'] == 'minion01' %}
        - ROUTEID: haproxy_ha
        - STATEID: MASTER
        - PRIORITYID: 150
        {% elif grains['fqdn'] == 'minion02' %}
        - ROUTEID: haproxy_ha
        - STATEID: BACKUP
        - PRIORITYID: 100
        {% endif %}
      service.running:
        - name: keepalived
        - enable: True
        - watch:
          - file: keepalived-service
    [root@master cluster]# 
    

    测试一台minion没问题再执行其余minion

    [root@master cluster]# salt 'minion01'  state.sls  cluster.haproxy-outside-keepalived  env=prod  test=True
    minion01:
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: gcc
          Result: True
         Comment: Package gcc is already installed.
         Started: 14:12:06.483808
        Duration: 1020.962 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: glibc
          Result: True
         Comment: Package glibc is already installed.
         Started: 14:12:07.504916
        Duration: 0.507 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: openssl
          Result: True
         Comment: Package openssl is already installed.
         Started: 14:12:07.505482
        Duration: 0.247 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: openssl-devel
          Result: True
         Comment: Package openssl-devel is already installed.
         Started: 14:12:07.505778
        Duration: 0.232 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: autoconf
          Result: True
         Comment: Package autoconf is already installed.
         Started: 14:12:07.506063
        Duration: 0.28 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: gcc-c++
          Result: True
         Comment: Package gcc-c++ is already installed.
         Started: 14:12:07.506396
        Duration: 0.33 ms
         Changes:   
    ----------
              ID: pkg-init
        Function: pkg.installed
            Name: make
          Result: True
         Comment: Package make is already installed.
         Started: 14:12:07.506779
        Duration: 0.23 ms
         Changes:   
    ----------
              ID: keepalived-install
        Function: file.managed
            Name: /usr/local/src/keepalived-1.2.19.tar.gz
          Result: True
         Comment: The file /usr/local/src/keepalived-1.2.19.tar.gz is in the correct state
         Started: 14:12:07.509872
        Duration: 8.122 ms
         Changes:   
    ----------
              ID: keepalived-install
        Function: cmd.run
            Name: cd /usr/local/src && tar xfz keepalived-1.2.19.tar.gz && cd keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --disable-fwmark &&  make && make install
          Result: True
         Comment: unless execution succeeded
         Started: 14:12:07.518977
        Duration: 6.109 ms
         Changes:   
    ----------
              ID: keepalived-init
        Function: file.managed
            Name: /etc/init.d/keepalived
          Result: True
         Comment: The file /etc/init.d/keepalived is in the correct state
         Started: 14:12:07.525288
        Duration: 3.045 ms
         Changes:   
    ----------
              ID: keepalived-init
        Function: cmd.run
            Name: chkconfig --add keepalived
          Result: True
         Comment: unless execution succeeded
         Started: 14:12:07.528774
        Duration: 31.351 ms
         Changes:   
    ----------
              ID: /etc/sysconfig/keepalived
        Function: file.managed
          Result: True
         Comment: The file /etc/sysconfig/keepalived is in the correct state
         Started: 14:12:07.560436
        Duration: 3.227 ms
         Changes:   
    ----------
              ID: /etc/keepalived
        Function: file.directory
          Result: True
         Comment: The directory /etc/keepalived is in the correct state
         Started: 14:12:07.563740
        Duration: 0.545 ms
         Changes:   
    ----------
              ID: keepalived-service
        Function: file.managed
            Name: /etc/keepalived/keepalived.conf
          Result: None
         Comment: The file /etc/keepalived/keepalived.conf is set to be changed
         Started: 14:12:07.564403
        Duration: 7.861 ms
         Changes:   
                  ----------
                  newfile:
                      /etc/keepalived/keepalived.conf
    ----------
              ID: keepalived-service
        Function: service.running
            Name: keepalived
          Result: None
         Comment: Service is set to be started
         Started: 14:12:07.597748
        Duration: 25.696 ms
         Changes:   
    
    Summary
    -------------
    Succeeded: 15 (unchanged=2, changed=1)
    Failed:     0
    -------------
    Total states run:     15
    [root@master cluster]# 
    

    先拿minion01执行了

              ID: keepalived-service
        Function: service.running
            Name: keepalived
          Result: True
         Comment: Service keepalived has been enabled, and is running
         Started: 14:13:42.642981
        Duration: 87.148 ms
         Changes:   
                  ----------
                  keepalived:
                      True
    
    Summary
    -------------
    Succeeded: 15 (changed=2)
    Failed:     0
    -------------
    Total states run:     15
    [root@master cluster]# salt 'minion01'  state.sls  cluster.haproxy-outside-keepalived  env=prod 
    

    其余minion机器(也就一个minion02了),通过top.sls执行

    [root@master base]# cd /srv/salt/base/
    [root@master base]# cat top.sls 
    base:
      '*':
        - init.env_init
    
    prod:
      'minion01':
        - cluster.haproxy-outside
        - cluster.haproxy-outside-keepalived
      'minion02':
        - cluster.haproxy-outside
        - cluster.haproxy-outside-keepalived
    [root@master base]# 
    

    查看下目录,再次确认都没啥问题,然后执行

    [root@master prod]# tree
    .
    ├── cluster
    │   ├── files
    │   │   ├── haproxy-outside.cfg
    │   │   └── haproxy-outside-keepalived.conf
    │   ├── haproxy-outside-keepalived.sls
    │   └── haproxy-outside.sls
    ├── haproxy
    │   ├── files
    │   │   ├── haproxy-1.6.2.tar.gz
    │   │   └── haproxy.init
    │   └── install.sls
    ├── keepalived
    │   ├── files
    │   │   ├── keepalived-1.2.19.tar.gz
    │   │   ├── keepalived.conf
    │   │   ├── keepalived.init
    │   │   └── keepalived.sysconfig
    │   └── install.sls
    └── pkg
        └── pkg-init.sls
    
    7 directories, 13 files
    [root@master prod]# 
    

    下面只截取最后执行结果

              ID: keepalived-service
        Function: service.running
            Name: keepalived
          Result: True
         Comment: Service keepalived has been enabled, and is running
         Started: 14:17:44.024593
        Duration: 93.347 ms
         Changes:   
                  ----------
                  keepalived:
                      True
    
    Summary
    -------------
    Succeeded: 29 (changed=2)
    Failed:     0
    -------------
    Total states run:     29
    [root@master prod]# salt '*'  state.highstate
    

    最后确认下minion上vip是否已经有一个在启动状态

    [root@master prod]# salt '*'  cmd.run 'ip addr | grep 10.0.1'
    minion01:
            inet 10.0.1.172/24 brd 10.0.1.255 scope global eth0
            inet 10.0.1.111/32 scope global eth0
    minion02:
            inet 10.0.1.173/24 brd 10.0.1.255 scope global eth0
    [root@master prod]# 
    

    停止minion01的keepalived服务,vip也能立马飘到minion02上

    [root@master prod]# salt 'minion01'  service.stop 'keepalived'
    minion01:
        True
    [root@master prod]# salt '*'  cmd.run 'ip addr | grep 10.0.1'
    minion01:
            inet 10.0.1.172/24 brd 10.0.1.255 scope global eth0
    minion02:
            inet 10.0.1.173/24 brd 10.0.1.255 scope global eth0
            inet 10.0.1.111/32 scope global eth0
    [root@master prod]# 
    

    启动minion01的keepalived,vip又飘过来

    [root@master prod]# salt 'minion01'  service.start 'keepalived'
    minion01:
        True
    [root@master prod]# salt '*'  cmd.run 'ip addr | grep 10.0.1'
    minion01:
            inet 10.0.1.172/24 brd 10.0.1.255 scope global eth0
            inet 10.0.1.111/32 scope global eth0
    minion02:
            inet 10.0.1.173/24 brd 10.0.1.255 scope global eth0
    [root@master prod]# 
    

      

    浏览器测试,输入vip,访问正常,关于一个源地址访问,总是分配到一个固定的minion,原因在于haproxy的balance配置,这里我们写的是source

    如果改成roundrobin,就会随机了

    至此,haproxy和keepalived讲解完毕
  • 相关阅读:
    取汉字字串的首字母
    回调函数
    [转].NET对象与COM对象
    [转]TCP与UDP的特点与区别
    【转】一张图分出你是用左脑还是右脑!
    并发基础(Runnable、Thread、Executor)
    Java序列化总结
    Hadoop安装配置手册
    MySQL配置信息解读(my.cnf)
    mysql主从备份、主从切换
  • 原文地址:https://www.cnblogs.com/nmap/p/6241900.html
Copyright © 2020-2023  润新知