LVS + Keepalived 高可用群集

一、准备环境

主keepalived:172.168.1.11     lvs
备keepalived:172.168.1.12     lvs
web1:172.168.1.13
web2:172.168.1.14    
vip:172.168.1.100
客户机访问
关闭防火墙 

二、配置 主keepalived 服务器

1. 安装 ipvsadm 和 keepalived

[root@localhost ~]# yum install ipvsadm.x86_64 keepalived.x86_64 -y

2. 修改 keepalived 的配置

[root@localhost ~]# cd /etc/keepalived
[root@localhost keepalived]# ls
keepalived.conf
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# ls
keepalived.conf  keepalived.conf.bak
[root@localhost keepalived]# 

[root@localhost keepalived]# vim keepalived.conf
global_defs {router_id HA_TEST_R2                  ####本路由器的服务器名称 HA_TEST_R2
}
vrrp_instance VI_1 {                     ####定义VRRP热备实列state BACKUP                          ####热备状态,backup表示辅服务器interface ens33                       ####表示承载VIP地址的物理接口virtual_router_id 1                   ####虚拟路由器的ID号,每个热备组保持一致priority 99                           ####优先级,优先级越大优先级越高advert_int 1                          ####通告间隔秒数(心跳频率)authentication {                      ####认证信息,每个热备组保持一致auth_type PASS                     ####认证类型auth_pass 123456                   ####认证密码}virtual_ipaddress {                   ####漂移地址(VIP),可以是多个192.168.100.10}
}#需要修改项
10    smtp_server 127.0.0.1    #修改邮箱指向自己(10行)
12    router_id LVS_01    #指定服务器名称主备需要不一样(12行)
14    #vrrp_strict    #14行需要注释否则服务启动有问题
20    state MASTER    #指定服务器类型MASTER为主 BACKUP为备(20行)
21    interface ens33    #修改网卡名称为ens33(21)
27    auth_pass 123    #修改验证密码,主备需要一样(27行)
30    172.168.1.100    #指定群集vip地址

virtual_server 172.168.1.100 80 {35     delay_loop 6    #健康间隔时间6秒36     lb_algo rr    #调度算法轮询37     lb_kind DR    #lvs模式为DR 38     persistence_timeout 0    #连接保持时间改为0 否则 无法体现效果39     protocol TCP    #采用协议40 41     real_server 172.168.1.13 80 {42         weight 1    #节点权重43             TCP_CHECK {44             connect_port 80    #检查目标端口45             connect_timeout 3    #连接超时46             nb_get_retry 3    #重试次数47             delay_before_retry 3    #重试间隔时间48         }49     }50 51     real_server 172.168.1.14 80 {52         weight 153             TCP_CHECK {54             connect_port 8055             connect_timeout 356             nb_get_retry 357             delay_before_retry 358         }59     }60 61 }

3. 开启ipvsadm

[root@localhost keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost keepalived]# systemctl start ipvsadmnet.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

三、配置 从keepalived 服务器

1. 安装 ipvsadm 和 keepalived

[root@localhost ~]# yum install ipvsadm.x86_64 keepalived.x86_64 -y

2. 修改 keepalived 的配置

vim keepalived.conf12    router_id LVS_02
20     state BACKUP
23     priority 80

 3. 开启ipvsadm

[root@localhost keepalived]# systemctl start keepalived.service 
[root@localhost keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost keepalived]# 
[root@localhost keepalived]# systemctl start ipvsadm
[root@localhost keepalived]# 
[root@localhost keepalived]# ipvsadm -ln

四、配置 web1 服务器

1. 安装httpd并开启

[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd

2. 修改主站点目录

[root@localhost ~]# cd /var/www/html
[root@localhost html]# echo 7-3 > index.html
[root@localhost html]# systemctl restart httpd

3. 做虚拟网卡

[root@localhost html]# ifconfig lo:0 172.168.1.100/32
[root@localhost html]# 
[root@localhost html]# ip a

4. 添加ARP规则

[root@localhost html]# vim /etc/sysctl.conf 
[root@localhost html]# sysctl -pnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

5. 关闭长连接

五、配置 web2 服务器

1. 安装httpd并开启

[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd

 2. 修改主站点目录

[root@localhost ~]# cd /var/www/html
[root@localhost html]# echo 7-4 > index.html
[root@localhost html]# systemctl restart httpd

3. 做虚拟网卡

[root@localhost html]# ifconfig lo:0 172.168.1.100/32
[root@localhost html]# 
[root@localhost html]# ip a

4. 添加ARP规则

[root@localhost html]#vim /etc/sysctl.conf 
[root@localhost html]#sysctl -pnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

5. 关闭长连接

六、客户机访问测试

关闭DR主调度器 Keepalive服务,测试备调度器是否顶替 

可以正常访问

重新开启DR主调度服务,测试主调度是否抢占VIP

七、脑裂

什么是脑裂?

在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,
就分裂成为2个独立的个体。
由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享
资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了;或者两边
“服务”都起来了,但同时读写“共享存储”,导致数据损坏

都有哪些原因导致脑裂?

高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
多组keepalive服务器造成   组播冲突    1.换组播地址   2.改成单播          
默认: 
单播:
组播: 
广播:
A   1 -127
B   128-191
C   192-223
D   224-239          224.0.0.1

如何解决keepalived脑裂问题?

在实际生产环境中,我们从以下方面防止脑裂:
#同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息
#当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源rsyslog   分割日志#做好对脑裂的监控报警解决常见方案:
如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决
可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
开发检测程序通过监控软件检测脑裂

八、实现其它应用的高可用性 VRRP Script

keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能

参考配置文件:

/usr/share/doc/keepalived/keepalived.conf.vrrp.localcheck

1. VRRP Script 配置

分两步实现:

  • 定义脚本

vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

vrrp_script <SCRIPT_NAME> {script <STRING>|<QUOTED-STRING>   #此脚本返回值为非0时,会触发下面OPTIONS执行OPTIONS 
}
  • 调用脚本

track_script:调用vrrp_script定义的脚本去监控资源,定义在VRRP实例之内,调用事先定义的vrrp_script

track_script {SCRIPT_NAME_1SCRIPT_NAME_2
}

2. 定义 VRRP script

vrrp_script <SCRIPT_NAME> { 				#定义一个检测脚本,在global_defs 之外配置script <STRING>|<QUOTED-STRING> 		#shell命令或脚本路径(注意执行权限)interval <INTEGER> 					#间隔时间,单位为秒,默认1秒timeout <INTEGER> 						#超时时间weight  <INTEGER:-254..254> 			#默认为0,如果设置此值为负数,当上面脚本返回值为非0时,会将此值与本节点权重相加可以降低本节点权重,即表示fall. 如果是正数,当脚本返回值为0,会将此值与本节点权重相加可以提高本节点权重,即表示 rise.通常使用负值fall <INTEGER>       					#执行脚本连续几次都失败,则转换为失败,建议设为2以上rise <INTEGER>       					#执行脚本连续几次都成功,把服务器从失败标记为成功user USERNAME [GROUPNAME] 				#执行监测脚本的用户或组      init_fail         						#设置默认标记为失败状态,监测成功之后再转换为成功状态
}

实际操作:

[root@localhost keepalived]#vim /etc/keepalived/ng.sh 
#编写脚本
#!/bin/bash
ng=$(ps -elf |grep nginx |egrep -cv "grep|$$")if [ $ng -eq 0 ]
then
systemctl stop keealived
fi
[root@localhost keepalived]#chmod +x /etc/keepalived/ng.sh
#权限  [root@localhost keepalived]#vim /etc/keepalived/keepalived.conf
# 全局配置下配置     
#脚本不要忘记加执行权限
vrrp_script check_down {script  "/etc/keepalived/ng.sh"   interval 1weight -30fall  3rise 2timeout 2
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.168.1.100}track_script {check_down}
}反向代理模块upstream  反向代理模块 在  http模块下
upstream w1 {
#定义反向代理 组名  w1    server 172.168.91.12:80;#第一台代理服务器 server 172.168.91.13:80;#第二台代理服务器}server  模块下        location / {proxy_pass http://w1;#调用  upstream  模块}

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

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

相关文章

[嵌入式系统-78]:RT-Thread:线程管理的基本原理与应用

目录 一、RTT线程的特点 二、RTT线程机制 2.1 线程的属性与线程控制块详解 2.2 线程的调度 2.3 线程的切换 2.5 系统线程 三、线程的调度机制 3.1 线程创建与删除 1、线程控制块 2、线程栈 3、入口函数 4、线程的创建方式 &#xff08;1&#xff09;静态线程初始化函…

【手势操作-复习前一天的内容-预习今天的内容 Objective-C语言】

一、昨天呢,我们学习的是这个,事件 1.事件这一块儿呢,iOS事件,分为三大类, 1)触摸事件 2)加速计事件 3)远程控制事件 2.这个里边呢,我们主要学习的是这个触摸事件,触摸事件里边,就是Touch,touchesBegan:方法里边,有一个touches参数,它是set类型的, 3.Set,…

