keepalived入门
简介
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
工作原理
Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
SSL_GET与HTTP_GET相同,但使用SSL连接到远程Web服务器。
MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。结果必须是0或1.该脚本在导演盒上运行,这是测试内部应用程序的理想方式。可以使用完整路径(即/path_to_script/script.sh)调用可以不带参数运行的脚本。那些需要参数的需要用双引号括起来(即"/path_to_script/script.sh arg 1 ... arg n")
keepalived实现双机热备
keepalived的作用是检测后端TCP服务的状态,如果有一台提供TCP服务的后端节点死机,或者工作出现故障,keepalived会及时检测到,并将有故障的节点从系统中剔除,当提供TCP服务的节点恢复并且正常提供服务后keepalived会自动将TCP服务的节点加入到集群中。这些工作都是keepalived自动完成,不需要人工干涉,需要人工做的只是修复发生故障的服务器,以下通过示例来演示。
前提:为了测试能顺利进行,需先关闭selinux和firewalld。
测试环境如下:
1
2
3
4
5
|
keepalived主机: 10.0.0.20 keepalived备机: 10.0.0.21 http服务器1: 10.0.0.22 http服务器2: 10.0.0.23 VIP : 10.0.0.100 |
一、两台http服务器的安装
1、 两台机均安装httpd
1
|
$ sudo yum install -y httpd |
2、 添加首页
1
2
3
4
5
6
7
|
$ sudo -i #http服务器1设置 # echo “10.0.0.22” >/var/www/html/index.html #http服务器2设置 # echo “10.0.0.23” >/var/www/html/index.html |
3、 启动并设置开机启动httpd
1
2
|
$ sudo systemctl start httpd $ sudo systemctl enable httpd |
二、两台keepalived主机的设置
1、 两台机均安装keepalived
1
2
3
|
#安装依赖文件与keepalive $ sudo yum install -y openssl openssl-devel keepalived |
2、 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
|
$ sudo vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { #指定该节点为主节点,备用节点设置为BACKUP state MASTER #绑定虚拟IP的网络接口 interface eno16777736 #VRRP组名,两个节点设置一样,以指明各个节点同属一VRRP组 virtual_router_id 51 #主节点的优先级,数值在1~254,注意从节点必须比主节点的优先级别低 priority 50 ##组播信息发送间隔,两个节点需一致 advert_int 1 #设置验证信息,两个节点需一致 authentication{ auth_type PASS auth_pass 1111 } #指定虚拟IP,两个节点需设置一样 virtual_ipaddress{ 10.0.0.100 } } #虚拟IP服务 virtual_server 10.0.0.100 80 { #设定检查间隔 delay_loop 6 #指定LVS算法 lb_algo rr #指定LVS模式 lb_kind NAT nat_mask 255.255.255.0 #持久连接设置,会话保持时间 persistence_timeout 50 #转发协议为TCP protocol TCP #后端实际TCP服务配置 real_server 10.0.0.22 80 { weight 1 } real_server 10.0.0.23 80 { weight 1 } } |
3、 keepalived备机的keepalived.conf的配置,不同之处如下:
1
2
3
4
|
state BACKUP priority 30 #其它配置跟keepalived主机相同 |
/etc/keepalived/keepalived.conf为keepalived的主配置文件。以上配置state表示主节点为10.0.0.20,副节点为10.0.0.21。虚拟为IP10.0.0.100。后端的真实服务器为10.0.0.22和10.0.0.23,当通过10.0.0.100访问web服务器时,自动转到后端真实服务器,后端节点的权重相同,类似轮询的模式。
三、keepalived的启动与测试
1、 启动keepalived
1
2
|
$ sudo systemctl start keepalived $ sudo systemctl enable keepalived |
2、 查看keepalived主机的IP
1
|
$ ip addr show |
四、测试结果
1、 测试前查看keepalived主机和备机的IP,结果如图:
2、 重启keepalived主机后,查看keepalived备机的IP显示
以上测试结果说明,当keepalived备机在keepalived主机宕机的情况会自动接管了资源。但待keepalived主机恢复正常的时候,主机会重新接管资源。