热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建高可用负载均衡器:haproxy+keepalived

企业业务量比较小的时候,单台服务器就可以满足业务需要了。但是随着业务发展,单服务器的问题就凸显出来了

企业业务量比较小的时候,单台服务器就可以满足业务需要了。但是随着业务发展,单服务器的问题就凸显出来了:

  • 当服务器挂掉时,业务就会中断
  • 当业务量增加,单台服务器性能变差,如何透明的扩展服务器和带宽,增加服务器吞吐量

负载均衡器可以解决以上问题

本文会根据拓扑图,用haproxy和keepalived搭建一个负载均衡器

搭建高可用负载均衡器: haproxy+keepalived

1 负载均衡器拓扑图

搭建高可用负载均衡器: haproxy+keepalived

2 准备

2.1 准备环境

准备5台CentOS7.3主机和一个VIP地址:

  • 准备一个可用IP用作虚拟IP(VIP):

VIP: 192.168.1.100

  • 负载均衡器会用到2台主机,一主一备的架构

lb1(默认为主): 192.168.1.101

lb2(默认为备): 192.168.1.102

  • 后端服务器集群中主机的IP地址

s1: 192.168.1.2

s2: 192.168.1.3

s3: 192.168.1.4

2.2 主机配置

2.2.1 所有主机上关闭防火墙

systemctl stop firewalld 
systemctl disable firewalld 

2.2.2 所有主机关闭selinux

setenforce 0 
vi /etc/selinux/config 
SELINUX=disabled 

2.3 安装haproxy和keepalived

lb1和lb2上安装haproxy和keepalived

yum install haproxy keepalived -y 

2.4 安装nginx(有其他后端测程序,可省略此步)

s1 s2 s3上安装nginx,目的是把nginx作为后端,如果有其他后端程序,这一步可以省略

yum install epel-release -y 
yum install nginx -y 

2.3 配置keepalived

KeepAlived是基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)实现的一个高可用方案,通过VIP(虚拟IP)和心跳检测来实现高可用

Keepalived有两个角色,Master和Backup。一般会是1个Master,多个Backup。

Master会绑定VIP到自己网卡上,对外提供服务。Master和Backup会定时确定对方状态,当Master不可用的时候,Backup会通知网关,并把VIP绑定到自己的网卡上,实现服务不中断,高可用

2.3.1配置Master

! Configuration File for keepalived 
 
global_defs { 
   # 通知邮件服务器的配置 
   notification_email { 
     # 当master失去VIP或则VIP的时候,会发一封通知邮件到your-email@qq.com 
     your-email@qq.com 
   } 
   # 发件人信息 
   notification_email_from keepalived@qq.com 
   # 邮件服务器地址 
   smtp_server 127.0.0.1 
   # 邮件服务器超时时间 
   smtp_connect_timeout 30 
   # 邮件TITLE 
   router_id LVS_DEVEL 
} 
 
vrrp_instance VI_1 { 
    # 主机: MASTER 
    # 备机: BACKUP 
    state MASTER 
    # 实例绑定的网卡, 用ip a命令查看网卡编号 
    interface eno16777984 
    # 虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样 
    virtual_router_id 88 
    # 优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器 
    priority 100 
    # 主备之间同步检查的时间间隔单位秒 
    advert_int 1 
    # 验证类型和密码 
    authentication { 
        # 验证类型有两种 PASS和HA 
        auth_type PASS 
        # 验证密码,在一个实例中主备密码保持一样 
        auth_pass 11111111 
    } 
    # 虚拟IP地址,可以有多个,每行一个 
    virtual_ipaddress { 
        192.168.1.100 
    } 
} 
 
