八章——使用Haproxy搭建web群集(应用——linux防护与群集)

三期总目录链接

目录

 一、Haproxy介绍

 1、HTTP请求

 2、调度算法

二、使用Haproxy+Nginx搭建一套Web群集案例

1、安装Nginx1服务器

2、安装Nginx2服务器

3、Haproxy代理服务器

4、测试

复习题


 一、Haproxy介绍

  Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能

   Haproxy是目前比较流行的一种群集调度工具,Haproxy 与LVS、Nginx的比较:LVS性能最好,但搭建相对复杂;Nginx的upstream模块支持群集功能,但对群集节点健康检查功能不强,性能没有Haproxy好

 1、HTTP请求

  通过URL访问网站使用的协议是HTTP协议,此类请求一般称为HTTP请求。HTTP请求的方式分为GET方式和POST方式。当使用浏览器访问某一个URL,会根据请求URL返回状态码
正常状态码2××、3××
异常会返回4××、5××

 2、调度算法

LVS、Haproxy、Nginx常用的算法
RR(Round Robin)轮询调度 是最常用最简单的一种算法,进行轮回访问,以实现负载均衡
LC(Least Connections)最小连接数 根据后端的节点连接数大小动态分配前端请求,哪个服务器连接数小就分配给那个服务器
SH(Source Hashing)基于来源访问调度 此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做群集调度;顾名思义就是第一次访问哪个服务器第二次访问的还是访问的那个服务器除非重启负载均衡调度器

二、使用Haproxy+Nginx搭建一套Web群集案例

Haproxy:192.168.1.1
Nginx1:192.168.1.4
Nginx2:192.168.1.4

1、安装Nginx1服务器

 进行脚本安装:直接复制粘贴注意要有nginx安装包

echo '
#!/bin/bash
read -p "请输入首页内容:" index
yum -y install pcre-devel zlib-devel
tar zxvf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0
useradd -M -s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
echo "<h1>$index</h1>"  >/usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
netstat -anput |grep nginx &> /dev/null

if [ $? -eq 0 ] ;then
	echo "nginx服务成功启动"
else
	echo "nginx服务未成功启动,请检查安装过程"
fi

' > nginx.sh

赋予权限 :

chmod +x nginx.sh
./nginx.sh    #直接启动

2、安装Nginx2服务器

除web内容不一样其他步骤与nginx1一样

安装完后的默认信息
默认安装目录

/usr/local/nginx

默认日志 /usr/local/nginx/logs
默认监听 80
默认web目录 /usr/local/nginx/html

3、Haproxy代理服务器

3.1编译安装haproxy

