Haproxy+Keepalived集群实例配置

简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://koumm.blog.51cto.com/703525/1733880

环境说明:

操作系统: Redhat 6.5 x64,本文采用rpm方式安装haproxy,keepalived。   
如果采用原码安装:可以参考基础CentOS5.9 Haproxy+Keepalived+Jboss集群实施架构一例    
app1: 192.168.0.24    
app1: 192.168.0.25    
VIP : 192.168.0.26

http1:192.168.0.24:8080  主机配置LAP环境。   
http2:192.168.0.25:8080  主机配置LAP环境。

一、双机Keepalived配置

实现一个VIP出现,出例采用VIP地址是192.168.0.26。

1.安装keepalived软件

说明:RHEL/CentOS/OEL6.X安装版本中已经集成了keepalive-1.2.7,以及haproxy软件包经过安装没有问题。   
在app1,app2两个节点上直接采用RPM包安装。

1
2
3
4
5
6
7
8
9
10
# rpm -ivh keepalived-1.2.7-3.el6.x86_64.rpm net-snmp-utils-5.5-49.el6.x86_64.rpm net-snmp-libs-5.5-49.el6.x86_64.rpm lm_sensors-3.1.1-17.el6.x86_64.rpm lm_sensors-
devel-3.1.1-17.el6.x86_64.rpm lm_sensors-libs-3.1.1-17.el6.x86_64.rpm    
Preparing...                 ########################################### [100%]    
    1:lm_sensors-libs         ########################################### [ 17%]    
    2:net-snmp-libs           ########################################### [ 33%]    
    3:keepalived              ########################################### [ 50%]    
    4:net-snmp-utils          ########################################### [ 67%]    
    5:lm_sensors              ########################################### [ 83%]    
    6:lm_sensors-devel        ########################################### [100%]    
#

2. 创建keepalived配置文件

1) 在app1 节点一上配置文件

说明: 修改配置文件, 绑定的网卡是eth0,从机就是优先级与本机IP不一样外,其它都是一样,相比之前的示例增加了监控脚本。

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
# vi /etc/keepalived/keepalived.conf  
! Configuration File  for  keepalived    
global_defs {    
    notification_email {    
      xxx@126.com    
    }    
    notification_email_from service@abc.com    
    smtp_server 127.0.0.1    
    smtp_connect_timeout 30    
    router_id LVS_DEVEL    
}
vrrp_script chk_haproxy {   
     script  "killall -0 haproxy"    
     interval 1    
     weight -2    
}
vrrp_instance VI_1 {   
     state MASTER     
     interface eth0    
     virtual_router_id 51    
     mcast_src_ip 192.168.0.24  
     priority 100      
     advert_int 1    
     authentication {    
         auth_type PASS    
         auth_pass 876543    
     }    
     virtual_ipaddress {    
         192.168.0.26 /24  dev eth0 label eth0:1    
     }    
     track_interface {    
         eth0    
     }    
     track_script {    
         chk_haproxy    
     }    
}


2) 在app2节点二上配置文件

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
# vi /etc/keepalived/keepalived.conf  
! Configuration File  for  keepalived    
global_defs {    
    notification_email {    
      xxx@126.com    
    }    
    notification_email_from service@abc.com    
    smtp_server 127.0.0.1    
    smtp_connect_timeout 30    
    router_id LVS_DEVEL    
}
vrrp_script chk_haproxy {   
     script  "killall -0 haproxy"     
     interval 1     
     weight -2  
}
vrrp_instance VI_1 {   
     state MASTER     
     interface eth0    
     virtual_router_id 51    
     mcast_src_ip 192.168.0.25    
     priority 99  
     advert_int 1    
     authentication {    
         auth_type PASS    
         auth_pass 876543    
     }    
     virtual_ipaddress {    
         192.168.0.26 /24   dev eth0 label eth0:1    
     }    
     track_interface {    
         eth0    
     }    
     track_script {    
         chk_haproxy    
     }    
}


3 .在app1,app2两节点上启动与创建keepalived服务

1) 启动服务并加为开机启动:

1
2
service keepalived start    
chkconfig keepalived on


2) 测试并观察VIP漂移情况

(1) VIP地址切换观察

