DAY 52 LVS+Keepalived群集

news2024/11/20 14:30:35

Keepalived工具介绍

普通集群容易出现的问题

企业应用中,单台服务器承担应用存在单点故障的危险。

单点故障一旦发生, 企业服务将发生中断,造成极大的危害。

 Keepalived工具

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

Keepalived是专为LVS和HA设计的一款健康检查工具:

  • 支持故障自动切换(Failover)

  • 支持节点健康状态检查(Health Checking)

    • 判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点。

Keepalived实现原理剖析

 Keepalived采用VRRP热备份协议

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能。

VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案:

  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务。

  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态。

  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。

  • 在配置时设置优先级,优先级高的那一方为master。master节点承载着VIP地址。

Keepalived多机热备

Keepalived可实现多机热备,每个热备组可有多台服务器。(由于服务器的成本较高,一般使用2~3台服务器做热备组,大部分公司都是1主1备两台服务器)

双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器。

  Keepalived工作原理

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

  • 主服务器作用:转发数据;发送报文告诉备服务器自己在线。
  • 备服务器作用:监听主服务器发来的数据;收不到消息的时候就接替主服务器。

Keepalived体系主要模块

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。
  • check模块:# LVS-DR模式+keepalived 高可用集群部署负责健康检查,常见的方式有端口检查及URL检查。

LVS-DR模式+keepalived 高可用集群部署

实验环境

主DR调度服务器  192.168.137.10
备DR调度服务器  192.168.137.15
NFS服务器      192.168.137.20
web1服务器     192.168.137.30
web2服务器     192.168.137.40
VIP           192.168.137.188
客户端         192.168.137.100

 配置NFS服务器 192.168.137.20

#关闭防火墙
systemctl stop firewalld.service 
setenforce 0
#安装nfs服务
yum install nfs-utils rpcbind -y
cd /opt/
#创建共享目录
mkdir nfs
cd nfs/
mkdir cxk rap
echo "ji ni tai mei" >cxk/index.html
echo "lv shi han jing gao" >rap/index.html
#添加权限
chmod 777 *
#共享策略
vim /etc/exports
-------------------------------------------
/opt/nfs/cxk 192.168.137.0/24(rw,sync,no_root_squash)
/opt/nfs/rap 192.168.137.0/24(rw,sync,no_root_squash)
#开启服务发布共享
systemctl start rpcbind
systemctl start nfs
systemctl enable nfs
#查看共享策略
showmount -e

 配置192.168.137.30 web1 服务器

#关闭防火墙
systemctl stop firewalld.service 
setenforce 0
#查看NFS服务器共享策略
showmount -e 192.168.137.20
#安装apache服务
yum install httpd -y
#挂载共享目录
mount 192.168.137.20:/opt/nfs/my /var/www/html/
df -h
cd /var/www/html/
cat index.html
#重启服务
systemctl restart httpd.service 
输入网址测试
 
#配置网关
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
-------------------------------------------------------------
DEVICE=lo:0
IPADDR=192.168.137.188
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
---------------------------------------------------------------------------
#重启网卡
systemctl restart network
ifconfig
#设置路由
route add -host 192.168.137.188 dev lo:0
route -n
#将设置路由命令添加到开机执行配置文件内相当于开机自启并给配置文件添加执行权限
vim /etc/rc.d/rc.local 
-----------------------------------------------
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
/usr/sbin/route add -host 192.168.52.188 dev lo:0
---------------------------------------------------
chmod +x /etc/rc.d/rc.local
#调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
-------------------------------------------
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
-----------------------------------------
sysctl -p
#开启web服务
systemctl restart httpd

关闭防火墙 selinux

 安装apache服务

 挂载

 

 重启服务并输入IP地址查看

 配置网关

 设置路由

 开机执行命令

 调整proc响应参数

 重启服务

 配置192.168.137.40 web2 服务器

#关闭防火墙
systemctl stop firewalld.service 
setenforce 0
#查看NFS服务器共享策略
showmount -e 192.168.137.20
#安装apache服务
yum install httpd -y
#挂载共享目录
mount 192.168.137.110:/opt/nfs/rap /var/www/html/
df -h
cd /var/www/html/
cat index.html
#重启服务
systemctl restart httpd.service 
输入网址测试
 
