共计 12088 个字符,预计需要花费 31 分钟才能阅读完成。
一:LVS 原理简介
1.LVS 的英文全称是 Linux Virtual Server,即 Linux 虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在 linux 内存 2.6 中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。,LVS 主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。
2.LVS 可分为三部分
Load Balancer:这是 LVS 的核心部分,它好比我们网站 MVC 模型的 Controller。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台 Director Server 组成。
Server Array:该层负责具体业务。可有 WEB Server、mail Server、FTP Server、DNS Server 等组成。注意,其实上层的 Director Server 也可以当 Real server 用的。
Shared Storage:主要是提高上一层数据和为上一层保持数据一致。
3.LVS 负载均衡机制
LVS 工作在网络层。相对于其它负载均衡的解决办法,比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。LVS 的通过控制 IP 来实现负载均衡。IPVS 是其具体的实现模块。IPVS 的主要作用:安装在 Director Server 上面,在 Director Server 虚拟一个对外访问的 IP(VIP)。用户访问 VIP,到达 Director Server,Director Server 根据一定的规则选择一个 Real Server,处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的 Real Server,Real Server 如果返回给客户端数据等等。IPVS 为此有三种机制:
1.VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server 上处理的程序将数据报文中的目标地址(即虚拟 IP 地址)改成具体的某台 Real Server, 端口也改成 Real Server 的端口,然后把报文发给 Real Server。Real Server 处理完数据后,需要返回给 Diretor Server,然后 Diretor server 将数据包中的源地址和源端口改成 VIP 的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过 Diretor Server,如果数据过多,Diretor Server 肯定会不堪重负。
2.VS/TUN(Virtual Server via IP Tunneling), 即 IP 隧道技术实现虚拟服务器。它跟 VS/NAT 基本一样,但是 Real server 是直接返回数据给客户端,不需要经过 Diretor server, 这大大降低了 Diretor server 的压力。
3.VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR 通过改写请求报文的 MAC 地址,将请求发送到 Real Server,而 Real Server 将响应直接返回给客户,免去了 VS/TUN 中的 IP 隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求 Director Server 与 Real Server 都有一块网卡连在同一物理网段上
二:主机分配
1. 主机分配
注意,下面的 10.10.54.0 网段看作公有 IP,172.16.0.0 看作私有 IP(本身都是私有 IP 段,这里只是测试,不是真实生产环境)
VS/NAT 机制的好处就在于 real server 可以用私有 IP, 只要 Direct server 上配一个公有 IP 就好了
我们计划配置四台机子,两台台 Direct server(master and backup),两台 real server.
Direct server 上安装 LVS,用来把用户的请求按一定规则分配到 real server 上,整个 LVS 集群对外 IP 为 VIP:10.10.54.151.
Direct server–master
eth0:10.10.54.155/24
eth1:172.16.50.155/24
VIP:10.10.54.151
Direct server–backup
eth0:10.10.54.156/24
eth1:172.16.50.157/24
VIP:10.10.54.151
2.real server
real server1
ipaddr:172.16.50.157 gateway 172.16.50.254
real server2
ipaddr:172.16.50.159 gateway 172.16.50.254
3. 工作原理:
(1). 用户向 VIP:10.10.54.151 发送数据包,数据包源 IP 是用户上网 IP, 数据包目的 IP 是 10.10.54.151
(2). 数据包到达 Direct server 后,Direct server 上安装的 LVS 根据负载均衡算法把数据包负载给某台 real server,这个数据包的目的 IP 就被改为这台 real server 的私有 IP,然后发送该数据包
(3). 由于 Direct server 网卡 eth1 的 IP 地址跟 real server 在同一个网段,所以 Direct server 可以成功发送该数据包
(4).real server 处理该数据包后,只能把响应信息发往网关,即是 Direct server
(5).Direct server 收到响应信息后,把响应数据包源 IP 改为 VIP, 然后发给用户
(6). 上面就完成了一次单向通信,在用户看来,它是在跟 VIP 通信
4. 两台 Dirct server 上开启内核转发
shell> vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
三. 两台 Direct server 上安装 LVS
######【master and backup】
1.shell> yum -y install wget libnl* popt* gcc.x86_64 gcc-c++.x86_64 gcc-objc++.x86_64 kernel-devel.x86_64 make popt-static.x86_64
2. 下载
shell> wget http://www.keepalived.org/software/keepalived-1.2.9.tar.gz
shell> wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
3. 编译安装 ipvsadm
shell> tar xvf ipvsadm-1.26.tar.gz
shell> cd ipvsadm-1.26
shell> ./configure && make && make install
shell> yum install -y net-snmp.x86_64 net-snmp-devel.x86_64
shell> tar xvf keepalived-1.2.9.tar.gz
shell> cd keepalived-1.2.9
shell> ./configure –prefix=/usr/local/keepalived –enable-snmp –sysconfdir=/etc
shell> make && make install
shell> cp /usr/local/keepalived/sbin/keepalived /sbin/
shell> cp /usr/local/keepalived/bin/genhash /bin/
######【master】
4. 配置 keepalived
shell> vim /etc/keepalived/keepalived.conf
#keepalived.conf 由三部分组成:
global_defs
vrrp_instance
virtual_server
—————————————————————-
global_defs {
notification_email {
lij@ssr.com
}
notification_email_from lij@ssr.com
smtp_server lij@ssr.com
smtp_connect_timeout 30
router_id LVS_MASTER2
}
vrrp_instance VI_1 {
state MASTER #主设备
interface eth0 #eth0 接口
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.54.151/24 dev eth0 label eth0:1
}
virtual_ipaddress {
172.16.50.254/24 dev eth1 label eth1:1
}
}
virtual_server 10.10.54.151 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
protocol TCP
real_server 172.16.50.157 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.16.50.159 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
————————————————————
推荐阅读:
Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm
Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
5. 查看 LVS 状态
shell> ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.54.151:80 rr
-> 172.16.50.157:80 Masq 1 0 0
-> 172.16.50.159:80 Masq 1 0 0
######【backup】
6. 配置 keepalived
shell> vim /etc/keepalived/keepalived.conf
————————————————————–
global_defs {
notification_email {
lij@ssr.com
}
notification_email_from lij@ssr.com
smtp_server lij@ssr.com
smtp_connect_timeout 30
router_id LVS_SLAVE #改动 1
}
vrrp_instance VI_1 {
state BACKUP #改动 2
interface eth0
virtual_router_id 51
priority 80 #改动 3
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.54.151/24 dev eth0 label eth0:1 #这个是用户访问 IP
}
virtual_ipaddress {
172.16.50.254/24 dev eth1 label eth1:1 #这个是两台 real server 上的网关,下面会提到
}
}
virtual_server 10.10.54.151 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
# nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 172.16.50.157 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.16.50.159 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
———————————————————————-
shell> ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.54.151:80 rr
-> 172.16.50.157:80 Masq 1 0 0
-> 172.16.50.159:80 Masq 1 1 0
四.real server 配置
real-server1:ipaddr:172.16.50.157 netmask 172.16.50.254
real-server2:ipaddr:172.16.50.159 netmask 172.16.50.254
注意:
1. 每个 real server 上只能启用一张网卡
2. 之所以网关要配置为一个虚拟 IP, 是因为我们有两台 Direct server(master and backup),如果把 real server 网关配置为 master 主机 eth1 接口 IP,当 master 主机正常运行时,不会出问题,但是当 master 宕机之后,backup 启动,而此时 real server 指向的网关还是 master 主机,这就由问题了
【real-server1 and real-server2】
1.Direct server 上配置的是 80 端口,所以先要保证两台 real server 上的 80 端口处于监听状态,也就时 httpd 服务在运行
shell> netstat -tnol | grep :80
tcp 0 0 :::80 :::* LISTEN 3533/httpd
2. 按照上面 keepalived.conf
shell> ifconfig | grep “inet\ addr”
inet addr:172.16.50.157 Bcast:172.16.50.255 Mask:255.255.255.0
shell> route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 172.16.50.254 0.0.0.0 UG 0 0 0 eth1
更多 CentOS 相关信息见 CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14
一:LVS 原理简介
1.LVS 的英文全称是 Linux Virtual Server,即 Linux 虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在 linux 内存 2.6 中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。,LVS 主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。
2.LVS 可分为三部分
Load Balancer:这是 LVS 的核心部分,它好比我们网站 MVC 模型的 Controller。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台 Director Server 组成。
Server Array:该层负责具体业务。可有 WEB Server、mail Server、FTP Server、DNS Server 等组成。注意,其实上层的 Director Server 也可以当 Real server 用的。
Shared Storage:主要是提高上一层数据和为上一层保持数据一致。
3.LVS 负载均衡机制
LVS 工作在网络层。相对于其它负载均衡的解决办法,比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。LVS 的通过控制 IP 来实现负载均衡。IPVS 是其具体的实现模块。IPVS 的主要作用:安装在 Director Server 上面,在 Director Server 虚拟一个对外访问的 IP(VIP)。用户访问 VIP,到达 Director Server,Director Server 根据一定的规则选择一个 Real Server,处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的 Real Server,Real Server 如果返回给客户端数据等等。IPVS 为此有三种机制:
1.VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server 上处理的程序将数据报文中的目标地址(即虚拟 IP 地址)改成具体的某台 Real Server, 端口也改成 Real Server 的端口,然后把报文发给 Real Server。Real Server 处理完数据后,需要返回给 Diretor Server,然后 Diretor server 将数据包中的源地址和源端口改成 VIP 的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过 Diretor Server,如果数据过多,Diretor Server 肯定会不堪重负。
2.VS/TUN(Virtual Server via IP Tunneling), 即 IP 隧道技术实现虚拟服务器。它跟 VS/NAT 基本一样,但是 Real server 是直接返回数据给客户端,不需要经过 Diretor server, 这大大降低了 Diretor server 的压力。
3.VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR 通过改写请求报文的 MAC 地址,将请求发送到 Real Server,而 Real Server 将响应直接返回给客户,免去了 VS/TUN 中的 IP 隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求 Director Server 与 Real Server 都有一块网卡连在同一物理网段上
二:主机分配
1. 主机分配
注意,下面的 10.10.54.0 网段看作公有 IP,172.16.0.0 看作私有 IP(本身都是私有 IP 段,这里只是测试,不是真实生产环境)
VS/NAT 机制的好处就在于 real server 可以用私有 IP, 只要 Direct server 上配一个公有 IP 就好了
我们计划配置四台机子,两台台 Direct server(master and backup),两台 real server.
Direct server 上安装 LVS,用来把用户的请求按一定规则分配到 real server 上,整个 LVS 集群对外 IP 为 VIP:10.10.54.151.
Direct server–master
eth0:10.10.54.155/24
eth1:172.16.50.155/24
VIP:10.10.54.151
Direct server–backup
eth0:10.10.54.156/24
eth1:172.16.50.157/24
VIP:10.10.54.151
2.real server
real server1
ipaddr:172.16.50.157 gateway 172.16.50.254
real server2
ipaddr:172.16.50.159 gateway 172.16.50.254
3. 工作原理:
(1). 用户向 VIP:10.10.54.151 发送数据包,数据包源 IP 是用户上网 IP, 数据包目的 IP 是 10.10.54.151
(2). 数据包到达 Direct server 后,Direct server 上安装的 LVS 根据负载均衡算法把数据包负载给某台 real server,这个数据包的目的 IP 就被改为这台 real server 的私有 IP,然后发送该数据包
(3). 由于 Direct server 网卡 eth1 的 IP 地址跟 real server 在同一个网段,所以 Direct server 可以成功发送该数据包
(4).real server 处理该数据包后,只能把响应信息发往网关,即是 Direct server
(5).Direct server 收到响应信息后,把响应数据包源 IP 改为 VIP, 然后发给用户
(6). 上面就完成了一次单向通信,在用户看来,它是在跟 VIP 通信
4. 两台 Dirct server 上开启内核转发
shell> vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
三. 两台 Direct server 上安装 LVS
######【master and backup】
1.shell> yum -y install wget libnl* popt* gcc.x86_64 gcc-c++.x86_64 gcc-objc++.x86_64 kernel-devel.x86_64 make popt-static.x86_64
2. 下载
shell> wget http://www.keepalived.org/software/keepalived-1.2.9.tar.gz
shell> wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
3. 编译安装 ipvsadm
shell> tar xvf ipvsadm-1.26.tar.gz
shell> cd ipvsadm-1.26
shell> ./configure && make && make install
shell> yum install -y net-snmp.x86_64 net-snmp-devel.x86_64
shell> tar xvf keepalived-1.2.9.tar.gz
shell> cd keepalived-1.2.9
shell> ./configure –prefix=/usr/local/keepalived –enable-snmp –sysconfdir=/etc
shell> make && make install
shell> cp /usr/local/keepalived/sbin/keepalived /sbin/
shell> cp /usr/local/keepalived/bin/genhash /bin/
######【master】
4. 配置 keepalived
shell> vim /etc/keepalived/keepalived.conf
#keepalived.conf 由三部分组成:
global_defs
vrrp_instance
virtual_server
—————————————————————-
global_defs {
notification_email {
lij@ssr.com
}
notification_email_from lij@ssr.com
smtp_server lij@ssr.com
smtp_connect_timeout 30
router_id LVS_MASTER2
}
vrrp_instance VI_1 {
state MASTER #主设备
interface eth0 #eth0 接口
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.54.151/24 dev eth0 label eth0:1
}
virtual_ipaddress {
172.16.50.254/24 dev eth1 label eth1:1
}
}
virtual_server 10.10.54.151 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
protocol TCP
real_server 172.16.50.157 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.16.50.159 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
————————————————————
推荐阅读:
Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm
Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm