LVS+keepalive高可用集群

keepalive简介

keepalive为LVS应用延伸的高可用服务。lvs的调度器无法做高可用。但keepalive不是为lvs专门集群服务的,也可以为其他的的代理服务器做高可用。
keepalive在lvs的高可用集群,主调度器和备调度器(可以有多个) 一主两备或一主一备。

VRRP: keepalived是基于vrrp协议实现Ivs服务的高可用。解决了调度器单节点的故障问题。
VRRP协议:提高网络路由器的可靠性开发的一种协议。

vrrp工作原理
·选举出主和备,预先设定主备的优先级。主的优先级较高,备的优先级低,一旦开启服务器,优先级高的,会自定抢占主的位置。
·VRRP组播通信: 224.0.0.18 VRRP协议当中的主备服务器通过组播地进行通信,交换主备服务器之间的运行状态。主服务会周期性的发送vrrp协议报文,告诉备:主的当前状态。
·主备切换:主服务器发生故障,或者不可达,VRRP协议会把请求转义到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常处理客户端的请求。
·故障恢复: 一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。

keepalive工作原理

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器处于冗余状态。
不参与集群的运转。主调度器故障无法运行,备调度器才会承担主调度器的工作。
一旦主调度恢复工作,继续由主调度器进行处理,备调度器又成了冗余。

keepalive的体系模块:

全局模块:core模块,负载整个keepalived启

动加载和维护
                  VRRP模块:实现vrrp协议,主备切换
                  check模块:负责后端真实服务器健康检查,配置真实服务器的模块当中。


安装keepalived                yum -y install keepalived ipvsadm

vim /etc/keepalived/keepalived.conf下配置说明

·邮箱地:smtp_server
·主备服务的id,主和备的id不能一致:router_id_01
·取消严格遵守vrrp协议功能,不取消VIP无法连接:#vrrp_strict
·标识主身份:state MASTER
·指定vip地址的物理接口:interface ens33
·虚拟路由器的id号:virtual_router_id 10
·发送报文的间隔时间:advert_int 30
·指定集群的vip地址:virtual_ipaddress
·健康检查的间隔时间:delay_loop 6		单位s
·负载均衡的调度算法:lb algo rr
·指定lvs集群的工作方式(要大写):lb_kind NAT
·连接保持:persistence_timeout 50 	单位s
·VIP模块:virtual server 192.168.233.100 80 
·后端真实服务器的轮询权重:real_server 192.168.233.30 80 
·检测目标的端口号:connect_port 80
·连接超时时间:connect_timeout 3		单位s
·重试的次数:nb_get_retry 3
·重试间隔秒数:delay_before_retry 4

实验(LVS-DR)-keepalive

主192.168.10.10

备192.168.10.40

web服务器

192.168.10.20----nginx

192.168.10.30----nginx

客户端访问:任意一台

主192.168.10.10

yum -y install keepalived ipvsadm
vim /etc/keepalived/keepalived.conf
.............

smtp_server 127.0.0.1

router_id LVS_01

vrrp_strict 注释掉

interface ens33

persistence_timeout 0

virtual_ipaddress {
        192.168.10.99
}
修改上面的,并删掉最后一个下面所有的内容,并添加以下内容

virtual_server 192.168.10.99 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.10.20 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4

        }
}
real_server 192.168.10.30 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
    }
}
}

.............

systemctl restart keepalived.service
systemctl restart ipvsadm.service
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service


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 立即加载



备192.168.10.40

yum -y install keepalived ipvsadm
vim /etc/keepalived/keepalived.conf
.............

smtp_server 127.0.0.1

router_id LVS_02

priority 90

vrrp_strict 注释掉

state BACKUP

interface ens33

persistence_timeout 0

virtual_ipaddress {
        192.168.10.99
}
修改上面的,并删掉最后一个下面所有的内容,并添加以下内容

virtual_server 192.168.10.99 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.10.20 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4

        }
}
real_server 192.168.10.30 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
    }
}
}

.............

systemctl restart keepalived.service
systemctl restart ipvsadm.service
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service


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 立即加载

web服务器

192.168.10.20

192.168.10.30

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
.........................

DEVICE=lo:0
IPADDR=192.168.10.99
NETMASK=255.255.255.255
ONBOOT=yes

.........................

重启lo:0网卡
ifup ifcfg-lo:0 

绑定vip
route add -host 192.168.10.99 dev lo:0

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

结果

停止主的
systemctl stop ipvsadm.service
systemctl stop keepalived.service

vip漂移到备服务器
ip addr 看

页面访问服务正常

keepalive基于nginx高可用

主192.168.10.10--nginx

yum -y install keepalived
vim /etc/keepalived/keepalived.conf
...................
global_defs模块中
   smtp_server 127.0.0.1
   router_id LVS_01
   #vrrp_strict
    

在global和vrrp_instance之间加
.......
vrrp_script check_nginx {
        script "/opt/check_nginx.sh"
        interval 5
}
.......

vrrp_instance模块中

virtual_ipaddress {
   192.168.10.99
}
vrrp_instance内最后加
track_script {
   check_nginx
}


...................

vrrp_instance模块后的都删除

chmod 777 /opt/check_nginx.sh
systemctl restart keepalived.service
传递nginx的状态
vim /opt/check_nginx.sh

#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
        systemctl stop keepalived
fi

备192.168.10.20--nginx

yum -y install keepalived
vim /etc/keepalived/keepalived.conf
...................
global_defs模块中
   smtp_server 127.0.0.1
   router_id LVS_02
   #vrrp_strict
    

在global和vrrp_instance之间加
.......
vrrp_script check_nginx {
        script "/opt/check_nginx.sh"
        interval 5
}
.......

vrrp_instance模块中

state BACKUP
priority 90
virtual_ipaddress {
   192.168.10.99
}
vrrp_instance内最后加
track_script {
   check_nginx
}


...................

vrrp_instance模块后的都删除

chmod 777 /opt/check_nginx.sh
systemctl restart keepalived.service
传递nginx的状态
vim /opt/check_nginx.sh

#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
        systemctl stop keepalived
fi

结果:

当主故障后切换到备,主要恢复需要

主故障
systemctl stop nginx.service


主恢复需要
systemctl restart nginx.service
systemctl restart keepalived.service

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[红蓝攻防]MDOG(全新UI重制版)为Xss跨站而生,数据共享,表单劫持,URL重定向

说明 功能Cookie窃取表单劫持(钓鱼账密)重定向流量劫持多平台数据推送钉钉数据推送 运行窗口 ./dist目录下已生成exe文件,双击打开 Cookie窃取 点击运行服务,复制以上的payload,payload怎么变形那么你可已去混淆 payload在页面执行 受害者访问存在xss漏洞的页面时受到攻击,…

python实验2 π的计算

π的计算 1. 圆周率的介绍2. BBP公式计算圆周率3. 蒙特卡洛方法计算π 1. 圆周率的介绍 圆周率π自古就是人们计算的问题,π到底是什么,圆的周长与直径的比值或者是面积与半径的平方之比,或者是使sinx0的最小正数x。所以每一种定义每一种理解…

NSSCTF web刷题记录3

