Haproxy--高可用代理

一、haproxy简介

软件:haproxy---主要是做负载均衡的七层,也可以做四层负载均衡。

负载均衡是通过OSI协议对应的。

7层负载均衡:用的是7层http协议;

4层负载均衡:用的是tcp协议加端口号做的负载均衡。

ha-proxy概述
ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。

ha-proxy的特点
ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。

•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
•性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
•拥有一个功能出色的监控页面,实时了解系统的当前状况。
•功能强大的ACL支持,给用户极大的方便。

haproxy官方文档网址:
https://cbonte.github.io/haproxy-dconv/
二、Haproxy配置文件

global //全局配置
log 127.0.0.1 local3 info //日志配置
maxconn 4096 //最大连接限制(优先级低)
user nobody
group nobody

daemon //守护进程运行
nbproc 1 //haproxy进程数
defaults //针对(listen和backend块进行设置如果块中没设置,则使用默认设置)默认配置
log global //日志使用全局配置
mode http //模式7层LB
maxconn 2048 //最大连接数(优先级中)
retries 3 //健康检查。3次连接失败就认为服务不可用
option redispatch //服务不可用后的操作,重定向到其他健康服务器
stats uri /haproxy //web页面状态模块功能开启
stats auth qianfeng:123 //状态模块认证(用户名qianfeng密码123)
contimeout 5000 //定义haproxy将客户端!!!请求!!!转发至后端服务器,所等待的超时时长
clitimeout 50000 //haproxy作为客户,和后端服务器之间!!!空闲连接!!!的超时时间,到时候发送fin指令
srvtimeout 50000 //haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
#timeout connect 5000
#timeout client 50000
#timeout server 50000
frontend http-in //前端配置块。面对用户侧
bind 0.0.0.0:80 //面对用户监听地址和端口
mode http //http模式的LB
log global //日志使用全局配置
option httplog //默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。

option httpclose // 每次请求完毕后,关闭http通道
acl html url_reg -i \.html$ //1. 访问控制列表名称html。规则要求访问以html结尾的url时
use_backend html-server if html //2.如果满足acl html规则,则推送给后端服务器 html-server
default_backend html-server // 3:默认的后端服务器是 html-server

backend html-server //后端服务器名称为 html-server
mode http //模式为7层代理
balance roundrobin //轮循(rr)
option httpchk GET /index.html //允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache //轮询的同时,根据插入的cookie SERVERID 的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机。

三、Haproxy代理web服务

实验环境:四台服务器
client、HAproxy、web1、web2

实验部署:(关闭防火墙和selinux)
1.web服务器

操作步骤:(两台web服务器都要做)

①在web服务器上安装nginx并启动

yum -y install nginx
systemctl start nginx

②创建对应的网站
echo "server-1" > /usr/share/nginx/html/index.html

2.haproxy部署

操作步骤:

①安装haproxy软件

yum -y install haproxy

②备份haproxy配置文件

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

③修改haproxy配置文件

vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local3
maxconn 4096
uid nobody
# uid 99
gid nobody
# gid 99
daemon
nbproc 1
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
stats uri /haproxy
stats auth qianfeng:123

contimeout 5000
clitimeout 50000
srvtimeout 50000
#timeout connect 5000
#timeout client 50000
#timeout server 50000

frontend http-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl html url_reg -i \.html$
use_backend html-server if html
default_backend html-server

backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

④启动haproxy服务


[root@bogon ~]# systemctl start haproxy

⑤客户端测试访问

 启用haproxy的日志:
1.在haproxy配置文件中定义日志对象log 127.0.0.1(接收方IP)local3(对象)

 

 


2. 修改日志日志配置文件(添加日志规则 对象.级别 存放位置)
[root@haproxy ~]# vim /etc/rsyslog.conf


添加到以上位置:


3.开启UDP和TCP的接口
[root@haproxy ~]# vim /etc/rsyslog.conf


4.重启haproxy和日志服务
[root@proxy ~]# systemctl restart rsyslog
[root@proxy ~]# systemctl restart haproxy
[root@proxy ~]# cd /var/log
[root@proxy log]# ls


