1 介绍
Nginx利用Keepalived提供标准的主备形式的高可用(HA)。在主机发生问题的时候这提供了故障冗余。我们能使用额外节点扩展该功能并配置改变Keepalived提供的额外冗余和可伸缩性选项。
注意:在公共云部署Nginx,推荐使用4层或TCP负载均衡器服务云提供商提供的分配流量为双主NGINX功能。
2 为什么添加备用节点?
许多组织有冗余级别的严格要求,两个节点的主备系统可能不能满足需求。添加第三个节点配置其它两个节点宕机的接管事件,提供进一步的冗余并保证配置简单。这也允许维护节点不丢失冗余。
3 为什么配置双主?
你能以双主模式运行Nginx,在两个或更多的节点同时处理通信。使用多个活跃IP地址达到。每个IP地址托管一个Nginx实例,Keepalived配置确保,这些IP地址分布在两个或更多活跃节点。
-
当托管多个服务,每个服务的DNS名称解析为其中一个IP地址。共享服务之间的IP地址。
-
使用DNS轮询映射单个DNS名到多个IP地址。
-
使用3层负载均衡设备,例如数据中心边缘负载均衡器分发3层通信在IP地址之间。
双主可以使用你的负载均衡集群的能力递增,但要注意,如果双主中的一个节点失效,能力将减半。你可以使用双主作为安全的一种形式,当两个节点是活动的时,提供足够的资源来吸收意料之外的通信高峰,你能使用双主在较大的集群中提供更多冗余。
注意,Nginx实例在负载均衡集群中不共享配置或状态。最佳性能是双主场景,确保连接从相同客户端路由到相同活跃IP地址,使用回话持久方法,例如sticky cookie,不依赖于服务器端状态。
4 配置添加备用节点
为了给主备HA添加额外备用节点,执行以下步骤:
1、新安装一个Nginx+Keepalived
2、从之前的备用节点复制/etc/keepalived/keepalived.conf到新节点的相同位置。
3、编辑新节点的keepalived.conf文件:
-
降低priority,小于其它节点
-
改变unicast_src_ip匹配新节点的主机IP
-
在unicast_peer添加备用节点的IP,列出其它所有节点,额外节点192.168.10.12,其它两个节点192.168.10.10、192.168.10.11。VIP是192.168.10.100。
vrrp_script chk_nginx_service {
script "/usr/lib/keepalived/nginx-ha-check"
interval 3
weight 50
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
priority 99
virtual_router_id 51
advert_int 1
unicast_src_ip 192.168.10.12
unicast_peer {
192.168.10.10
192.168.10.11
}
authentication {
auth_type PASS
auth_pass 22a2fb02fb4bc6114ef361ef3925692f
}
virtual_ipaddress {
192.168.10.100
}
track_script {
chk_nginx_service
}
notify "/usr/lib/keepalived/nginx-ha-notify"
}
- 编辑其它节点的keepalived.conf文件:
- 添加新节点IP到unicast_peer
unicast_peer {
192.168.10.11
192.168.10.12
}
-
重启所有节点的Keepalived
-
依次停止Nginx服务进行测试
5 配置双主
为了两个节点同时通信,必须使用额外的虚拟IP。这个新VIP将活跃在之前的备用节点,因此,每个节点活跃节点使用它们自己的VIP。为了配置一个Nginx双主HA,执行以下步骤:
1、编辑备用节点的keepalived.conf文件:
-
复制整个vrrp_instance block VI_1并粘贴以下块
-
在新的vrrp_instance块中:
-
重命名vrrp_instance为VI_2或其它唯一名称
-
改变virtual_router_id为61或其它唯一值
-
改变virtual_ipaddress为一个在相同子网中有效的IP,在该例子中是192.168.10.101
-
改变priority值为100
-
vrrp_script chk_nginx_service {
script "/usr/lib/keepalived/nginx-ha-check"
interval 3
weight 50
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
priority 101
virtual_router_id 51
advert_int 1
unicast_src_ip 192.168.10.10
unicast_peer {
192.168.10.11
}
authentication {
auth_type PASS
auth_pass 22a2fb02fb4bc6114ef361ef3925692f
}
virtual_ipaddress {
192.168.10.100
}
track_script {
chk_nginx_service
}
notify "/usr/lib/keepalived/nginx-ha-notify"
}
vrrp_instance VI_2 {
interface eth0
state BACKUP
priority 100
virtual_router_id 61
advert_int 1
unicast_src_ip 192.168.10.10
unicast_peer {
192.168.10.11
}
authentication {
auth_type PASS
auth_pass 22a2fb02fb4bc6114ef361ef3925692f
}
virtual_ipaddress {
192.168.10.101
}
track_script {
chk_nginx_service
}
notify "/usr/lib/keepalived/nginx-ha-notify"
}
- 编辑主节点的keepalived.conf文件:
-
重复执行备用节点的步骤
- 设置新的vrrp_instance的priority值为99或低于备用节点
-
-
重启所有节点