热门标签 | 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

编辑lb1(192.168.1.101)上的/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 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,heal

关于haproxy+keepalived如何搭建高可用负载均衡器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


推荐阅读
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 近期,某用户在重启RAC一个节点的数据库实例时,发现启动速度非常慢。同时业务部门反馈连接RAC存活节点的业务也受影响。通过对日志的分析, ... [详细]
  • 1、打开etcsysconfiggrub,   #vimetcsysconfiggrub   内容如下: ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • PartI:取经处: http:www.ramkitech.com201210tomcat-clustering ... [详细]
  • 一、生产服务器netstattcp连接状态 ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
  • 搭建lvs+keepalived+mfs+nagios架构
    搭建,lvs,keepalived,mfs ... [详细]
  • 架构设计:负载均衡层设计方案之负载场景和解决方式篇
    来自:JAVA入门中https:blog.csdn.netyinwenjiearticledetails46605451在上一篇《标准Web系统的架构分层》文章中&# ... [详细]
author-avatar
路霄峰_121
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有