基于Keepalived实现LVS双主高可用集群

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

前言

前面说过基于heartbeat的LVS高可用方案,今天带来另一种解决方案:基于Keepalived实现LVS双主高可用集群。什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生。本文将详细讲述Keepalived工作原理及高可用解决方案的实现。

相关介绍

Keepalived简介

Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

工作原理

Keepalived组件介绍

core:keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等

check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析

vrrp:VRRP子进程,VRRP子进程就是来实现VRRP协议的

libip*:LVS相关


wKioL1V_oFXj-IgtAACUoeU32Uk238.gif

由图可知,两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事,healthchecker子进程负责检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。

高可用解决方案

实验拓扑

wKioL1V_4wXzKIbEAAFaRuGMwlU686.jpg

配置过程

HA集群配置前提

时间同步、基于主机名互相通信、SSH互信

请确保两个节点时间同步,可用ntpdate向时间服务器同步

1
[root@node1 ~] # ntpdate cn.pool.ntp.org

基于主机名互相通信

1
2
3
4
5
6
7
8
9
10
11
12
[root@node1 ~] # vim /etc/hosts
   
172.16.10.123   node1.scholar.com node1
172.16.10.124   node2.scholar.com node2
   
[root@node1 ~] # vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com
   
[root@node1 ~] # uname -n
node1.scholar.com
   
#两个节点都需如上操作

SSH互信

1
2
3
4
5
6
7
[root@node1 ~] # ssh-keygen -t rsa -P ''
[root@node1 ~] # ssh-copy-id -i .ssh/id_rsa.pub root@node2
[root@node2 ~] # ssh-keygen -t rsa -P ''
[root@node2 ~] # ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node1 ~] # date; ssh node2 'date' #测试
Tue Jun 16 13:31:39 CST 2015
Tue Jun 16 13:31:39 CST 2015

安装所需程序

1
2
3
[root@node1 ~] # yum install keepalived -y
 
#两个节点都需安装

配置keepalived

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
[root@node1 ~] # vim /etc/keepalived/keepalived.conf 
 
vrrp_instance VI_1 {         #定义VRRP实例,实例名自定义
     state MASTER             #指定Keepalived的角色,MASTER为主服务器,BACKUP为备用服务器
     interface eth0           #指定HA监测的接口
     virtual_router_id 51     #虚拟路由标识(1-255),在一个VRRP实例中主备服务器ID必须一样
     priority 100             #优先级,数字越大越优先,主服务器优先级必须高于备服务器
     advert_int 1             #设置主备之间同步检查时间间隔,单位秒
     authentication {         #设置验证类型和密码
         auth_type PASS       #验证类型
         auth_pass ab007      #设置验证密码,同一实例中主备密码要保持一致
     }
     virtual_ipaddress {      #定义虚拟IP地址
         192.168.12.23
     }
}
 
vrrp_instance VI_2 {
     state BACKUP
     interface eth0
     virtual_router_id 61
     priority 99
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass sr200
     }
     virtual_ipaddress {
         192.168.13.23
     }
}
 
virtual_server 192.168.12.23 80 {     #设置虚拟服务器
     delay_loop 6                      #设置健康状态检查时间
     lb_algo rr                        #设置负载调度算法
     lb_kind DR                        #设置LVS实现负载均衡的机制
     nat_mask 255.255.255.0            #设置掩码
     persistence_timeout 50            #会话保持时间
     protocol TCP                      #指定转发协议类型
     sorry_server 127.0.0.1 80         #设置应急服务器        
     real_server 172.16.10.125 80 {    #后端服务器节点
         weight 1                      #设置服务节点的权重
         HTTP_GET {                    #设置检测方式
             url {
               path /
               status_code 200         #设定返回状态码为200表示Realserver存活
             }
             connect_timeout 2         #设置响应超时时间
             nb_get_retry 3            #设置超时重试次数
             delay_before_retry 1      #设置超时重试间隔
         }
     }
   real_server 172.16.10.126 80 {
         weight 1
         HTTP_GET {
             url {
               path /
               status_code 200
             }
             connect_timeout 2
             nb_get_retry 3
             delay_before_retry 1
         }
     }
}  
 
virtual_server 192.168.13.23 80 {
     delay_loop 6
     lb_algo rr
     lb_kind DR
     nat_mask 255.255.255.0
     persistence_timeout 50
     protocol TCP 
     sorry_server 127.0.0.1 80       
     real_server 172.16.10.125 80 {
         weight 1
         HTTP_GET {
             url {
               path /
               status_code 200
             }
             connect_timeout 2
             nb_get_retry 3
             delay_before_retry 1
         }
     }
     real_server 172.16.10.126 80 {
         weight 1
         HTTP_GET {
             url {
               path /
               status_code 200
             }
             connect_timeout 2
             nb_get_retry 3
             delay_before_retry 1
         }
     }
}

将配置文件同步给另一个节点

