HA是高可用

Proxy 代理

HAProxy  能实现高可用反向代理工具

到目前所使用的主流的高可用加反向代理负载均衡的工具 lvs+keepad  nginx haproxy

负载均衡(Load Balance,简称LB)是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。

要么是软件 要么是硬件 但是用上硬件的可能性不大了  就像我们一个交换机 服务器 路由器那样的一个硬件设备 实现的高可用反向代理技术

硬件有:

F5       	#https://f5.com/zh
Netscaler 		#https://www.citrix.com.cn/products/citrix-adc/
Array     	#https://www.arraynetworks.com.cn/
深信服	#http://www.sangfor.com.cn/
北京灵州	#http://www.lingzhou.com.cn/cpzx/llfzjh/

这是硬件级设备  超级昂贵

贼几把贵  比较出名的 F5  Netscaler  

很贵 买一台 也就实现个负载均衡 还实现不了高可用

所以一买就是两台   一个便宜的设备都好几十万

两个硬件级的负载均衡设备都上百万  一两百万

现在中小公司 用不到 大公司也不再使用了

因为 业务量 办公量比较大  一两台 解决不了 上百台  太特么贵了

公司那点b毛钱 承受不了

四层的反向代理 基于tcp层的负载均衡

LVS(Linux Virtual Server)

HAProxy(High Availability Proxy)

Nginx(1.9)  nginx 也有4层的 很少用就是

七层的反向代理 主流的就下面这俩

HAProxy

Nginx

这节课讲HAProxy  他能实现四层的 也能实现七层的

服务级别的负载均衡设备

什么叫做负载均衡?

他是把将特定的业务  不管是web服务 还是一些后端 纯tcp的服务 网络流量等

分担给指定的一个或多个后端特定多的服务器

就是之前nginx 通过upstream 把一个域名的服务 直接分给后端多台机器上去

他就是把一个服务 分发给后端不同的多台服务器或虚拟机  提供公司业务的并发能力

主要是水平的扩容!  并不是无限的 也是有限的  就是增加到一定数量 到一定级别 到他的天花板  不一定能提高性能   就是增加服务器  反而会降低 服务器的性能

这种水平扩容性  并不是无限制的

为什么要使用负载均衡呢?

软件级的负载均衡

最终是为了提高服务器的处理并发能力!

应用场景

四层是用在 mysql  redis  rabbitmq  Memcache

七层的就比较多了 所有的web 服务器都是七层的 就是http 的  nginx 的 tomcat 的 apache  php   图片 动静分离  API 等

HAProxy介绍:  C语言开发的  

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万 以上)、高性能TCPHTTP负载均衡器支持基于cookie的持久性自动故障切换(几乎所有的反向代理和负载均衡设备都有这个功能,nginx 也有他会自动的去识别后端的健康状态

lvs和hproxy也有 他俩都是基于tcp 和http 两种方式),支持正则表达式及web状态 统计,目前最新TLS版本为2.0

HAProxy和Nginx 一样分两个版本

一个是企业版 一个是社区版本

从2013年HAProxy 分为社区版和企业版,企业版将提供更多的特性和功能以及全天24小时的技术支持等服务。

https://www.haproxy.com/ #企业版

https://www.haproxy.org/ #社区版

HAProxy反向代理负载均衡安装使用介绍_nginx

上图是社区版网站 截图

如图  2.4 2.2  2.0  后面的LST  是长期支持版本的意思

一般偶数的版本为长期支持版本

如 2.0  版本 他后面显示 最多支持到 2024年

我们下载2.0

HAProxy反向代理负载均衡安装使用介绍_tomcat_02

在这下载  Debian/Ubuntu packages

HAProxy反向代理负载均衡安装使用介绍_反向代理_03

apt-get install --no-install-recommends software-properties-common

add-apt-repository ppa:vbernat/haproxy-2.0

apt-get install haproxy=2.0.\*

启一台机器  HAProxy-1

apt-get install --no-install-recommends software-properties-common

安装依赖包

add-apt-repository ppa:vbernat/haproxy-2.0

添加个apt 的仓库 apt源