[root@C7--01 ~]# yum -y install pxre-devel bzip2-devel
[root@C7--01 ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src
[root@C7--01 ~]# cd /usr/src/haproxy-1.5.19/
[root@C7--01 haproxy-1.5.19]# make TARGET=linux2     #64位系统
.......
....

[root@C7--01 haproxy-1.5.19]# make install
......
...

排查错误:
1、检查gcc、gcc-c++是否安装rpm -qa gcc、rpm -qa gcc-c++(已安装)
2、检查glibc-devel、cpp、binutils、mpfr、jemalloc是否安装(未安装)
解决: 发现gcc的相关依赖包未安装,安装完后,可执行make编译

3.2Haproxy的模板配置文件介绍

 Haproxy配置文件分三个部分:global为全局配置;defaults为默认配置;listen为应用组件配置;配置文件测试说明如下

[root@C7--01 haproxy-1.5.19]# cat /usr/src/haproxy-1.5.19/examples/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1

global                                  #全局配置
	log 127.0.0.1	local0              #配置日志记录,local0为日志设备,默认存放在系统日志
	log 127.0.0.1	local1 notice       #notice为日志级别,通常有24个级别
	#log loghost	local0 info         #把info和notice日志分别存放,以便查看在/dev/log
	maxconn 4096                        #最大连接数
	chroot /usr/share/haproxy
	uid 99                              #用户UID
	gid 99                              #用户组gid
	daemon                              #后台运行
	#debug
	#quiet

defaults                               #默认配置参数,一般会被应用组件继承
	log	global                         #定义日志为global配置中的日志定义
	mode	http                       #模式为http
	option	httplog                    #采用http日志格式记录日志
	option	dontlognull
	retries	3                          #检查节点的失败次数,连续达到3次认为节点不可用
	redispatch                         #当服务器负载很高时,自动结束当前队列处理比较久的连接
	maxconn	2000                       #最大连接数
	contimeout	5000                   #连接超时时间
	clitimeout	50000                  #客户端超时时间
	srvtimeout	50000                  #服务器超时时间
  # option httpclose                   #关闭客户端请求

............
.....

listen	appli4-backup 0.0.0.0:10004    #定义一个appli4-backup的应用
	option	httpchk /index.html        #检查服务器的index.html文件
	option	persist                    #强制将请求发送到已经down掉的服务器
	balance	roundrobin                 #负载均衡调度算*询 roundrobin
	server	inst1 192.168.114.56:80 check inter 2000 fall 3         #定义在线节点
	server	inst2 192.168.114.56:81 check inter 2000 fall 3 backup  #定义备份节点
.......
...

3.3配置Haproxy配置文件

[root@C7--01 ~]# mkdir /etc/haproxy
[root@C7--01 ~]# vim /etc/haproxy/haproxy.cfg

global
        log /dev/log local0 info
        log /dev/log local1 notice
        maxconn 4096
        uid 99
        gid 99
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000



listen  webcluster 0.0.0.0:80
        option  httpchk GET /index.html
        balance roundrobin
        server inst1 192.168.1.4:80 check inter 2000 fall 3
        server inst2 192.168.1.5:80 check inter 2000 fall 3

保存退出

 创建自启脚本

[root@C7--01 ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy    
[root@C7--01 ~]# chmod +x /etc/init.d/haproxy    #赋予执行权限
[root@C7--01 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy  #软连接
[root@C7--01 ~]# chkconfig --add /etc/init.d/haproxy    #添加到系统服务器
[root@C7--01 ~]# systemctl start haproxy    #启动haproxy
[root@C7--01 ~]# systemctl status haproxy   #查看是否启动
● haproxy.service - SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments.
   Loaded: loaded (/etc/rc.d/init.d/haproxy; bad; vendor preset: disabled)
   Active: active (running) since 一 2021-09-06 20:00:46 CST; 8s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 40635 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS)

4、测试

4.1测试高性能:访问 192.168.1.1 

八章——使用Haproxy搭建web群集(应用——linux防护与群集)

 访问成功说明群集的负载均衡调度已经生效,已满足高可用需求

 4.2测试高可用

 把nginx1服务器关闭nginx服务在次访问

[root@C7--04 ~]# /usr/local/nginx/sbin/nginx -s stop

八章——使用Haproxy搭建web群集(应用——linux防护与群集)

当一台节点故障,不会影响群集的使用,满足群集的高可用性或者关闭nginx服务器2

 八章——使用Haproxy搭建web群集(应用——linux防护与群集)

复习题

1. 对比集群调度工具Haproxy、LVS和Nginx的区别

区别:LVS性能最好,但搭建相对复杂;Nginx的upstream模块支持群集功能,但对群集节点健康检查功能不强,性能没有Haproxy好

2. HTTP请求的方式分为哪两种?其区别是什么?

方式:GET、POST方式

 区别:GET把参数包含在URL中,POST通过request body传递参数

GET:产生一个TCP数据包;POST:产生两个TCP数据包

3. 简述负载均衡常用的几种调度算法

RR  轮询调度 是最常用最简单的一种算法,进行轮回访问,以实现负载均衡
LC  最小连接数 根据后端的节点连接数大小动态分配前端请求,哪个服务器连接数小就分配给那个服务器
SH  基于来源访问调度 此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做群集调度;顾名思义就是第一次访问哪个服务器第二次访问的还是访问的那个服务器除非重启负载均衡调度器

4. Linux系统中编译安装haproxy-1.5.19.tar.gz,依次需要执行什么命令?

先执行 TARGET=linux26 命令 在执行 make install  命令

5. Haproxy配置文件通常分为哪几个部分?其作用分别是什么?

全局配置:global       作用:用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关
默认配置:defaults    作用:配置默认参数,一般会被应用组件继承
应用组件配置:listen 作用:一般配置应用模块参数

6. Haproxy配置文件中的log 127.0.0.1 local0配置项的作用是什么?

log 127.0.0.1 local0配置项的作用:定义全局日志, 配置在本地, 通过local0 输出, 默认是info级别,可配置两条

7. Haproxy配置文件中server  inst1 192.168.114.56:80 check inter 2000 fall 3的作用是什么?

作用:服务器节点的地址、名称、端口 、检查间隔时间、健康检查次数3次认为失败

8. Haproxy配置文件中的 retries 3配置项的作用是什么?

配置文件中的 retries 3 的作用:检查节点的失败次数,连续达到3次认为节点不可用

9. Haproxy配置文件中通过什么配置项指定负载均衡调度算法使用轮询算法?

使用  balance  roundrobin 配置项指定

10. 写出三个以上Haproxy优化常用到的参数,分别代表什么含义?

maxconn 最大的连接数    推荐使用10240
daemon 守护进程模式    可以使用非守护默认
nbproc 负载均衡的并发进程数        建议与当前服务器cpu核相等或2倍
retries 重试次数   对集群节点的检查,节点多并发量大,设置为2到3次
上一篇:实验:基于tomcat的高可用性+nginx(haproxy)反向代理+session服务器memcached(redis)


下一篇:响应式编程笔记三:一个简单的HTTP服务器