keepalived详细笔记

keepalived 是一种基于VRRP(虚拟路由器冗余协议)的高可用解决方案,主要是用于服务器的负载均衡和高可用性的保障,自动将服务切换到备份服务器上,确保业务的连续性。

工作原理:

VRRP协议:一组路由器(或服务器)组成一个虚拟路由器,其中有一个主路由器(Master)和多个备份路由器(Backup)。虚拟路由器有一个虚拟 IP 地址(VIP),对外提供服务。主路由器定期发送VRRP通告消息,备份路由器监听这些消息。

当备份路由器在一定时间内没有收到主路由器的通告消息时,会认为主路由器发生故障,此时会根据优先级选举出一个新的主路由器,并接管虚拟 IP 地址,继续对外提供服务。

Keepalived 在此基础上,不仅实现了 VRRP 的基本功能,还添加了一些自定义的健康检查机制和服务管理功能。它对后端的真实服务器进行健康检查,如通过 HTTP、TCP 等协议检查服务器的端口是否可达、服务是否正常响应等。

如果检测到某台真实服务器出现故障,Keepalived 可以将其从负载均衡集群中剔除,待服务器恢复正常后再重新加入。

keepalived+nginx高可用实验

1.下载 Nginx 源码包:

cd /usr/local/src

wget http://nginx.org/download/nginx-1.18.0.tar.gz

  • 解压源码包:

    tar -zxvf nginx-1.18.0.tar.gz

    进入解压目录配置并编译安装

    cd nginx-1.18.0

    ./configure --prefix=/usr/local/nginx

    make && make install

    启动Nginx

    /usr/local/nginx/sbin/nginx

    • 验证 Nginx 是否成功启动:在浏览器中输入服务器的内网 IP 地址,若出现 Nginx 的欢迎页面,则启动成功。
  1. 安装 Keepalived:

    • 在 Server1 和 Server2 上同时进行以下操作:
复制代码
yum install -y keepalived
  1. 配置 Keepalived:

    • 在 Server1 上,编辑 /etc/keepalived/keepalived.conf 文件,如下:
复制代码
global_defs {
   router_id SERVER1  # 服务器唯一标识
}
​
# 定义 VRRP 实例
vrrp_instance VI_1 {
    state MASTER  # 此服务器为主服务器
    interface ens160  # 绑定的网络接口
    virtual_router_id 65  # 虚拟路由器 ID,取值范围 0 - 255,同一组需保持一致
    priority 100  # 优先级,数值越大优先级越高
    advert_int 1  # 通告间隔时间,单位为秒
    authentication {
        auth_type PASS  # 认证类型为简单密码认证
        auth_pass 123456  # 认证密码,需与 Server2 保持一致
    }
    virtual_ipaddress {
        192.168.65.200/24 dev ens160  # 虚拟 IP 地址
    }
}
  • 在 Server2 上,编辑 /etc/keepalived/keepalived.conf 文件,如下:
复制代码
global_defs {
   router_id SERVER2  # 服务器唯一标识
}
​
# 定义 VRRP 实例
vrrp_instance VI_1 {
    state BACKUP  # 此服务器为备用服务器
    interface ens160  # 绑定的网络接口
    virtual_router_id 65  # 虚拟路由器 ID,取值范围 0 - 255,同一组需保持一致
    priority 90  # 优先级,低于 Server1
    advert_int 1  # 通告间隔时间,单位为秒
    authentication {
        auth_type PASS  # 认证类型为简单密码认证
        auth_pass 123456  # 认证密码,需与 Server1 保持一致
    }
    virtual_ipaddress {
        192.168.65.200/24 dev ens160  # 虚拟 IP 地址
    }
​
}
  1. 启动 Keepalived:

    • 在 Server1 和 Server2 上分别执行:
复制代码
systemctl start keepalived

MASTER(主)节点(192.168.65.131)成功标志

192.168.65.131拿到了VIP 192.168.131.200。

BACKUP(备)节点(192.168.65.132)成功标志

BACKUP上只有192.168.65.132这个ip,正常。

  1. 测试高可用性

    • 初始状态下,在局域网内的其他电脑(或通过虚拟机的宿主机)上,在浏览器中输入虚拟 IP 地址(192.168.1.200),此时应该能访问到 Server1 上的 Nginx 页面,因为 Server1 为主服务器。

    • 模拟 Server1 故障:

      • 在 Server1 上停止 Keepalived 服务:
复制代码
systemctl stop keepalived

*初始状态:*

*模拟故障:*

  • 快速在浏览器中再次输入虚拟 IP 地址,此时页面应能快速切换到 Server2 上的 Nginx 页面,这表明 Server2 成功接管服务。

这样,就完成了一个 Keepalived + Nginx 的简单实验,实现了 Web 服务的高可用性。

相关推荐
新*1 小时前
ES 7.17 三节点 Docker 集群接入 IK 自定义词典:一次从丢插件到热更新的完整排障
运维·elasticsearch·docker·中文分词·ik分词
风翼靓崽1 小时前
jenkins搭建与简单使用
运维·jenkins
Z21-X21 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
进击的荆棘1 天前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
瑞雪兆丰年兮1 天前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss
那明眸似水1 天前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
小南家的青蛙1 天前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops
知已难寻1 天前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
Alluxio2 天前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
Sayai2 天前
Neo4j 图数据质量检查实战:环路检测、孤立节点与连通分量,两条 Cypher 引出的数据体检清单(含变长路径性能陷阱)
运维·neo4j·图数据库·数据质量·cypher