[root@proxy log]# tailf haproxy.log //实时查看日志
用客户端访问


对应的日志文件中就会出现以下内容:


用浏览器访问:

四、Haproxy+Keepalived实现七层负载

Keepalived + Haproxy
=========================================

/etc/haproxy/haproxy.cfg
global //关于进程的全局参数
log 127.0.0.1 local2 #日志服务器
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid #pid文件
maxconn 4000 #最大连接数
user haproxy #用户
group haproxy #组
daemon #守护进程方式后台运行

defaults、listen、frontend、backend //关于Proxy配置段
defaults 段用于为其它配置段提供默认参数
listen是frontend和backend的结合体

frontend 虚拟服务VIrtual Server 监听器 接受访问并调度
backend 真实服务器Real Server Web Servers 被调度的服务器

调度器可以同时为多个站点调度,如果使用frontend、backend的方式:
frontend1 backend1
frontend2 backend2
frontend3 backend3

Keepalived + Haproxy
====================================================


拓扑结构

[vip: 192.168.246.17]

[LB1 Haproxy] [LB2 Haproxy]
192.168.246.169 192.168.246.161

[httpd] [httpd] [httpd]
192.168.246.162 192.168.246.163 192.168.246.168
实验环境:准备两台haproxy,两台web服务器即可。
在haproxy代理web服务实验的基础上新添加一台haproxy-backup机器
[root@haproxy-backup ~]# yum -y install haproxy
将master上的haproxy配置文件远程拷贝给backup这台机器
[root@haproxy-master ~]# scp /etc/haproxy/haproxy.cfg 192.168.112.141:/etc/haproxy/
[root@haproxy-backup ~]# vim /etc/haproxy/haproxy.cfg //这步操作可不做,因为两台机器的配置文件一样
[root@haproxy-backup ~]# systemctl start haproxy
[root@haproxy-backup ~]# systemctl status haproxy //查看服务的状态,这步操作可不做
用浏览器访问backup的ip地址,可以正常访问

然后两台服务器都安装keepalived
[root@haproxy-master ~]# yum -y install keepalived
[root@haproxy-backup ~]# yum -y install keepalived
#给master这台服务器的keepalived配置文件做个备份(也可不做)
[root@haproxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@haproxy-master ~]# vim /etc/keepalived/keepalived.conf
将配置文件中原本的内容删除,将下面的内容添加:

[root@haproxy-master ~]# scp /etc/keepalived/keepalived.conf 192.168.112.141:/etc/keepalived/keepalived.conf
[root@haproxy-backup ~]# vim /etc/keepalived/keepalived.conf

[root@haproxy-master ~]# systemctl start keepalived
[root@haproxy-backup ~]# systemctl start keepalived
通过ip a 命令查看VIP在master上:

 模拟master上的keepalived服务宕掉
[root@haproxy-master ~]# systemctl stop keepalived
用ip a 查看一下VIP发现VIP漂移到了backup上

 [root@haproxy-master ~]# systemctl start keepalived
[root@haproxy-master ~]# ip a //这时VIP又漂移回来了

 haproxy可以实现对web服务器健康检查,keepalived也能实现自动主备切换

 具体操作步骤:
[root@haproxy-master ~]# vim /etc/keepalived/check_haproxy_status.sh

[root@haproxy-master ~]# chmod a+x /etc/keepalived/check_haproxy_status.sh
[root@haproxy-master ~]# vim /etc/keepalived/keepalived.conf

 [root@haproxy-master ~]# scp /etc/keepalived/check_haproxy_status.sh 192.168.112.141:/etc/keepalived/
[root@haproxy-backup ~]# chmod a+x /etc/keepalived/check_haproxy_status.sh

[root@haproxy-backup ~]# vim /etc/keepalived/keepalived.conf
#添加以下内容
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy_status.sh" //健康检测
interval 5
}

track_script {
check_haproxy //引用脚本
}

