saltstack自动化运维之一键部署keepalived高可用+haproxy负载均衡集群

 配置

server1    172.25.12.1    salt-master、salt-minion    haproxy、keepalived
server2    172.25.12.2    salt-minion                 httpd
server3    172.25.12.3    salt-minion                 nginx
server4    172.25.12.4    salt-minion                 haproxy、keepalived            

这篇文章只针对keepalived

httpd,nginx部署参考https://blog.csdn.net/u010489158/article/details/81744757

haproxy部署参考https://blog.csdn.net/u010489158/article/details/81777758

[root@server1 salt]# cd /srv/salt

[root@server1 salt]# mkdir keepalived   #创建keepalived的目录

[root@server1 salt]# cd keepalived/

[root@server1 keepalived]# mkdir files   #一些文件和软件包存放目录
[root@server1 keepalived]# vim install.sls    #编辑安装脚本

[root@server1 keepalived]# cat install.sls 
keepalived-install:           #安装依赖性
  pkg.installed:
    - pkgs:
      - pcre-devel
      - gcc
      - openssl-devel

kp-install:
  file.managed:             #将安装包存放在客户端的/mnt/keepalived-2.0.6.tar.gz位置
    - name: /mnt/keepalived-2.0.6.tar.gz
    - source: salt://keepalived/files/keepalived-2.0.6.tar.gz  #服务端安装包位置
  cmd.run:
    - name: cd /mnt && tar zxf keepalived-2.0.6.tar.gz && cd keepalived-2.0.6 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV &> /dev/null && make &> /dev/null && make install &> /dev/null    #安装脚本
    - creates: /usr/local/keepalived   #如果存在这个文件则不继续安装,保证安装一次

/etc/keepalived:   #在客户端创建目录
  file.directory:
    - mode: 755   #权限为755

/etc/sysconfig/keepalived:
  file.symlink:    #进行软链接
    - target: /usr/local/keepalived/etc/sysconfig/keepalived

/sbin/keepalived:
  file.symlink:   #进行软链接
    - target: /usr/local/keepalived/sbin/keepalived


 

[root@server1 keepalived]# mkdir files   #一些配置信息存放的目录
[root@server1 keepalived]# cd files/

[root@server1 files]# cat keepalived    #keepalived的启动脚本
#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived

# Source function library
. /etc/rc.d/init.d/functions

# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived

RETVAL=0

prog="keepalived"

start() {
    echo -n $"Starting $prog: "
    daemon keepalived ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}

stop() {
    echo -n $"Stopping $prog: "
    killproc keepalived
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}

reload() {
    echo -n $"Reloading $prog: "
    killproc keepalived -1
    RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi
        ;;
    status)
        status keepalived
        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        RETVAL=1
esac

exit $RETVAL
[root@server1 files]# vim keepalived.conf   #keepalived的配置文件

[root@server1 files]# cat keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 172.25.12.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state {{ STATE }}    #{{}}这种取值方式是采用pillar方法取值
    interface eth0
    virtual_router_id {{ VRID }}
    priority {{ PRIORITY }}
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.12.100
    }
}
[root@server1 keepalived]# pwd
/srv/pillar/keepalived
[root@server1 keepalived]# pwd
/srv/pillar/keepalived
[root@server1 keepalived]# vim install.sls   #创建pillar值
{% if grains['fqdn'] == 'server1' %}   #不同的server对应不同的值
state: MASTER
vrid: 12
priority: 100
{% elif grains['fqdn'] == 'server4' %}
state: BACKUP
vrid: 12
priority: 50
{% endif %}
[root@server1 pillar]# pwd
/srv/pillar

[root@server1 pillar]# vim top.sls  #读取pillar值
base:
  '*':
    - web.install
    - keepalived.install
[root@server1 keepalived]# pwd
/srv/salt/keepalived
[root@server1 keepalived]# vim service.sls  #创建推送脚本
include:   #此脚本包含之前的install脚本
  - keepalived.install

/etc/keepalived/keepalived.conf:
  file.managed: 
    - source: salt://keepalived/files/keepalived.conf
    - template: jinja   #使用pillar需要添加这个模块
    - context:
        STATE: {{ pillar['state'] }}   #pillar值
        VRID: {{ pillar['vrid'] }}
        PRIORITY: {{ pillar['priority'] }}


kp-service:
  file.managed:
    - name: /etc/init.d/keepalived
    - source: salt://keepalived/files/keepalived
    - mode: 755
  service.running:  #运行keepalived
    - name: keepalived
    - reload: True
    - watch:   #监控
      - file: /etc/keepalived/keepalived.conf
[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# cat top.sls   #创建全局配置脚本
base:
  'server1':
    - haproxy.install
    - keepalived.service
  'roles:apache':
    - match: grain
    - httpd.install
  'roles:nginx':
    - match: grain
    - nginx.service
  'server4':
    - haproxy.install
    - keepalived.service
[root@server1 salt]# salt '*' state.highstate

猜你喜欢

转载自blog.csdn.net/u010489158/article/details/81806730