一.高可用集群
1.1 集群类型
- LB:Load Balance 负载均衡
- LVS/HAProxy/nginx(http/upstream, stream/upstream)
- HA:High Availability 高可用集群
- 数据库、Redis
- SPoF: Single Point of Failure,解决单点故障
- HPC:High Performance Computing 高性能集群
1.2 系统可用性
99.95%:(60*24*30)*(1-0.9995)=21.6分钟 #一般按一个月停机时间统计
1.3 系统故障
1.4 实现高可用
- active/passive 主/备
- active/active 双主
- active --> HEARTBEAT --> passive
- active <--> HEARTBEAT <--> active
1.5.VRRP:Virtual Router Redundancy Protocol
- 物理层:路由器、三层交换机
- 软件层:keepalived

1.5.1 VRRP 相关术语
- 虚拟路由器:Virtual Router
- 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
- VIP:Virtual IP
- VMAC:Virutal MAC (00-00-5e-00-01-VRID)
- 物理路由器
master:主设备
backup:备用设备
priority:优先级
1.5.2 VRRP 相关技术
- 无认证
- 简单字符认证:预共享密钥
- MD5
- 主/备:单虚拟路由器
- 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
二.Keepalived 部署
2.1 keepalived 简介
- 基于vrrp协议完成地址流动
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
- 为ipvs集群的各RS做健康状态检测
- 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
2.2 Keepalived 架构

用户空间核心组件
- vrrp stack:VIP消息通告
- checkers:监测real server
- system call:实现 vrrp 协议状态转换时调用脚本的功能
- SMTP:邮件组件
- IPVS wrapper:生成IPVS规则
- Netlink Reflector:网络接口
- WatchDog:监控进程
2.3 Keepalived 环境准备

- 各节点时间必须同步:ntp, chrony
- 关闭防火墙及SELinux
- 各节点之间可通过主机名互相通信:非必须
- 建议使用/etc/hosts文件实现:非必须
- 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须
2.4 Keepalived 相关文件
- 软件包名:keepalived
- 主程序文件:/usr/sbin/keepalived
- 主配置文件:/etc/keepalived/keepalived.conf
- 配置文件示例:/usr/share/doc/keepalived/
- Unit File:/lib/systemd/system/keepalived.service
- Unit File的环境配置文件:/etc/sysconfig/keepalived
2.5 Keepalived 安装
[root@KA1 ~]# yum install ipvsadm.x86_64 -y
2.6 KeepAlived 配置说明
2.6.1 配置文件组成部分
三.Keepalived 企业应用示例
3.1 配置主备模式
3.1.1 MASTER配置
[root@KA1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
1972520594@qq.com
}
router_id KA1.haha
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 1
vrrp_gna_interval 1
vrrp_mcast_group4 224.0.0.44
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 20
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.110/24 dev eth0 label eth0:0
}
accept
}

3.1.2 BACKUP配置
[root@KA2 ~]# vim /etc/keepalived/keepalived.conf
router_id KA1.haha
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 1
vrrp_gna_interval 1
vrrp_mcast_group4 224.0.0.44
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 20
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.110/24 dev eth0 label eth0:0
}
accept
}
效果查看
KA1监听组播地址

当KA1的keepalived挂掉的时候,再查看监听:
[root@KA1 ~]# systemctl stop keepalived.service

KA2,VIP在KA2上:
再次启动

3.2启动keepalived日志功能
编辑/etc/sysconfig/keepalived文件,启动日志功能:

编辑/etc/syslog.conf文件:

重启syslog服务
[root@KA1 ~]# systemctl restart rsyslog.service
3.3 配置独立子配置文件
创建 /etc/keepalived/keepalived.conf 目录
[root@KA1 ~]# vim /etc/keepalived/keepalived.conf
编辑keepalived配置文件

3.4 非抢占模式配置、抢占模式延迟
非抢占模式
默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,这样会使vip在KA主机中来回漂移,造成网络抖动,建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机

抢占模式延迟

3.5 实现 master/master 的 Keepalived 双主架构
! Configuration File for keepalived
global_defs {
notification_email {
1972520594@qq.com
}
notification_email_from keepalived@KA1.haha
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1.haha
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 1
vrrp_gna_interval 1
vrrp_mcast_group4 224.0.0.44
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.110/24 dev eth0 label eth0:0
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 80
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.210/24 dev eth0 label eth0:1
}
}
virtual_server 192.168.2.110 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.2.40 80 {
weight 1
TCP_CHECK {
connect_timeout 5
retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.50 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
retry 3
delay_before_retry 1
}
}
}
KA2
! Configuration File for keepalived
global_defs {
notification_email {
1972520594@qq.com
}
notification_email_from keepalived@KA1.haha
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1.haha
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 1
vrrp_gna_interval 1
vrrp_mcast_group4 224.0.0.44
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.110/24 dev eth0 label eth0:0
}
accept
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.210/24 dev eth0 label eth0:1
}
}
virtual_server 192.168.2.110 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.2.40 80 {
weight 1
TCP_CHECK {
connect_timeout 5
retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.50 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
retry 3
delay_before_retry 1
}
}
}


效果



3.6 在其基础上配置后端RS服务、
RS1、RS2写默认网页区别:


RS1使用脚本绑定VIP至web服务器lo网卡:

RS2使用脚本绑定VIP至web服务器lo网卡:

KA1服务配置,KA2同理:

后端RS1、RS2配置回环IP:
RS1、RS2都添加环回网卡100:
[root@RS1 ~]# ip addr add 192.168.2.100/32 dev lo
编辑/etc/sysctl.conf文件

效果1

3.7 在此基础上再在RS上加一个服务,使得两个VIP都可以用上,实现KA的互相负载,RS的互相负载。
RS1、RS2都添加环回网卡210:

编辑/etc/my.cnf文件,测试的时候标识是哪台数据库

1045

被折叠的 条评论
为什么被折叠?



