博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVS+Keepalived实现高可用群集
阅读量:6636 次
发布时间:2019-06-25

本文共 8247 字,大约阅读时间需要 27 分钟。

一、keepalived概述

keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

1、keepalived的热备原理概述

keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——有多台路由组成一个热备组,通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主路由器提供服务 ,其他路由器处于冗余状态,若当前在线路由器失败,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。热备组内的每台路由器都有可能成为主路由器,虚拟路由器的IP地址可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用keepalived时,漂移地址的实现不需要手动建立虚接口配置文件,而是由keepalived根据配置文件自动管理。

2、安装keepalived所需要支持的软件包

在编译安装keepalived之前,必须先安装内核开发包kernel-devel,以及openssl-devel和popt-devel等支持库。

1
[root@localhost /]#yum -y install kernel-devel openssl-devel popt-devel

3、编译安装keepalived

使用指定Linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了。

1
2
3
4
[root@localhost /]#tar zxf keepalived-
1.2
.
2
.tar.gz -C /usr/src/
[root@localhost /]#cd /usr/src/keepalived-
1.2
.
2
[root@localhost keepalived-
1.2
.
2
]#./configure --prefix=/ --
with
-kernel-dir=/usr/src/kernels/
2.6
.
32
-
131.0
.
15
.e16.i686
[root@localhost keepalived-
1.2
.
2
]#make && make install

4、启动keepalived服务进程

执行make install操作以后,会自动生成“/etc/init.d/keepalived”脚本文件,但还需要手动添加为系统服务,这样就可以使用service,chkconfig工具来对keepalived服务进程进行管理了。

1
2
[root@localhost /]#chkconfig --add keepalived
[root@localhost /]#chkconfig keepalived on

二、配置LVS+Keepalived高可用群集

keepalived的设计目标是构建可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用来做双击热备。使用keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性,对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。在基于LVS-Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,本例将以DR模式的LVS群集为基础,增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建建有负载均衡、高可用两种能力的LVS网站群集平台。拓扑图如下:

090603823.jpg

实验环境:参照上图可知每台主机网卡的IP地址,如下所示:共7台主机

VIP(虚拟IP地址):172.16.16.172/24

主调度器:eth0 172.16.16.173/24 eth1: 192.168.7.173/24

从调度器:eth0 172.16.16.174/24 eth1: 192.168.7.174/24

WEB节点1:eth0 172.16.16.177/24 eth1: 192.168.7.177/24

WEB节点2:eth0 172.16.16.178/24 eth1: 192.168.7.178/24

WEB节点3:eth0 172.16.16.179/24 eth1: 192.168.7.179/24

WEB节点4:eth0 172.16.16.180/24 eth1: 192.168.7.180/24

NFS共享存储:eth0 192.168.7.250/24

具体操作步骤如下:

1、配置各服务器的IP地址以及相应的软件包

调度器:主调度器和从调度器上分别安装keepalived和ipvsadm等软件包,并安装这些软件包的依赖包,具体操作参考文章的上述部分。

WEB服务器:在各WEB服务器上分别安装httpd软件包,并将NFS服务器上的共享存储挂载到本地。

NFS存储:安装NFS软件包,并提供相应的共享源。

2、配置主调度器

Keepalived服务的配置目录位于/etc/keepalived。其中keepalived.conf是主配置文件,另外包括一个子目录samples/,提供了许多配置样列作为参考。在keepalived的配置文件中,使用”global_defs {……}”区段指定全局参数。使用”vrrp_instance 实例名称 {……}”区段指定VRRP热备参数,注释文字以”!”符号开头。

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
[root@localhost /]#vim /etc/keepalived/keepalived.conf
! Configuration File 
for 
keepalived     #!表示注释
global_defs
   
notification_email {
        
root@example.com                #接收警报的邮箱,可以添加多个
   
}
   
notification_email_from root@localhost
   
smtp_server 
127.0
.
0.1                
#使用本机转发 email
   
smtp_connect_timeout 
30
   
