saltstack实现一键部署keepalived+haproxy的高可用负载均衡集群

本文主要是介绍saltstack实现一键部署keepalived+haproxy的高可用负载均衡集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

配置环境

主机名ip服务
server1172.25.1.1salt-master、salt-minion haproxy、keepalived
server2172.25.1.2salt-minion , httpd
server3172.25.1.3salt-minion , nginx
server4172.25.1.4salt-minion , haproxy、keepalived

此文章只针对keepalived的自动化部署
httpd,nginx部署参考
https://blog.csdn.net/u010489158/article/details/83757043
haproxy部署参考
https://blog.csdn.net/u010489158/article/details/83831040


keepalived的安装部署

创建salt脚本存放目录

[root@server1 salt]# cd /srv/salt
[root@server1 salt]# mkdir keepalived
[root@server1 keepalived]# mkdir file   #配置文件和软件包存放目录

编辑安装脚本

[root@server1 keepalived]# vim make.sls    #编辑安装脚本 
include:- haproxy.yum    #使用了haproxy中的yum源安装脚本/mnt/libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm:    #依赖性,镜像中没有,因此需要手动装file.managed:- source: salt://keepalived/file/libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
keepalived-install:pkg.installed:   #依赖性- pkgs:- libnl-devel- openssl-devel- iptables-devel- gccfile.managed:    #keepalived的安装包- name: /mnt/keepalived-2.0.6.tar.gz- source: salt://keepalived/file/keepalived-2.0.6.tar.gzcmd.run:   #需要执行的shell命令- name: cd /mnt && yum install -y libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm && tar zxf keepalived-2.0.6.tar.gz && cd keepalived-2.0.6 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV && make && make install - create: /usr/local/keepalived    #如果此目录存在则不进行安装/etc/keepalived:    #修改文件权限file.directory:- mode: 755/etc/sysconfig/keepalived:    #创建文件软链接,将target中的目录链接到此位置file.symlink:- target: /usr/local/keepalived/etc/sysconfig/keepalived/sbin/keepalived:file.symlink:- target: /usr/local/keepalived/sbin/keepalived

keepalived服务的启动脚本

[root@server1 keepalived]# vim service.sls 
include:- keepalived.make    #包含了keepalived的安装脚本,实现一键部署
/etc/keepalived/keepalived.conf:file.managed:    #文件管理- source: salt://keepalived/file/keepalived.conf- template: jinja   #使用了jinja模块- context:STATE: {{ pillar['state'] }}    #使用了pillar定义变量PRIORITY: {{ pillar['priority'] }}
/opt/check_haproxy.sh:file.managed:- source: salt://keepalived/file/check_haproxy.sh- mode: 755
keepalived-service:file.managed:- name: /etc/init.d/keepalived- source: salt://keepalived/file/keepalived- mode: 755service.running:- enable: keepalived- name: keepalived- reload: True- watch: - file: /etc/keepalived/keepalived.conf

keepalived脚本中需要的file

[root@server1 file]# cd /srv/salt/keepalived/file
[root@server1 file]# ls
check_haproxy.sh         keepalived.conf
keepalived               libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
keepalived-2.0.6.tar.gz

keepalived中对haproxy的健康检查脚本

[root@server1 file]# cat check_haproxy.sh  
#!bin/bash/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
# 如果haproxy的状态是打开的,不做任何事情,如果haproxy的状态是关闭的,那么重新打开haproxy
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
fi
# 如果重新打开haproxy的操作返回值非0,那么说明haproxy出现故障,此时由脚本关闭keepalived,将提供服务的节点转移

keepalived的配置文件

[root@server1 file]# cat keepalived.conf 
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_haproxy {   script "/opt/check_haproxy.sh"interval 2 weight 2
}vrrp_instance VI_1 {state {{ STATE }}    #pillar值interface eth0virtual_router_id 51 priority {{ PRIORITY }}   #pillar值advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.1.100}track_script {   #需要写在vip的后面check_haproxy}
}}

keepalived的启动脚本

[root@server1 file]# cat 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/keepalivedRETVAL=0prog="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 keepalivedRETVAL=$?echo[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}reload() {echo -n $"Reloading $prog: "killproc keepalived -1RETVAL=$?echo
}# See how we were called.
case "$1" instart)start;;stop)stop;;reload)reload;;restart)stopstart;;condrestart)if [ -f /var/lock/subsys/$prog ]; thenstopstartfi;;status)status keepalivedRETVAL=$?;;*)echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"RETVAL=1
esacexit $RETVAL

keepalived中需要用到的pillar定义

[root@server1 web]# vim /srv/pillar/web/install.sls
{% if grains['fqdn'] == 'server1' %}
state: MASTER
priority: 100
{% elif grains['fqdn'] == 'server4' %}
state: BACKUP
priority: 50
{% endif %}
[root@server1 pillar]# cd /srv/pillar
[root@server1 pillar]# vim top.sls 
base:'*':- web.install

全局推送脚本

[root@server1 salt]# vim /srv/salt/top.sls 
base:'server1':- haproxy.service- keepalived.service'server4':- haproxy.service- keepalived.service'server2':- apache.install'server3':- nginx.service[root@server1 salt]# salt '*' state.highstate 

测试

访问vip,实现了nginx和apache轮询访问

[root@foundation1 ~]# curl 172.25.1.100
this is nginx!!!!
[root@foundation1 ~]# curl 172.25.1.100
this is apache
[root@foundation1 ~]# curl 172.25.1.100
this is nginx!!!!
[root@foundation1 ~]# curl 172.25.1.100
this is apache
[root@foundation1 ~]# curl 172.25.1.100
this is nginx!!!!

vip添加到了master(server1)中

[root@server1 salt]# ip add show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:37:6b:32 brd ff:ff:ff:ff:ff:ffinet 172.25.1.1/24 brd 172.25.1.255 scope global eth0inet 172.25.1.100/32 scope global eth0inet6 fe80::5054:ff:fe37:6b32/64 scope link valid_lft forever preferred_lft forever

keepalived中对haproxy健康检查脚本

[root@server1 ~]# /etc/init.d/haproxy stop
Shutting down haproxy:                                     [确定]
[root@server1 ~]# /etc/init.d/haproxy status   #发现停掉haproxy以后,服务自动启动
haproxy (pid  13370) 正在运行...

使haproxy无法自动启动

[root@server1 init.d]# mv haproxy /mnt
[root@server1 mnt]# ./haproxy stop
Shutting down haproxy:                                     [确定]
[root@server1 mnt]# ./haproxy status
haproxy 已停
[root@server1 mnt]# ip add   #vip转移
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:37:6b:32 brd ff:ff:ff:ff:ff:ffinet 172.25.1.1/24 brd 172.25.1.255 scope global eth0inet6 fe80::5054:ff:fe37:6b32/64 scope link valid_lft forever preferred_lft forever##vip转移到server4中
[root@server4 rpmbuild]# ip add show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:59:6c:d8 brd ff:ff:ff:ff:ff:ffinet 172.25.1.4/24 brd 172.25.1.255 scope global eth0inet 172.25.1.100/32 scope global eth0inet6 fe80::5054:ff:fe59:6cd8/64 scope link valid_lft forever preferred_lft forever

这篇关于saltstack实现一键部署keepalived+haproxy的高可用负载均衡集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993637

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE