keepalived+lvs(为lvs提供健康检查)

keepalived+lvs(为lvs提供健康检查)

【注】:所有实验机的防火墙和sellinux都要关闭

keepalived+lvs+httpd

调度端(keepalived):server1(172.25.9.1) server2(172.25.9.2)
real server:server3(172.25.9.3) server4(172.25.9.4)

调度端(serevr1&server2)

关闭HA服务,清除arp规则

1
2
3
4
5
6
7
[root@server1 ~]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

安装keepalived服务

1
2
3
4
5
[root@server1 ha.d]# yum install keepalived -y
[root@server1 sysconfig]# ll /etc/init.d/keepalived
-rwxr-xr-x 1 root root 2134 Sep 26 2012 /etc/init.d/keepalived
[root@server1 sysconfig]# ll /etc/sysconfig/keepalived
-rw-r--r-- 1 root root 667 Sep 26 2012 /etc/sysconfig/keepalived

修改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
[root@server1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的目标,一行一个
root@localhost #用户名@主机名
}
notification_email_from keepalived@server1.example.com #指定发件人
smtp_server 127.0.0.1 #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
state MASTER #指定master和backup,如果设置了nopreempt这个值不起作用,主备考priority决定
interface eth1 #设置实例绑定的网卡
virtual_router_id 51 #VPID标记
priority 100 #优先级,高的优先级竞选为master
advert_int 1 #检查间隔,默认1
authentication { #设置认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress { #设置vip
172.25.9.100
}
}

virtual_server 172.25.9.100 80 {
delay_loop 6 #健康检查时间间隔
lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #负载均衡转发规则NAT|DR|RUN
# nat_mask 255.255.255.0
# persistence_timeout 50 #会话保持时间
protocol TCP #使用的协议

real_server 172.25.9.3 80 {
weight 1 #默认为1,失效为0
TCP_CHECK {
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 172.25.9.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

将修改好的配置文件发送给server2

1
2
3
4
[root@server1 ~]# scp /etc/keepalived/keepalived.conf 172.25.9.2:/etc/keepalived/
做如下改动:
notification_email_from keepalived@server2.example.com
state BACKUP

RS端

1.配置文件

1
2
3
[root@server3 html]# tail -n 2 /etc/sysctl.conf 
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1

2.开启httpd服务

1
[root@server3 ~]# /etc/init.d/httpd start

开启两端服务

1
2
[root@server1 ~]# /etc/init.d/keepalived start
[root@server2 ~]# /etc/init.d/keepalived start

实验结果

1.查看服务启动之后的日志:可以看到进入主备状态:

1
2
3
4
5
6
7
[root@server1 ~]# tail /var/log/messages
Feb 28 19:19:48 server1 Keepalived_healthcheckers[2447]: SMTP alert successfully sent.
Feb 28 19:19:49 server1 Keepalived_vrrp[2448]: VRRP_Instance(VI_1) Entering MASTER STATE
[root@server2 mail]# tail /var/log/messages
Feb 28 19:25:40 server2 Keepalived_vrrp[4457]: VRRP_Instance(VI_1) Entering BACKUP STATE
```
2.vip在server1上:

[root@server1 ~]# ip addr show
2: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:9a:d3:95 brd ff:ff:ff:ff:ff:ff
inet 172.25.9.1/24 brd 172.25.9.255 scope global eth1
inet 172.25.9.100/32 scope global eth1

1
2

3.自动生成arp规则

[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.9.100:80 rr
-> 172.25.9.3:80 Route 1 0 0
-> 172.25.9.4:80 Route 1 0 0

1
2
3
4
5
6
7

## keepalived+lvs+ftp

只是将上面管理的服务修改为ftp服务

### RS端(server3&server4)
1.安装vsftpd服务,并创建测试文件

[root@server3 ~]# yum install vsftpd -y
[root@server3 ~]# cd /var/ftp/pub/
[root@server3 pub]# touch server3
[root@server3 pub]# /etc/init.d/vsftpd start

1
2
### 调度端(server1&server2)
1.修改配置文件(server1)

[root@server1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@server1.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.9.100
}
}

virtual_server 172.25.9.100 21 {
delay_loop 6
lb_algo rr
lb_kind DR

nat_mask 255.255.255.0

 persistence_timeout 50                #
 protocol TCP

real_server 172.25.9.3 21 {
    weight 1
    TCP_CHECK {
        connect_timeout 3
    }
}
real_server 172.25.9.4 21 {
    weight 1
    TCP_CHECK {
        connect_timeout 3
    }
}

}

1
2

2.将配置文件发送给server2并修改

[root@server1 ~]# scp /etc/keepalived/keepalived.conf 172.25.9.2:/etc/keepalived/
做如下改动:
notification_email_from keepalived@server2.example.com
state BACKUP

1
2

3.重启keepalived服务

[root@server1 ~]# /etc/init.d/keepalived restart

1
2
3

4.实验结果
vip在master上:

[root@server1 ~]# ip addr show

1
2
3

调度端的arp规则:
server1:

[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.9.100:21 rr
-> 172.25.9.3:21 Route 1 0 0
-> 172.25.9.4:21 Route 1 0 0

1
server2:

[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.9.100:21 rr persistent 50
-> 172.25.9.3:21 Route 1 0 0
-> 172.25.9.4:21 Route 1 1 8

1
2

在物理机上lftp vip:

[root@foundation187 ~]# lftp 172.25.9.100
lftp 172.25.9.100:~> ls /pub/
-rw-r–r– 1 0 0 0 Feb 28 15:17 server4

1
2

50秒后:

[root@foundation187 ~]# lftp 172.25.9.100
lftp 172.25.9.100:~> ls /pub/
-rw-r–r– 1 0 0 0 Feb 28 15:17 server3
```