router_id  LVS_HA_R1                 #本服务器的名称,备份组内唯一
}
vrrp_instance  VI_1 {                   #定义VRRP热备实例
    
state MASTER           #热备状态,MASTER(主);SLAVE(从);BACKUP(备份)
    
interface 
eth0                      #承载VIP地址的物理接口
    
virtual_router_id 
50                
#虚拟路由器的ID号,组内保存一致
    
priority 
100                        
#优先级,数值越大优先级越高。
    
advert_int 
1                      
#主备之间的通告间隔秒数(心跳频率)
    
authentication {                  #认证信息,每个热备组保持一致
        
auth_type PASS                #认证类型,主备切换时的验证
        
auth_pass 
1111                
#密码字串
    
}
    
virtual_ipaddress {               #指定漂移地址(VIP),可以有多个
        
172.16
.
16.172                 
#HA 虚拟 ip,可加多个
    
}
}
virtual_server 
172.16
.
16.172 
80 
{  #虚拟服务器地址(VIP)、端口
    
delay_loop 
6                   
#健康检查的间隔时间(秒)
    
lb_algo rr                     #lvs 调度算法,这里使用轮询
    
lb_kind DR                     #lvs 负载均衡机制,这里使用直连路由
!    persistence_timeout  
50       
#同一IP连接
50
秒内被分配到同一台服务器
    
protocol TCP                     #用 TCP 协议检查 realserver 状态
    
real_server 
172.16
.
16.177 
80 
{  #第一个WEB节点的地址、端口
        
weight 
1                     
#节点的权重
        
TCP_CHECK {                  #健康检查方式
            
connect_port 
80          
#检查的目标端口
            
connect_timeout 
3        
#故障重试秒数(即连接超时)
            
nb_get_retry 
3           
#重试延迟(即重试次数)
            
delay_before_retry 
3     
#重试间隔(秒)
        
}
    
}
    
real_server 
172.16
.
16.178 
80 
{  #第二个WEB节点的地址、端口
        
weight 
1
        
TCP_CHECK {
            
connect_port 
80
            
connect_timeout 
3
            
nb_get_retry 
3
            
delay_before_retry 
3
        
}
    
}
 
real_server 
172.16
.
16.179 
80 
{  #第三个WEB节点的地址、端口
        
weight 
1
        
TCP_CHECK {
            
connect_port 
80
            
connect_timeout 
3
            
nb_get_retry 
3
            
delay_before_retry 
3
        
}
    
}
 
real_server 
172.16
.
16.180 
80 
{  #第四个WEB节点的地址、端口
        
weight 
1
        
TCP_CHECK {
            
connect_port 
80
            
connect_timeout 
3
            
nb_get_retry 
3
            
delay_before_retry 
3
        
}
    
}
}
[root@localhost /]#service keeplaived restart      
//重启keepalived服务

配置完keepalived后,还需要配置负载调度器,加载ip_vs模块,安装ipvsadm软件包.这里使用的是LVS-DR模式,需要调整/proc系统的内核响应参数。

1
2
3
4
5
6
7
8
9
[root@localhost /]#modprobe ip_vs
[root@localhost /]#rpm -ivh /media/Packages/ipvsadm-
1.25
-
9
.e16.i686.rpm
[root@localhost /]#vim /etc/sysctl.conf
......
//省略部分内容
net.ipv4.conf.all.send_redirects = 
0
net.ipv4.conf.
default
.send_redirects = 
0
net.ipv4.conf.eth0.send_redirects = 
0
net.ipv4.conf.eth1.send_redirects = 
0
[root@localhost /]#sysctl -p

3、配置从调度器

从调度器的配置与主调度器基本相同,也包括全局参数、热备参数、服务器池配置,只需要调整router_idstateprority参数即可,其余内容完全相同,配置完成以后重启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
[root@localhost /]#vim /etc/keepalived/keepalived.conf
! Configuration File 
for 
keepalived 
global_defs
   
notification_email {
        
root@example.com            
   
}
   
notification_email_from root@localhost
   
smtp_server 
127.0
.
0.1            
   
smtp_connect_timeout 
30
   
router_id  LVS_HA_R2             
}
vrrp_instance  VI_1 {               
    
state SLAVE        
    
interface 
eth0                  
    
virtual_router_id 
50            
    
priority 
99                    
    
advert_int 
1                  
    
authentication {              
        
auth_type PASS            
        
auth_pass 
1111            
    
}
    
virtual_ipaddress {           
        
172.16
.
16.172             
    
}
}
virtual_server 
172.16
.
16.172 
80 
{
    
delay_loop 
6               
    
lb_algo rr                 
    
lb_kind DR                 
!    persistence_timeout  
50   
    
protocol TCP                 
    
real_server 
172.16
.
16.177 
80 
{  #第一个WEB节点的地址、端口
        
weight 
1                 
        
TCP_CHECK {              
            
connect_port 
80      
            
connect_timeout 
3 
            
nb_get_retry 
3       
            
delay_before_retry 
3 
        
}
    
}
    
real_server 
172.16
.
16.178 
80 
{  #第二个WEB节点的地址、端口
        
weight 
1
        
TCP_CHECK {
            
connect_port 
80
            
connect_timeout 
3
            
nb_get_retry 
3
            
delay_before_retry 
3
        
}
    
}
 
real_server 
172.16
.
16.179 
80 
{  #第三个WEB节点的地址、端口
        
weight 
1
        
TCP_CHECK {
            
connect_port 
80
            
connect_timeout 
3
            
nb_get_retry 
3
            
delay_before_retry 
3
        
}
    
}
 
real_server 
172.16
.
16.180 
80 
{  #第四个WEB节点的地址、端口
        
weight 
1
        
TCP_CHECK {
            
connect_port 
80
            
connect_timeout 
3
            
nb_get_retry 
3
            
delay_before_retry 
3
        
}
    
}
}
[root@localhost /]#service keeplaived restart      
//重启keepalived服务

