因为LVS是由linux内核去实现的,所以我们不需要安装,它的管理工具有两种,可以通过ipvsadm或者keepalived去进行配置策咯
这里我们讲的LVS跟keepalived如何实现负载均衡。
首先我们准备了四台服务器:192.168.1.21,192.168.1.22,192.168.1.23,192.168.1.28
192.168.1.21和192.168.1.28是作为web服务器,上面分别安装了tomcat。
然后192.168.1.22,192.168.1.23这两台我们做LVS服务器。
首先我们在这两台上装一下keepalived。
yum install -y keepalived
安装完事之后,我们主要要修改一下/etc/keepalived/keepalived.conf这个文件
这里我将192.168.1.28作为主负载服务器
内容配置如下:
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connection_timeout 30
router_id LVS_MASTER # 设置lvs的id,在一个网络应该是唯一的
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface enp0s3 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 80 # 虚拟路由编号,主从要一致
priority 200 # 优先级,数值越大,获取处理请求的优先级越高,注意主从不能一致
advert_int 2 # 检查间隔,默认为1s(vrrp组播周期秒数),我这边设置了2s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.100 8080 {
delay_loop 6 # 设置健康检查时间,单位为秒
lb_algo rr # 设置负载调度的算法为rr,互联网应用常使用 wlc 或 rr。
lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.21 8080 { # 指定real server1的ip地址
weight 1 # 配置节点权值,数值越大权重越高
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 192.168.1.28 8080 { # 指定real server2的ip地址
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_router_id 80 # 虚拟路由编号,主从要一致,注意同一网段如果另一台集群中也设置同样的数值会报错,所以这个得设置唯一,一开始我设置成默认的,结果就冲突了。
persistence_timeout. :会话保持时间,单位是秒。这个会话是网络7层传输协议中的(第三层)会话。比如我们把它设置为60,那么客户端60秒内访问LVS虚拟服务器的请求都会被转到到同1个后台服务器节点。如果设置为0,那么每次请求都会根据配置的调度情况进行分发。
下面这个是从负载服务器的配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP #表示是从负载服务器
interface eth0 #这是从服务器的网卡
virtual_router_id 80 # 注意主从一致
priority 100 #低于主的priority值
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.100 8080 {
delay_loop 6 # 设置健康检查时间,单位为秒
lb_algo rr # 设置负载调度的算法为rr
lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.28 8080 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.21 8080 { # 指定real server1的ip地址
weight 1 # 配置节点权值,数值越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
因为我这两台是装在centos6上的,启动keepalived的命令是service keepalived start,如果是centos7,则是systemctl start keepalived.service
我们现在可以安装ipvsadm管理工具,查看一下lvs的路由策略
yum install -y ipvsadm
安装完事之后,用ipvsadm -S -n
接下来我们需要做的就是配置一下realserver。
将这192.168.1.21,192.168.1.28两台web服务器都配置成lvs的real server,编辑realserver脚本文件,进入指定文件夹:cd /etc/init.d/,编辑脚本文件:vi realserver,如下图:
#vi /usr/local/sbin/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org
SNS_VIP=192.168.1.100
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
保存脚本文件后更改该文件权限:chmod 755 realserver,开启realserver服务:service realserver start;
注意:配置real server是web服务器都需要配置的,有多少台就配置多少台!
这样lvs+keepalived负载均衡就搭建好了
下面我们开始演示:
首先演示主负载服务器宕机,我们通过关闭keepalived的服务,来演示宕机。
然后我们看一下还能不能访问,192.168.1.100:8080
然后我们在192.168.1.22这个从负载服务器上,tail -f /var/log/message,查看日志
发现状态有BACKUP STATE TRANSACTION TO MASTER STATE
然后我们在重启一下主负载的keepalived的服务,这时,从负载会立即又切换回BACKUP STATE
这是MASTER的日志
再看一下从负载的状态
这是主从负载的高可用。
下一步,我们来实验一下,web服务器如果宕机是啥效果
我将192.168.1.28的tomcat给关闭
然后我们访问192.168.1.100:8080
依然可以用,实现web服务高可用。
然后我们在启动一下192.168.1.28的tomcat服务
又可以访问192.168.1.28了,实现web服务器的高可用
大功告成,这是最基础的lvs+keepalived实现高可用的负载均衡