apt update

刷新一下

apt-cache madison haproxy

查看一下 apt源里 可安装的haproxy版本

HAProxy反向代理负载均衡安装使用介绍_nginx_04

显示最高可安装2.0的
apt-get install haproxy=2.0.\*
或者
apt -y install haproxy

安装haproxy 2.0 版本

haproxy -v

查看版本

dpkg -L haproxy

安装完了后 用dpkg命令看下路径

他的默认路径在

vim /etc/haproxy/haproxy.cfg

HAProxy反向代理负载均衡安装使用介绍_tomcat_05

但是这些我们都不要

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

拷贝一份

然后从新创建

vim /etc/haproxy/haproxy.cfg
global
        maxconn 100000
        chroot /var/lib/haproxy
        stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1
        stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2
        uid 111
        gid 115
        daemon
        nbproc 2
        #cpu-map 1 0
        #cpu-map 2 1
        #cpu-map 3 2
        #cpu-map 4 3
        spread-checks 5
        pidfile /var/lib/haproxy/haproxy.pid
        log 127.0.0.1 local3 info

defaults
        option redispatch
        option http-keep-alive
        option forwardfor
        maxconn 100000
        mode http
        timeout connect 300000ms
        timeout client 300000ms
        timeout server 300000ms
        no option http-use-htx

HAProxy反向代理负载均衡安装使用介绍_反向代理_06

上面的配置文件中 容易变动的是 uid  和gid  

有可能会不一样

我们看下

cat /etc/passwd | grep haproxy

出现的uid 和gid  填到上面

我们启动他 因为Ubuntu上apt安装的应用 都会默认启动

我们启动的话 要关闭后再启动

systemctl restart haproxy

启动 haproxy

解释配置文件内容

        chroot /var/lib/haproxy              

这个chroot目录必须得存在  这个目录存在 就能正常启动

HAProxy反向代理负载均衡安装使用介绍_nginx_07

全局配置段 global 配置段   他是配置进程 比如

HAProxy反向代理负载均衡安装使用介绍_反向代理_08

这两行就是 haproxy 启动的进程

还有性能调整相关参数如图

HAProxy反向代理负载均衡安装使用介绍_nginx_09

除了global 全局配置外

还一个是proxies  代理配置段

不过默认配置文件里面 没有给我们提供proxies 代理配置段

所以需要自己加proxies  

HAProxy反向代理负载均衡安装使用介绍_反向代理_10

如图 defaults  属于代理配置段之一

proxues代理配置段包括:

default

frontend(前端)

backend(后端)

listen

整个配置段就这些

haproxy从功能上来说 几乎和nginx 是类似的

nginx 能实现的haproxy几乎都可以实现

只是没有虚拟主机的概念 从反向代理 和负载均衡 nginx 有的 haproxy都有

功能可能比nginx 还要强大

再回到global段 全局段

HAProxy反向代理负载均衡安装使用介绍_tomcat_11

HAProxy反向代理负载均衡安装使用介绍_nginx_12

##最大连接数  10万  一个haproxy进程所能 处理的连接数

如果有两个进程 就是10万2 100个进程就是10万100

HAProxy反向代理负载均衡安装使用介绍_nginx_13

##这个chroot目录必须得存在  这个目录存在 就能正常启动   不在就启动不了

这个叫锁定运行目录 就是我这 haproxy 一旦运行起来 就跳不出这个文件   这个目录必须存在 不存在就启动不来 不过这个目录默认是存在的  因为这个是haproxy的家目录

如果给他改了一个不存在的目录的话 他会报错 整个haproxy 就启动不来了

一旦出现 意外情况 比如当前的haproxy被黑客入侵了 入侵了以后 虽然他以haproxy 这个用户入侵的话  因为这个用户的权限很低 所以也干不了啥大事

没啥权限 就在这个目录下做操作

HAProxy反向代理负载均衡安装使用介绍_反向代理_14

## haproxy 有几个进程  决定了sock文件的位置 还有级别 mode 进程名   process 1 进程1  process 2 进程2

这里是启动了两个process  

HAProxy反向代理负载均衡安装使用介绍_nginx_15

##进程输入是这个值决定的   也就是这个数 * 10万  也就是2*10万=20万

开启多少haproxy进程

HAProxy反向代理负载均衡安装使用介绍_tomcat_16

##  以哪个用户运行 和那个组  

也可以改成

user haproxy

group haproxy

HAProxy反向代理负载均衡安装使用介绍_tomcat_17

是否以守护进程的方式启动  是否后台启动

cpu绑定  和nginx 亲和度一样

HAProxy反向代理负载均衡安装使用介绍_反向代理_18

## 后端server 状态  check(检查) 随机提前或者延迟的百分比  这里写着5 就相当于5%

这个生产上 建议 2-5之间  

HAProxy反向代理负载均衡安装使用介绍_tomcat_19

## 启动haproxy 后产生的进程号

HAProxy反向代理负载均衡安装使用介绍_nginx_20

##日志  syslog日志  127.0.0.1 本机的syslog 服务器

local3 定义在我本地的syslog服务里面 他所在的级别

而info 是日志记录的级别

以上的就是全局段

然后下面是proxues配置段

defaults  代理配置段包括:

default

frontend(前端)

backend(后端)

listen

这几个字段

关于listen frontend 和backend 还没有讲 他是关于反向代理的

默认是defaults 字段

HAProxy反向代理负载均衡安装使用介绍_nginx_21

HAProxy反向代理负载均衡安装使用介绍_tomcat_22

##默认配置 他的作用域  针对listen frontend backend 这三个 配置段 生效

HAProxy反向代理负载均衡安装使用介绍_tomcat_23

option redispatch  当server  id 对应的服务器down后 强制将请求 从新定向 到其他健康机器  (后端服务都有个id 号 )

HAProxy反向代理负载均衡安装使用介绍_tomcat_24

开启回话保持 类似长连接

HAProxy反向代理负载均衡安装使用介绍_nginx_25

##透传客户端真实ip 至后端web服务

HAProxy反向代理负载均衡安装使用介绍_tomcat_26

##最大连接数

HAProxy反向代理负载均衡安装使用介绍_反向代理_27

##模式 支持反向代理的模式 默认的工作模式  默认就是 http 和tcp

HAProxy反向代理负载均衡安装使用介绍_nginx_28

##超时时间

## 第一个 timeout connect 300000ms 30万毫秒 就是300秒 就是5分钟  客户端请求从haproxy到后端server 的最长连接等待时间

## 第二个timeout client 300000ms  设置haproxy 与客户端的最长活动时间

## 第三个timeout server 300000ms 客户端请求 从haproxy 到后端 服务器的处理超时时间

这些选项 会对后端 等下我们定义的其他字段 lissten backend frontend 这三个字段都生效的

虽然说都生效 如果说有相同的 比如frontend 也有这些选项 他是以他们自己段的选项为准的

fronend

##是前端的意思

backend  

##后端的 意思

listen

##前端加后端

frontend 和backend 能实现的 listen 都能实现

在nginx 里面配置反向代理  

我们是从server里面配置的 先定义一个虚拟主机

nginx:
upstream name {
server ip:port;
server ip:port;
}
server {
bind
server_name ;
proxy_pass http://upstream name;
}

是这样做的

haproxy是这么做的 :

frontend name

bind 80 #自己定义 只要没有被占用就行

mode http #模式可写可不写 因为在defaults字段里面写了

use_backend backend_name #使用的那个backend 使用的后端

backend name

mode http #模式可写可不写 因为在defaults字段里面写了

server server_id ip:port

server server_id ip:port

换成listen 就更简单了  他需要之前两个字段写的 统一在下面写就ok了

listen name

bind port

mode http

server server_id ip:port

server server_id ip:port

以上就是haproxy 和ngixn 反向代理对比

再生产上 如果使用纯反向代理的话  通常使用listen

开始操作

我们去启动两台tomcat服务器

用haproxy 来实现两台后端tomcat  的负载均衡 反向代理

vim /etc/haproxy/haproxy.cfg