配置完keepalived后,还需要配置负载调度器,加载ip_vs模块,安装ipvsadm软件包.这里使用的是LVS-DR模式,需要调整/proc系统的内核响应参数。

1
2
3
4
5
6
7
8
9
[root@localhost /]#modprobe ip_vs
[root@localhost /]#rpm -ivh /media/Packages/ipvsadm-
1.25
-
9
.e16.i686.rpm
[root@localhost /]#vim /etc/sysctl.conf
......
//省略部分内容
net.ipv4.conf.all.send_redirects = 
0
net.ipv4.conf.
default
.send_redirects = 
0
net.ipv4.conf.eth0.send_redirects = 
0
net.ipv4.conf.eth1.send_redirects = 
0
[root@localhost /]#sysctl -p

当主从服务器的keepalived服务都起来之后,我们可以使用“ip addr show dev eth0”命令来查看VIP所在的位置,在主调度器上执行此命令时,发现VIP当前是在主调度器上的。当将主调度器的eth0网卡宕掉时,VIP会转移到从调度器上。

4、配置web节点服务器

由于我们群集使用的是DR模式,所以我们的web节点服务器的配置也和作者前一篇文章DR负载均衡群集里面配置的一样。

配置虚接口

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost /]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:
0
[root@localhost network-scripts]#vim ifcfg-lo:
0
......
//省略部分内容
DEVICE=lo:
0
ONBOOT=yes
IPADDR=
172.16
.
16.172
NETMASK=
255.255
.
255.255
[root@localhost network-scripts]#service network restart
[root@localhost network-scripts]#vim /etc/rc.local
......
//省略部分内容
/sbin/route add -host 
172.16
.
16.172 
dev lo:
0
[root@localhost network-scripts]#route add -host 
172.16
.
16.172 
dev lo:
0

调整/proc响应参数

1
2
3
4
5
6
7
8
9
[root@localhost /]#vim /etc/sysctl.conf
......
//省略部分内容
net.ipv4.conf.all.arp_ignore = 
1
net.ipve.conf.all.arp_announce = 
2
net.ipv4.conf.
default
.arp_ignore = 
1
net.ipve.conf.
default
.arp_announce = 
2
net.ipv4.conf.lo.arp_ignore = 
1
net.ipve.conf.lo.arp_announce = 
2
[root@localhost /]#sysctl -p

挂载NFS共享存储,并安装httpd服务

1
2
3
4
5
6
[root@localhost /]#yum -y install httpd
[root@localhost /]#mount 
192.168
.
7.250
:/
var
/www/html /
var
/www/html
[root@localhost /]#vim /
var
/www/html/index.html
<h1>负载均衡测试网页!!!</h1>
[root@localhost /]#service httpd start
[root@localhost /]#chkcofnig httpd on

注意:所有web节点服务器的配置均和此一样。

5、配置NFS共享存储

如何配置NFS共享存储请大家参考文章

6、测试LVS+Keepalived高可用群集

安排多台测试机,从internet中直接访问,将能够看到由真实服务器提供的网页内容

LVS负载调度器中,通过“ipvsadm -Ln”或“ipvsadm -Lnc”命令查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当。


至此有关LVS+keepalived群集配置完毕,这样即实现了lvs负载平衡又实现了调度器的热备。

本文转自yun5277 51CTO博客,原文链接:http://blog.51cto.com/dengqi/1308318,如需转载请自行联系原作者

你可能感兴趣的文章
IP和端口号
查看>>
UI框架
查看>>
扩展方法
查看>>
TCP三次握手四次挥手
查看>>
async/await
查看>>
Socket通信
查看>>
粘包和分包
查看>>
C#连接、访问MySQL数据库
查看>>
动画系统
查看>>
Quaternion
查看>>
01定时回调
查看>>
02定时回调增加任务循环功能
查看>>
03定时回调增加任务删除功能
查看>>
04定时回调增加任务替换功能
查看>>
05帧定时任务
查看>>
06定时任务简化
查看>>
01AssetBundle
查看>>
02加载AssetBundle资源
查看>>
03AssetBundle分组策略
查看>>
04打包选项和Manifest文件
查看>>