分别停止master和backup上的keepalived服务:
[root@haproxy-master ~]# systemctl stop keepalived
[root@haproxy-backup ~]# systemctl stop keepalived
再重新启动:
[root@haproxy-master ~]# systemctl start keepalived
[root@haproxy-backup ~]# systemctl start keepalived
然后通过ip a观察到VIP还是在master上
然后将haproxy-master上的haproxy宕掉
[root@haproxy-master ~]# systemctl stop haproxy
通过查看VIP是否漂移,或查看haproxy是否重新启动来验证脚本是否运行

 五、Haproxy算法

roundrobin
基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接
static-rr
基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
leastconn
新的连接请求被派发至具有最少连接数目的后端服务器.
source
将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器.这可以使得同一个客户端IP的请求始终被派发至某特定的服务器.

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31058.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021-03-11

idea创建mybatis的maven项目 用idea创建Maven Web项目 添加依赖 创建编写实体类 创建持久层接口 创建SqlMapConfing.xml

mybatis初学

创建一个mybatis的maven项目 环境&#xff1a;IDEA19.3.3&#xff0b;jdk1.8mysq 新建maven项目 项目名字 maven 大体框架 导包&#xff08;要在pom.xml中dependencies标签里面&#xff09; 2 <!-- mybatis核心包 -->3 <dependency>4 <…

2021-03-21

MyBatis-Plus创建 创建数据库 -- 创建测试表 CREATE TABLE tb_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID, user_name varchar(20) NOT NULL COMMENT 用户名, password varchar(20) NOT NULL COMMENT 密码, name varchar(30) DEFAULT NULL COMMENT 姓名, …

基于 Go 语言开发在线论坛

&#xff08;一&#xff09;&#xff1a;整体设计与数据模型 通过一个简单的在线论坛项目帮助大家从项目实际开发维度快速了解 Go Web 编程的全貌&#xff0c;然后再各个击破&#xff0c;深入介绍请求、响应、视图、数据库、Web 服务、测试、部署等各个模块的细节。 功能需求…

从智能对话系统导论,到如何设计第一个对话机器人

从智能对话系统导论&#xff0c;到如何设计第一个对话机器人 一、智能对话系统导论1、生活中的 Conversational AI2、一种新的人机交互方式3、一些关于 Conversational AI 的数据4、对话机器人行业产业链及产业图谱5、课程主要部分 二、Conversational AI 概览1、什么是Convers…

ChitChat论坛

《Go web编程》ChitChat论坛 本文摘自《Go web编程》 京东购书&#xff1a;https://item.jd.com/12252845.html 上一章在末尾展示了一个非常简单的Go Web应用&#xff0c;但是因为该应用只是一个Hello World程序&#xff0c;所以它实际上并没有什么用处。在本章中&#xff0c;我…

微信聊天机器人,不使用iChat,可以群聊

目录 1. 微信聊天界面截图 2. 图片文字识别 3. 获取最新消息 3.1 独聊 3.2 群聊 4. 机器人聊天系统 5. 成果展示 6. 全部代码 本文参考大神【喵王叭】的文章&#xff1a;python实现微信、QQ聊天自动回复【纯物理】_喵王叭的博客-CSDN博客_python自动回复纯物理方式实现微…

【论文翻译】2020.8 清华大学AI课题组——大型中文短文本对话数据集(A Large-Scale Chinese Short-Text Conversation Dataset)

大型中文短文本对话数据集 写在前面&#xff1a; 研究用&#xff0c;原创翻译&#xff0c;转载请标明出处&#xff1b;第一次译文&#xff0c;之后会跟进完善。侵删。 今年暑假末&#xff0c;清华大学公开了大型对话数据集及预训练模型。该数据集融合各大社交媒体对话数据库&am…

头条原创文章一键转换剪映生成视频

最近一段时间某更新了一个功能就是自己发布的文章可以在后台通过视频平台的功能一键生成短视频。 但是这个功能只能支持自己的写的文章,而且只能在本平台发布视频,还暂时不能同步到其他平台。而且必须是自己的原创文章哟,不是话会有一些问题。 这个做了几个视频之后发出来…

自媒体必备视频剪辑SDK,操作简单,功能强大,让每个精彩瞬间都能锦上添花!