打开配置文件

在最底下添加以下内容

frontend tomcat
        bind :8080
        mode http
        use_backend tomcat-backend

backend tomcat-backend
        mode http
        server web1 10.2.3.11:8080
        server web2 10.2.3.12:8080

HAProxy反向代理负载均衡安装使用介绍_反向代理_29

解释:

frontend tomcat

#frontend(前端)起个名字 随意   起个tomcat

        bind :8080

##这个端口号随意写 不冲突就行

        mode http

## 默认http 写不写都行

        use_backend tomcat-backend

##使用那个backend(后端) 起个名字名字随意但是后面要引用这个名字 tomcat-backend

backend tomcat-backend

##这个名称是引用 前面的tomcat-backend

        mode http

## 因为默认就是http 写不写无所谓

        server web1 10.2.3.11:8080

        server web2 10.2.3.12:8080

## server id号  id是字母或者数字都可以 起个名字就是 后面跟上ip和端口号

前端加后端就类似 nginx 里的虚拟主机加upstream 反向代理负载均衡

保存退出

systemctl restart haproxy

重启haproxy

浏览器访问 haproxy ip+8080端口

10.2.3.1:8080

我们再使用listen 的方式来写

vim /etc/haproxy/haproxy.cfg

添加进去

listen tomcat-1
        mode http
        bind :8081
        server web1 10.2.3.11:8080
        server web2 10.2.3.12:8080

因为是继续写的  8080端口号被使用了 所以用的8081

server 后面的id号web1 只要是不在一个字段内 就不会冲突 和上面web1 没啥关系

systemctl restart haproxy

重启

然后浏览器访问 haproxy主机 10.2.3.1:8081

HAProxy反向代理负载均衡安装使用介绍_nginx_30

所以红框和黄框表达的意思是一样的

在生产上 我们习惯用 listen 的方式

因为简单!

我们现在只讲listen

listen 里面能使用的参数 frontend 和backend 都可以用

就比如 server 后面还可以加很多东西 权重 监测机制 加监测时长

bind 也是可以改的 可以起多个 8082 起多个 8800-8810 如下图

HAProxy反向代理负载均衡安装使用介绍_nginx_31

systemctl restart haproxy

重启

ss -tnl | grep 80

HAProxy反向代理负载均衡安装使用介绍_tomcat_32

这样的话 就可以整个给我们起来

而且bind支持写ip地址

HAProxy反向代理负载均衡安装使用介绍_tomcat_33

HAProxy反向代理负载均衡安装使用介绍_tomcat_34

就可以看到 这些端口号 就默认只启动到了127.0.0.1上了

生产上不会写这么多 没啥用 所以我们只写一个就完事

最主要的还是server字段

他的默认机制是加权轮巡  和nginx 一样

加权重  默认权重都为1

weogjt ?

HAProxy反向代理负载均衡安装使用介绍_tomcat_35

还可以加

inter 2000ms

这个是健康状态检查 每2000毫秒(2秒)监测一次

是haproxy服务来检测这个服务器 这个端口

HAProxy反向代理负载均衡安装使用介绍_tomcat_36

还可以加fall他的默认数是fall 3 默认失败监测次数 就是后端监测 这个数的次数不可用 就真的代表他不可用了 写3 就是 监测三次  inter 2000s 每隔 2秒监测一次  就需要6秒

HAProxy反向代理负载均衡安装使用介绍_反向代理_37

还可以加 rise 后端服务器检测是从不健康状态 检测是不是可用   健康状态检测 会一直检测这个机器 直到把这个机器给删掉 监测不健康的机器 重新检测恢复正常了 会把机器从新加到 配置里面去  

rise 默认2  两次监测 为正常后 就代表正常了 就添加进来

HAProxy反向代理负载均衡安装使用介绍_nginx_38

除了这个以外 nginx 里面有backup  这里面也可以加

但是和nginx 的backup 不一样 这里是  永久关闭的意思 就是 注释的意思

HAProxy反向代理负载均衡安装使用介绍_反向代理_39

除了这些以外

还有个状态页

haproxy状态页

