设为首页 收藏本站
查看: 5283|回复: 1

[经验分享] 负载均衡应用之haproxy+LVS+keepalived For Exchange2010

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-25 13:01:31 | 显示全部楼层 |阅读模式
                      一、实验说明
此为实际生产环境实施案例,针对公司的邮件系统从Exhcange2007升级到2010,实现高可用和负载均衡,本例主要针对haproxy和LVS进行说明,Exchange只做步骤说明,具体配置不在此讨论。拓扑结构如下:

780987_1411547554ZiRW.png
现有生产环境是一个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     #对外服务IP
Exchange1:       172.16.10.101
Exhcange2:       172.16.10.102
Edge1:            10.10.10.101
Edge2:            10.10.10.102
LVS1:             10.10.10.10
LVS2:             10.10.10.11
VIP:              10.10.10.100       #LVS对外服务虚IP
二、Exchange部署步骤(只列出简单步骤)
1.安装额外Exchange2010-2和Edge2,并添加证书,同时对Exchange2010进行边缘订阅,通过内部和Edge分别测试邮件服务是否正常
2.将原来Exchange2007的数据库迁移到Exchange2010上,并添加证书,并测试邮件手法是否正常
3.删除Exchange2007上面的所有存储组,卸载Exchange 2007 及Edge07
4.在原有的服务器上面安装Exchange2010-1和Edge1
5.将Edge1和Edge2同时订阅到两台Exchange服务器上。
6.建立Exchange的DAG高可用组,实现mailbox高可用
7.建立Exchange的CAS array,域名为cas.abc.com
8.将ExchangeRPC和AddressBook改成静态端口,分别为TCP:55000和TCP:55001
9.在两台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



三、部署haproxy
1.安装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
#---------------------------------------------------------------------
frontend  CAS-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 check  inter 5000 rise 2 fall 5    #定义后端真实服务器,启动健康检查,设定健康检查时间间隔为5000ms
                                    #恢复正常需要检查2次,检查5次才确认失败
    server      cas02 172.16.10.102:443 check  inter 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 check  inter 5000 rise 2 fall 5
    server      cas02 172.16.10.102:135 check  inter 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 check  inter 5000 rise 2 fall 5
    server      cas02 172.16.10.102:55000 check  inter 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查看状态页面
四、部署keepalived
1.安装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.pub  root@LVS2LVS2:ssh-keygen -t rsa
cd ~/.ssh/
ssh-copy-id -i id_rsa.pub  root@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
TCP  10.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换成其他应用服务器也是一样的。
                   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25388-1-1.html 上篇帖子: 修复 Exchange2010 对应 的IIS虚拟目录 下篇帖子: 通过将LDAP 语法升级到 OPATH进行Exchange自定义地址列表升级
累计签到:233 天
连续签到:1 天
发表于 2019-3-7 11:08:56 | 显示全部楼层
版主,按你上面Haproxy配置,启动配置文件失败

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表