说明:两种方式切换VIP, 一个是关闭haproxy代理服务,一个是关闭相关节点的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
[root@app1 /] # service keepalived start    
Starting keepalived: [ OK ]
[root@app1 keepalived] # ip a   
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN     
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00    
     inet 127.0.0.1 /8  scope host lo    
     inet6 ::1 /128  scope host     
        valid_lft forever preferred_lft forever    
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000    
     link /ether  00:0c:29:4c:39:43 brd ff:ff:ff:ff:ff:ff    
     inet 192.168.0.24 /24  brd 192.168.0.255 scope global eth0    
     inet 192.168.0.26 /24  scope global secondary eth0:1    
     inet6 fe80::20c:29ff:fe4c:3943 /64  scope link     
        valid_lft forever preferred_lft forever    
[root@app1 keepalived] #
 
[root@app2 keepalived] # ip a    
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN     
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00    
     inet 127.0.0.1 /8  scope host lo    
     inet6 ::1 /128  scope host     
        valid_lft forever preferred_lft forever    
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000    
     link /ether  00:0c:29:cf:05:99 brd ff:ff:ff:ff:ff:ff    
     inet 192.168.0.25 /24  brd 192.168.0.255 scope global eth0    
     inet6 fe80::20c:29ff:fecf:599 /64  scope link     
        valid_lft forever preferred_lft forever    
[root@app2 keepalived] #
注:可以关闭keepalived服务,以及关闭haproxy服务,通过 tail  -f  /var/log/messages 观察VIP移动情况。
Jan 11 12:54:19 app2 Keepalived_vrrp[26911]: VRRP_Instance(VI_1) Received higher prio advert   
Jan 11 12:54:19 app2 Keepalived_vrrp[26911]: VRRP_Instance(VI_1) Entering BACKUP STATE    
Jan 11 12:54:19 app2 Keepalived_vrrp[26911]: VRRP_Instance(VI_1) removing protocol VIPs.    
Jan 11 12:54:19 app2 Keepalived_healthcheckers[26910]: Netlink reflector reports IP 192.168.0.26 removed


二、HAproxy反向代理配置

app1, app2配置操作

1. 添加非本机IP邦定支持

# vi /etc/sysctl.conf    
net.ipv4.ip_nonlocal_bind = 1    
# sysctl -p


2. 安装haproxy软件

# rpm -ivh haproxy-1.4.24-2.el6.x86_64.rpm


3. 创建配置文件

1)app1上创建配置文件

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
# vi /usr/local/haproxy/conf/haproxy.cfg
global   
       log  127.0.0.1   local0     
       maxconn     4000     
       chroot       /var/lib/haproxy    
       pidfile      /var/run/haproxy .pid    
       user        haproxy    
       group       haproxy    
       daemon    
       nbproc 1  
       stats socket  /var/lib/haproxy/stats
defaults   
       log       global       
       mode      http   
       option    httplog   
       option    dontlognull     
       option    redispatch   
       option    httpclose     
       option    forwardfor     
       retries   3              
       maxconn   2000     
       contimeout  5000   
       clitimeout  50000     
       srvtimeout  50000     
       timeout check   1s  
       timeout http-request    10s     
       timeout queue           1m  
       timeout connect         10s     
       timeout client          1m  
       timeout server          1m  
       timeout http-keep-alive 10s
listen stats   
       mode http    
       bind 0.0.0.0:91  
       stats  enable     
       stats uri  /admin     
       stats realm  "Admin console"     
       stats auth admin:123456     
       stats hide-version     
       stats refresh 10s     
       stats admin  if  TRUE
frontend web_proxy    
       bind *:80    
       mode http    
       acl url_dynamic path_end -i .php    
       use_backend phpserver  if  url_dynamic     
       default_backend webservers
backend webservers   
       balance roundrobin    
       option httpchk GET  /test .html HTTP /1 .0\r\nHost:192.168.0.26     
       server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1     
       server node02 192.168.0.25:8080 weight 3 check inter 2000 rise 2 fall 1
backend phpserver   
       balance roundrobin    
       option httpchk GET  /test .php     
       server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1

  
2)app2上创建配置文件

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
# vi /usr/local/haproxy/conf/haproxy.cfg
global   
       log  127.0.0.1   local0     
       maxconn 4000     
       chroot       /var/lib/haproxy    
       pidfile      /var/run/haproxy .pid    
       user        haproxy    
       group       haproxy    
       daemon    
       nbproc 1  
       stats socket  /var/lib/haproxy/stats
