教你搭建高可用负载均衡器

发布时间:2022-07-21 01:51:02 作者:刚毅 阅读量:4606

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

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

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

本文会根据拓扑图,用haproxy和keepalived搭建一个负载均衡器。当然点击右侧,爱秒云免费协助你部署高可用负债均衡。

1 负载均衡器拓扑图

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 所有主机上关闭防火墙


  1. systemctl stop firewalld 
  2. systemctl disable firewalld 

2.2.2 所有主机关闭selin


  1. setenforce 0 
  2. vi /etc/selin/config 
  3. SELIN=disabled 

2.3 安装haproxy和keepalived

lb1和lb2上安装haproxy和keepalived


  1. yum install haproxy keepalived -y 

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

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


  1. yum install epel-release -y 
  2. 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


  1. ! Configuration File for keepalived 
  2.  
  3. global_defs { 
  4.    # 通知邮件服务器的配置 
  5.    notification_email { 
  6.      # 当master失去VIP或则VIP的时候,会发一封通知邮件到your-email@qq.com 
  7.      your-email@qq.com 
  8.    } 
  9.    # 发件人信息 
  10.    notification_email_from keepalived@qq.com 
  11.    # 邮件服务器地址 
  12.    smtp_server 127.0.0.1 
  13.    # 邮件服务器超时时间 
  14.    smtp_connect_timeout 30 
  15.    # 邮件TITLE 
  16.    router_id LVS_DEVEL 
  17.  
  18. vrrp_instance VI_1 { 
  19.     # 主机: MASTER 
  20.     # 备机: BACKUP 
  21.     state MASTER 
  22.     # 实例绑定的网卡, 用ip a命令查看网卡编号 
  23.     interface eno16777984 
  24.     # 虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样 
  25.     virtual_router_id 88 
  26.     # 优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器 
  27.     priority 100 
  28.     # 主备之间同步检查的时间间隔单位秒 
  29.     advert_int 1 
  30.     # 验证类型和密码 
  31.     authentication { 
  32.         # 验证类型有两种 PASS和HA 
  33.         auth_type PASS 
  34.         # 验证密码,在一个实例中主备密码保持一样 
  35.         auth_pass 11111111 
  36.     } 
  37.     # 虚拟IP地址,可以有多个,每行一个 
  38.     virtual_ipaddress { 
  39.         192.168.1.100 
  40.     } 
  41.  
  42. virtual_server 192.168.1.100 443 { 
  43.     # 健康检查时间间隔 
  44.     delay_loop 6 
  45.     # 调度算法 
  46.     # Doc: http://www.keepalived.org/doc/scheduling_algorithms.html 
  47.     # Round Robin (rr) 
  48.     # Weighted Round Robin (wrr) 
  49.     # Least Connection (lc) 
  50.     # Weighted Least Connection (wlc) 
  51.     # Locality-Based Least Connection (lblc) 
  52.     # Locality-Based Least Connection with Replication (lblcr) 
  53.     # Destination Hashing (dh) 
  54.     # Source Hashing (sh) 
  55.     # Shortest Expected Delay (seq) 
  56.     # Never Queue (nq) 
  57.     # Overflow-Connection (ovf) 
  58.     lb_algo rr 
  59.     lb_kind NAT 
  60.     persistence_timeout 50 
  61.     protocol TCP 
  62.     # 通过调度算法把Master切换到真实的负载均衡服务器上 
  63.     # 真实的主机会定期确定进行健康检查,如果MASTER不可用,则切换到备机上 
  64.     real_server 192.168.1.101 443 { 
  65.         weight 1 
  66.         TCP_CHECK { 
  67.             # 连接超端口 
  68.             connect_port 443 
  69.             # 连接超时时间 
  70.             connect_timeout 3 
  71.         } 
  72.     } 
  73.     real_server 192.168.1.102 443 { 
  74.         weight 1 
  75.         TCP_CHECK { 
  76.             connect_port 443 
  77.             connect_timeout 3 
  78.         } 
  79.     } 

2.3.2 配置BACKUP

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


  1. ! Configuration File for keepalived 
  2.  
  3. global_defs { 
  4.    # 通知邮件服务器的配置 
  5.    notification_email { 
  6.      # 当master失去VIP或则VIP的时候,会发一封通知邮件到your-email@qq.com 
  7.      your-email@qq.com 
  8.    } 
  9.    # 发件人信息 
  10.    notification_email_from keepalived@qq.com 
  11.    # 邮件服务器地址 
  12.    smtp_server 127.0.0.1 
  13.    # 邮件服务器超时时间 
  14.    smtp_connect_timeout 30 
  15.    # 邮件TITLE 
  16.    router_id LVS_DEVEL 
  17.  
  18. vrrp_instance VI_1 { 
  19.     # 主机: MASTER 
  20.     # 备机: BACKUP 
  21.     state BACKUP 
  22.     # 实例绑定的网卡, 用ip a命令查看网卡编号 
  23.     interface eno16777984 
  24.     # 虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样 
  25.     virtual_router_id 88 
  26.     # 优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器 
  27.     priority 99 
  28.     # 主备之间同步检查的时间间隔单位秒 
  29.     advert_int 1 
  30.     # 验证类型和密码 
  31.     authentication { 
  32.         # 验证类型有两种 PASS和HA 
  33.         auth_type PASS 
  34.         # 验证密码,在一个实例中主备密码保持一样 
  35.         auth_pass 11111111 
  36.     } 
  37.     # 虚拟IP地址,可以有多个,每行一个 
  38.     virtual_ipaddress { 
  39.         192.168.1.100 
  40.     } 
  41.  
  42. virtual_server 192.168.1.100 443 { 
  43.     # 健康检查时间间隔 
  44.     delay_loop 6 
  45.     # 调度算法 
  46.     # Doc: http://www.keepalived.org/doc/scheduling_algorithms.html 
  47.     # Round Robin (rr) 
  48.     # Weighted Round Robin (wrr) 
  49.     # Least Connection (lc) 
  50.     # Weighted Least Connection (wlc) 
  51.     # Locality-Based Least Connection (lblc) 
  52.     # Locality-Based Least Connection with Replication (lblcr) 
  53.     # Destination Hashing (dh) 
  54.     # Source Hashing (sh) 
  55.     # Shortest Expected Delay (seq) 
  56.     # Never Queue (nq) 
  57.     # Overflow-Connection (ovf) 
  58.     lb_algo rr 
  59.     lb_kind NAT 
  60.     persistence_timeout 50 
  61.     protocol TCP 
  62.     # 通过调度算法把Master切换到真实的负载均衡服务器上 
  63.     # 真实的主机会定期确定进行健康检查,如果MASTER不可用,则切换到备机上 
  64.     real_server 192.168.1.101 443 { 
  65.         weight 1 
  66.         TCP_CHECK { 
  67.             # 连接超端口 
  68.             connect_port 443 
  69.             # 连接超时时间 
  70.             connect_timeout 3 
  71.         } 
  72.     } 
  73.     real_server 192.168.1.102 443 { 
  74.         weight 1 
  75.         TCP_CHECK { 
  76.             connect_port 443 
  77.             connect_timeout 3 
  78.         } 
  79.     } 

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里


  1. #--------------------------------------------------------------------- 
  2. Global settings 
  3. #--------------------------------------------------------------------- 
  4. global 
  5.     log         127.0.0.1 local2 
  6.  
  7.     chroot      /var/lib/haproxy 
  8.     pidfile     /var/run/haproxy.pid 
  9.     maxconn     4096 
  10.     user        haproxy 
  11.     group       haproxy 
  12.     daemon 
  13.  
  14.     # turn on stats unix socket 
  15.     stats socket /var/lib/haproxy/stats 
  16.  
  17. listen stats 
  18.     bind    *:9000 
  19.     mode    http 
  20.     stats   enable 
  21.     stats   hide-version 
  22.     stats   uri       /stats 
  23.     stats   refresh   30s 
  24.     stats   realm     Haproxy Statistics 
  25.     stats   auth      admin:admin 
  26.  
  27.  
  28. frontend  k8s-api 
  29.     bind *:443 
  30.     mode tcp 
  31.     option tcplog 
  32.     tcp-request inspect-delay 5s 
  33.     tcp-request content accept if { req_ssl_hello_type 1 } 
  34.     default_backend k8s-api-backend 
  35.  
  36. backend k8s-api-backend 
  37.     mode tcp 
  38.     option tcplog 
  39.     option tcp-check 
  40.     balance roundrobin 
  41.     server master1 192.167.1.2:80 maxconn 1024 weight 5 check 
  42.     server master2 192.167.1.3:80 maxconn 1024 weight 5 check 
  43.     server master3 192.167.1.4:80 maxconn 1024 weight 5 check 

2.5 配置nginx

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


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

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

3 启动服务

3.1 启动nginx


  1. sudo systemctl start nginx 
  2. sudo systemctl enable nginx 

3.2 启动haproxy


  1. sudo systemctl start haproxy 
  2. sudo systemctl enable haproxy 

3.3 启动keepalived


  1. sudo systemctl start keepalived 
  2. sudo systemctl enable keepalived 

在MASTER上运行ip a


  1. eno16777984: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 
  2.     link/ether 00:xx:xx:xx:3d:0c brd ff:ff:ff:ff:ff:ff 
  3.     inet 192.168.1.101/24 brd 192.168.1.255 scope global eno16777984 
  4.        valid_lft forever preferred_lft forever 
  5.     inet 192.168.1.100/32 scope global eno16777984 
  6.        valid_lft forever preferred_lft forever 
  7.     inet6 eeee:eeee:1c9d:2009:250:56ff:fe9c:3d0c/64 scope global noprefixroute namic 
  8.        valid_lft 7171sec preferred_lft 7171sec 
  9.     inet6 eeee::250:56ff:eeee:3d0c/64 scope link 
  10.        valid_lft forever preferred_lft forever 

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


  1. inet 192.168.1.100/32 scope global eno16777984 
  2.        valid_lft forever preferred_lft forever 

如果发现VIP无法绑定


  1. vi /etc/sysctl.conf 

添加两行


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

让新配置生效


  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,health check会自动把VIP绑定到priority高的主机上)。

***本网站图片,文字之类版权申明,因为网站可以由注册用户自行上传图片或文字,本网站无法鉴别所上传图片或文字的知识版权,如果侵犯,请及时通知我们,本网站将在第一时间及时删除。

我要评论

网友评论


评论时间:2023-05-07 21:25:01

7.快速云主机 扩展性服务器操作系统排行 性


评论时间:2023-01-15 15:25:02

12.接着进入“工具→云主机营销话术 任务管理器”,选中“虚拟主机的申请流程 →任务管理器”,选中“新建项目—>更改名称”复选框后即可进行项目的修改了


评论时间:2022-12-15 00:25:01

11.拥有较强的沟通协调能家用服务器可以干什么 力搭建scratch服务器 的沟通协调能力


评论时间:2022-11-26 00:25:02

6、服务器机柜42u什么意思 系统维护linux服务器搭建的要点 维护


评论时间:2022-09-27 18:25:01

它可以让我们日本云主机推荐 随时随地都能找到自己所服务器上架安装图 能找到自己所需要的信息

最新文章

 2023-12-25 22:44:35   admin

活动发布区版规

 2023-05-27 22:03:52   御风而行

容器、无服务器、虚拟机:安全性差...

 2023-05-27 19:08:41   小绵羊0123

科技巨头布局云端 服务器 网络硬...

 2023-05-27 18:17:46   姐姐的跟屁虫

钉钉因系统访问流量激增,宕机1小...

热门阅读

 2022-07-23 00:34:02   freeatom

常见ftp命令 FTP命令使用详...

 2022-07-21 02:17:02   ares

双硬盘组建Raid0磁盘阵列图文...

 2022-07-20 06:17:02   mankeung123

用友软件客户端连接不上服务器的解...

 2022-07-23 00:51:02   antonfxb

WebService实例

 2022-07-13 05:38:02   苯小孩

开发、运维不可不看的Linux调...

 2022-07-20 18:51:02   nightstone

如何使用Charles抓取Web...

随机文章

 2022-01-25 05:38:02   coinchen

按服务器性能类型选购服务器

 2022-03-17 05:38:02   longmei

如何使用nslookup命令检查...

 2022-07-14 05:38:02   ok1818

常用的9款web开发者工具

 2022-07-17 05:38:02   venlove

分享一款好用的URL采集工具(S...

 2022-07-19 01:34:02   lhb2003

【经验分享】Iperf测试网络吞...

 2022-07-19 05:34:03   ghh

2018国内外10款erp软件排...

热评文章

 2022-07-19 20:17:02   dengyu0429

linux vi使用及详细介绍

 2022-07-20 01:00:05   激动的舌头

Linux视频教程:用户管理命令...

 2022-07-21 20:51:02   jessica-an

创建本地FTP站点

 2022-02-07 05:38:03   jasonkidd

WEB服务器配置详解

 2022-07-20 04:51:02   wolfssss

ACL权限-默认与递归(4)

 2022-07-22 15:00:05   淡水珊瑚

Linux下 Samba Ser...
全球云服务器
Catfish(鲶鱼) Blog V 4.7.3