1
2
[root@node1 ~] # scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
keepalived.conf                                           100% 2196     2.1KB /s    00:00

修改另一个节点配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@node2 ~] # vim /etc/keepalived/keepalived.conf
 
vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     virtual_router_id 51
     priority 99
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass ab007
     }
     virtual_ipaddress {
         192.168.12.23
     }
}
 
vrrp_instance VI_2 {
     state MASTER
     interface eth0
     virtual_router_id 61
     priority 100
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass sr200
     }
     virtual_ipaddress {
         192.168.13.23
     }
}
 
#其他配置不变

Real Server配置

配置内核参数及VIP

wKioL1V_3QDD8_z2AAGja8oSVwM260.jpg

准备测试页面

wKiom1V_2_zDUQjMAABlq1BSRog135.jpg

1
#两个RS节点都执行以上操作

测试页面

wKioL1V_3knw7NMsAABe5ZfHagA704.jpg

keepalived节点准备应急页面

wKiom1V_3tGDY1w3AABbX2m87MA224.jpg

1
#两节点都需执行此操作

测试

启动keepalived

wKiom1V_4hDQrbFTAABrvguRyWc873.jpg

查看两节点的ip和ipvs规则情况

wKiom1V_4o7D8tT2AALE8Yvdzyw679.jpg

wKiom1V_4uXgoHVUAALElLkr1us510.jpg

1
#两个节点各生成了两组规则,因为VIP只有一组,所以只有一组生效

访问测试

wKiom1V_5W3ytb2RAACNkDzdVls362.jpg

wKioL1V_5y3iKwqoAACNjcpL5CQ079.jpg

wKioL1V_59aD84jqAACRGnQv-0k068.jpg

wKiom1V_50DBlGrzAACTTCEdDtw075.jpg

模拟其中一个主节点故障

1
[root@node1 ~] # service keepalived stop

再次查看两节点的ip和ipvs规则情况

wKiom1V_6OXQiHalAAIQh1tToDQ703.jpg

wKioL1V_6qjgMK-1AALkiAmXecQ956.jpg

由此可见,一个主节点挂掉以后所有的VIP和ipvs规则都会转移到另一个节点,所以访问也不会受到任何影响,这里就不再测试。如果故障节点重新上线,资源还会再次回到工作节点。

下面我们模拟两个RS节点全部故障,看一下sorry_server是否可以工作

1
2
3
[root@scholar ~] # service httpd stop
 
#两个RS全部停止服务

查看ipvs规则

wKiom1V_6ozyHRXlAADpS-wYOX4829.jpg

real server已全部下线,应急服务器上线

wKiom1V_68iiDdUnAACLex9DzBI745.jpg

wKioL1V_7YagFSFqAACKPYnN4vw313.jpg

sorry_server响应成功,至此,基于Keepalived实现LVS双主高可用集群实验完成

The end

基于Keepalived实现LVS双主高可用解决方案就说到这里了,通过实验可以看出使用keepalived构建LVS群集更加简便易用,如果实验过程中遇到问题可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~



本文转自 北城书生  51CTO博客,原文链接:http://blog.51cto.com/scholar/1662430


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
89 8
LVS+Keepalived 负载均衡
|
3月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
71 5
|
4月前
|
负载均衡 网络协议
使用LVS搭建集群实现负载均衡(二)安装使用
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡(二)安装使用
80 5
|
4月前
|
存储 负载均衡 算法
使用LVS搭建集群实现负载均衡(一)
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡
174 5
|
4月前
|
负载均衡 监控 算法
在Linux中,如何配置和管理LVS集群?
在Linux中,如何配置和管理LVS集群?
|
7月前
|
弹性计算 负载均衡 网络协议
LVS (Linux Virtual server)集群介绍
LVS (Linux Virtual server)集群介绍
|
7月前
|
运维 负载均衡 监控
keepalived+LVS实现高可用性集群
通过结合keepalived和LVS,你可以创建一个高可用性的负载均衡集群,确保服务器的稳定性和性能。这对于托管Web服务、应用服务器等关键服务的服务器集群非常有用。
126 1
|
7月前
|
负载均衡 监控 Linux
CentOS6.5高可用集群LVS+Keepalived(DR模式)
CentOS6.5高可用集群LVS+Keepalived(DR模式)
|
7月前
|
负载均衡 监控 调度
Keepalived+Lvs(dr)调度器主备配置小实验
Keepalived和LVS(Linux Virtual Server)是两个常用的开源软件,通常结合使用以提供高可用性和负载均衡的解决方案。 Keepalived是一种用于实现高可用性的软件,它可以监控服务器的健康状态,并在主服务器出现故障时自动切换到备份服务器。
231 2
|
7月前
|
负载均衡 算法 Linux
LVS集群
LVS(Linux Virtual Server)集群是一种基于Linux操作系统的高可用性和负载均衡解决方案。它通过将网络流量分发到多个后端服务器上,实现了对网络服务的负载均衡,并提高了系统的可用性和性能。
137 1