#配置网关
#此地址仅用作发送We响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。
#因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
-------------------------------------------------------------
DEVICE=lo:0
IPADDR=192.168.137.188
NETMASK=255.255.255.255 #必须全为1
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
---------------------------------------------------------------------------
重启网卡
​
systemctl restart network
ifconfig
#设置路由
route add -host 192.168.137.188 dev lo:0
route -n
#将设置路由命令添加到开机执行配置文件内相当于开机自启并给配置文件添加执行权限
vim /etc/rc.d/rc.local 
-----------------------------------------------
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
/usr/sbin/route add -host 192.168.137.188 dev lo:0
---------------------------------------------------
chmod +x /etc/rc.d/rc.local
#调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
-------------------------------------------
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
-----------------------------------------
sysctl -p
#开启web服务
systemctl restart httpd

同web操作一样

 

 配置主负载调度器 192.168.137.10

#关闭防火墙
systemctl stop firewalld
setenforce 0
 
#安装keepalived和ipvsadm
yum install -y ipvsadm keepalived
 
#开启ip_vs并查看服务是否开启
modprobe ip_vs
cat /proc/net/ip_vs
#配置keepalived 
rpm -qc keepalived          #查看配置文件位置
cd /etc/keepalived/         #切换到配置文件目录
cp keepalived.conf{,.bak}   #备份原先的配置文件
vim keepalived.conf         #修改配置文件
--------------------------------------------------
global_defs {   ##定义全局参数
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1    #第10行修改,邮件服务指向本地
   smtp_connect_timeout 30
   router_id LVS_01         #第12行指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
                
#删除剩余行
}
 
vrrp_instance VI_1 {     #定义VRRP热备实例参数
    state MASTER         #第20行指定热备状态,主为MASTER,备为BACKUP
    interface ens33      #第21行修改,指定承载vip地址的物理接口
    virtual_router_id 51 #修改,指定虚拟路由器的ID号,每个热备组保持一致
    #nopreempt           #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    priority 100         #23行修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    advert_int 1         #通告间隔秒数(心跳频率)
    authentication {     	#定义认证信息,每个热备组保持一致
        auth_type PASS      #认证类型
        auth_pass 123321    #第27行修改,指定验证密码,主备服务器保持一致
    }
    virtual_ipaddress {      #指定群集vip地址
        192.168.137.188
    }
}
#修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.137.188 80 {
    delay_loop 6                      #健康检查的间隔时间(秒)
    lb_algo rr                        #指定调度算法,轮询(rr)
    lb_kind DR                        #第39行修改,指定群集工作模式,直接路由(DR)
    persistence_timeout 0             #连接保持时间(秒)
    protocol TCP                      #应用服务采用的是 TCP协议
