准备四台服务器,系统centos7。
一、配置虚拟ip
1.在lvs和RS1和RS2上分别执行
systemctl stop NetworkManager
systemctl disable NetworkManager
2.在lvs上
cd /etc/sysconfig/network-scripts/
ll
cp ifcfg-ens33 ifcfg-ens33:1
vi ifcfg-ens33:1
#只保留
BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR="192.168.26.101"
NETMASK=255.255.255.0
service network restart
二、安装ipvsadm
yum install -y ipvsadm
ipvsadm -Ln
RS1和RS2:
一、配置虚拟ip
cd /etc/sysconfig/network-scripts/
ll
cp ifcfg-lo ifcfg-lo:1
vi ifcfg-lo:1
#只保留
DEVICE=lo:1
IPADDR=192.168.26.101
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
service network restart
二、配置ARP
vi /etc/sysctl.conf
#添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
三、配置虚拟ip路由
#把关于192.168.26.101vip的请求,交给lo:1来处理
route add -host 192.168.26.101 dev lo:1
#此时,vip加入了路由
route -n
#192.168.26.101 0.0.0.0 255.255.255.255 UH 0 0 0 lo
#重启不丢失
echo "route add -host 192.168.26.101 dev lo:1" >> /etc/rc.local
LVS:
一、配置vip集群规则(rr:轮询)
ipvsadm -A -t 192.168.26.101:80 -s rr
#查看集群规则
ipvsadm -Ln
#给vip添加真实服务器(-g:代表DR模式)
ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.128:80 -g
ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.129:80 -g
至此,单节点Lvs+nginx已完成配置。
打开浏览器:访问192.168.26.101:80,能访问通,即可。
注意:
你会发现,无论你怎么刷新,都只访问一台机器,明明配的轮询啊,这是
因为lvs默认同一个用户同一个请求300秒以内,都路由到同一台机器。
可以修改默认时间来验证:-p 0设置为0s
ipvsadm -E -t 192.168.26.101:80 -s rr -p 0
接下来查看ipvsadm默认超时时间
[root@DR1 keepalived]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,巨坑!!!!!!因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:
[root@DR1 ~]# ipvsadm --set 1 2 1
调整之后查看调整效果
[root@DR1 ~]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 1 2 1
设置完之后,每隔2秒刷新一下浏览器,发现轮询了。
给LVS配置keepAlived,实现高可用
LVS-master:
前置工作:
#清除手动新增的vip
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
service network restart
一、安装keepalived
yum install -y keepalived
vi /etc/keepalived.conf
#保存************************************************
! Configuration File for keepalived
global_defs {
router_id LVS_126
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 126
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.26.101
}
}
#LVS的相关配置
virtual_server 192.168.26.101 80 {
#健康检查时间,单位:s
delay_loop 6
#负载均衡算法,默认轮询rr
lb_algo rr
#LVS的工作模式 NAT|TUN|DR
lb_kind DR
#会话持久化时间
persistence_timeout 0
protocol TCP
#负载均衡的真实服务器
real_server 192.168.26.128 80 {
weight 1
#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
real_server 192.168.26.129 80 {
weight 1
#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
}
#***********************************************
#清除lvs用命令配置的集群策略
ipvsadm -C
#重启keepalived
systemctl restart keepalived
#设置开机自启动
systemctl enable keepalived
#查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
ipvsadm -Ln
LVS-backup:
前置工作:
#清除手动新增的vip
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
service network restart
一、安装keepalived
yum install -y keepalived
vi /etc/keepalived.conf
#保存************************************************
! Configuration File for keepalived
global_defs {
#LVS127的id
router_id LVS_127
}
vrrp_instance VI_1 {
#备份
state BACKUP
#根据自己使用的网卡决定
interface ens33
#和master一样
virtual_router_id 126
#优先级,官方建议相差50
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.26.101
}
}
#LVS的相关配置
virtual_server 192.168.26.101 80 {
#健康检查时间,单位:s
delay_loop 6
#负载均衡算法,默认轮询rr
lb_algo rr
#LVS的工作模式 NAT|TUN|DR
lb_kind DR
#会话持久化时间
persistence_timeout 0
protocol TCP
#负载均衡的真实服务器
real_server 192.168.26.128 80 {
weight 1
#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
real_server 192.168.26.129 80 {
weight 1
#设置健康检查
TCP_CHECK {
#检查的端口,对应真实服务器的服务端口
connect_port 80
#超时时间3s
connect_timeout 3
#重试次数 3次
nb_get_retry 3
#间隔时间3s
delay_before_retry 3
}
}
}
#*********************************************
#清除lvs用命令配置的集群策略
ipvsadm -C
#重启keepalived
service keepalived restart
#查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
ipvsadm -Ln
注意:两台lvs和两台RS服务都要关闭防火墙
LVS主备高可用测试
#1.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上
ip addr
#2.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101没有绑定在ens33网卡上
ip addr
#3.停止master的keepalived,此时继续访问http://192.168.26.101:80,仍然能访问通
systemctl stop keepalived
#4.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101没有了
ip addr
#5.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上,此时vip成功的从master漂移到了backup上
ip addr
#6.重新启动lvs-master上的keepalived,通过"ip addr"命令发现,此时vip成功的从backup又漂移到了master上
systemctl stop keepalived
Nginx健康检测
#1."./nginx -s stop"停掉RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中只剩RS2服务了。此时再访问vip,无论怎么访问,都只会访问到RS2服务。
#2."./nginx -s start"启动RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中RS1服务又出现了,此时再访问vip,又开始了轮询。
至此已完成keepalived的配置。