什么是负载均衡:
• 负载均衡(Load Balance,简称LB)是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
• 阿里云SLB介绍
为什么使用负载均衡:
• Web服务器的动态水平扩展
• 对用户无感知
• 增加业务并发访问及处理能力
• 解决单服务器瓶颈问题 单机故障
• 节约公网IP地址
• 降低IT支出成本
• 隐藏内部服务器IP
• 提高内部服务器安全性
• 配置简单
• 固定格式的配置文件
• 功能丰富
• 支持四层和七层,支持动态下线主机
• 性能较强
• 并发数万甚至数十万
常见有哪些负载均衡:
• 软件负载:
• 四层:
• LVS(Linux Virtual Server)
• HAProxy(High Availability Proxy)
• Nginx(1.9)
• ……
• 七层:
• HAProxy
• Nginx
• ……
• 硬件负载:
• F5
• Netscaler
• ……
典型应用场景:
• 应用场景:
• 四层:Redis、Mysql、RabbitMQ、Memcache等
• 七层:Nginx、Tomcat、Apache、PHP 、图片、动静分离、API等
HAProxy介绍
• HAProxy: 是法国开发者Willy Tarreau开发的一个开源软件,是一款具备高并发、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。
• LB Cluster:
四层:lvs, nginx(stream模式且nginx1.9.0或更新版本),haproxy(mode tcp)
七层:http: nginx(http), haproxy(mode http), httpd...
• 官网:
http://www.haproxy.org
https://www.haproxy.com
• 文档:
https://cbonte.github.io/haproxy-dconv/
HAProxy功能
• HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性高并发环境
• 可以针对HTTP请求添加cookie,进行路由后端服务器
• 可平衡负载至后端服务器,并支持持久连接
• 支持基于cookie进行调度
• 支持所有主服务器故障切换至备用服务器
• 支持专用端口实现监控服务
• 支持不影响现有连接情况下停止接受新连接请求
• 可以在双向添加,修改或删除HTTP报文首部
• 支持基于pattern实现连接请求的访问控制
• 通过特定的URI为授权用户提供详细的状态信息
• 历史版本更新功能:1.4 1.5 1.6 1.7 1.8 1.9 2.0-dev
• 1.8:多线程,HTTP/2缓存……
• 1.7:服务器动态配置,多类型证书……
• 1.6:DNS解析支持,HTTP连接多路复用……
• 1.5:开始支持SSL,IPV6,keepalived……
HAProxy安装
• Centos通过yum方式安装:
• yum install haproxy
• Ubuntu 安装:
• apt-get install haproxy
编译安装HAProxy
• yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemddevel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
• 编译安装:
• tar xvf haproxy-1.8.16.tar.gz && cd haproxy-1.8.16
• make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy
• make install PREFIX=/usr/local/haproxy
• cp haproxy /usr/sbin/
• 创建启动脚本:
• cat /usr/lib/systemd/system/haproxy.service
• [Unit]
• Description=HAProxy Load Balancer
• After=syslog.target network.target
• [Service]
• ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
• ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
• ExecReload=/bin/kill -USR2 $MAINPID
• [Install]
• WantedBy=multi-user.target
• 创建目录和用户:
• mkdir /etc/haproxy
• useradd haproxy -s /sbin/nologin
• mkdir /var/lib/haproxy
• chown haproxy.haproxy /var/lib/haproxy/ -R
• systemctl restart haproxy
• cat /etc/haproxy/haproxy.cfg
• ……
• haproxy.cfg文件中定义了chroot、pidfile、user、group等参数,如果系统没有相应的资源会导致haproxy无法启动,具体参考日志文件/var/log/messages
• 启动HAProxy:
• systemctl enable haproxy
• systemctl restart haproxy