w2ewe 发表于 2014-10-20 10:54:49

haproxy实现高可用站点架构

   在负载均衡的调度器中,有个lvs,nginx,haproxy,lvs的搭建相比后两者较困难些,而nginx的主要用处是轻量级的web服务器,haproxy是一种很好的高可用软件,它可以基于4层和7层做高可用,分别表现在TCP上和http上,下面我们就通过一幅图来了解haproxy的工作原理。
haproxy的工作模式:调度时发生的协议层次
   http:仅用于调度http协议的服务器,7层
          会对应用层数据做深入分析,因此支持7层过滤、处理、转换等机制

   tcp:非http协议的服务器调度,包含https,4层
          通过在客户端和后端的backend server之间建立一个全双工的连接

后端提供两个web服务器的节点,并且提供主页以示区分,两个节点的网段调为自定义的vnet2
node1:

1
web1 test page




node2:

1
this is web2




然后,给这两台主机规划IP地址

1
2
3
4
node1:211.70.160.15
node2:211.70.160.16
ifconfigeth0211.70.160.15/24up
ifconfigeth0211.70.160.16/24up




此时,我们就可以将两个节点上的web服务启动了

1
servicehttpd start




安装haproxy软件

1
# yum install -y haproxy




将haproxy的日志定向到rsyslog中,在rsyslog的配置文件中更改如下

1
2
3
4
5
6
7
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
local2.*               /var/log/haproxy.log   #将haproxy的日志发往local2设施上




然后,重启我们的rsyslog服务

1
# service rsyslog restart




查看514端口是否在监听

更改haproxy的配置文件,并且备份一份原有配置

1
# cp haproxy.cfg haproxy.cfg.bak




删除defaults段落后的所有内容,添加如下

1
2
3
4
5
6
7
8
9
10
11
12
frontendmain*:80
    default_backendwebs
backend webs
    balanceroundrobin
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check

或者修改为listen形式
listenmain*:80
    balanceroundrobin
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check




启动haproxy服务

1
# service haproxy start




此时,haproxy的主机上已经监听了80端口,可以使用ss查看

在我们的浏览器中进行验证

刷新一次后,根据轮询效果,会返回后端的node1和node2的网站主页
使用基于source方法的haproxy调度
配置文件更改,只改了调度算法

1
2
3
4
5
6
frontendmain*:80
    default_backend webs
backend webs
    balancesource
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check




重启服务

1
# service haproxy restart




再回到浏览器中查看

无论刷新多少次,出来的网页都是node2节点上提供的web2的主网页
使用基于cookie算法的haproxy
更改配置:

1
2
3
4
5
6
7
8
frontendmain
    bind :80
    default_backend webs
backend webs
    balancesource
    cookie webinsert nocache   #inset插入到http首部,nocache是中间的缓存服务器不允许缓存数据
    server s1 211.70.160.15
    server s2 211.70.160.16




重启haproxy服务

1
# service haproxy restart




然后在浏览器中访问我们的地址,并且查看http首部信息

实现cookie绑定的效果

将我们的调度算法改为roundrobin轮询,更改配置文件为

1
2
3
4
5
6
7
8
9
10
frontendmain
    bind :80
    default_backend webs
backend webs
    balanceroundrobin
    cookie webinsert nocache
    server s1 211.70.160.15 cookie s1   #指定server的名称,实现cookie绑定
    server s2 211.70.160.16 cookie s2

# service haproxy reload




再为后端的两个web节点提供网页
node1上:

1
2
cat/var/www/html/test.html
hello node1 test




node2上:

1
2
cat/var/www/html/test.html
hello node2 test




访问我们的资源

无论我们怎么刷新网页,返回的都是node1上提供的网页,因为这里的cookie实现了绑定的效果
启动haproxy的状态页:stats

修改haproxy的配置文件,使之支持stats状态页显示

1
2
3
4
5
6
7
8
9
10
frontendmain
    maxconn 4000
    bind :80
    default_backend webs
backend webs
    balanceroundrobin
    server s1 211.70.160.15 check port 80
    server s2 211.70.160.16 check port 80
    server b1 127.0.0.1:8080 backup
    stats enable   #开启stats




此时,将后端的node1的web服务上线

1
service httpd start




重新加载配置文件,在浏览器中访问状态也地址

1
# service haproxy reload






图示,node1的web服务在线,node2在线,但是web服务没有启动
active:后端服务器中的activeserver
backup:后端服务器中的backup server

将backup主机加入健康监测,更改下面选项

1
server b1 127.0.0.1:8080 backup check port 8080




重新加载配置文件

1
# service haproxy reload





对stats网页做网页访问控制

1
2
3
4
5
statshide-version   #隐藏版本号
statsscope    .      #当前的作用范围
stats   uri   /haproxyadmin?stats   #自定义stats页面的uri
stats   realmhaproxy statistics   #用于下面选项,提示用户输入用户名密码的显示
stats   auth   statsadmin:password   #基于用户名和密码的认证




修改配置文件,使其具有认证功能,在backend中添加

1
2
3
4
5
6
    stats enable
    stats hide-version
    stats uri /hap?stats
    stats scope .
    stats realm INPUT your name & password
    stats auth admin:admin




重新加载配置,在浏览器中验证

1
# service haproxy reload





启用stats的管理接口

1
stats admin if TRUE   #添加此项




重新加载配置

1
# service haproxy reload




再次访问

也可以将stats单独放置在一个段落中,不在backend中了,虽然,这样安全了,但是,看不到后端服务器的状态了

页: [1]
查看完整版本: haproxy实现高可用站点架构