一.高可用集群
1.集群类型
1. 负载均衡集群(Load Balance Cluster)
定义:将网络流量分配到多个服务器的技术,旨在优化资源使用、最大化吞吐量、减少响应时间,并避免单个服务器过载。
常用技术:
+ LVS(Linux Virtual Server):基于Linux内核的负载均衡器,工作在四层(传输层,TCP/UDP),非常适合处理大量流量,常用于高性能场景。
+ HAProxy:一个强大的开源负载均衡器,支持四层(TCP)和七层(HTTP)负载均衡,广泛用于HTTP和TCP协议的高性能环境。
+ Nginx:作为Web服务器、反向代理服务器以及负载均衡器,Nginx可以在七层(HTTP)进行负载均衡,尤其适合处理静态内容和高并发连接。
2. 高可用集群(High Availability Cluster)
定义:如单系统一样地运行并支持计算机持续正常运行的一个主机群。高可用集群通过消除单点故障,确保系统在任何组件出现故障时仍能提供服务。
关键技术:
+ 故障转移:当一个节点出现故障时,其他节点能够接管其工作,保证服务的连续性。
+ 冗余机制:如active/passive(主/备)和active/active(双主)模式,其中active节点处理所有请求,而passive节点或另一个active节点在active节点故障时接管工作。
+ 心跳检测:节点之间定期发送心跳信号以检测彼此的健康状态,确保在出现故障时能够迅速进行故障转移。
3. 高性能集群(High Performance Computing Cluster)
定义:通过计算集群并行处理大量计算任务,以实现比单个计算机更高的处理能力。
应用场景:常用于科学研究、工程模拟、大数据处理等领域。
4. 特定用途集群
数据库高可用集群:使用数据库复制和故障切换机制(如MySQL的主从复制、Galera Cluster)来确保数据库服务的高可用性。
Redis高可用集群:使用Redis Sentinel或Redis Cluster来实现高可用性,确保数据的持续
2.系统可用性
SLA:服务等级协议
A=MTBF/(MTBF➕MTTR)
3.实现高可用
提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
active/passive 主/备
active/active 双主
active --> HEARTBEAT --> passive
active <–> HEARTBEAT <–> active
4. VRRP:Virtual Router Redundancy Protocol
虚拟路由冗余协议,解决静态网关单点风险
物理层:路由器、三层交换机
软件层:keepalived
5.VRRP 相关术语
VRID:唯一标识虚拟路由器
VIP:虚拟IP
VMAC:虚拟IP的mac地址
物理路由器: mater:主设备
backup: 备用设备
priority: 优先级
二.keepalived环境配置
四台7.9克隆机
KA1(nat):
ip:172.25.254.10
KA2(nat):
ip:172.25.254.20
realserver1:
ip:172.25.254.110
realserver2:
ip:172.25.254.120
在realserver1和realserver2安装
[root@realserver1 ~]# yum install httpd -y
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# systemctl restart httpd.service
[root@realserver2 ~]# yum install httpd -y
[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# systemctl restart httpd.service
测试:
二.1. KeepAlived 配置说明
配置文件组成部分
配置文件:/etc/keepalived/keepalived.conf
配置文件组成
GLOBAL CONFIGURATION Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION
VRRP instance(s): 定义每个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
全局配置
虚拟路由配置
修改satte
抓包测试
[root@ka1 ~]# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
[root@ka1 ~]# vim /etc/rsyslog.conf
local6.* /var/log/keepalived.log
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]# systemctl restart keepalived.service rsyslog.service
[root@ka1 ~]# ll /var/log/keepalived.log
-rw-------. 1 root root 4569 Aug 18 12:24 /var/log/keepalived.log
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
include "/etc/keepalived/conf.d/*.conf"
[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d
[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100 dev ens33 label ens33:1
}
}
[root@ka1 ~]# systemctl restart keepalived.servive
5.抢占模式和非抢占模式
非抢占模式 nopreempt
默认为抢占模式 preempt ,即当高优先级的主机恢复在线后,会抢占低先级的主机的 master 角色,
这样会使 vip 在 KA 主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的 master 角色
非抢占模块下 , 如果原主机 down 机 , VIP 迁移至的新主机 , 后续也发生 down 时 , 仍会将 VIP 迁移回原主机
ka1主机配置
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 20
priority 100 #优先级高
nopreempt #非抢占模式
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}
}
#KA2主机配置
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 20
priority 80 #优先级低
advert_int 1
nopreempt #非抢占模式
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev etns33 label ens33:1
}
}
6. 抢占延迟模式preempt_delay
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP。
环境:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict
用法:
preempt_delay # # 指定抢占延迟时间为 #s
VIP的单播
KA1中的配置:
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}
unicast_src_ip 172.25.254.10 #本机IP
unicast_peer {
172.25.254.20 #指向对端主机IP
#如果有多个keepalived,再加其它节点的IP
}KA2中的配置:
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}
unicast_src_ip 172.25.254.20
unicast_peer {
172.25.254.10
}
测试
7.邮件配置
安装邮件发送工具
[root@ka1 ~]# dnf install mailx -y
扣扣邮箱配置
[root@ka1 ~]# vim /etc/mail.rc
set from=2268027137@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2268027137@qq.com
set smtp-auth-password=hbjdgetvshllincy # 授权码
set smtp-auth=login
set ssl-verify=ignore
邮件发送:
[root@ka1 ~]# echo test message | mail -s test 2268027137@qq.com
7.实现 Keepalived 状态切换的通知脚本
创建通知脚本
[root@KA1 + KA2 ~]# vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='2268027137@qq.com'
mail_send()
{
mail_subj="$HOSTNAME to be $1 vip move"
mail_mess="`date +%F\ %T`: vrrp move,$HOSTNAME change $1"
echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
master)
mail_send master
;;
backup)
mail_send backup
;;
fault)
mail_send fault
;;
*)
;;
esac
实现 master/master 的 Keepalived 双主架构:同时只有一个keepalived对外提供服务 为了解决利用率低下的处境可以使用双支架
KA1:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 100
priority 100
# preempt_delay 5s
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}
unicast_src_ip 172.25.254.10
unicast_peer {
172.25.254.20
}
track_script {
check_haproxy
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 200
priority 80
# preempt_delay 5s
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.200/24 dev ens33 label ens33:2
}
unicast_src_ip 172.25.254.10
unicast_peer {
172.25.254.20
}
}
KA2:
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 100
priority 80
advert_int 1
# nopreempt
preempt_delay 5s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}
unicast_src_ip 172.25.254.20
unicast_peer {
172.25.254.10
}
track_script {
check_haproxy
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 200
priority 100
advert_int 1
# nopreempt
preempt_delay 5s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.200/24 dev ens33 label ens33:2
}
unicast_src_ip 172.25.254.20
unicast_peer {
172.25.254.10
}
}
9.实现ipvs的高可用
配置
[root@realserver1~]# yum install httpd -y
[root@realserver1~]# echo - 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# ip addr add 172.25.254.100/32 dev lo
[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@realserver2 ~]# yum install httpd -y
[root@realserver1 ~]# echo - 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# ip addr add 172.25.254.100/32 dev lo
[root@realserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@realserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@realserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@realserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
对keepalived进行配置
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
virtual_server 172.25.254.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 172.25.254.110 80 {
weight 1
HTTP_GET {
url{
path /
status_code 200
connect_timeout 3
nb_get_retry 2
delay_before_retry 2
}
}
real_server 172.25.254.120 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 2
delay_before_retry 2
}
}
}
[root@ka1 ~]# systemctl stop keepalived.server
10 实现 HAProxy 高可用
在两个ka1和ka2先实现haproxy的配置
[root@ka1 & ka2 ~]# vim /etc/haproxy/haproxy.cfg
listen webserver
bind 172.25.254.100:80
server web1 172.25.254.101:80 check
server web2 172.25.254.102:80 check
在两个ka1和ka2两个节点启用内核参数
[root@ka1 & ka2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1
在ka1中编写检测脚本
[root@ka1 ~]# vim /etc/keepalived/test.sh
#!/bin/bash
/usr/bin/killall -0 haproxy
在ka1中配置keepalived
[root@ka1 ~]#cat /etc/keepalived/keepalived.conf
vrrp_script check_haproxy {
script "/etc/keepalived/test.sh"
interval 1
weight -30
fall 2
rise 2
timeout 2
}