您的位置:首页 > 运维架构 > 网站架构

实现基于Haproxy+Keepalived负载均衡高可用架构

2017-11-11 21:02 399 查看
今天小编讲的依然是负载均衡高可用,全是干货:

先看一下我们要实现的架构图:



一、环境准备:
centos系统服务器4台、两台用于做haproxy主从架构,两台作为后端server,服务器配置好
yum源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信

机器名称
IP配置
服务角色
备注
haproxy-server-master
VIP:172.17.252.102
DIP:172.17.252.233
负载均衡器
主服务器
开启路由功能
配置keepalived
haproxy-server-backup
RIP:172.17.252.115
VIP:172.17.252.102
后端服务器
从服务器
开启路由功能
配置keepalived
Rs01
RIP:172.17.252.116
VIP:172.17.252.102
后端服务器
网关指向DIP(桥接)
Rs02
RIP:172.17.252.117
VIP:172.17.252.102
后端服务器
网关指向DIP(桥接)
二、安装步骤:
iptables -F && setenforing 清空防火墙策略,关闭selinux
拿两台服务器都使用yum方式安装haproxy、keepalived服务
后端服务器配置好基于LNMP架构的web服务(这部分不会就看前俩个博客)
三、修改配置文件:
修改配置文件:vim/etc/keepalived/keepalived.conf(前俩个实验改过,这次改动的不多)



然后就可以把这个文件拷进backup里面,需要修改的地方是(也可以直接在backup里面修改该文件):



master和backup都要启动keepalived:systemctl
restart keepalived
安装haproxy:yum
install haproxy
修改配置文件:vim 
/etc/haproxy/haproxy.cfg(基本上都已经默认配置好了)

我们添加了一个listen页面
  listen stats
  mode http

  bind 0.0.0.0:1080

  stats enable

  stats uri /haproxyadmin

  stats auth admin:admin

  stats admin if TRUE
由于我们配置了一个页面,现在可以启动服务systemctl
restart haproxy
查看一下:

查看监听端口:netstat
-tunlp |grep 1080

页面访问:



现在开始定义服务:
master位置:vim 
/etc/haproxy/haproxy.cfg



重启服务:systemctl
restart haproxy

出错的话就查看日志:tail
-200 /var/log/haproxy.log


现在修改backup的配置文件:
先在master里把配置文件拷过去:scp /etc/haproxy/haproxy.cfg 
root@172.17.252.115:/etc/haproxy/
启动服务:systemctl
start haproxy

启动keepalived
systemctl
start  keepalived
realserver配置:
配置VIP到本地回环网卡lo上,并只广播自己:ifconfig
lo:0
172.17.252.102 broadcast172.17.252.102
netmask 255.255.255.255 up

配置本地回环网卡路由:route
add -host
172.17.251.102 lo:0
设置1只回答目标IP地址是来访网络接口本地地址的ARP查询请求echo
"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

设置2对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址(忽略IPMAC地址正确也可以响应):
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
关闭arp应答,设置:
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
创建文件健康检查页面会用到:echo 2 >/data/web/index.html
开启webphp-fpmmysql服务
 实现了负载均衡:fori in $(seq 10);do curlhttp://172.17.252.102/index.html;done



下面是它的几个扩展应用:
1. Haproxy访问控制ACL应用
在master里修改配置文件:vim/etc/haproxy/haproxy.cfg



重启:systemctl restart haproxy
.master主机的/data/web/index.html文件存在
通过日志查看:tail -f /var/log/haproxy.log
已经有一个挂掉了



2.通过ACL指定可访问的用户
在master里修改配置文件:vim/etc/haproxy/haproxy.cfg



重启:systemctl restart haproxy
通过日志查看:tail -f /var/log/haproxy.log 403错误)
 好了其他机器不能访问了(注意了,1.要把backup的keepalived服务停掉,2.master主机的/data/web/index.html文件存在)





然后就可以把配置恢复了,会发现又可以访问了



3.根据用户访问内容实现动静分离

在master里修改配置文件:vim/etc/haproxy/haproxy.cfg





启动服务:systemctl restart haproxy
网页访问:



4.根据用户浏览器进行访问控制 
阻拦IE浏览器的访问



在IE上访问发现并访问不了



5.设置日志服务:

1. 在配置文件里定义了日志级别,vim/etc/rsyslog.conf,然后
2级别的日志都会存在/var/log/haproxy.log





重启服务:systemctlrestart rsyslog
2.在haproxy的配置文件进行配置:vim
/etc/haproxy/haproxy.log



6.会话保持俩种方法:

一、源地址hash(用户IP识别)
Haroxy 将用户IP经过hash计算后指定到固定的真实服务器上(类似于nginx 的IP hash 指令)。
缺点:当后端一台服务器挂了以后会造成部分session丢失
backend SOURCE_srv
mode   http
balance  source
server app-node1  10.31.1.179:80  check port 80 inter 3000  rise 3 fall 3
server app-node2  10.31.1.191:80  check port 80 inter 3000  rise 3 fall 3
server app-node3   10.31.0.35:80  check port 80 inter 3000  rise 3 fall 3 

 
二、cookie 识别
haproxy将WEB服务端返回给客户端的cookie中插入haproxy中特定的字符串(或添加前缀)在后端的服
务器COOKIE ID。
backendCOOKIE_srv
mode    http
cookieSERVERID insert indirect nocache
serverapp-node1 10.31.1.179:80 check  port 80cookie  a inter 3000  rise 3  fall 3
serverapp-node2 10.31.1.191:80 check  port 80cookie  b inter 3000  rise 3  fall 3
serverapp-node3 10.31.0.251:80  check  port 80 cookie  c inter 3000 rise 3  fall 3
在LB1上配置好HAProxy后,LB1将接受用户的所有请求。如果一个用户请求不包含任何cookie,那这
个请求将被HAProxy转发到一台可用的WEB服务器。可能是webA,webB,webC。然后HAProxy将把
处理这个请求的WEB服务器的cookie值插入到请求响应中。如SERVERID=A。当这个客户端再次访问
并在HTTP请求头中带有SERVERID=A,HAProxy将会把它的请求直接转发给webA处理。在请求到达
webA之前,cookie将被移除,webA将不会看到这个cookie。如果webA不可用,对应的请求将被转
发到其他可用的WEB服务器,相应的cookie值也将被重新设置。
现在我们介绍cookie识别的方法:





当我们把一台realserver挂了,



cookie值就会变:



OK,小编介绍完了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: