嘘~ 正在从服务器偷取页面 . . .

keepalived


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  keepalived

2、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  haproxy

2、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。

文章不完整,后续再补充。



版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Small-Rose / 张小菜 !
评论
  目录