vim /etc/haproxy/haproxy.cfg
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
option httplog
capture request header X-Forwarded-For len 15
capture request header User-Agent len 512
#stats refresh 2
stats admin if TRUE
stats uri /haproxy-status
stats auth haadmin:123456

HAProxy反向代理负载均衡安装使用介绍_反向代理_40

listen stats ##名字必须叫stats

mode http ##默认使用http

bind 0.0.0.0:9999 ##端口号 随便写

stats enable ##开启状态页监测

log global ##使用全局日志

option httplog ##选项是httplog

capture request header X-Forwarded-For len 15 ##定义长度的

capture request header User-Agent len 512 ##定义长度的

#stats refresh 2

stats admin if TRUE ##当admin 为真

stats uri /haproxy-status

##指定一个uri 我就访问 上面bind 定义的端口号 uri地址/haproxy-status  就可以访问状态页

stats auth haadmin:123456 ##验证 用户名叫haadmin 密码123456

我们去看看  保存退出

systemctl restart haproxy

输入haproxy ip+端口 uri 是上面定义的stats uri /haproxy-status

10.2.3.1:9999/haproxy-status

输入账号 密码 也是配置文件定义的stats auth haadmin:123456  

HAProxy反向代理负载均衡安装使用介绍_nginx_41

HAProxy反向代理负载均衡安装使用介绍_反向代理_42

到这个页面

里面有 tocamt-backend- 和tomcat-1 还有tomcat  还有stats

这四个要不然listen 要不然frontend  要不然backend

现在是没有颜色变化的 我们加个值 在server 后面加上check

check

HAProxy反向代理负载均衡安装使用介绍_反向代理_43

systemctl restart haprosy

HAProxy反向代理负载均衡安装使用介绍_nginx_44

现在这个颜色是绿色的  如果服务给他停了 他就会变色

然后就变成 黄色 然后再变成红色

正常是绿色

HAProxy反向代理负载均衡安装使用介绍_tomcat_45

HAProxy反向代理负载均衡安装使用介绍_反向代理_46

Frontend  前端   Queue 当前请求  Session rate 队列  

Sessions 限制 里面有个  Limit 最大连接数 10万  

Bytes 字节

Denied 拒绝多少

Errors 错误多少

Warnings 警告多少

server  

HAProxy反向代理负载均衡安装使用介绍_反向代理_47

前面不管看后面

Server 里面 有个 Status  和LastChk

当前都为 UP 说明状态可用的 no check  不检查

LastChk  最后一次检测  就是0毫秒以前 L4OK 默认值是L4级别的 监测OK

就是tcp 的检测为ok

再就是后面  Server  

wght 权重

Act 确认值为 Y 代表正常的

Bck Chk

所有监测在里面都可以看到

然后可以通过这里关闭

HAProxy反向代理负载均衡安装使用介绍_nginx_48

给他down 掉

但是一般情况不在这做修改

HAProxy反向代理负载均衡安装使用介绍_反向代理_49

当前haproxy 的pid是谁 4210

然后一共启动了 nbproc =2  一共两个进程 nbthread =1  每个进程启动了一个线程

刷新 就会看到更改

可以看到的

HAProxy反向代理负载均衡安装使用介绍_tomcat_50

一个root 用户启动的  root 用户启动的是主进程

还有两个haproxy用户启动的 子进程

一共两个进程 每个进程启动了一个线程 nbthread =1

HAProxy反向代理负载均衡安装使用介绍_反向代理_51

其他的就是定义的一堆大小值了

这个就是我们所写的首页文件

HAProxy反向代理负载均衡安装使用介绍_tomcat_52

给我们提供了 web1 web_1 web2 stats 这个是 给我们记录了 所有的frontend listen 字段的名称

显示的是 backend 和listen 的后端服务器 都会显示出来

他只显示名称

比如我们把 名称  web1 web_1 这类的名字 改为 他的ip  我们再看一下

HAProxy反向代理负载均衡安装使用介绍_tomcat_53

HAProxy反向代理负载均衡安装使用介绍_nginx_54

然后他们的名字就改变了