实现基于Keepalived高可用集群网站架构的多种方法
2017-11-12 14:17
627 查看
实现基于Keepalived高可用集群网站架构
随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已经通过集群技术保障了可用性,但对于前端负载均衡器来说,是个比较大的安全隐患,因为当前端负载均衡器出现故障时,整个集群就处于瘫痪状态,因此,负载均衡器的可用性也显得至关重要,那么怎么来解决负载均衡器的可用性问题呢?
实验一:实现keepalived主从方式高可用基于LVS-DR模式的应用实战:
实验原理
主从:一主一从,主的在工作,从的在休息;主的宕机了,VIP漂移到从上,由从提供服务1、环境准备:
两台centos系统做DR、一主一从,两台实现过基于LNMP的电子商务网站机器名称 | IP配置 | 服务角色 | 备注 |
---|---|---|---|
lvs-server-master | VIP:172.17.100.100 DIP:172.17.66.66 | 负载均衡器 主服务器 | 开启路由功能 配置keepalived |
lvs-server-backup | VIP:172.17.100.100 DIP:172.17.251.66 | 后端服务器 从服务器 | 开启路由功能 配置keepalived |
rs01 | RIP:172.17.77.77 | 后端服务器 | 网关指向DIP(桥接) |
rs02 | RIP:172.17.251.111 | 后端服务器 | 网关指向DIP(桥接) |
2、配置 lvs-server-master(主服务器)
修改keepalived主(lvs-server-master)配置文件实现 virtual_instance 实例2.1 配置文件中修改三段
配置文件为/etc/keepalived/keepalived.conf
① 全局段,故障通知邮件配置
global_defs { notification_email { root@localhost } notification_email_from root@keer.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id keepalived_lvs }
② 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段
vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass keer } virtual_ipaddress { 172.17.100.100 } }
③ 设置一个virtual server段
virtual_server 172.17.100.100 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.255 persistence_timeout 600 protocol TCP
④ 配置real server段
real_server 172.17.1.7 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.17.22.22 80 { weight 2 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
一定要注意大小写!
2.2 开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了
我们来使用
ipvsadm -Ln来查看一下:
2.3 后续
因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷贝到从服务器上在进行修改即可:scp /etc/keepalived/keepalived.conf @172.17.11.11:
3、配置lvs-server-backup (从服务器)
3.1 修改配置文件
因为这个配置文件是从主服务器上拷贝过来的,所以只需要修改②实例段,其他都不要变,保证一模一样vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass keer }
3.2 开启keepalived 服务
service keepalived start
负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP
可以用
ipvsadm -Ln来查看,可能过一会才会显示
4、配置 real server
4.1 开启事前准备好的web服务
systemctl start nginx systemctl start mariadb systemctl start php-fpm
4.2 因为是DR模式,需在rs上进行设置
4.2.1 配置路由配置VIP到本地回环网卡lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
4.2.2 使RS “闭嘴”
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略ARP广播
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
4.2.3 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
5、测试
5.1 lvs负载均衡作用是否开启
客户端访问http://172.17.100.100/也可以详细测试
① 在rs1 上设置一个测试一面
vim /data/web/test.html
real server 1
② 在rs2 上设置一个测试一面
vim /data/web/test.html
real server 2
③ 网页访问http://172.17.100.100/test.html 发现有real server 1也有real server 2
5.2 测试keepalived的主从方式
① 使keepalive 的主宕机service keepalived stop
会发现服务能照常访问,但是VIP 漂移到了从上
从多了网卡别名,且地址是VIP
[root@server-backup ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:22:8d:75 brd ff:ff:ff:ff:ff:ff inet 172.17.251.66/16 brd 172.17.255.255 scope global eth0 inet 172.17.100.100/32 scope global eth1 inet6 fe80::20c:29ff:fe22:8d75/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:22:8d:7f brd ff:ff:ff:ff:ff:ff inet 192.168.37.128/24 brd 192.168.37.255 scope global eth1 inet6 fe80::20c:29ff:fe22:8d7f/64 scope link valid_lft forever preferred_lft forever 4: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether ba:21:04:5b:66:60 brd ff:ff:ff:ff:ff:ff
② 使keepalive 的主重新开启服务,因为主的优先级高,所以VIP又重新漂移到了主上
实验二:实现keepalived双主方式高可用基于LVS-DR模式的应用实战:
实验原理
互为主从:主从都在工作;其中一个宕机了,VIP漂移到另一个上,提供服务1、实验环境,基本同上
机器名称 | IP配置 | 服务角色 | 备注 |
---|---|---|---|
lvs-server-1 | VIP:172.17.120.120 DIP:172.17.66.66 | 负载均衡器 主服务器 | 开启路由功能 配置keepalived |
lvs-server2 | VIP:172.17.120.121 DIP:172.17.251.66 | 后端服务器 从服务器 | 开启路由功能 配置keepalived |
rs01 | RIP:172.17.77.77 | 后端服务器 | 网关指向DIP(桥接) |
rs02 | RIP:172.17.252.111 | 后端服务器 | 网关指向DIP(桥接) |
2、配置 lvs-server-master1(第一个主服务器)
配置基本同上,就是加了一个实例段修改keepalived主(lvs-server-master)配置文件实现 virtual_instance 实例
2.1 主的设置 VI_1
vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass keer } virtual_ipaddress { 172.17.120.120 } } virtual_server 172.17.120.120 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.255 persistence_timeout 600 protocol TCP real_server 172.17.1.7 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.17.22.22 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
2.2 从的设置 VI_2
vrrp_instance VI_2 { state BACKUP interface eth1 virtual_router_id 52 priority 98 advert_int 1 authentication { auth_type PASS auth_pass along } virtual_ipaddress { 172.17.120.121 } } virtual_server 172.17.120.121 443 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.255 persistence_timeout 600 protocol TCP real_server 172.17.77.77 443 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.17.252.111 443 { weight 2 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
2.3 开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了
2.4 后续
因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去scp /etc/keepalived/keepalived.conf @172.17.11.11:
3、配置 lvs-server-master2(第二个主服务器)
在lvs-server2 上,基本同1,就是把实例的主从调换一下3.1 从的设置 VI_1
vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 98 advert_int 1 authentication { auth_type PASS auth_pass keer } virtual_ipaddress { 172.17.120.120 } }
3.2 主的设置 VI_2
vrrp_instance VI_2 { state MASTER interface eth1 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass keer } virtual_ipaddress { 172.17.120.121 } }
3.3 开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了,显示结果会等段时间再显示
4、配置 real server
4.1 开启事前准备好的web服务
systemctl start nginx systemctl start mariadb systemctl start php-fpm
4.2 因为是DR模式,需在rs上进行设置
4.2.1 配置路由配置VIP到本地回环网卡lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
4.2.2 使RS “闭嘴”
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略ARP广播
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
4.2.3 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
5、测试
5.1 lvs负载均衡作用是否开启
客户端访问http://172.17.100.100/ 公网172.17.100.100只能访问80https://172.17.100.101/ 公网172.17.100.101只能访问443
也可以详细测试:
① 在rs1 上设置一个测试一面
vim /data/web/test.html real server 1
② 在rs2 上设置一个测试一面
vim /data/web/test.html real server 2
③ 网页访问http://172.17.100.100/test.html或https://172.17.100.101/test.html 发现有real server 1也有real server 2
5.2 测试keepalived的双主方式
使keepalive 的任意一个宕机service keepalived stop
会发现服务能照常访问,另一个机器80、443都能访问,且宕机的VIP漂移到了另一个服务器上
实验三:实现keepalived主从方式高可用基于LVS-NAT模式的应用实战:
实验原理
主从:一主一从,主的在工作,从的在休息;主的宕机了,VIP漂移到从上,由从提供服务1、环境准备
机器名称 | IP配置 | 服务角色 | 备注 |
---|---|---|---|
lvs-server-1 | VIP:172.17.120.120 DIP:192.168.37.120 | 负载均衡器 主服务器 | 开启路由功能 配置keepalived |
lvs-server-2 | VIP:172.17.120.120 DIP:192.168.37.120 | 后端服务器 从服务器 | 开启路由功能 配置keepalived |
rs01 | RIP:192.168.37.222 | 后端服务器 | 网关指向DIP |
rs02 | RIP:192.168.37.111 | 后端服务器 | 网关指向DIP |
2、配置 lvs-server-master(主服务器)
2.1 配置文件中修改三段
配置文件为 /etc/keepalived/keepalived.conf① 全局段,故障通知邮件配置
global_defs { notification_email { root@localhost } notification_email_from root@keer.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id keepalived_lvs }
② 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 190 priority 100 advert_int 1 authentication { auth_type PASS auth_pass keer } virtual_ipaddress { 172.17.120.120 192。168.37.120 } }
③ 设置一个virtual server段
virtual_server 172.17.120.120 80 { delay_loop 6 lb_algo wrr lb_kind NAT nat_mask 255.255.255.255 persistence_timeout 120 protocol TCP
④ 配置real server段
real_server 192.168.37.222 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.37.111 80 { weight 2 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
2.2 因为是NAT模式,所以需开启路由转发功能
vim /etc/sysctl.conf net.ipv4.ip_forward = 1
接着使用
sysctl -p读一下,使参数生效
2.3 开启keepalived 服务
service keepalived start
能看到网卡别名 和 负载均衡策略已经设置好了
2.4 后续
因为是主从方式,所以从上的配置和主只有一点差别;所以可以把这个配置文件拷过去scp /etc/keepalived/keepalived.conf @172.17.251.66:
3、配置 lvs-server-backup (从服务器)
3.1 修改配置文件
因为这个配置文件是从主服务器上拷贝过来的,所以只需要修改②实例段,其他都不要变,保证一模一样:vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 190 priority 98 advert_int 1 authentication { auth_type PASS auth_pass keer } virtual_ipaddress { 172.17.120.120 192.168.37.120 } }
3.2 因为是NAT模式,所以需开启路由转发功能
vim /etc/sysctl.conf net.ipv4.ip_forward = 1
接着使用
sysctl -p读一下,使参数生效
3.3 开启keepalived 服务
service keepalived start
负载均衡策略已经设置好了,注意:主director没有宕机,从上就不会有VIP
4、配置 real server
4.1 开启事前准备好的web服务
systemctl start nginx systemctl start mariadb systemctl start php-fpm
4.2 因为是NAT模式,需在rs上设置
只需把网关指向DIProute add default gw 192.168.37.123
此时,我们可以查看一下网关:
[root@rs01 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.37.123 0.0.0.0 UG 0 0 0 ens34 0.0.0.0 172.17.0.1 0.0.0.0 UG 100 0 0 ens33 172.17.0.0 0.0.0.0 255.255.0.0 U 100 0 0 ens33 192.168.37.0 0.0.0.0 255.255.255.0 U 100 0 0 ens34 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
我们发现,还有一个172的网关在生效,所以我们把它down掉:
[root@rs01 ~]# ifconfig ens33 down
一定要注意这一点,不然多个网关会让数据不知道从哪走~
5、测试
5.1 lvs负载均衡作用是否开启
客户端访问http://172.17.120.120/也可以进行详细测试:
① 在rs1 上设置一个测试页面
vim /data/web/test.html real server 1
② 在rs2 上设置一个测试页面
vim /data/web/test.html real server 2
③ 网页访问http://172.17.120.120/test.html 发现有real server 1也有real server 2
5.2 测试keepalived的主从方式
① 使keepalive 的主宕机service keepalived stop
会发现服务能照常访问,但是VIP 漂移到了从上
从多了网卡别名,且地址是VIP
③ 使keepalive 的主重新开启服务,因为主的优先级高,所以VIP又重新漂移到了主上
service keepalived start
以上~如果有不足之处还请大家多多指教喏٩(๑>◡<๑)۶
相关文章推荐
- 基于keepalived实现多种模式的高可用集群网站架构
- 企业实战(3)-主从实现基于Keepalived高可用集群网站架构 推荐
- 项目实战3—实现基于Keepalived+LVS的高可用集群网站架构
- (经典)ASP.NET多频道网站架构实现方法-.Net编程教程(转载)
- ASP.NET多频道网站架构实现方法
- 多频道网站架构实现方法 (asp.net C#)
- ASP.NET多频道网站架构实现方法
- 基于云端虚拟机的LVS/DR+Keepalived+nginx的高可用集群架构配置
- 基于spring 方法级缓存的多种实现
- 基于Tomcat构建LNMT架构的网站并实现Session保持 推荐
- 实现基于LVS负载均衡集群的电商网站架构
- 实现基于LVS负载均衡集群的电商网站架构
- asp.net多频道网站架构实现方法
- 基于Keepalived实现LVS双主高可用集群 推荐
- 基于Tomcat构建LNMT架构的网站并实现Session保持
- ASP.NET多频道网站架构实现方法
- asp.net多频道网站架构实现方法
- 新浪微博网站的技术架构详细分析 讲解到很多技术难点分解与实现方法(转)
- 基于云端虚拟机的LVS/DR+Keepalived+nginx的高可用集群架构配置(更新nginx代理功能) 推荐
- ASP.NET多频道网站架构实现方法-.Net编程教程