如何利用keepalived实现负载均衡高可用

高可用冗余服务的作用:

  • 避免单点故障

实现方式:

主要原理:

  • vrrp协议(虚拟路由冗余协议)

 

keepalived高可用原理

  • 首先将多态主机逻辑组成一台客户端访问的逻辑vip地址
  • 1.利用vrrp协议进行主备通讯
  • 2.利用vrrp协议进行主备竞选
  • 3.利用vrrp协议主向备发送组播包。当备服务器接收不到组播包,主服务器释放资源给备服务器
  • 4.利用vrrp协议但不传输密文信息。当主服务器恢复上线时,主服务器回抢占备服务器资源

双主高可用作用

正常情况下只用一个vip访问的请求都会发送到lb01这个服务器上面,这时候lb02备用服务器真的是备用,起不到一点作用。只有主坏了,才会体现lb02的价值。

我们可以再生成一个vip作为lb01和lb02的备用vip。这样相当于有四台,每两台一主一备,并且互为主备。

这时10.0.0.4和10.0.0.3这两个vip可以分别访问不同的资源并互为主备

例如:

www.abc.com  10.0.0.3

blog.abc.com   10.0.0.4

如何利用keepalived实现负载均衡高可用

 

双主高可用服务部署过程

1.架构环境准备

lb01  10.0.0.5 nginx keepalived (主)
lb02  10.0.0.6 nginx keepalived (备)
web01 10.0.0.7 nginx
web02 10.0.0.8 nginx
web03 10.0.0.9 nginx

2.web服务器环境

vim /etc/nginx/conf.d/www.conf server { listen 80; server_name www.abc.com www.jd.com; root /html/www; index index.html; } web01服务器首页文件 # cat /html/www/abc.html web01 www.abc.com web02服务器首页文件 # cat /html/www/abc.html web02 www.abc.com web03服务器首页文件 # cat /html/www/abc.html web03 www.abc.com

在lb01服务器上测试后端节点是否正常:

#curl -H host:www.abc.com 10.0.0.7/abc.html
web01 www.abc.com
#curl -H host:www.abc.com 10.0.0.8/abc.html
web01 www.abc.com
#curl -H host:www.abc.com 10.0.0.9/abc.html
web01 www.abc.com

3.安装负载均衡服务并进行配置

    upstream oldboy {
          server 10.0.0.7:443;
          server 10.0.0.8:443;
          server 10.0.0.9:443;
        }
    server {
          listen        10.0.0.3:80;
          listen        10.0.0.4:80;
          server_name   localhost;
          rewrite  ^/(.*)$  https://$host/$1 redirect;
    }
    server {
          listen        443 ssl;
          server_name   localhost;
          ssl_certificate       server.crt;
          ssl_certificate_key   server.key;
          location / {
             proxy_pass  https://oldboy;
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $remote_addr;
          }
        }

注意事项:
01. nginx程序涉及到IP地址修改,必须重启nginx
02. 监听的地址必须是本地网卡上有的地址
如何监听网卡上没有的地址:
解决方法:
echo ‘net.ipv4.ip_nonlocal_bind = 1’ >>/etc/sysctl.conf
sysctl -p

4.在lb01 lb02上安装keepalived服务 并编写keepalived配置文件

yum install -y keepalived

lb01的keepalived配置

     [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
     ! Configuration File for keepalived      --- 注释说明

     global_defs {                            --- 全局配置
        notification_email {                  --- 设置通知邮箱地址信息
          acassen@firewall.loc                
          failover@firewall.loc
          sysadmin@firewall.loc
        }
        notification_email_from Alexandre.Cassen@firewall.loc
        smtp_server 192.168.200.1
        smtp_connect_timeout 30
        router_id lb01                        --- 标识每个主机身份名称
     }

     vrrp_instance oldboy {                   --- 设置一个家族
         state MASTER                         --- 设置一个主机为主服务器(期望)  (MASTER BACKUP)                     
         interface eth0                       --- 设置指定网卡上生成VIP地址
         virtual_router_id 63                 --- 设置主备一致 家族数值标识
         priority 110                         --- 优先级越高,越有可能成为主
         advert_int 1                         --- 组播包发送间隔
         authentication {                     --- 设置组播通讯认证进制
             auth_type PASS
             auth_pass 1111
         }
         virtual_ipaddress {
             10.0.0.3                         --- 设置lb01主VIP地址数值信息
         }
     }

    vrrp_instance oldgirl {
        state BACKUP
        interface eth0
        virtual_router_id 64
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
           10.0.0.4                          --- 设置lb01备VIP地址数值信息
        }
    }

lb02的keepalived配置

     [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
     ! Configuration File for keepalived      --- 注释说明

     global_defs {                            --- 全局配置
        notification_email {                  --- 设置通知邮箱地址信息
          acassen@firewall.loc                
          failover@firewall.loc
          sysadmin@firewall.loc
        }
        notification_email_from Alexandre.Cassen@firewall.loc
        smtp_server 192.168.200.1
        smtp_connect_timeout 30
        router_id lb02                        --- 标识每个主机身份名称  *
     }

     vrrp_instance oldboy {                   --- 设置一个家族
         state BACKUP                         --- 设置一个主机为主服务器(期望)  (MASTER BACKUP)  *                    
         interface eth0                       --- 设置指定网卡上生成VIP地址
         virtual_router_id 63                 --- 设置主备一致 家族数值标识
         priority 100                         --- 优先级越高,越有可能成为主  *
         advert_int 1                         --- 组播包发送间隔
         authentication {                     --- 设置组播通讯认证进制
             auth_type PASS
             auth_pass 1111
         }
         virtual_ipaddress {
             10.0.0.3                         --- 设置lb02主VIP地址数值信息
         }
     }

    vrrp_instance oldgirl {
        state MASTER
        interface eth0
        virtual_router_id 64
        priority 110
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.4                        --- 设置lb02备VIP地址数值信息
        }
    }

lb01,lb02重启keepalived服务

 systemctl start keepalived.service

 

5.测试双主keepalived是否配置生效

在lb01服务器查看是否生成10.0.0.3vip
如何利用keepalived实现负载均衡高可用

关闭lb01keepalived服务

systemctl stop keepalived

在lb02查看10.0.0.3vip是否漂移至此服务器

如何利用keepalived实现负载均衡高可用

如果此时lb01服务器宕机,这是lb02就承担了10.0.0.3和10.0.0.4这两个资源的访问请求处理工作

 

返回首页

赞赏

微信赞赏支付宝赞赏

Nginx

Nginx限制请求数和限制连接数

2020-1-21 12:05:37

Nginx

keepalived高可用的脑裂和存在价值问题

2020-1-30 12:10:59

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索