zoukankan      html  css  js  c++  java
  • 实现基于Keepalived高可用集群网站架构的多种方法

    实现基于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只能访问80
    https://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

    注意:要确保rs和DIP在一个网段,且不和VIP在一个网段

    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上设置

      只需把网关指向DIP

    route 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
    


      以上~如果有不足之处还请大家多多指教喏٩(๑>◡<๑)۶

  • 相关阅读:
    004 Optional
    003 Preconditons
    002 splitter
    003 主键问题
    ReportViewer Win32Exception (0x80004005): 创建窗口句柄时出错
    sqlserver删除所有表、视图、存储过程
    win10文件夹 无法显示当前所有者 管理员都不行
    Cannot resolve collation conflict between "Chinese_Taiwan_Stroke_CI_AS" and "Chinese_PRC_CI_AS" in UNION ALL operator occurring in SELECT statement column 1.
    分析器错误消息: Reference.svcmap:未能加载文件
    跨AppDomain通信
  • 原文地址:https://www.cnblogs.com/keerya/p/7819970.html
Copyright © 2011-2022 走看看