负载均衡应用之haproxy+LVS+keepalived For Exchange2010
一、实验说明此为实际生产环境实施案例,针对公司的邮件系统从Exhcange2007升级到2010,实现高可用和负载均衡,本例主要针对haproxy和LVS进行说明,Exchange只做步骤说明,具体配置不在此讨论。拓扑结构如下:
现有生产环境是一个Exchange2007+一个Edge07,域为:abc.com
1.Edge服务器处于DMZ区域,直接与互联网通信,采用LVS的方式,Edge上不存在持续session的情况,仅仅实现邮件传递转发功能
2.内部的Exhcange服务器采用haproxy实现高可用和负载平衡,haproxy的一个优势就是可以跨网段实现负载平衡,相比于LVS较容易实现,对于分布式部署exchange的情况下很实用IP地址规划如下:Haproxy: 172.16.10.2 #物理管理IP 172.16.10.100 #对外服务IPExchange1: 172.16.10.101Exhcange2: 172.16.10.102Edge1: 10.10.10.101Edge2: 10.10.10.102LVS1: 10.10.10.10LVS2: 10.10.10.11VIP: 10.10.10.100 #LVS对外服务虚IP二、Exchange部署步骤(只列出简单步骤)1.安装额外Exchange2010-2和Edge2,并添加证书,同时对Exchange2010进行边缘订阅,通过内部和Edge分别测试邮件服务是否正常2.将原来Exchange2007的数据库迁移到Exchange2010上,并添加证书,并测试邮件手法是否正常3.删除Exchange2007上面的所有存储组,卸载Exchange 2007 及Edge074.在原有的服务器上面安装Exchange2010-1和Edge15.将Edge1和Edge2同时订阅到两台Exchange服务器上。6.建立Exchange的DAG高可用组,实现mailbox高可用7.建立Exchange的CAS array,域名为cas.abc.com8.将ExchangeRPC和AddressBook改成静态端口,分别为TCP:55000和TCP:550019.在两台Edge上添加loopback网卡,配置loopback为VIP地址,10.10.10.100,掩码为255.255.255.0,不写网关 更改Edge网卡的默认模式,Windows2008R2下的网卡默认为stronghost模式,需要改成weakhost模式,这样就可以不对arp请求进行响应:?
1
2
3
4
netsh interface ipv4 set interface "物理网卡名称" weakhostrecive=enable
netsh interface ipv4 set interface "物理网卡名称" weakhostsend=enable
netsh interface ipv4 set interface "loopback网卡名" weakhostrecive=enable
netsh interface ipv4 set interface "loopback网卡名" weakhostsend=enable
三、部署haproxy1.安装haproxy?
1
yum install haproxy
2.编辑haproxy配置文件,/etc/haproxy/haproxy.cfg:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
--------------------------------------------------------------------global
log 127.0.0.1 local2 #定义日志级别和监听地址,需要在/etc/sysconfig/syslog 中定义local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid #指定haproxy进程pid文件,该值为系统默认
maxconn 40000 #设定每个haproxy进程所接受的最大并发连接数,所有后端服务器并发连接不能超过该值
user haproxy #定义运行haproxy的用户和组
group haproxy
daemon #指定haproxy在后台中运行,和 -D命令结果一样
# turn on stats unix socket
stats socket /var/lib/haproxy/stats #定义socket文件位置,系统默认值,建议不修改
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http #为所有实例提供默认模式配置,即http,后面的每个可以利可以自己在单独定义模式
log global #指定实例默认的日志文件,此例使用global短定义的log配置
option httplog #启动http的请求日志,以及会话状态和时间
option forwardfor except 127.0.0.0/8 #记录发起请求的客户端IP地址,默认请求的ip都是代理服务器
option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
option redispatch #当一个服务器故障,重新分派到其他服务器上
option contstats #允许连续的流量统计更新
retries 3 #设置一个服务器如果连不上默认的重试次数,可以在每个实例中自定义
timeout http-request 10s #等待一个http请求完成的最大时间,主要保证服务器能够提供正常访问的连接会话
#防止一个完成连接的请求后就不再进行会话,形成占用连接的情形
timeout queue 30s #设置当一个请求被放入队列中,等待队列的最大时间,
timeout connect 4000 #成功请求一个服务器的最大时间,
timeout client 30s #客户端非活动状态的超时时长,也可以放到前端单独定义
timeout server 1m #服务端设置最大非活动时间,也可以放到后端单独定义
timeout http-keep-alive 10s #长连接的超时时间,等待一个新的http请求的最大时间
#---------------------------------------------------------------------
# Exchange_OWA frontend which proxys to the backend
#---------------------------------------------------------------------
frontendCAS-OWA #定义ExchangeOWA前端实例
bind 172.16.10.100:443 #绑定监听地址和端口
mode tcp #haproxy中https的请求都是用tcp模式,而不是http
maxconn 20000 #访问前端haproxy服务器的最大并发连接,次数量不能超过global中定义的maxconn
timeout client 86400000 #设定客户端超时时间,用于客户端始终可以连着OWA服务器
default_backend CAS #指定默认的后端
#---------------------------------------------------------------------
# Exchange_OWA backend for web access
#---------------------------------------------------------------------
backend CAS #定义之前OWA所指定的后端服务器
balance leastconn #采用最小连接算法,一般长连接应用此种算法,邮件服务属于长连接应用
mode tcp #指定模式为tcp,一定与前端模式保持一致
option abortonclose #丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求
timeout server 86400000 #是后端服务器的连接用于不超时,这样owa页面在白天办公的时间内就不会超时关闭
stick on src #先根据事先定义的调度算法进行调度,然后根据源IP地址开启粘连功能,
#来自同一个ip的客户端始终访问同一个后端服务器,有助于保持会话持续
stick-table type ip size 200k expire 30m #d设置粘连表,存储类型是ip地址,大小200k,此表在30分钟后过期,stack on 和stack-type同时使用
server cas01 172.16.10.101:443 checkinter 5000 rise 2 fall 5 #定义后端真实服务器,启动健康检查,设定健康检查时间间隔为5000ms
#恢复正常需要检查2次,检查5次才确认失败
server cas02 172.16.10.102:443 checkinter 5000 rise 2 fall 5
#---------------------------------------------------------------------
# Exchange_135 in CAS Server For Outlook
#---------------------------------------------------------------------
frontend CAS_135 #定义outlook启动使用的135端口
bind 172.16.10.100:135
mode tcp #指定模式为tcp
maxconn 20000 #访问前端haproxy服务器的最大并发连接
timeout client 1m #客户端超时为1分钟
default_backend EX_135 #定义后端真实服务器
#-------------------135_Backend------------------------------------
backend EX_135
balance leastconn #use lang connection method
mode tcp #与前端模式保持一直
option abortonclose
option redispatch
timeout server 1m
stick on src
stick-table type ip size 200k expire 30m #define a stick-table,200k,store the src ip,in the 240 miniutes
server cas01 172.16.10.101:135 checkinter 5000 rise 2 fall 5
server cas02 172.16.10.102:135 checkinter 5000 rise 2 fall 5
#---------------------------------------------------------------------
# Exchange_PRC in CAS Server For Outlook
#---------------------------------------------------------------------
frontend CAS_RPC #定义outlook使用的ExchangePRC端口
bind 172.16.10.100:55000
mode tcp
maxconn 20000
timeout client 86400000
default_backend PRC #use default backend
#-------------------PRC_Backend------------------------------------
backend PRC
balance leastconn #use lang connection method
mode tcp #mod same whith frontend
option abortonclose
option redispatch
timeout server 86400000
stick match src table EX_135 #调用之前EX_135上已经定义的地址粘连列表
server cas01 172.16.10.101:55000 checkinter 5000 rise 2 fall 5
server cas02 172.16.10.102:55000 checkinter 5000 rise 2 fall 5
#---------------------------------------------------------------------
# Exchange_addressbook in CAS Server For Outlook
#---------------------------------------------------------------------
frontend CAS_addressbook #定义outlook使用的通讯簿端口
bind 172.16.10.100:55001
mode tcp
maxconn 20000 #frontend max connection
timeout client 86400000
default_backend Addressbook #use default backend
#-------------------addressbook_Backend------------------------------------
backend Addressbook
balance leastconn #use lang connection method
mode tcp #mod same whith frontend
option abortonclose
option redispatch
timeout server 86400000
stick match src table EX_135 #调用之前EX_135上已经定义的地址粘连列表
server cas01 172.16.10.101:55001 check inter 5000 rise 2 fall 5
server cas02 172.16.10.102:55001 check inter 5000 rise 2 fall 5
#----------------------------------------------------------------------------
# HAproxy admin console
#----------------------------------------------------------------------------
listen STAT #定义listen项,主要用于haproxy的web页面状态监控和管理
bind :8090 #定义监听端口
stats enable #开启统计状态
stats auth admin:admin #设置web页面认证用户为admin,密码为:admin
stats hide-version #在web页面隐藏haproxy当前版本信息
stats uri /haadmin?stats #定义状态页面的uri
stats admin if TRUE #开启认证功能,如果认证成功则登录
3.设置haproxy的对外服务地址:
?
1
ifconfig eth0:0 172.16.10.100 netmask 255.255.255.0
将上面命令放到/etc/rc.local中,使下期启动时自动调用
4.重启Haproxy服务
?
1
2
service haproxy restart
chkconfig haproxy on
5.测试Haproxy
?
1
netstat -antl 查看是否有443 和55001等监听
输入网址http://172.16.10.2/haadmin?stats查看状态页面
四、部署keepalived1.安装LVS+Keepalived(由于我在安装系统的时候勾选了高可用组件,所以默认已经安装了lvs和keepalived)
在LVS1和LVS2上可以通过yum进行安装
2.在两个LVS节点的hosts文件中相互添加记录:
?
1
2
3
4
LVS1:
10.10.10.11
LVS2:
10.10.10.10 LVS1
3.配置SSH互信:LVS1: ssh-keygen -t rsa
?
1
2
3
4
cd ~/.ssh/
ssh-copy-id -i id_rsa.pubroot@LVS2LVS2:ssh-keygen -t rsa
cd ~/.ssh/
ssh-copy-id -i id_rsa.pubroot@LVS1测试SSHssh LVS2 "hostname"
4.配置keepalived /etc/keepalived/keepalived.conf
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
LVS1上修改如下配置:
vrrp_instance VI_1 {
state MASTER #设置当前服务器为Master
interface eth0
virtual_router_id 51 #设置Master的ID,一定要大于
priority 100
advert_int 1
auth_pass 1111
}
10.10.10.100 #设置提供服务的VIP
}
#------------------------------------------------
# Exchange Edge Server Load Balance
#------------------------------------------------
virtual_server 10.10.10.100 25 {
delay_loop 6
lb_algo wlc #定义调度算法为加权最小链接
lb_kind DR #定义DR模式
nat_mask 255.255.255.0 #指定VIP的子网掩码
persistence_timeout 50 #配置持久性链接为50
protocal TCP
real_server 10.10.10.10 25 { #定义realserver
weight 1 #权重为1
SMTP_CHECK { #启用针对smtp的健康检查
connect_timeout 3 #超时时间为3s,大于3s即为down
}
}
real_server 10.10.10.10 25 { #定义第二个realserver
weight 1
SMTP_CHECK {
connect_timeout 3
}
}
}
}
LVS2上只要将配置文件的 state 改成BACKUP,route_id改成50,只要比LVS1的小即可,其他不变
重启keepalived
?
1
2
service keepalived restart
chkconfig keepalived on
5.测试keepalived
?
1
2
3
4
5
6
7
ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP10.10.10.100:smtp rr persistent 50
-> 10.10.10.11:smtp Route 1 0 0
-> 10.10.10.10:smtp Route 1 0 0
五、总结相对来说比较简单,因此步骤没有特别详细,除了exchange外,其他一步一步来的话应该不会有问题,如果做实验的话,把exchange换成其他应用服务器也是一样的。
版主,按你上面Haproxy配置,启动配置文件失败
页:
[1]