由于本人一直在做netty通信方面的工作,对于近期一直比较流行的websocket技术也比较关注。 netty4对websocket协议也提供了编码解码。大大解决了websocket服务器的开发难度。 简单介绍一下websocket : websocket是比http协议更加轻量级的协议,没有过多的冗余。 此协议是在浏览器端与服务器端建立tcp长连接,能保持数据的实时交互。传统的浏览器采用http方式,只能通过ajax轮询方式来与服务器通信,这样数据就达不到实时的要求。 具体请读者google websocket方面的知识
由于使用了tcp长连接的方式,在高用户量以及复杂的业务压力下,单台机器容易产生内存不够的现象。所以这第一张我来解决LVS(DR)+keepalived做tcp转发负载。
本文使用的是UDP方式,TCP修改配置文件即可。 本片文章例子经测试也可对tomcat做负载。 本章尚未加入netty,websocket的实现,在下一章可做出
1环境介绍
(1) 2台lvs主备负载均衡
LVS1: 192.168.145.136
LVS2: 192.168.145.137
(2) 群集节点(RIP tomcat等应用服务器)
RealServer1: 192.168.145.128
RealServer2: 192.168.145.135
(3)VIP 虚拟IP
192.168.145.189
2 在LVS1与LVS2中,安装ipvsadm
yum install ipvsadm
3在LVS1与LVS2中安装keepalived
yum install keepalived
4在LVS1与LVS2服务器上添加虚拟IP
ip addr add 192.168.145.189/24 dev eth0
ip addr add 192.168.145.189/24 dev eth0
5在LVS1与LVS2中关闭iptables。也可根据keepalived的端口放行相应的端口
service iptables stop
6 关闭 selinux
vi /etc/selinux/config
SELINUX=disabled
7配置keepalive文件(Master :lvs1)
vim /etc/keepalived/keepalived.conf
global_defs{
notification_email {
}
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_01
}
vrrp_instanceVI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.189/24
}
}
实际参数可根据实际情况进行修改
8配置Backup:LVS2 配置文件
vim /etc/keepalived/keepalived.conf
global_defs{
notification_email {
}
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_02
}
vrrp_instanceVI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.189/24
}
}
Master 与Backup的配置文件区别在于。State 参数 priority 参数 router_id参数。 详细请可参考百度解释
9 开启LVS1 与LVS2 中的keepalived
service keepalived start
10 配置visual server
vim /etc/keepalived/keepalived.conf
virtual_server192.168.145.189 3478 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 10
protocol UDP
real_server 192.168.145.128 3478 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.145.135 3478 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
将上面的配置copy到LVS1和LVS2中两台设备里
最终配置如下图:
LVS1:
Lvs2:
测试程序:
在本地写一个UDP发送程序。发送IP为192.168.145.189. 发送端口为: 3478
在RealServer1 和 Realserver2 中分别运行
yum install tcpdump
tcpdump udp port 3478
看两台realserver 是否能同时接收到数据