搭建DHProxy服务器
集群与存储
- HAProxy简介
HAProxy简介
• 它是免费、快速并且可靠的一种解决方案
• 适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理
• 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理
- 衡量负责均衡器性能的因素
• Session rate 会话率
– 每秒钟产生的会话数
• Session concurrency 并发会话数
– 服务器处理会话的时间越长,并发会话数越多
• Data rate 数据速率
– 以MB/s或Mbps衡量
– 大的对象导致并发会话数增加
– 高会话数、高数据速率要求更多的内存
- HAProxy工作模式
• mode http
– 客户端请求被深度分析后再发往服务器
• mode tcp
– 客户端与服务器之间建立会话,不检查第七层信息
• mode health
– 仅做健康状态检查,已经不建议使用
HTTP协议解析
HTTP解析
• 当HAProxy运行在HTTP模式下,HTTP请求(Request)和响应(Response)均被完全分析和索引,这样便于创建恰当的匹配规则
• 理解HTTP请求和响应,对于更好的创建匹配规则至关重要
- HTTP事务模型
• HTTP协议是事务驱动的
• 每个请求(Request)仅能对应一个响应(Response)
• 常见模型:
– HTTP close
– Keep-alive
– Pipelining
- HTTP事务模型(续1)
• HTTP close
– 客户端向服务器建立一个TCP连接
– 客户端发送请求给服务器
– 服务器响应客户端请求后即断开连接
– 如果客户端到服务器的请求不只一个,那么就要不断的去建立连接
– TCP三次握手消耗相对较大的系统资源,同时延迟较大
- HTTP事务模型(续2)
• Keep-alive
– 一次连接可以传输多个请求
– 客户端需要知道传输内容的长度,以避免无限期的等待传输结束
– 降低两个HTTP事务间的延迟
– 需要相对较少的服务器资源
- HTTP事务模型(续3)
• Pipelining
– 仍然使用Keep-alive
– 在发送后续请求前,不用等前面的请求已经得到回应
– 适用于有大量图片的页面
– 降低了多次请求之间的网络延迟
- HTTP头部信息
• 请求头部信息
– 方法:GET
– URI:/serv/login.php?lang=en&profile=2
– 版本:HTTP/1.1
Line Number Contents
1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
2 Host: www.mydomain.com
3 User-agent: my small browser
4 Accept: image/jpeg, image/gif
5 Accept: image/png
HTTP头部信息(续1)
• 请求头部信息
– 请求头包含许多有关的客户端环境和请求正文的有用信息,如浏览器所使用的语言、请求正文的长度等
Line Number Contents
1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
2 Host: www.mydomain.com
3 User-agent: my small browser
4 Accept: image/jpeg, image/gif
5 Accept: image/png
• 响应头部信息
– 版本:HTTP/1.1
– 状态码:200
– 原因:OK
Line Number Contents
1 HTTP/1.1. 200 OK
2 Content-length: 350
3 Content-Type: text/html
HAProxy配置实例
- HAProxy安装
• RHEL7光盘中内置了HAProxy,只要配置好yum,可以直接安装
[root@svr1 ~]#yum install haproxy
- 配置文件说明
• HAProxy配置参数来源
– 命令行:总是具有最高优先级
– global部分:全局设置进程级别参数
– 代理声明部分
来自于default、listen、frontend和backend
- 配置文件说明(续1)
• 配置文件可由如下部分构成:
– default
为后续的其他部分设置缺省参数
缺省参数可以被后续部分重置
– frontend
描述接收客户端侦听套接字(socket)集
– backend
描述转发链接的服务器集
– listen
把frontend和backend结合到一起的完整声明
- 配置文件说明(续2)
• /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2 ###[err warning info debug]
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid ###haproxy的pid存放路径
maxconn 4000 ###最大连接数,默认4000
user haproxy
group haproxy
daemon ###创建1个进程进入deamon模式运行
- 配置文件说明(续3)
• /etc/haproxy/haproxy.cfg
defaults
mode hEp ###默认的模式mode { tcp|hEp|health } log global ###采用
- 全局定义的日志
opIon dontlognull ###不记录健康检查的日志信息
opIon hEpclose ###每次请求完毕后主动关闭hEp通道
opIon hEplog ###日志类别hEp日志格式
opIon forwardfor ###后端服务器可以从HEp Header中获得客户端ip
opIon redispatch ###serverid服务器挂掉后强制定向到其他健康服务器
Imeout connect 10000 #如果backend没有指定,默认为10s
Imeout client 300000 ###客户端连接超时
Imeout server 300000 ###服务器连接超时
maxconn 60000 ###最大连接数
retries 3 ###3次连接失败就认为服务不可用,也可以通过后面设置
- 配置注意:
将这个以下部分全部删除,
60 #---------------------------------------------------------------------
61 # main frontend which proxys to the backends
62 #---------------------------------------------------------------------
- 配置文件说明(续4)
• /etc/haproxy/haproxy.cfg
listen stats
bind 0.0.0.0:1080 #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
#stats hide-version #隐藏统计页面上HAProxy的版本信息
- 配置文件说明(续5)
• /etc/haproxy/haproxy.cfg
listen web_backend 0.0.0.0:80 #后端服务器,监听在80端口cookie SERVERID rewrite
balance roundrobin
server web1 192.168.4.2:80 cookie a1i1 check inter 2000 rise 2 fall 5 #检查这台服务器,两千毫秒检查一次,检查超过5次是不成功的
server web2 192.168.4.3:80 cookie a1i2 check inter 2000 rise 2 fall 5
- 管理服务
• 启动服务
[root@svr1 ~]# systemctl start haproxy
• 停止服务
[root@svr1 ~]# systemctl stop haproxy
• 查看状态
[root@svr1 ~]# systemctl status haproxy
- 访问验证:
[root@vh01 ~]# firefox 192.168.4.4:1080/stats
日志
//用户名和密码都是admin
//stop掉vh02和vh03任何一台,刷新页面,查看页面颜色的变化、
配置调度器本身也是日志服务器,可以接受网络发来的日志
1)配置服务
[root@vh04 ~]# netstat -nutlp |grep :514
[root@vh04 ~]# vim /etc/rsyslog.conf
//去掉日志
15 $ModLoad imudp
16 $UDPServerRun 514
19 $ModLoad imtcp
20 $InputTCPServerRun 514
2)重起日志
[root@vh04 ~]# systemctl restart rsyslog
[root@vh04 ~]# netstat -nutlp | grep :514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 7897/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 7897/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 7897/rsyslogd
udp6 0 0 :::514 :::* 7897/rsyslogd
3)客户端访问:
[root@room9pc01 ~]# firefox 192.168.4.4:1080/stats
[root@room9pc01 ~]# firefox 192.168.4.4 //这两个访问哪个都可以
4)查看haproxy的日志:
[root@vh04 ~]# tail -f /var/log/messages
客户端访问负载均衡,将有日志产生
高可用Web拓扑
• 使用Keepalived为主从设备提供VIP地址漂移

配置高可用web集群
vh01,vh02,vh03三台虚拟机
1.在两台web服务器vh02,vh03上安装keepalived
[root@vh02 ~]# yum -y install keepalived
2.配置
[root@vh02 ~]# vim /etc/keepalived/keepalived.conf
将全局的 vrrp_strict 这一行注释掉
global_defs {
notification_email { 管理员email地址
root@localhost
}
notification_email_from admin@tedu.cn 谁发
smtp_server 127.0.0.1 用哪台服务器发
smtp_connect_timeout 30
router_id LVS_DEVEL 设置路由的ID号
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { VI_1 随便起的名,实例名
state MASTER 主服务器
interface eth0 用哪一个网卡
virtual_router_id 51 产生虚拟路由器的ID号,ID号要求一样
priority 150 优先级
advert_int 1 通告间隔,每隔一秒发一次
authentication { 认证,用密码做认证的,是共享密码,要求一样
auth_type PASS
auth_pass 1111 主辅服务器密码必须一致
}
virtual_ipaddress { 虚拟地址,两个节点必须一样
192.168.4.200
}
}
剩下的全部删除
3.启动服务查看ip
[root@vh02 ~]# systemctl start keepalived
[root@vh02 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:ec:bb:c1 brd ff:ff:ff:ff:ff:ff
inet 192.168.4.2/24 brd 192.168.4.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.4.200/32 scope global eth0
valid_lft forever preferred_lft forever
vh03上配置
1.在vh02上的配组织文件拷贝到vh03上
[root@vh02~]#scp /etc/keepalived/keepalived.conf 192.168.4.3:/etc/keepalived/keepalived.conf
2.vh03上修复改配置文件
[root@vh03 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from admin@tedu.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP 从属的用BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.200
}
}
3.起服务
[root@vh03 ~]# systemctl start keepalived
4.清空防火墙规则
[root@vh02 ~]# iptables -F
[root@room9pc01 ~]# ping 192.168.4.200
[root@room9pc01 ~]# firefox 192.168.4.200/bbs
在vh02上关闭keepalived,再查看eth0的ip,再用客户端访问
[root@vh02 ~]# systemctl stop keepalived
[root@vh03 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:df:6b:7c brd ff:ff:ff:ff:ff:ff
inet 192.168.4.3/24 brd 192.168.4.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.4.200/32 scope global eth0
valid_lft forever preferred_lft forever
[root@room9pc01 ~]# firefox 192.168.4.200/bbs
依然可以访问然后再把vh02重启服务,ip a s eth0 可以看到ip,在vh03上就没有了
LVS+keepalived,实现高可用,负载均衡的web集群
一,web服务器配置
1.修改内核参数
2.在lo网卡上配置vip
二,调度器配置
1.在两台调度器上安装ipvsadm,但是不要配置规则,因为规则将由keepalived配置文件进行配置
2.打开调度器的路由转发功能,7版本默认是打开的
3.配置vip,注意:vip是通过keepalived配置的,不要手工配置
三,清理
1.将web服务器的keepalived卸载
[root@vh02 ~]# yum remove -y keepalived
2.将原来调度器的haproxy卸载
[root@vh04 ~]# yum remove -y haproxy
3.将原来的调度器的lvs规则清除
[root@vh04 ~]# ipvsadm -D -t 192.168.4.100:80
4.清除原来调度器的eth0:0
[root@vh04 ~]# rm -rf /etc/sysconfig/network-scripts/ifcfg-eth0:0
[root@vh04 ~]# systemctl restart network
四,配置调度器
1.安装额外的调度器 vh05.tedu.cn 192.168.4.5/24
2.在vh04,vh05两台调度器上安装ipvsadm,keepalived
[root@vh04 ~]# yum -y install ipvsadm keepalived
[root@vh05 ~]# yum -y install ipvsadm keepalived
3.配置主调度器
[root@vh04 ~]# vim /etc/keepalived/keepalived.conf
5 root@localhost //设置报警收件人邮箱
7 notification_email_from admin@tedu.cn //设置发件人
8 smtp_server 127.0.0.1 //定义邮件服务器
10 router_id vh04 //设置路由ID号
12 # vrrp_strict
21 priority 150
28 192.168.4.100 与vip调度器地址一样
给lvs配置规则
32 virtual_server 192.168.4.100 80 {
33 delay_loop 6
34 lb_algo rr
35 lb_kind DR
36 persistence_timeout 50 50秒内客户端访问我,让他访问相同的调度器
39 real_server 192.168.4.2 80 {
41 TCP_CHECK {
删除41行下面的8行
42 connect_timeout 3 超时时间3秒
43 nb_get_retry 3 失败一共检查三次
44 delay_before_retry 3
45 }
46 }
复制上面的8行,剩下的全部删除
47 real_server 192.168.4.3 80 {
48 weight 1
49 TCP_CHECK {
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
55 }
4.启动服务
[root@vh04 ~]# systemctl restart keepalived
[root@vh04 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.100:80 rr persistent 50
-> 192.168.4.2:80 Route 1 0 0
-> 192.168.4.3:80 Route 1 0 0
5.查看ip
[root@vh04 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:e3:2e:83 brd ff:ff:ff:ff:ff:ff
inet 192.168.4.4/24 brd 192.168.4.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.4.100/32 scope global eth0
valid_lft forever preferred_lft forever
6.验证
[root@room9pc01 ~]# firefox 192.168.4.100访问的是vh03上的内容
Vh05配置keepalived服务器
1.备份调度器,同上,注意state为BACKUP
[root@vh04~]#scp /etc/keepalived/keepalived.conf 192.168.4.5:/etc/keepalived/keepalived.conf
state BACKUP
priority 100
2.启动服务
[root@vh05 ~]# systemctl restart keepalived
[root@vh05 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.100:80 rr persistent 50
-> 192.168.4.2:80 Route 1 0 0
-> 192.168.4.3:80 Route 1 0 0
3.停止vh04.查看ip是否跳转
[root@vh04 ~]# systemctl stop keepalived
[root@vh04 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:e3:2e:83 brd ff:ff:ff:ff:ff:ff
inet 192.168.4.4/24 brd 192.168.4.255 scope global eth0
valid_lft forever preferred_lft forever
[root@vh05 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:1d:71:cf brd ff:ff:ff:ff:ff:ff
inet 192.168.4.5/24 brd 192.168.4.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.4.100/32 scope global eth0
valid_lft forever preferred_lft forever
5.查看邮件在vh06或vh07down掉httpd
[root@vh06 ~]# systemctl stop httpd
[root@vh04 ~]# mail 可以查到邮件
[root@vh05 ~]# mail
keepalived双主配置
在keepalived高可用配置文件里,再添加主从,跟原来的主从配置刚好相反,
keepalived高可用 + mysql主从 配置,实现当一台数据库挂掉时,可以自动转换到另一台数据库上工作,需要三台虚拟机,mysql1做主,给用户授权,允许任何主机登录,mysql2做从,
l mysql1的主配置文件
server_id=51
log-bin=db51
binlog-format="mixed"
主库授权:mysql> grant replication slave on *.* to yaya@"%" identified by "123456";
mysql> show master status;
配置虚拟vip lo:0 192.168.4.100
l mysql2的主配置文件
server_id=52
- 配置从库:
mysql> change master to
-> master_host="192.168.4.51",
-> master_user="yaya",
-> master_password="123456",
-> master_log_file="db51.000001",
-> master_log_pos=154;
- 启动slave进程
mysql> start slave;
配置虚拟vip lo:0 192.168.4.100
1.keepalived高可用
配置虚拟vip eth0:0 192.168.4.100
2.修改配置文件
real_server mysql1的ip
real_server mysql2的ip
3.启动服务
- 访问mysql1
[root@vh04 ~]# mysql -h192.168.4.1 -uadmin -p123456
- 当mysql1当掉时,访问
[root@vh04 ~]# mysql -h192.168.4.2 -uadmin -p123456
- 依然可以访问,因为设的固定ip是一样的,都是通过虚拟ip 4.100访问的
集群调度软件对比
Nginx分析
• 优点
– 工作在7层,可以针对http做分流策略
– 正则表达式比HAProxy强大
– 安装、配置、测试简单,通过日志可以解决多数问题
– 并发量可以达到几万次
– Nginx还可以作为Web服务器使用
• 缺点
– 仅支持http、https、mail协议,应用面小
– 监控检查仅通过端口,无法使用url检查
LVS分析
• 优点
– 负载能力强,工作在4层,对内存、CPU消耗低
– 配置性低,没有太多可配置性,减少人为错误
– 应用面广,几乎可以为所有应用提供负载均衡
• 缺点
– 不支持正则表达式,不能实现动静分离
– 如果网站架构庞大,LVS-DR配置比较繁琐
HAProxy分析
• 优点
– 支持session、cookie功能
– 可以通过url进行健康检查
– 效率、负载均衡速度,高于Nginx,低于LVS
– HAProxy支持TCP,可以对MySQL进行负载均衡
– 调度算法丰富
• 缺点
– 正则弱于Nginx
– 日志依赖于syslogd,不支持apache日志
搭建DHProxy服务器的更多相关文章
- ubuntu 14.04LTS 环境下搭建tftp服务器
花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...
- centos6环境下搭建irc服务器
问题描述 有时候逛技术社区,经常会发现有个叫IRC的东西存在,想搭建下看看到底是个什么东西 说明: 操作系统环境为CentOS6.5_64 安装irc服务器 通过yum进行安装,命令如下: yum i ...
- 在Ubuntu Server 14.04中搭建FTP服务器(VMWare)
自己搭建ftp服务器,方便主机与虚拟机中的Ubuntu传输文件. 选用的ftp软件为vsftpd. 1.命令行: sudo apt-get install vsftpd 2.安装完配置: vsftpd ...
- 如何搭建SVN服务器,详细安装步骤。
SVN服务器端安装 下载: VisualSVN是一款图形化svn服务器.官网 http://www.visualsvn.com/server/ 下载地址: http://www.visualsvn.c ...
- CentOS 7搭建SVN服务器
安装步骤如下: 1.yum install subversion 2.查看安装版本 svnserve --version 3.创建SVN版本库目录 mkdir -p /var/svn/svnrepos ...
- 超简单——自己搭建ftp服务器
自己搭建ftp服务器 之所以没选择serv-u,一是因为收费,虽说网上有破解版,但是使用过程中发现破解版很不稳定,经常异常死掉,随后改选用免费的filezilla. 1软件获取 从百度搜索 FileZ ...
- CentOS利用postfix搭建邮件服务器
之前我用nodemailer通过163邮箱来发送邮件,不过没过几天就一直ETIMEDOUT,不知道什么原因,想着还是自己搭一个来发邮件可能靠谱点(flag?) 安装postfix CentOS 7 自 ...
- Linux 搭建FTP服务器
介绍 本章主要介绍在Linux中搭建FTP服务器的过程,需要掌握的要点是配置文件的合理配置. 知识点 在linux中使用的FTP是vsftp FTP可以有三种登入方式分别是: 匿名登录方式:不需要用户 ...
- RedHat6.2搭建FTP服务器
我的环境: A:Red Hat Enterprise 6.2 IP:192.168.16.12 此机作测试端 B:Red Hat Enterprise 6.2 IP:192.168.16.13 此机做 ...
随机推荐
- MySQL使用前查看状态
1.检查MySQL服务器是否启动:ps -ef | grep mysqld 如果MySql已经启动,以上命令将输出mysql进程列表,如下所示:mysql下一行 如果mysql未启动,你可以使用以下命 ...
- 基于osg的python三维程序开发(三)------几何形体及纹理
def createScene(): geode = osg.Geode() pointsGeom = osg.Geometry() vertices = osg.Vec3Array() vertic ...
- 用shell脚本实现定时备份数据库
1.备份数据库的方法 可以使用命令查看 ls /usr/local/mysql/bin 这个mysqldump就是系统内置的用来备份数据库的工具. 2.实现方法 ①先随便进入一个位置创建一个目录 ② ...
- video 在iphone手机的ios系统和微信端无法自动播放
描述:video 在iphone手机,微信端无法自动播放,ios系统下不能自动播放视频.而且如果没有autoplay属性,在微信端点击一次,弹不出视频,要一直触着两秒后才可以打开视频.如果点击播放的话 ...
- (转)协议森林02 小喇叭开始广播 (以太网与WiFi协议)
协议森林02 小喇叭开始广播 (以太网与WiFi协议) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们在邮差与邮局中说到,以 ...
- 一文带你解读:卷积神经网络自动判读胸部CT图像的机器学习原理
本文介绍了利用机器学习实现胸部CT扫描图像自动判读的任务,这对我来说是一个有趣的课题,因为它是我博士论文研究的重点.这篇文章的主要参考资料是我最近的预印本 “Machine-Learning-Base ...
- 等价类计数:Burnside引理 & Polya定理
提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...
- macOS开发:调整NSImage尺寸大小
原文链接 extension NSImage { func resize(_ to: CGSize, isPixels: Bool = false) -> NSImage { var toSiz ...
- Redhat 线下赛 WEB WP
赛制 给每个参赛队伍所有题目的gamebox,参赛队伍在开赛时就能获取到所有题目的源码,可以选择先防御后攻击或先攻击后防御,只要拿到gamebox上的flag,机器人就会自动帮你攻击场上所有未防御选手 ...
- JSP(二)----指令,注释,内置对象
## JSP 1.指令 * 作用:用于配置JSP页面,导入资源文件 * 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 %> <%@ page con ...