nginx与php的通信方式

Nginx 和 PHP 之间的通信主要通过 FastCGI 协议进行&#xff0c;而FastCGI协议支持两种通信方式&#xff1a;Unix域套接字&#xff08;Unix Socket&#xff09;和TCP/IP网络套接字。下面是这两种通信方式的主要区别&#xff1a; Unix域套接字&#xff08;Unix Socket&#xff…

甲辰年四月初七思悟

甲辰年四月初七思悟 意懒青云天&#xff0c;情贪山水间。​ 为志凡尘炼&#xff0c;行路交际变。​ 日程分秒年&#xff0c;四时轮回现。 ​忧苦缘分面&#xff0c;嗔痴欲求践。

Redis:分布式系统

文章目录 认识RedisRedis和MySQLRedis的场景Redis的设计 分布式单机架构应用数据分离架构应用服务集群架构 认识Redis 在开始Redis学习前&#xff0c;要先认识一下Redis Redis的设计&#xff0c;是想要把它当做是一个数据库&#xff0c;一个缓存&#xff0c;或者说是一个消息…

C语言 | Leetcode C语言题解之第87题扰乱字符串

题目&#xff1a; 题解&#xff1a; struct HashTable {int key;int val;UT_hash_handle hh; };void modifyHashTable(struct HashTable** hashTable, int x, int inc) {struct HashTable* tmp;HASH_FIND_INT(*hashTable, &x, tmp);if (tmp NULL) {tmp malloc(sizeof(st…

Nginx - location中的匹配规则和动态Proxy

文章目录 官网location 规则详解动态Proxy使用多个 if 指令指定不同的 proxy_pass根据参数选择不同的 proxy_pass 官网 https://nginx.org/en/docs/http/ngx_http_core_module.html#location location 规则详解 Nginx的location指令工作原理如下&#xff1a; 位置匹配&#…

vs2019 c++ 对左值引用取地址得到的是谁的地址?

&#xff08;1&#xff09; 测试一下&#xff1a; 对左值引用取地址&#xff0c;返回的地址是其引用的变量的地址&#xff0c;而非自身的地址。 &#xff08;2&#xff09; 用反汇编看一下&#xff0c;为了代码容易看懂&#xff0c;改一下源代码&#xff0c;不使用 cout 这个复…

【格式控制】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 从键盘输入一批数值&#xff0c;要求保留3位小数&#xff0c;在输出时上下行小数点对齐。 源码 #include <iostream>using namespace std;int main(void) {double a, b, c;cout << "请输入三个实数&#xff0c;中间用空格…

iOS 数据库升级