virtual_server 192.168.1.100 443 { 
    # 健康检查时间间隔 
    delay_loop 6 
    # 调度算法 
    # Doc: http://www.keepalived.org/doc/scheduling_algorithms.html 
    # Round Robin (rr) 
    # Weighted Round Robin (wrr) 
    # Least Connection (lc) 
    # Weighted Least Connection (wlc) 
    # Locality-Based Least Connection (lblc) 
    # Locality-Based Least Connection with Replication (lblcr) 
    # Destination Hashing (dh) 
    # Source Hashing (sh) 
    # Shortest Expected Delay (seq) 
    # Never Queue (nq) 
    # Overflow-Connection (ovf) 
    lb_algo rr 
    lb_kind NAT 
    persistence_timeout 50 
    protocol TCP 
    # 通过调度算法把Master切换到真实的负载均衡服务器上 
    # 真实的主机会定期确定进行健康检查,如果MASTER不可用,则切换到备机上 
    real_server 192.168.1.101 443 { 
        weight 1 
        TCP_CHECK { 
            # 连接超端口 
            connect_port 443 
            # 连接超时时间 
            connect_timeout 3 
        } 
    } 
    real_server 192.168.1.102 443 { 
        weight 1 
        TCP_CHECK { 
            connect_port 443 
            connect_timeout 3 
        } 
    } 
} 

2.3.2配置BACKUP

编辑lb2(192.168.1.102)上的/etc/keepalived/keepalived.conf

! Configuration File for keepalived 
 
global_defs { 
   # 通知邮件服务器的配置 
   notification_email { 
     # 当master失去VIP或则VIP的时候,会发一封通知邮件到your-email@qq.com 
     your-email@qq.com 
   } 
   # 发件人信息 
   notification_email_from keepalived@qq.com 
   # 邮件服务器地址 
   smtp_server 127.0.0.1 
   # 邮件服务器超时时间 
   smtp_connect_timeout 30 
   # 邮件TITLE 
   router_id LVS_DEVEL 
} 
 
vrrp_instance VI_1 { 
    # 主机: MASTER 
    # 备机: BACKUP 
    state BACKUP 
    # 实例绑定的网卡, 用ip a命令查看网卡编号 
    interface eno16777984 
    # 虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样 
    virtual_router_id 88 
    # 优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器 
    priority 99 
    # 主备之间同步检查的时间间隔单位秒 
    advert_int 1 
    # 验证类型和密码 
    authentication { 
        # 验证类型有两种 PASS和HA 
        auth_type PASS 
        # 验证密码,在一个实例中主备密码保持一样 
        auth_pass 11111111 
    } 
    # 虚拟IP地址,可以有多个,每行一个 
    virtual_ipaddress { 
        192.168.1.100 
    } 
} 
 
virtual_server 192.168.1.100 443 { 
    # 健康检查时间间隔 
    delay_loop 6 
    # 调度算法 
    # Doc: http://www.keepalived.org/doc/scheduling_algorithms.html 
    # Round Robin (rr) 
    # Weighted Round Robin (wrr) 
    # Least Connection (lc) 
    # Weighted Least Connection (wlc) 
    # Locality-Based Least Connection (lblc) 
    # Locality-Based Least Connection with Replication (lblcr) 
    # Destination Hashing (dh) 
    # Source Hashing (sh) 
    # Shortest Expected Delay (seq) 
    # Never Queue (nq) 
    # Overflow-Connection (ovf) 
    lb_algo rr 
    lb_kind NAT 
    persistence_timeout 50 
    protocol TCP 
    # 通过调度算法把Master切换到真实的负载均衡服务器上 
    # 真实的主机会定期确定进行健康检查,如果MASTER不可用,则切换到备机上 
    real_server 192.168.1.101 443 { 
        weight 1 
        TCP_CHECK { 
            # 连接超端口 
            connect_port 443 
            # 连接超时时间 
            connect_timeout 3 
        } 
    } 
    real_server 192.168.1.102 443 { 
        weight 1 
        TCP_CHECK { 
            connect_port 443 
            connect_timeout 3 
        } 
    } 
} 

2.4 配置haproxy

编辑lb1(192.168.1.101)和lb2(192.168.1.102)上的/etc/haproxy/haproxy.cfg

