高可用

高可用方案

  1. LVS : 4 层负载均衡,性能强的,对内存和 cpu 资源消耗比较低, 不支持正则静态分离,大型网站配置复杂
  2. nginx : 7 层负载均衡, 适用面小,负载均衡可能会遇到 session 等问题,不支持通过 ur l来检测
  3. haproxy : 4+7层,负载均衡策略非常多,能很好地弥补 nginx 的缺点

在 Nginx 1.9.0 版本后,Nginx 便可以通过配置 –with-stream 模块的方式,来实现基于四层的反向代理

基于TCP的四层负载均衡配置文件不能配置 http 层

eg: k8s 主节点 10.0.0.101,10.0.0.102,10.0.0.103.端口均为 6443

访问任一节点 nginx:6443 则负载均衡到任一节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
user root;
worker_processes 1;

error_log /var/log/nginx/error.log warn;

events {
worker_connections 3000;
}

stream {
upstream backend {
server 10.0.0.101:6443 max_fails=2 fail_timeout=3s;
server 10.0.0.102:6443 max_fails=2 fail_timeout=3s;
server 10.0.0.103:6443 max_fails=2 fail_timeout=3s;
}

server {
listen 127.0.0.1:6443 so_keepalive=on; # 开启 TCP 存活探测
# proxy_connect_timeout 10s; # 端口保持时间
proxy_connect_timeout 1s;
proxy_pass backend;
}
}

Keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此, Keepalived 除了能够管理 LVS 软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL 等)的高可用解决方案软件

准备工作

示例:

  1. 多台 Nginx 服务器 : smtp_server 192.168.43.101(主)smtp_server 192.168.43.102(备)
  2. 安装 Keepalived : yum install -y Keepalived ,配置文件 默认 /etc/keepalived/keepalived.conf
  3. 虚拟 ip : 192.168.43.100

主备模式

192.168.43.101 上修改 keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_instance VI_1 {
state MASTER # 主节点
interface ens33 # 当前用的 ens33 网卡
virtual_router_id 51
priority 100 # 优先级配置
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress { # VIP
192.168.43.100
}

}

192.168.43.102 上修改 keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_instance VI_1 {
state BACKUP # 备节点
interface ens33 # 当前用的 ens33 网卡
virtual_router_id 51
priority 80 # 优先级配置
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress { # VIP
192.168.43.100
}

}

所有主机执行

1
2
systemctl start  keepalived   
systemctl enable keepalived

双主模式

再配置一段新的 vrrp_instance(实例)规则,主 上面加配置一个 从 的实例规则,从 上面加配置一个 主 的实例规则

192.168.43.101 上修改 keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_instance VI_1 {
state MASTER # 主节点
interface ens33 # 当前用的 ens33 网卡
virtual_router_id 51
priority 100 # 优先级配置
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress { # VIP
192.168.43.100
}

}

vrrp_instance VI_2 {
state BACKUP # 备节点
interface ens33 # 当前用的 ens33 网卡
virtual_router_id 51
priority 100 # 优先级配置
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress { # VIP
192.168.43.100
}

}

192.168.43.102 上修改 keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_instance VI_1 {
state BACKUP # 备节点
interface ens33 # 当前用的 ens33 网卡
virtual_router_id 51
priority 80 # 优先级配置
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress { # VIP
192.168.43.100
}

}

vrrp_instance VI_2 {
state MASTER # 主节点
interface ens33 # 当前用的 ens33 网卡
virtual_router_id 51
priority 100 # 优先级配置
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress { # VIP
192.168.43.100
}

}

所有主机执行

1
systemctl restart keepalived