LVS:LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
两台节点服务器,两台web端同时操作,方便期间以下web端建立在节点服务器上,开两台虚拟机即可测试
关闭防火墙、selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
安装nginx、并启动。
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install nginx
[root@localhost ~]# systemctl restart nginx
方便测试分别修改两台web端nginx主页信息
[root@localhost ~]# echo "nginx111" > /usr/share/nginx/html/index.html
[root@localhost ~]# echo "nginx222" > /usr/share/nginx/html/index.html
查看web端是否正常
[root@localhost ~]# curl 192.168.33.136
nginx111
[root@localhost ~]# curl 192.168.33.137
nginx222
安装lvs+keepalived服务(分别安装)
MASTER
[root@localhost ~]# yum -y install keepalived ipvsadm
修改keepalived配置文件,启动keepalived服务
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface ens33 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.33.100 #定义虚拟IP(VIP)为192.168.1.100,可多设,每行一个
}
}
virtual_server 192.168.33.100 80 {
delay_loop 6
lb_algo rr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
persistence_timeout 0
protocol TCP
real_server 192.168.33.136 80 { # 指定real server1的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.33.137 80 { # 指定real server2的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#############################################
[root@localhost ~]# systemctl start keepalived
BACHUP
[root@localhost ~]# yum -y install keepalived ipvsadm
修改keepalived配置文件,启动keepalived服务
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface ens33 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 90 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.33.100 #定义虚拟IP(VIP)为192.168.1.100,可多设,每行一个
}
}
virtual_server 192.168.33.100 80 {
delay_loop 6
lb_algo rr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
persistence_timeout 0
protocol TCP
real_server 192.168.33.136 80 { # 指定real server1的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.33.137 80 { # 指定real server2的IP地址
weight 1 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#############################################
[root@localhost ~]# systemctl start keepalived
测试
[root@localhost ~]# ip a
在web做端添加路由、修改内核参数等配置(两台节点服务器同步)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.33.100 #ip为vip
NETMASK=255.255.255.255
ONBOOT=yes
##################################
[root@localhost network-scripts]# ifup lo:0
[root@localhost ~]# vim /etc/rc.local
################末行添加#############
/sbin/route add -host 192.168.33.100 dev lo:0
#####################################
[root@localhost ~]# route add -host 192.168.33.100 dev lo:0
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
测试
[root@localhost ~]# curl 192.168.33.100
nginx111
[root@localhost ~]# curl 192.168.33.100
nginx222