VESDK DELUXE介绍&#xff1a; 一个全能好用的视频编辑工具&#xff0c;帮你轻松剪出美好生活。VESDK Deluxe APP视频编辑SDK集手机视频拍摄和视频剪辑主要功能于一体,同时包含手机端视频配音配乐&#xff0c;字幕特效&#xff0c;滤镜&#xff0c;转场特效等各种功能&#xff…

抖音之电脑版剪映的使用

本内容介绍剪映功能的使用以及一些个人剪映作品。紫色文字是超链接&#xff0c;点击自动跳转至相关博文。持续更新&#xff0c;原创不易&#xff01; 目录&#xff1a; 一、抖音&#xff1a;逝雪情感的剪映作品 1、曾经以为离不开的是微信 2、半生走过 3、夏日田园 二、音…

剪映专业版 - 你的短视频剪辑小帮手!附Mac/Win地址!

剪映专业版&#xff1a;做精品视频你不一定要用 FCPX &#xff01;随着短视频的崛起&#xff0c;市面上的剪辑软件也越来越多。除我们熟知的Premiere、Final Cut Pro等专业剪辑软件外&#xff0c;也有很多轻松易上手的App等待我们选择。近期&#xff0c;剪映推出了全新的专业版…

剪映电脑版详细使用教程,让视频剪辑变得更简单了

这几天关于剪映电脑版的消息非常多&#xff0c;相比于专业成熟的视频剪辑软件&#xff0c;但大家对这款剪映似乎特别感兴趣&#xff0c;小编也抽时间简单使用了一下&#xff0c;相比于adobe Premiere 和达芬奇来说&#xff0c;真的特别简单上手&#xff0c;结合了手机版的触摸与…

剪映app怎么剪辑视频

剪映是一款非常好用的手机上的视频剪辑软件&#xff0c;拥有这款软件的话&#xff0c;用户们即使是在手机上也能够快速方便的进行视频剪辑哦&#xff0c;但是有很多用户们没有剪辑过视频&#xff0c;不会使用剪映这款软件等&#xff0c;那么剪映app具体要怎么操作使用呢&#x…

AIz作画阶段小结后续内容安排

效果呈现 视频效果&#xff1a; 1.小说插画 2.动作系列 图画效果&#xff1a; 1.场景画面&#xff08;6张左右&#xff09; 2.人物画面&#xff08;6张左右&#xff0c;可以更多&#xff0c;可爱、知性、性感、古典、游戏、二次元&#xff09; 3.插画设计 4.广告元素 5.3d角色&…

Spring Boot 项目中使用 OpenAI ChatGPT APIs

大家好&#xff0c;我是Yuan&#xff0c;这篇文章主要介绍如何在springboot项目中集成调用chatgpt的api功能。 1. 概述 在本教程中&#xff0c;我们将学习如何在 Spring Boot 中调用 OpenAI ChatGPT API。我们将创建一个 Spring Boot 应用程序&#xff0c;该应用程序将通过调…

2021年茶艺师(中级)最新解析及茶艺师(中级)免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;最新解析考前必练&#xff01;安全生产模拟考试一点通每个月更新茶艺师&#xff08;中级&#xff09;免费试题题目及答案&#xff01;多做几遍…

2021年茶艺师(中级)最新解析及茶艺师(中级)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;最新解析是安全生产模拟考试一点通生成的&#xff0c;茶艺师&#xff08;中级&#xff09;证模拟考试题库是根据茶艺师&#xff08;中级&#…

2021年茶艺师(中级)考试题库及茶艺师(中级)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 茶艺师&#xff08;中级&#xff09;考试题库考前必练&#xff01;安全生产模拟考试一点通每个月更新茶艺师&#xff08;中级&#xff09;复审考试题目及答案&#xff01;多做几遍&#xff0c;其实通过茶艺师&#xf…

2021年茶艺师(中级)考试题及茶艺师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;茶艺师&#xff08;中级&#xff09;考试题根据新茶艺师&#xff08;中级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将茶艺师&#xff08;中级&#xff09;模拟…