salt实现haproxy的负载均衡部署

2024-05-16 02:38

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

配置环境:

主机名ip服务
server1172.25.1.1salt-manster
server2172.25.1.2salt-minion , haproxy
server3172.25.1.3salt-minion , apache
server4172.25.1.4salt-minion ,nginx

关于环境中的nginx和apache部署脚本访问,此文章只实现haproxy的功能
https://blog.csdn.net/u010489158/article/details/81744757

关于haproxy自动部署的实现

(1)拓展yum源

[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[salt]
name=salt
baseurl=http://172.25.1.250/rhel6
enabled=1
gpgcheck=0[HighAvailability]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5/HighAvailability
enabled=1
gpgcheck=1[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=1[ResilientStorage]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5/ResilientStorage
enabled=1
gpgcheck=1[ScalableFileSystem]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=1

(2)创建haproxy脚本存放位置

[root@server1 ~]# cd /srv/salt/  
[root@server1 salt]# mkdir haproxy   #存放关于haproxy安装配置的脚本
[root@server1 salt]# cd haproxy/

(3)yum源配置文件的推送脚本

[root@server1 haproxy]# vim yum.sls    #推送拓展yum源额脚本
yum-install:file.managed:                 #对文件的管理 - name: /etc/yum.repos.d/rhel-source.repo   #将source中的文件放到name的位置- source: salt://haproxy/file/rhel-source.repocmd.run:    #执行shell命令- name: yum clean all

(4)haproxy的源码安装脚本

[root@server1 haproxy]# vim make.sls    #haproxy的安装脚本
include:- haproxy.yum        #包含haproxy目录下的yum.sls脚本
haproxy-install:       #关于haproxy的安装pkg.installed:       #利用yum进行安装  - pkgs:   #指定安装包- rpm-buildfile.managed:- name: /root/haproxy-1.6.11.tar.gz- source: salt://haproxy/file/haproxy-1.6.11.tar.gzcmd.run:      #运行shell命令- name: yum install rpm-build && cd /root && rpmbuild -tb haproxy-1.6.11.tar.gz && tar zxf haproxy-1.6.11.tar.gz && cd /rpmbuild/RPMS/x86_64/ && rpm -ivh haproxy-1.6.11-1.x86_64.rpm- create: /etc/haproxy     #如果此目录存在则不执行安装

(5) haproxy用户的建立脚本

[root@server1 users]# cd /srv/salt/users
[root@server1 users]# vim haproxy.sls  #创建haproxy用户
haproxy-group:   #用户组的建立group.present:- name: haproxy- gid: 200haproxy-user:  #用户的建立user.present:- name: haproxy- uid: 200- gid: 200- shell: /sbin/nologin- createhome: False- home: /usr/local/nginx

(6)haproxy服务的启动和配置文件脚本

[root@server1 haproxy]# vim service.sls   #关于服务启动的脚本
include:   #包含haproxy中的make.sls  和 users下的haproxy.sls- haproxy.make- users.haproxy
/etc/haproxy/haproxy.cfg:     #客户端的目录id,将source中的文件拷贝到此ID位置file.managed:- source: salt://haproxy/file/haproxy.cfg
haproxy-service:   #关于haproxy的服务启动service.running:- enable: True   #开机自动启动- name: haproxy   #haproxy服务- reload: True   #如果watch中的文件发生修改则进行reload- watch:    #监控file中的文件- file: /etc/haproxy/haproxy.cfg- require:- user: haproxy

(7)关于file目录中的内容

[root@server1 file]# ls    #file目录中存放了haproxy的压缩包,haproxy的配置文件,拓展yum源的配置文件
haproxy-1.6.11.tar.gz  haproxy.cfg  rhel-source.repo

<1> haproxy.cfg文件

[root@server1 file]# cat haproxy.cfg 
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#globalmaxconn         10000stats socket    /var/run/haproxy.stat mode 600 level adminlog             127.0.0.1 local0uid             200gid             200chroot          /var/emptydaemon# The public 'www' address in the DMZ
frontend publicbind            *:80 name clear#bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pemmode            httplog             globaloption          httplogoption          dontlognullmonitor-uri     /monitorurimaxconn         8000timeout client  30sstats uri       /admin/stats#use_backend     static if { hdr_beg(host) -i img }#use_backend     static if { path_beg /img /css   }default_backend static  #默认将访问发送到static的后端服务器群# The static backend backend for 'Host: img', /img and /css.
backend staticmode            httpbalance         roundrobinoption prefer-last-serverretries         2option redispatchtimeout connect 5stimeout server  5s#option httpchk  HEAD /favicon.icoserver          statsrv1 172.25.1.3:80 check inter 1000  #定义后端的服务器server          statsrv2 172.25.1.4:80 check inter 1000# the application servers go here
backend dynamicmode            httpbalance         roundrobinretries         2option redispatchtimeout connect 5stimeout server  30stimeout queue   30soption httpchk  HEAD /login.phpcookie          DYNSRV insert indirect nocachefullconn        4000 # the servers will be used at full load above this number of connectionsserver          dynsrv1 192.168.1.1:80 minconn 50 maxconn 500 cookie s1 check inter 1000server          dynsrv2 192.168.1.2:80 minconn 50 maxconn 500 cookie s2 check inter 1000server          dynsrv3 192.168.1.3:80 minconn 50 maxconn 500 cookie s3 check inter 1000server          dynsrv4 192.168.1.4:80 minconn 50 maxconn 500 cookie s4 check inter 1000

<2>rhel-source.repo文件

[root@server1 file]# cat rhel-source.repo 
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[salt-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6
enabled=1
gpgcheck=0

(8)编写全局推送文件,一键推送所有节点

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

(9)测试

<1>server1访问server2(haproxy),实现httpd和nginx的轮询

[root@server1 ~]# curl 172.25.1.2
this is apache
[root@server1 ~]# curl 172.25.1.2
this is nginx!!!!
[root@server1 ~]# curl 172.25.1.2
this is apache
[root@server1 ~]# curl 172.25.1.2
this is nginx!!!!

<2>各个节点的服务已经自动开启

[root@server2 ~]# netstat  -nutlp |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7535/haproxy        
[root@server3 ~]# netstat  -nutlp |grep 80
tcp        0      0 :::80                       :::*                        LISTEN      2650/httpd  
[root@server4 mnt]# netstat  -nutlp |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      10438/nginx    

这篇关于salt实现haproxy的负载均衡部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4