|NO.Z.00010|——————————|^^ 构建 ^^|——|HAC构建.V1|——|5台server|
一、高可用集群说明

### --- 高可用集群说明
### --- NAT模式:
~~~ LVS充当真实服务器和客户端之间的一个节点。
### --- 三节点:
~~~ 若Apache宕机,访问会终端,若采用轮询算法的情况下,访问会终端LVS做不到检测功能。
~~~ 正常的负载均衡会加入自动检测功能,若是判断后端的服务终端。
~~~ 会自动把它提出出去。普通LVS是做不到。若想用LVS做的情况下,可以使用脚本来实现。
### --- 在使用LVS-NAT+LVS健康检查脚本:
~~~ 时间Apache服务器任何一台宕机不会引发集群的完整性。
~~~ 若是LVS自身宕机了,下面的Apache服务再健康,集群是没有任何意义的。
~~~ LVS集群中LVS本身的高可用是非常重要的。

### --- 高可用集群说明
~~~ 利用高可用技术,把LVS做替换或者做一个副本。LVS与LVS副本之间使用高可用的原理做心跳检测
~~~ 正常情况下LVS负载会加载到主上,在负载到LVS集群下RS主机上。
~~~ 若是LVS主宕掉,从LVS会接替,客户端的访问会转移到从LVS上代理到不同节点。
~~~ 以上就是负载均衡+高可用的实现方案。
### --- 高可用集群的必要性:
### --- 高可用主要目的:尽可能的提高服务的可用性
~~~ 99: 用户连接数 软件可以实现
~~~ 999: 用户连接数 软件可以实现;中性公司倾向的方案
~~~ 9999: 用户连接数 需要硬件设备的参与
~~~ 99999: 用户连接数 理论上的概念,需要IDC/网络供应商的配合/集群配和/开发配置/
~~~ 9越高, 消耗的资源会跟大。
~~~ 适合自己的才是好集群,没有所谓的标准集群模式。
### --- 高可用集群的实现原理:心跳检测。
~~~ 高可用也是有不同分类的。不是软件上的分类,而是实现原理的分类:
### --- 服务:有状态:MySQL:
~~~ 若是RS服务断掉,业务数据会缺少一部分;造成服务终端或者错误。难实现高可用的
### --- 服务:无状态:Apache:http LVS:
~~~ 若是RS服务断掉,过段时间再加进来,业务数据不会发生任何变化。
~~~ 没有任何影响。较容易实现高可用的。
二、LVS-NAT脚本方式实现服务宕机剔除集群
### --- LVS-NAT脚本方式实现服务宕机剔除集群
### --- 第一张图配置说明
### --- 重新启动ipvsadm,恢复之前状态
[root@server11 ~]# service ipvsadm restart
ipvsadm: Clearing the current IPVS table: [ OK ]
ipvsadm: Unloading modules: [ OK ]
ipvsadm: Clearing the current IPVS table: [ OK ]
ipvsadm: Applying IPVS configuration: [ OK ]
### --- 查看集群配置
[root@server11 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 20.20.20.11:80 rr
-> 10.10.10.12:80 Masq 1 0 0
-> 10.10.10.13:8080 Masq 1 0 0
### --- 查看才持久化连接已经不存在
[root@server11 ~]# ipvsadm -Ln --persistent-conn
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Weight PersistConn ActiveConn InActConn
-> RemoteAddress:Port
TCP 20.20.20.11:80 rr
-> 10.10.10.12:80 1 0 0 0
-> 10.10.10.13:8080 1 0 0 0
### --- 停止RS1服务的Apache服务
[root@server12 ~]# service httpd stop // httpd服务停掉之后,LVS-NAT集群还是存在。
Stopping httpd:
[ OK ]
### --- 查看到RS1集群配置还是存在
[root@server11 ~]# ipvsadm -Ln --persistent-conn // 发现12节点再集群中还是存在/我们可以通过脚本的方式在服务宕机之后把它从集群中剔除出去。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Weight PersistConn ActiveConn InActConn
-> RemoteAddress:Port
TCP 20.20.20.11:80 rr
-> 10.10.10.12:80 1 0 0 5
-> 10.10.10.13:8080 1 0 0 6
三、配置脚本文件LVS-NAT+脚本进行集群宕机节点剔除和恢复。
### --- 配置自定义脚本
### --- 配置脚本文件LVS-NAT+脚本进行集群宕机节点剔除和恢复。
[root@server11 ~]# mkdir /usr/local/script // 没有特殊含义,个人习惯把脚本放在该目录下
[root@server11 ~]# cd !$ // 执行上一条命令的最后一个参数
cd /usr/local/script
### --- 创建脚本文件
[root@server11 script]# vim check_lvs_real.sh
#!/bin/bash
#
VIP=20.20.20.11 # 集群虚拟IP
CPORT=80 # 定义集群端口
FAIL_BACK=127.0.0.1 # 本机回环地址
RS=("10.10.10.12" "10.10.10.13") # 编写集群地址
declare -a RSSTATUS # 变量RSSTATUS定义为数组态
RW=("2" "1")
RPORT=80 # 定义集群端口
TYPE=m # 制定LVS工作模式:g=DR m=NAT
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
addrs() {
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}
delrs() {
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
[ $? -eq 0 ] && return 0 || return 1
}
checkrs() {
local I=1
while [ $I -le $CHKLOOP ]; do
if curl --connect-timeout 1 http://$1 &> /dev/null; then
return 0
fi
let I++
done
return 1
}
initstatus() {
local I
local COUNT=0;
for I in ${RS[*]}; do
if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
RSSTATUS[$COUNT]=1
else
RSSTATUS[$COUNT]=0
fi
let COUNT++
done
}
initstatus
while :; do
let COUNT=0
for I in ${RS[*]}; do
if checkrs $I; then
if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
addrs $I ${RW[$COUNT]}
[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
fi
else
if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
delrs $I
[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
fi
fi
let COUNT++
done
sleep 5
done
### --- 授予脚本权限
[root@server11 script]# chmod a+x check_lvs_real.sh
[root@server11 script]# bash check_lvs_real.sh // 它会占用我们前台守护进程的,占用前台窗口
-> 10.10.10.12:80 Masq 1 0 0
-> 10.10.10.13:8080 Masq 1 0 0
No such destination
### --- 停止RS1的Apache服务,检测LVS-NAT集群下10.10.10.12已被剔除
### --- 理论上我们监控服务器会发生告警。
[root@server12 ~]# service httpd start
[root@server11 ~]# ipvsadm -Ln // 发现10.10.10.12RS2已经不在了。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 20.20.20.11:80 rr
-> 10.10.10.13:8080 Masq 1 0 0
### --- 重新启动RS1的Apache服务,检测LVS-NAT集群下10.10.10.12重新恢复。
[root@server12 ~]# service httpd start // 启动RS2Apache服务
[root@server12 ~]# curl localhost
11111111111
[root@server11 ~]# ipvsadm -Ln // RS2服务重新启动12集群配置又恢复。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 20.20.20.11:80 rr
-> 10.10.10.12:80 Masq 2 0 0
-> 10.10.10.13:8080 Masq 1 0 0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv001-lbchac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通