Linux-Haproxy搭建Web群集

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3003

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
LVS在企业应用中抗负载能力强
  

  • 不支持正则处理,不能实现动静分离
  • 对于大型网格,LVS的实行设置复杂,维护本钱较高
  Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的署理的软件


  • 适用于负载大的Web站点
  • 运行在硬件上可支持数以万计的并发连接的连接哀求
  • 支持TCP(四层署理)和HTTP(七层署理)


  • 负载均衡常用调度算法

    • RR(Round Robin):轮询,依次将哀求分配给每个服务器
    • LC(Least Connections):最少连接,将哀求发送到当前连接数最少的服务器
    • WRR(Weighted Round Robin):加权轮询,根据服务器权重分配哀求
    • SH(Source Hashing):基于来源哈希,同一客户端哀求(Session会话记录)始终分配给同一台服务器
    • DH(Destination Hashing):基于目标哈希,根据哀求的目标地址进行哈希分布


案例环境


主机
操纵系统
IP地址
主要软件
Haproxy 服务器
CentOS 7.3 x86_64
192.168.1.60
haproxy-1.5.19.tar.gz
Nginx 服务器 1
CentOS 7.3 x86_64
192.168.1.61
nginx-1.12.0.tar.gz
Nginx 服务器 2
CentOS 7.3 x86_64
192.168.1.62
nginx-1.12.0.tar.gz
客户端
Windows 10
192.168.1.66
Edge 欣赏器
1:编译安装nginx服务器(两个nginx网站的步骤完全一样,只有测试页面不同)

  1. [root@localhost ~]# yum -y install pcre-devel zlib-devel gcc*
  2. [root@localhost ~]# useradd -M -s /sbin/nologin nginx
  3. [root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz
  4. [root@localhost ~]# cd nginx-1.12.0/
  5. [root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
  6. [root@localhost nginx-1.12.0]# make && make install
  7. [root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
  8. [root@localhost nginx-1.12.0]# cd /usr/local/nginx/html/
  9. [root@localhost html]# echo "test web01" > test.html
  10. [root@localhost ~]# systemctl stop firewalld
  11. [root@localhost ~]# nginx -t
  12. [root@localhost ~]# nginx        ##开启nginx进程
  13. [root@localhost ~]# netstat -anpt | grep nginx
复制代码
安装完后的默认信息


  • 默认安装目次:/usr/local/nginx
  • 默认日记:/usr/local/nginx/logs/
  • 默认监听:80
  • 默认 Web 目次: /usr/local/nginx/html
2:编译安装Haproxy

  1. [root@localhost ~]# systemctl stop firewalld
  2. [root@localhost ~]# setenforce 0
  3. [root@localhost ~]# yum -y install pcre-devel bzip2-devel gcc*
  4. [root@localhost ~]# tar zxvf haproxy-1.5.19.tar.gz
  5. [root@localhost ~]# cd haproxy-1.5.19/
  6. [root@localhost haproxy-1.5.19]# make TARGET=linux26
  7. [root@localhost haproxy-1.5.19]# make install
  8. [root@localhost haproxy-1.5.19]# cd examples/
  9. //linux22     for Linux 2.2
  10. linux24     for Linux 2.4 and above (default)
  11. linux24e    for Linux 2.4 with support for a working epoll (> 0.21)
  12. linux26     for Linux 2.6 and above
  13. solaris     for Solaris 8 or 10 (others untested)
  14. freebsd     for FreeBSD 5 to 8.0 (others untested)
  15. openbsd     for OpenBSD 3.1 to 4.6 (others untested)
  16. cygwin      for Cygwin
  17. generic     for any other OS.
  18. custom      to manually adjust every setting
复制代码
3:Haproxy服务器设置

  1. 建立haproxy配置文件
  2. [root@localhost haproxy-1.5.19]# cd examples/
  3. [root@localhost haproxy-1.5.19]# mkdir /etc/haproxy        //创建配置文件目录
  4. [root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/        //将haproxy.cfg文件复制到配置文件目录
复制代码
4:Haproxy设置介绍

  1. global
  2.         log 127.0.0.1   local0     \\配置日志记录,local0为日志设备,默认是系统日志
  3.         log 127.0.0.1   local1 notice      \\日志级别为notice注意
  4.         #log loghost    local0 info    \\消息
  5.         maxconn 4096       \\最大连接数
  6.         #chroot /usr/share/haproxy    \\参考目录,可以注释
  7.         uid 99           \\用户uid
  8.         gid 99           \\用户gid
  9.         daemon        \\以守护进程的方式运行
  10.         #debug      \\调试模式,输出启动信息到标准输出
  11.         #quiet     \\安静模式,启动时无输出
  12.         
  13. defaults
  14.         log     global           \\使用globle中定义的日志
  15.         mode    http           \\模式为http
  16.         option  httplog         \\采用http的格式记录日志
  17.         option  dontlognull     \\保证HAProxy不记录上级负载均衡发送过来的用于检测状态数据的心跳包
  18.         retries 3             \\检查节点连接失败的次数,超过3次认为节点不可用
  19.        # redispatch         \\当负载很高时,自动结束当前队列处理比较久的连接
  20.         maxconn 2000      \\最大连接数
  21.         contimeout      5000         \\haproxy和服务器连接超时时间ms
  22.         clitimeout      50000        \\客户端超时时间ms
  23.         srvtimeout      50000              \\服务器超时时间ms
  24.         
  25. listen  webcluster 0.0.0.0:80        \\定义群集和监听的端口号
  26.         option  httpchk GET /index.html    \\检查服务器的index.html文件,心跳检测URL设置
  27.         balance roundrobin      \\负载均衡的调度算法为轮询
  28.         server  inst1 192.168.1.61:80 check inter 2000 fall 3        \\定义在线节点
  29.         server  inst2 192.168.1.62:80 check inter 2000 fall 3         
  30. //    check inter 2000是检测心跳频率(每2000ms检测一次),fall 3是3次失败认为服务器不可用
复制代码
  在新版本中,超时的设置做了调整,具体如下
  contimeout 被 timeout connect代替:界说haproxy将客户端哀求转发至后端服务器所等待的超时时长
  clitimeout 被timeout client代替:客户端非运动状态的超时时长,是 app 连接 haproxy的时间  
  srvtimeout 被timeout server代替:客户端与服务器端建立连接后,等待服务器端的超时时长,是haproxy 连接后端web服务器的时间
  
参数
阐明
优化建议
maxconn
最大连接数
根据应用的实际使用情况进行调整,保举使用10240。同时,“defaults”中的最大连接数的值不能高出“global”段中的界说。
daemon
守护进程模式
Haproxy 可以使用非守护进程模式启动,但生产环境建议使用守护进程模式启动,以确保服务的稳定性和可靠性。
nbproc
负载均衡的并发进程数
建议与当前服务器 CPU 核数相等或为其2倍,以优化性能,充实利用多核CPU的能力。
retries
重试次数
主要用于对群集节点的检查。节点多且并发量大时,设置为2次或3次;节点不多时,可以设置5次或6次,以进步服务的可用性和容错性。
  1. haproxy共有八种调度算法
  2.     1) balance leastconn   最少连接数
  3.     2) balance roundrobin  轮询
  4.     3) balance source      根据客户端IP进行哈希的方式
  5.     4) static-rr    根据权重
  6.     5) uri    根据请求的URI
  7.     6) url_param    根据请求的URl参数
  8.     7) hdr(name)   根据HTTP请求头来锁定每一次HTTP请求
  9.     8) rdp-cookie(name)   根据cookie(name)来锁定并哈希每一次TCP请求
  10. //chroot /usr/share/haproxy  \\也就是改变程序执行时所参考的根目录位置,如果有此代码,需要创建此目录
  11. 关于日志级别
  12.     static Level DEBUG
  13.     DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。
  14.     static Level INFO
  15.     INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。
  16.     static Level WARN
  17.     WARN level表明会出现潜在错误的情形。
  18.     static Level ERROR
  19.     ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
  20.     static Level FATAL
  21.     FATAL level指出每个严重的错误事件将会导致应用程序的退出。
  22.     另外,还有两个可用的特别的日志记录级别:
  23.     static Level ALL
  24.     ALL Level是最低等级的,用于打开所有日志记录。
  25.     static Level OFF
  26.     OFF Level是最高等级的,用于关闭所有日志记录。
复制代码
创建服务脚本

  1. [root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy
  2. [root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
  3. [root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy
  4. [root@localhost ~]# chkconfig --add haproxy
  5. ([root@localhost examples]# cp haproxy.init /etc/init.d        //把haproxy的服务控制脚本放在/etc/init.d目录下
  6.   [root@localhost init.d]# mv haproxy.init haproxy        //重命名为haproxy
  7.   [root@localhost init.d]# chmod +x haproxy            //将haproxy控制脚本提权
  8.   [root@localhost init.d]# chkconfig --add haproxy        //将haproxy脚本设置执行权
  9.   [root@localhost init.d]# chkconfig haproxy on        //将haproxy脚本设置为自启动)
复制代码
5:测试web群集

  1. http://192.168.1.60/test.html
  2. //刷新页面进行测试
  3. //或使用脚本测试
  4. [root@localhost ~]# for i in $(seq 10); do curl http://192.168.1.60/test.html  ;done
  5. //测试高可用
  6. 现在将192.168.1.62的Nginx服务停用,在客户端使用浏览器打开http://192.168.1.60/test.html从中可以看出,当一台节点故障,不会影响群集的使用,这样就满足了群集的高可用性
复制代码
6:Haproxy的日记



  • haproxy在默认情况不会记录日记,除了在haproxy.conf中的global段指定日记的输出外,还必要设置系统日记的设置文件
方法一:

  1. [root@localhost haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg
  2. global
  3. #       log 127.0.0.1   local0
  4. #       log 127.0.0.1   local1 notice
  5.         ...
  6.         log /dev/log local0 info
  7.         log /dev/log local0 notice
  8. [root@localhost haproxy-1.4.24]# touch /etc/rsyslog.d/haproxy.conf
  9. [root@localhost haproxy-1.4.24]# vi /etc/rsyslog.d/haproxy.conf
  10. [root@localhost haproxy-1.4.24]# service rsyslog restart
  11. [root@localhost ~]#/etc/init.d/haproxy restart
  12. [root@localhost ~]# cat /var/log/haproxy/haproxy-info.log
复制代码
方法二:

  1. (1)编辑/etc/haproxy/haproxy.conf
  2. [root@localhost ~]# vi /etc/haproxy/haproxy.cfg
  3. global
  4. log 127.0.0.1 local3     
  5. #local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别
  6. (2)编写haproxy日志文件
  7. [root@localhost ~]# vim  /etc/rsyslog.d/haproxy.conf
  8. $ModLoad imudp        //采集日志的协议UDP
  9. $UDPServerRun 514        //指定日志采集使用的端口号
  10. local3.*     /var/log/haproxy.log        //指定日志存放位置
  11. (3)配置rsyslog的主配置文件,开启远程日志(可以不配)
  12. [root@localhost ~]# vim /etc/sysconfig/rsyslog
  13. SYSLOGD_OPTIONS=”-c 2 -r -m 0″
  14. #-c 2 使用兼容模式,默认是 -c 5
  15. #-r 开启远程日志
  16. #-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能
  17. (4)重启haproxy和rsyslog服务
  18. [root@localhost ~]# systemctl restart rsyslog
  19. [root@localhost ~]# systemctl restart haproxy
  20. (5)访问网站后查看日志
  21. [root@localhost ~]# cat /var/log/haproxy.log
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表