defaults   
       log       global       
       mode      http   
       option    httplog   
       option    dontlognull     
       option    redispatch   
       option    httpclose     
       option    forwardfor     
       retries   3              
       maxconn   2000     
       contimeout  5000   
       clitimeout  50000     
       srvtimeout  50000     
       timeout check   1s  
       timeout http-request    10s     
       timeout queue           1m  
       timeout connect         10s     
       timeout client          1m  
       timeout server          1m  
       timeout http-keep-alive 10s
listen stats   
       mode http    
       bind 0.0.0.0:91  
       stats  enable     
       stats uri  /admin     
       stats realm  "Admin console"     
       stats auth admin:123456     
       stats hide-version     
       stats refresh 10s     
       stats admin  if  TRUE
frontend web_proxy    
       bind *:80    
       mode http    
       acl url_dynamic path_end -i .php    
       use_backend phpserver  if  url_dynamic     
       default_backend webservers
backend webservers   
       balance roundrobin    
       option httpchk GET  /test .html HTTP /1 .0\r\nHost:192.168.0.26     
       server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1     
       server node02 192.168.0.25:8080 weight 3 check inter 2000 rise 2 fall 1
backend phpserver   
       balance roundrobin    
       option httpchk GET  /test .html     
       server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1

说明:两节点互为主备模式,均优化将本机的节点应用做为主节点,也可以为负载均衡模式, 主例也配置了一个动静分离的模式。

image    

4. app1,app2上配置HAproxy日志文件

Haproxy日志配置,否则默认是不记haproxy日志的,注意与RHEL/CentOS5.x版本的区别。

1
2
3
4
5
6
7
8
9
# vi /etc/rsyslog.conf
$ModLoad imudp   
$UDPServerRun 514    
$UDPServerAddress 127.0.0.1    
local0.*  /var/log/haproxy .log     
*.info;mail.none;authpriv.none; cron .none;local0.none  /var/log/messages
说明: 第五行是去掉在 /var/log/message 再记录haproxy.log日志的功能的。  
直接手动执行   
service rsyslog restart

注:Redhat/Centos6.X 默认haproxy服务运行采用haproxy用户,RPM包安装haproxy,系统已自动配置日录文件轮询功能。


三、配置Keepalived注意点小结:

1,是否有多VIP地址,如果有的话,需要配置多个vrrp_instance实例,双机互备。   
2,监控脚本,用于监控nginx,或haproxy代理服务器的存活状态,用于切换VIP地址。    
3,两种方式切换VIP,一个是关闭代理服务,一个是关闭相关节点的Keepalived服务器。

本文出自 “koumm的linux技术博客” 博客,请务必保留此出处http://koumm.blog.51cto.com/703525/1733880

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
负载均衡 NoSQL 关系型数据库
Nginx+keepalived实现高可用集群
大型企业架构一般是用户先访问到四层负载均衡,在由四层负载均衡转发至七层服务在均衡,七层负载均衡再转发至后端服务器,四层负载均衡只起到一个分流的作用,根据用户访问的端口,比如说80端口就会跳转至七层的对应的集群,两台四层负载均衡配置是一模一样的,形成高可用,七层的配置也是一模一样的,当有1500个请求需要响应时,四层负载均衡就会平均将1500个请求分给急群中的lb,每个lb响应500个请求,减轻单点的压力。
1295 0
Nginx+keepalived实现高可用集群
|
网络协议
KEEPALIVED 做LVS+HA实例安装与配置
--------------------------------------master------------------------------------------------------- wget http://www.
1013 0
KEEPALIVED 做HA实例的安装与配置
--------------------------------------master------------------------------------------------------- wget http://www.
902 0
|
移动开发 网络协议 Shell
LVS+KEEPALIVED 安装与配置实例
--------------------------------------master--------------------------------------- echo "1" > /proc/sys/net/ipv4/ip_forward wget http://www.
1270 0
|
网络架构
Keepalived 介绍、安装、配置(高可用)
1、keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。 2、VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。
1167 0
|
负载均衡 网络协议 数据安全/隐私保护
|
监控 关系型数据库 MySQL