环境
[09:43:26 root@ceshi-01 ~ $]cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[09:43:08 root@ceshi-01 ~ $]haproxy -v
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
[09:43:55 root@ceshi-01 ~ $]keepalived -v
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Copyright(C) 2001-2017 Alexandre Cassen, <acassen@gmail.com>
Build options: PIPE2 LIBNL3 RTA_ENCAP RTA_EXPIRES RTA_PREF FRA_OIFNAME FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK LIBIPTC LIBIPSET_DYNAMIC LVS LIBIPVS_NETLINK VRRP VRRP_AUTH VRRP_VMAC SOCK_NONBLOCK SOCK_CLOEXEC FIB_ROUTING INET6_ADDR_GEN_MODE SNMP_V3_FOR_V2 SNMP SNMP_KEEPALIVED SNMP_CHECKER SNMP_RFC SNMP_RFCV2 SNMP_RFCV3 SO_MARK
第一步:安装并设置 Keepalived
1.安装
yum install -y ipvsadm keepalived
2.设置 Keepalived 配置文件
这里只需要修改 virtual_router_id、VIP 和验证密码即可
cat <<EOF >/etc/keepalived/keepalived.conf
! Configuration File for keepalived
## 建议设置为主机名
global_defs {
router_id `hostname`
}
vrrp_instance VI_1 {
## 以下两行设置为非抢占模式
state BACKUP
nopreempt
interface ens192
## 建议设置为第一台服务器 IP 地址最后一位
virtual_router_id 211
## 优先级
priority 100
advert_int 1
## 设置验证方式为密码验证
authentication {
auth_type PASS
auth_pass 111112113
}
## 虚拟 IP,可以绑定多个
virtual_ipaddress {
192.168.30.110
}
}
EOF
cat /etc/keepalived/keepalived.conf
4.启动并设置开机自动启动
systemctl enable keepalived.service
systemctl stop keepalived.service
systemctl start keepalived.service
systemctl status keepalived.service
第二步:安装并设置 Haproxy
1.安装
yum install -y haproxy
2.配置文件
cat <<\EOF >/etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# 全局配置
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
## 每个 haproxy 进程可接受的最大并发连接数
maxconn 4000
## 设置为后台运行模式
daemon
## 进程数,此参数要求运行运行模式为 daemon,默认启用一个进程。
## 一般来说该值的设置应小于服务器的 CPU 核数
## 创建多个进程,能减少每个进程的任务队列,但是过多的进程可能会导致进程的崩溃
nbproc 4
# turn on stats unix socket
# stats socket /var/lib/haproxy/stats
frontend main *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
## 指定默认的后端服务器池
default_backend app
backend static
## 负载均衡算法
## roundrobin 基于权重的轮询
## static-rr 也只基于权重的轮训,不过此算法为静态方法,在运行时调整其服务器权重不会生效
## source 基于源地址 hash
## leastconn 最少连接,在会话时间较长的场景中推荐此算法,不适合会话较短的环境中(例如基于 HTTP 的应用)
## uri 基于 URI hash
## uri_param 基于 RUL 路径中的参数进行转发
## hdr(<name>) 根据 http 头进行转发,如果指定的 http 头名称不存在,则使用 roundrobin 策略
balance roundrobin
server static 0.0.0.0:8443 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server k8s-01 192.168.30.111:6443 check port 6443 inter 5000
server k8s-02 192.168.30.112:6443 check port 6443 inter 5000
server k8s-03 192.168.30.113:6443 check port 6443 inter 5000
EOF
3.参考配置文件
https://www.cnblogs.com/cptao/p/10912644.html
cat <<\EOF >/etc/haproxy/haproxy.cfg
global
chroot /var/lib/haproxy
daemon
group haproxy
user haproxy
pidfile /var/lib/haproxy.pid
maxconn 20000
spread-checks 3
nbproc 8
defaults
## 模式(tcp|http|health),tcp是4层,http是7层,health只会返回 OK
## tcp 在此模式下,客户端和服务器之间将简历一个全双工的连接,不会对7层报文做任何类型的检查,经常用于 SSL、SSH、SMTP等应用
## http 在此模式下,护短请求在转发至后端服务器之前会被深度分析,所有与 RFC 格式不兼容的请求都会被拒绝
## health 目前该模式基本已废弃
mode tcp
## 集成 global 中的 log 定义
log global
## 日志中不记录空链接。
## 官方文档中中提示:如果上游没有其他的负载均衡器的话,建议不要使用此参数,因为互联网上的恶意扫描或其他启动就不会被记录
option dontlognull
option http-server-close
## 当服务器故障时将会话重新分发到其他健康的服务器上,当原来恢复时,会话又被定向到已恢复的服务器上
option redispatch
## 3次连接失败就认为服务不可用,也可以通过后面设置
retries 3
## http 请求超时
timeout http-request 10s
## 请求超时
timeout queue 1m
## 连接超时
timeout connect 10s
## 客户端超时
timeout client 1m
## 服务器超时
timeout server 1m
timeout http-keep-alive 10s
## 心跳检测超时
timeout check 10s
## 最大连接
maxconn 3000
listen https-apiserver
bind 0.0.0.0:8443
mode tcp
balance roundrobin
timeout server 900s
timeout connect 15s
server k8s-01 192.168.30.111:6443 check port 6443 inter 5000 fall 5
server k8s-02 192.168.30.112:6443 check port 6443 inter 5000 fall 5
server k8s-03 192.168.30.113:6443 check port 6443 inter 5000 fall 5
EOF
4.启动服务
systemctl enable haproxy.service
systemctl stop haproxy.service
systemctl start haproxy.service
systemctl status haproxy.service
网友评论