使用FMDB结合FMDBMigrationManager&#xff08;一个三方库&#xff09;的方式 1、首先自定义一个sql语句的类 #import#import"FMDBMigrationManager.h" interfaceMigration:NSObject (instancetype)initWithName:(NSString*)name andVersion:(uint64_t)version a…

阿里云OSS配置跨域及域名访问

1、配置跨域 进入对象存储OSS–>OSS存储桶–>数据安全–>跨域设置–>创建规则 2、配置跨域 Etag x-oss-request-id3、配置结果如下 4、数据源配置 切换到数据管理–>静态页面 配置根页面 保存结果如下 5、配置域名访问 绑定域名 添加txt记录 验证绑定 …

Unity 滚动视图(ScrollRect)使某个元素在可视范围内(滚动到某个元素)

在使用UGUI制作滚动视图的过程中&#xff0c;可能会遇到需求说&#xff0c;要定位到其中的某个元素&#xff0c;把它显示在Viewport可视范围内&#xff0c;这要怎么做呢&#xff1f;话不多说&#xff0c;上代码&#xff1a; namespace ZetanStudio.Extension {public static c…

git仓库使用

git仓库是会限制空间大小限制的 git网络库的容量限制_github仓库大小限制-CSDN博客 git是用于管理github的工具 电脑左下角搜索git打开GitBash.exe 进入到要下载到本地的目录 下载到本地的文件不要更改&#xff01; 如果要使用请务必把文件复制到别的空间去再在这个别的空间…

spring_Mybatis模板

maven依赖&#xff1a; <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version></dependency><dependency><groupId>mysql…

论文阅读记录--关于水文系统的传递函数

文章目录 J-schuite的文章,地下水系统的响应的功率谱分析--传递函数1. 什么是冲激响应函数与传递函数?2. 地下水流系统中传递函数的求解3. J-schuite文章中传递函数的复现J-schuite的文章,地下水系统的响应的功率谱分析–传递函数 1. 什么是冲激响应函数与传递函数? 在信号…

记录:卡尔曼滤波推导

参考&#xff1a;古月居-卡尔曼滤波 一、高斯分布&#xff08;Gaussian Distribution&#xff09; 一维高斯分布&#xff1a;随机变量 X X X服从数学期望 μ \mu μ、方差 σ 2 \sigma^2 σ2的正态分布&#xff0c;概率密度函数为 p ( x ) p(x) p(x)。 X ∼ N ( μ , σ 2 )…

前言:为什么学习鸿蒙设备开发

HarmonyOS 是什么&#xff1f;众所周知&#xff0c;HarmonyOS 鸿蒙操作系统是由华为研发的一款面向未来、面向全场景的分布式操作系统&#xff0c;它旨在为各种设备提供统一的操作系统解决方案&#xff0c;从智能手机、平板电脑到智能穿戴设备、智能家居、汽车等各类终端设备都…

Go语言数值类型教程

Go语言提供了丰富的数值类型&#xff0c;包括整数类型、浮点类型和复数类型。每种类型都有其特定的用途和存储范围。下面将详细介绍这些类型&#xff0c;并附带示例代码。 原文链接&#xff1a; Go语言数值类型教程 - 红客网-网络安全与渗透技术 1. 整数类型 原文链接&#xf…

字符画生成网站 ascii字符画

_____ / ___/__ ___ / /__/ _ \/ _ \ \___/ .__/ .__//_/ /_/ font推荐&#xff1a;1.Slant 2.Small 3.Small slant https://patorjk.com/software/taag/#pdisplay&fSmall%20Slant&tCpp https://www.kammerl.de/ascii/AsciiSignature.php https://asciia…

MySQL索引设计遵循一系列原则

高频查询与大数据量表&#xff1a;对查询频次较高且数据量较大的表建立索引。这是因为索引主要是为了加速查询过程&#xff0c;对于经常需要访问的表和数据&#xff0c;索引的效果最为显著。 选择合适索引字段&#xff1a;从WHERE子句中提取最佳候选列作为索引字段&#xff0c…