HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
Nginx 的使用场景如下:
HTTP 服务器
Nginx 作为 Web 服务器能独立提供 Http 服务。另外,我们常常通过 Nginx 作为静态资源服务器来访问服务器上的静态资源,比如对于最新热门的前后端分离架构,前端打好包后直接放到某个地址,在 Nginx 配置后可以通过 Nginx 来访问主机上的前端页面。
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。这样的好处是,将不暴露内部的服务地址,只统一使用一个公共出口,通过 URI 匹配转发到不同的内部服务处理请求。
负载均衡
负载均衡也是 Nginx 的一个高频使用场景,对于下游存在的多个相同服务,可以将请求采用某种策略(随机、轮询、权重)发到相应的服务处理。这样由于多个相同服务的存在,可以实现高可用功能,在一个服务不可用时,Nginx 会自动发现并将其剔出服务集群,将请求转发给正常的服务进行处理。
网络文件系统(NFS)是文件系统之上的一个网络抽象,来允许远程客户端以与本地文件系统类似的方式,来通过网络进行访问。虽然 NFS 不是第一个此类系统,但是它已经发展并演变成 UNIX系统中最强大最广泛使用的网络文件系统。NFS 允许在多个用户之间共享公共文件系统,并提供数据集中的优势,来最小化所需的存储空间。
本实验使用4台服务器,一台服务器安装Haproxy实现调度,另外两台服务器搭建nginx提供web服务,最后一台服务器部署nfs共享存储。
主机 | 系统 | IP地址 | 功能 |
Haproxy | centos7 | 192.168.160.201 | 调度 |
nginx | centos7 | 192.168.160.202 | 提供web服务 |
nginx | centos7 | 192.168.160.203 | 提供web服务 |
nfs(共享存储) | centos7 | 192.168.160.204 | 共享存储 |
1.两台nginx节点安装并启动。
2.yum安装所需库文件,新建管理nginx用户
1.yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2.useradd -M -s /sbin/nologin nginx
3.解压文件并进行基本配置
1. cd /opt
2. tar zxvf nginx-1.8.1.tar.gz
3. cd nginx-1.8.1
4. ./configure \
--prefix=/usr/local/nginx \ --user=nginx \ --group=nginx
4.编译安装
1.make && make install
5.创建测试主页,创建软件接进行使用。
1.cd /usr/local/nginx/html/
2. echo "this is xf web" > test.html
3.ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
6.启动nginx,使用netstat -antp | grep 80查看是否开启
7.第二台nginx节点是一样的配置,自行配置安装。
使用浏览器访问nginx是否开启成功。
1.下载包
这里提供所需安装包链接,找到自己需要的安装包,我这里使用的是haproxy-1.7.8.tar.gz
Index of /repo/pkgs/haproxy (fedoraproject.org)
2.将haproxy-1.7.8.tar.gz拷贝到/opt目录下,并解压缩:
1.yum -y install pcre-devel bzip2-devel gcc gcc-c++ make
2. tar zxvf haproxy-1.7.8.tar.gz
3.进入目录 ,编译成可执行文件。
将源代码解压之后,需要运行make来将HAProxy编译成为可执行文件。如果是在Linux2.6系统上面进行编译的话,需要设置TARGET=linux26以开启epoll支持,这也是为什么网上许多博客里面都是这么写的。对于其他的UNIX系统来说,直接采用TARGET=generic方式,本文进行安装的系统为CentOS7 ,内核3.10版本。
1. cd haproxy-1.7.8
2. make TARGET=linux26
3. make install
4.创建配置文件目录,修改配置文件。
1.mkdir /etc/haproxy
2.vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 #日志
maxconn 1000 # 最大连接数
daemon
defaults
log global # 采用全局定义的日志
mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog # 日志类型为http日志
option dontlognull # 不记录健康检查的日志信息
retries 3 # 3次连接失败就认为服务不可用,也可以在下面设置
timeout connect 5000 # 连接超时时间
timeout client 50000 # 客户端连接超时时间
timeout server 50000 # 服务器连接超时时间
listen admin_stats
bind 0.0.0.0:1080 # 监听端口
mode http
option httplog
maxconn 10
stats refresh 30s # 统计页面刷新时间
stats uri /stats # 统计页面url
stats realm XingCloud\ Haproxy # 统计页面密码框的提示文本
stats auth admin:admin # 统计页面的验证信息
stats auth Frank:Frank
stats hide-version
stats admin if TRUE
listen webcluster
bind 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin # 负载均衡模式轮询
server inst1 192.168.160.202:80 check inter 2000 fall 3
server inst2 192.168.160.203:80 check inter 2000 fall 3
5.创建haproxy自启动脚本,添加到service管理,开启自启
1. cp /opt/haproxy-1.7.8/examples/haproxy.init /etc/init.d/haproxy
2. chmod +x /etc/init.d/haproxy
3. chkconfig --add /etc/init.d/haproxy
4. ln -s /usr/local/sbin/haproxy /usr/sbin
6.启动haproxy,使用80端口进行监听。
1. service haproxy start
2.netstat -anpt | grep haproxy #查看端口是否打开
7.使用浏览器访问haproxy查看是否轮询成功,刷新页面显示轮询成功。
关闭防火墙:systemctl stop firewalld.servive
关闭selinux: setenforce 0
1.服务器安装NFS软件
1.yum -y install nfs-utils
2.编辑文件参数
1. vi /etc/exports
/backup 192.168.160.202(rw,sync,no_root_squash) /backup 192.168.160.203(rw,sync,no_root_squash)
3.新建共享目录并修改权限
1.mkdir /backip
2.chmod -R 777 /backup/
4.启动服务
1. systemctl status rpcbind.service
2.systemctl status nfs.service.service
5.加载配置文件 exportfs -r 查看 exportfs -v
6.在nginx服务器上装nfs
1. yum -y install nfs-utils
2.mkdir /nfs
3.cd /nfs
4.showmount -e 192.168.160.206
5.mount -t nfs 192.168.160.206:/backup /nfs
6.df -h
挂载成功