real_server 192.168.137.30 80 {       #43行修改,指定第一个Web节点的地址、端口
weight 1                              #节点的权重
#45行删除,添加以下健康检查方式                       
          TCP_CHECK {
              connect_port 80         #添加检查的目标端口
              connect_timeout 3       #添加连接超时(秒)
              nb_get_retry 3          #添加重试次数
              delay_before_retry 3    #添加重试间隔
          }
      }
 
      real_server 192.168.137.40 80 {     #添加第二个 Web节点的地址、端口
          weight 1
          TCP_CHECK {
              connect_port 80
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
##删除后面多余的配置#
 }
----------------------------------------------------------
systemctl start keepalived.service   #重新启动服务
ip addr      #查看虚拟网卡vip
  
#启动 ipvsadm 服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
#调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
--------------------------------------
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
-----------------------------------------
sysctl -p #加载参数
scp keepalived.conf 192.168.137.15:`pwd`  #远程传输文件到备负载调度器

关闭防火墙 ,安装keepalived和ipvsadm

 开启ip_vs并查看服务是否开启

 配置keepalived

启动服务

 保存策略

 调整proc响应参数 并加载

配置备负载调度器

#关闭防火墙
systemctl stop firewalld
setenforce 0
 
#安装keepalived和ipvsadm
yum install -y ipvsadm keepalived
 
#开启ip_vs并查看服务是否开启
modprobe ip_vs
cat /proc/net/ip_vs
#配置keepalived 
rpm -qc keepalived          #查看配置文件位置
cd /etc/keepalived/         #切换到配置文件目录
cp keepalived.conf{,.bak}   #备份原先的配置文件
vim keepalived.conf         #修改配置文件
--------------------------------------------------
global_defs {   ##定义全局参数
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1    #第10行修改,邮件服务指向本地
   smtp_connect_timeout 30
   router_id LVS_02         #第12行指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
                
#删除剩余行
}
 
vrrp_instance VI_1 {     #定义VRRP热备实例参数
    state BACKUP         #第20行指定热备状态,主为MASTER,备为BACKUP
    interface ens33      #第21行修改,指定承载vip地址的物理接口
    virtual_router_id 51 #修改,指定虚拟路由器的ID号,每个热备组保持一致
    #nopreempt           #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    priority 90         #23行修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    advert_int 1         #通告间隔秒数(心跳频率)
    authentication {     	#定义认证信息,每个热备组保持一致
        auth_type PASS      #认证类型
        auth_pass 123321    #第27行修改,指定验证密码,主备服务器保持一致
    }
    virtual_ipaddress {      #指定群集vip地址
        192.168.137.188
    }
}
#修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.137.188 80 {
    delay_loop 6                      #健康检查的间隔时间(秒)
    lb_algo rr                        #指定调度算法,轮询(rr)
    lb_kind DR                        #第39行修改,指定群集工作模式,直接路由(DR)
    persistence_timeout 0             #连接保持时间(秒)
    protocol TCP                      #应用服务采用的是 TCP协议
real_server 192.168.137.30 80 {       #43行修改,指定第一个Web节点的地址、端口
weight 1                              #节点的权重
#45行删除,添加以下健康检查方式                       
          TCP_CHECK {
              connect_port 80         #添加检查的目标端口
              connect_timeout 3       #添加连接超时(秒)
              nb_get_retry 3          #添加重试次数
              delay_before_retry 3    #添加重试间隔
          }
      }
 
      real_server 192.168.137.40 80 {     #添加第二个 Web节点的地址、端口
          weight 1
          TCP_CHECK {
              connect_port 80
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
##删除后面多余的配置#
 }
----------------------------------------------------------
systemctl start keepalived.service   #重新启动服务
ip addr      #查看虚拟网卡vip
  
#启动 ipvsadm 服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
#调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
--------------------------------------
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
-----------------------------------------
sysctl -p #加载参数
scp keepalived.conf 192.168.52.15:`pwd`  #远程传输文件到备负载调度器

同调度器1一样

 配置客户端 192.168.137.100

 验证

 

 主负载调度器模拟宕机

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/484341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

v2c - 从Verilog 转换到 C语言的工具

文章目录 一、如何安装1.下载二进制文件2.基准测试 二、如何使用v2c的应用描述工具流程使用 v2c 转换器的工作示例 三、注意事项情形一:拼接:{4{x}}情形1-1 y&{x,x,x,x}情形1-2 y&{x,x,…

【C++】string 类的实现

目录 构造函数赋值重载关于浅拷贝 迭代器容量相关reserveresize 修改push_backappendinserterase关于npos 流运算符重载流插入流提取 构造函数 无参数构造和传参构造 通过对参数设置缺省值为空串""同时满足无参构造和传参构造成员 _size 和 _capacity 均是针对有效…

自动驾驶—连续系统LQR最优控制的黎卡提方程推导

1. Why use the Riccati equation? 最优控制算法LQR是Linear Quadratic Regulator的缩写,Q、R就是需要设计的半正定矩阵和正定矩阵。考虑根据实车的情况去标定此参数,从理论和工程层面去理解,如果增大Q、减小R,则此时控制系统响应速度比较快速(比较剧烈),直观反映方向…

5月1日 9H45min|5.2 8H20min+30min|时间轴复盘

8:00 起床 8:00-8:30 洗漱吃饭 8:30-10:40 temporary pools阅读真题精读 (真的很慢了 不知道什么原因 感觉也没有彻底完全弄懂)【2h+10min】 10:40-11:10 午餐+酸奶(423+174KJ) 11:20-12:30 三篇阅读【1h+10min】 13:10-14:50 健身 14:50-15:45诵默写list…

Ae:画笔工具

画笔工具 Brush Tool 快捷键:Ctrl B 画笔工具 Brush Tool仅能工作在图层 Layer面板上。 双击纯色图层、像素图层等可打开图层面板。 在 Ae 中的每次画笔绘制都将新建一条路径,然后通过对路径的描边来显示绘制结果,故又称为“绘画描边”或“…

函数-实现交换两个变量的内容

用函数实现交换两个变量的内容&#xff0c;对于该问题我们该如何实现呢&#xff1f;在这里我就用整型变量来说明。 题目&#xff1a;写一个函数可以交换两个整形变量的内容。 我们先来看看如下代码&#xff1a; #include <stdio.h> void swap(int x, int y) {int tem…

Android进阶之光:Dagger2原理简要分析

Dagger2注入框架原理简要分析 使用Dagger2需要的依赖: implementation com.google.dagger:dagger-android:2.46 implementation com.google.dagger:dagger-android-support:2.46 annotationProcessor com.google.dagger:dagger-android-processor:2.46 annotationProcessor c…

第二十七章 碰撞体Collision(下)

本章节我们继续研究碰撞体&#xff0c;并且探索一下碰撞体与刚体之间的联系。我们回到之前的工程&#xff0c;然后给我们的紫色球体Sphere1也添加一个刚体组件。如下所示 此时&#xff0c;两个球体都具备了碰撞体和刚体组件。接下来&#xff0c;我们Play运行查看效果 我们发现&…

从零开始带你开发橙光游戏AVG框架(仿 葬花 )

来源 从零开始带你开发橙光游戏AVG框架【55课数 收费】 从零开始带你开发橙光游戏AVG框架 unity教程【16课数 免费】 。。。。。。 挺大的&#xff0c;因为很多音频&#xff0c;.git就有 2.6G AVG_20230413_2020.2.23f1c1 介绍 QuickSheet使用 bug 包报错 可能是我换了un…

LeetCode138. 复制带随机指针的链表

138. 复制带随机指针的链表 描述示例解题思路以及代码解法1解法2 描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成…

电脑文件加密软件哪个最好用:试试文件加密软件排行榜第一的EaseUS LockMyFile吧 | 军事级加密你值得拥有!!!

EaseUS LockMyFile是一款出色且安全可靠的军事级电脑文件加密管理软件&#xff0c;也叫易我文件加密软件&#xff0c;拥有文件隐藏、文件加锁、文件保护、读写监控、安全删除等诸多实用功能&#xff0c;能帮助大家锁定和隐藏闪存驱动器、外部USB 驱动器、内部硬盘驱动器以及局域…

51单片机(六)矩阵键盘和矩阵键盘密码锁

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

几种常见时间复杂度实例分析

多项式量级 常量阶 O(1) 对数阶 O(logn) 线性阶 O(n) 线性对数阶 O(nlogn) 平方阶O(n2 ),立方阶O(n3 )...k次方阶O(nk) 非多项式量级&#xff08;NP&#xff08;Non-Deterministic Polynomial&#xff0c;非确定多项式&#xff09;问题&#xff09; 指数阶O(2n) 阶乘阶…

离线数据同步Sqoop与DataX

文章目录 一、Sqoop安装与使用1、简介2、Sqoop安装3、Sqoop实例3.1 Mysql导入Hadoop3.2 Hadoop导出到Mysql 二、DataX概述与入门1、DataX概述1.1 简介1.2 框架设计1.3 运行原理 2、DataX与 Sqoop 的对比3、快速入门 三、DataX常用入门案例1、从stream 流读取数据并打印到控制台…

前端web3入门脚本六:套利夹子机器人,羊毛党必备

一、前言 DEX上有很多零风险套利的机会&#xff0c;包括三角套利&#xff0c;夹子机器人… 今天主要介绍一下架子机器人的思路和简易实现。 二、实现思路 套利原理&#xff1a; 夹子机器人的核心&#xff1a;在韭菜买入前以更低价格买入&#xff0c;并再韭菜买入后卖出&#…

Curator中的分布式锁解读

目录 基本介绍 基本配置 可重入锁InterProcessMutex 不可重入锁InterProcessSemaphoreMutex 可重入读写锁InterProcessReadWriteLock 联锁InterProcessMultiLock 信号量InterProcessSemaphoreV2 栅栏barrier 倒计数器 基本介绍 Curator是netflix公司开源的一套zookeeper…

C语言力扣简单题-无重复字符的最长子串

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 无重复字符的最长子串 题目&#xff1a; 代码思路&#xff1a; 代码表示&#xff1a; 无重复字符的最长子…

【C++】lambda表达式

文章目录 lambda表达式lambda概念lambda表达式的格式关于捕获列表常见问题: 使用lambda表达式交换两个数lambda表达式底层原理 lambda表达式 lambda概念 lambda表达式本质是一个匿名函数(因为它没有名字),恰当使用lambda表达式可以让代码变得简洁.并且可以提高代码的可读性 例…

ChatGPT实现HTML网页文本提取

网页自动化工具 既然ChatGPT对于编程语言有非常强大的理解能力&#xff0c;那么它是否可以用来自动化地处理网页呢&#xff1f;答案是肯定的。ChatGPT可以使用机器学习算法来识别网页元素中的文本&#xff0c;并抽取出有用的信息。 例如我们提供一段层数比较多的相对来说较为…

【五一创作】|【C++】AVL树的实现

文章目录 1.AVL树概念2. AVL树性质3.AVL树的实现insert插入情况分析更新平衡因子旋转处理左单旋右单旋在insert中判断左右单旋的条件双旋转左右双旋 整体代码 1.AVL树概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#…