把后端服务器IP(192.168.1.2, 192.168.1.3, 192.168.1.4)加到backend里

#--------------------------------------------------------------------- 
# Global settings 
#--------------------------------------------------------------------- 
global 
    log         127.0.0.1 local2 
 
    chroot      /var/lib/haproxy 
    pidfile     /var/run/haproxy.pid 
    maxconn     4096 
    user        haproxy 
    group       haproxy 
    daemon 
 
    # turn on stats unix socket 
    stats socket /var/lib/haproxy/stats 
 
listen stats 
    bind    *:9000 
    mode    http 
    stats   enable 
    stats   hide-version 
    stats   uri       /stats 
    stats   refresh   30s 
    stats   realm     Haproxy\ Statistics 
    stats   auth      admin:admin 
 
 
frontend  k8s-api 
    bind *:443 
    mode tcp 
    option tcplog 
    tcp-request inspect-delay 5s 
    tcp-request content accept if { req_ssl_hello_type 1 } 
    default_backend k8s-api-backend 
 
backend k8s-api-backend 
    mode tcp 
    option tcplog 
    option tcp-check 
    balance roundrobin 
    server master1 192.167.1.2:80 maxconn 1024 weight 5 check 
    server master2 192.167.1.3:80 maxconn 1024 weight 5 check 
    server master3 192.167.1.4:80 maxconn 1024 weight 5 check 

2.5 配置nginx

给nginx添加SSL证书,配置过程略

vi /usr/share/nginx/html/index.html 

把index.html里面字符串Welcome to nginx改成Welcome to nginx HA

3 启动服务

3.1 启动nginx

sudo systemctl start nginx 
sudo systemctl enable nginx 

3.2 启动haproxy

sudo systemctl start haproxy 
sudo systemctl enable haproxy 

3.3 启动keepalived

sudo systemctl start keepalived 
sudo systemctl enable keepalived 

在MASTER上运行ip a

eno16777984:  mtu 1500 qdisc mq state UP qlen 1000 
    link/ether 00:xx:xx:xx:3d:0c brd ff:ff:ff:ff:ff:ff 
    inet 192.168.1.101/24 brd 192.168.1.255 scope global eno16777984 
       valid_lft forever preferred_lft forever 
    inet 192.168.1.100/32 scope global eno16777984 
       valid_lft forever preferred_lft forever 
    inet6 eeee:eeee:1c9d:2009:250:56ff:fe9c:3d0c/64 scope global noprefixroute dynamic 
       valid_lft 7171sec preferred_lft 7171sec 
    inet6 eeee::250:56ff:eeee:3d0c/64 scope link 
       valid_lft forever preferred_lft forever 

会发现VIP(192.168.1.100)已经绑定好了

inet 192.168.1.100/32 scope global eno16777984 
       valid_lft forever preferred_lft forever 

如果发现VIP无法绑定

vi /etc/sysctl.conf 

添加两行

net.ipv4.ip_forward = 1 
net.ipv4.ip_nonlocal_bind = 1 

让新配置生效

sysctl -p 

4 验证

4.1 查看状态

1. 在浏览器输入 http://192.168.1.100:9000/stats 查看haproxy状态

2. 在浏览器输入 https://192.168.1.100 查看服务状态

是否成功显示为nginx欢迎页面

4.2 主备切换

1. 在浏览器输入 https://192.168.1.100 查看是否成功显示nginx欢迎页面

2. lb1(192.168.1.101)关机,查看是否还可以访问https://192.168.1.100, 如果成功,则说明VIP成功切换到备机

3. 在lb2(192.168.1.102)上执行ip a,查看网卡是否绑定VIP(192.168.1.100)

3. 启动lb1(192.168.1.101)

目的是为了验证VIP是否切回MASTER主机(因为MASTER端的配置文件中priority为100,而BACKUP为99,h


以上所述就是小编给大家介绍的《搭建高可用负载均衡器: haproxy+keepalived》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
author-avatar
只爱裙装
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有