文章目录 [护网杯 2018]easy_tornado[NSSRound#V Team]PYRCE方法一 cp命令方法二 tar命令 [CISCN 2019华东南]Web4[CISCN 2023 华北]ez_date[GWCTF 2019]你的名字[GKCTF 2020]ez三剑客-easynode [护网杯 2018]easy_tornado 打开题目,发现有三个链接,分别…

【Effective C++】

Effective C 文章目录 Effective C一、让自己习惯C条款01:视C为一个语言联邦条款02:尽量以const,enum,inline代替#define的使用条款03:尽可能使用const条款04:确定对象被使用前已先被初始化 二、构造/析构/…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(中)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash(中) 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://…

C/C++晶晶赴约会 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C晶晶赴约会 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C晶晶赴约会 2020年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 晶晶的朋友贝贝约晶晶下周一起去看展览&#xff0…

25.2 MySQL 运算符

1. 伪表 在MySQL中, DUAL是一个特殊的单行, 单列的虚拟表, 主要用于在SELECT语句中计算表达式或执行函数, 而不需要从实际的数据表中检索数据. 使用DUAL的原因主要有以下几点:* 1. 简化计算: 通过在SELECT语句中使用DUAL, 可以方便地计算表达式或执行函数, 而无需创建临时表或…

AJAX原理及介绍

文章目录 AJAX(Asynchronous Javascript And Xml)传统请求及缺点AJAX概述XMLHttpRequest对象AJAX GET请求AJAX GET请求的缓存问题AJAX POST请求基于JSON的数据交换基于XML的数据交换AJAX乱码问题AJAX的异步与同步AJAX代码封装AJAX实现省市联动AJAX跨域问…

磁盘的结构(磁道,扇区,盘面,柱面,物理地址)

目录 1.磁盘、磁道、扇区的概念1.磁盘2.磁道3.扇区 2.如何在磁盘中读/写数据3.盘面、柱面的概念4.磁盘的物理地址1.根据地址读取一个“块” 5.磁盘的分类1.活动头磁道2.固定头磁盘3.根据盘片是否可更换 1.磁盘、磁道、扇区的概念 1.磁盘 磁盘的表面由一些磁性物质组成&#xf…

打破尺寸记录!荷兰QuTech研发16量子点阵列新技术

承载16个量子点交叉条阵列的量子芯片,可无缝集成到棋盘图案(图片来源:网络) 由荷兰代尔夫特理工大学(TU Delft)和荷兰应用科学研究组织(TNO)组建的荷兰量子计算研究中心QuTech的研究人员开发了一种用相对较少的控制线来控制大量量…

双向链表的初步练习

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”…

Redis进军磁盘存储

目录 1、对抗价格优势:纳入磁盘,降低成本? 2、Redis的野心:无敌是多么寂寞,所以我们要开新地图 3、开发者异议:他们正在偏离我们选择Redis的初衷 4、结语:性能为王,但绝不甘于只…

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (四)

这篇博客是之前文章: Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (二&a…

ROS自学笔记十八:ModuleNotFoundError: No module named ‘serial‘

出现上述错误,则需要安装serial功能包 第一步:输入 sudo apt install python3-pip 第二步:输入 pip install pyserial

List 3.5 详解原码、反码、补码

前言 欢迎来到我的博客,我是雨空集(全网同名),无论你是无意中发现我,还是有意搜索而来,我都感到荣幸。这里是一个分享知识、交流想法的平台,我希望我的博客能给你带来帮助和启发。如果你喜欢我…

记一次线程爆满导致服务器崩溃的问题排查

记一次线程爆满导致服务器崩溃的问题排查 重启服务器 重启后,ssh连接发现下面问题 fork faild:Cannot allocate memory 以为是内存满了 于是,free -h,查看内存情况,还有,观察一段时间后,内存没多大变化 修改…

【扩散模型】HuggingFace Diffusers实战

HuggingFace Diffusers实战 1. 环境准备2. DreamBooth2.1 Stable Diffusion简介2.2 DreamBooth 3. Diffusers核心API4. 实战:生成美丽的蝴蝶图像4.1 下载数据集4.2 调度器4.3 定义扩散模型4.4 创建扩散模型训练循环4.5 图像的生成方法1.建立一个管线方法2.写一个采样…

MySQL 字符集与乱码与collation设置的问题?

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友…

线扫相机DALSA--常见问题一:软件安装顺序

1.软件安装顺序 先安装:Sapera_LT_SDK,后安装Xtium-CL MX4驱动。 2.初次安装CamExpert,重启电脑后未找到相机 Settings(搜索协议)配置完毕后,需点击Detect Camera(一键查找相机)按钮,搜索相机。第一次查找相机耗时会略…

word行内插入mathtype 公式后行距变大解决办法

现象 word行内插入mathtype 公式后行距变大 解决方法 选中要进行操作的那些行,依次单击菜单命令“格式→段落”,打开“段落”对话框;单击“缩进和间距”选项卡,将间距的“段前”和“段后”都调整为“0行”;将“如果…