keepalived 配合Nginx 搭建高可用
Nginx 解决了负载均衡。
产生背景:一台Nginx可能会出现单点故障,导致程序不可用
一、准备
多台 nginx
keepalived: 监听nginx健康。
haproxy: 提供一个单独的虚拟IP和端口,统一接收客户端请求。
架构图:
+------------------------------------------------------------------------------------------+
+                                                                                          +
+                                     +--------------------+            +------------+     +
+                                     +                    +            +            +     +
+                                   + + Nginx + keepalived +  ++++++>   +  server1   +     +
+  +--------+      +-------+       /  +                    +   \   /    +            +     +
+  +        +      +       +      /   +--------------------+    \ /     +------------+     +
+  + client + ---> +  VIP  + --->                                X                         +  
+  +        +      +       +      \   +--------------------+    / \     +------------+     +
+  +--------+      +-------+       \  +                    +   /   \    +            +     +
+                                   + + Nginx + keepalived +  +++++++>  +  server2   +     +
+                                     +                    +            +            +     +
+                                     +--------------------+            +------------+     +
+                                                                                          +
+------------------------------------------------------------------------------------------+相关补充
keepalived 三个模块:
core模块:为keepalived的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;
check:负责健康检查,包括常见的各种检查方式;
VRRP模块:是来实现VRRP协议的。
keepalived 工作原理
VRRP 虚拟路由器冗余协议:
(1)为看解决静态路由的单点故障而产生。
(2)通过竞选协议机制将路由的任务交给某台VRRP路由器。
(3)主机通过IP多播包的方式相同通讯,告知备机存活
(4)主机发包,备机接包,挡备机接不到包时,启动接管程序接管主机资源。
(5)备机可以有多台,可以通过优先级竞选。
(6)VRRP 使用加密协议保证安全。
keepalived 高可用对之间通过VRRP 协议进行通讯,确定主备,主的优先级高于备。工作运行时主机会获得所有资源,备机处于等待状态,当主节点宕机时,备节点接管主节点的资源,代替主节点提供服务。
在keepalived 之间,只有作为主节点的的服务器会一直发送VRRP 广播包,告诉备节点,自己是存活的,此时备节点不会抢占主节点。当主节点不可用,即备节点接收不到主节点发送的广播包,就会启动相关服务接管资源,接管速度可以小于1秒。
二、安装 keepalived
1、安装 keepalived
yum install -y openssl-devel
yum  -y install  keepalived2、keepalived 常用命令
keepalived -v  # 查看版本
keepalived  start # 启动
keepalived stop # 停止2、配置
Keepalived默认的配置文件路径在 /etc/keepalived/keepalived.conf
Keepalived默认的日志文件保存在 /var/log/messages
主节点 keepalived.conf :
! Configuration File for keepalived
global_defs {
   smtp_connect_timeout 30    #连接超时时间
   router_id 192.168.100.123  #路由ID,可以通过hosts取别名
}
vrrp_instance VI_1 {           # VRRP 实例VI_1的配置
    state MASTER               # 指定instance初始状态,实际根据优先级决定.backup节点不一样
    interface ens33            # 容器中虚拟IP所在网卡名称
    virtual_router_id 51       # VRID,相同VRID为一个组,决定多播MAC地址
    priority 100               # 优先级,另一台改为90.backup节点不一样,数字越大优先级越高
    advert_int 1               # 检查间隔
    authentication {
        auth_type PASS         # 认证方式,可以是pass或ha
        auth_pass 1111         # 认证密码
    }
    virtual_ipaddress {
        192.168.100.101         #VIP地址,对外统一地址
    }
}备节点 keepalived.conf :
! Configuration File for keepalived
global_defs {
   smtp_connect_timeout 30   
   router_id 192.168.100.124
}
vrrp_instance VI_1 {
    state BACKUP         
    interface eth33        
    virtual_router_id 51  
    priority 90          
    advert_int 1         
    authentication {
        auth_type PASS    
        auth_pass 1111    
    }
    virtual_ipaddress {
        192.168.100.101         #VIP地址,对外统一地址
    }
}三、安装 haproxy
haproxy 官网应该被墙了,看github的:https://github.com/haproxy/haproxy
1、安装 haproxy
yum install -y gcc gcc-c++
yum  -y install  haproxy2、keepalived 常用命令
#启动 | #停止 | #查看状态
systemctl start haproxy.service 
systemctl stop haproxy.service 
systemctl status haproxy.service 
3、haproxy 配置
haproxy 配置文件需要自己创建 /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local3 info  # 用127.0.0.1上的rsyslog服务中的local3设备记录日志,日志级别为info
    user haproxy     #用户
    group haproxy    #组
    daemon     # 以守护进程的方式运行
    maxconn 4000   # 最大并发连接数
defaults
    log global   #表示用global模块中定义的日志配置
    mode http    # 模式  使用http模式
    option httplog       # 默认haproxy日志,不记录http请求,开启记录http请求
    option dontlognull   # 保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
    timeout connect 5000  # 成功连接一台服务器最长等待时间 单位毫秒
    timeout client 50000  # 连接客户端最长等待时间 单位毫秒
    timeout server 50000  # 服务器回应客户端最长等待时间 单位毫秒
frontend http_front
    bind 192.168.100.123:80   # 监听本服务器 192.168.100.123的ip 80端口
    stats uri /haproxy?stats   # haproxy的状态管理页面,通过/haproxy?stats来访问
    default_backend http_back  # 定义一个服务器组 http_back
backend web_server
    balance roundrobin  # 轮询
    option httpchk GET /index.html  # 启动http的健康检查
    option forwardfor header X-Forwarded-For   # 设置后端服务器可以看到客户端ip 访问日志中
    server node1 192.168.100.101:80 check inter 2000 rise 3 fall 3  
    # 后端服务器昵称node1    ip和端口  | check 关键字  | inter 健康检查间隔  2000毫秒| rise 检测 3次 认为正常| fall 检测3次认为失败 | weight 权重 30测试
测试访问haproxy http://192.168.100.101
模拟主节点宕机,关闭nginx,再次访问haproxy。
文章不完整,后续再补充。




