使用Haproxy Keepalived进行双主负载均衡安装配置

lisahost.com

收藏了!

环境准备

1、启动四个虚拟机(这里以centos为例),ip为:

192.168.130

192.168.132

192.168.128

192.168.129

2、安装haproxy

打开130、132这两台机器相应端口外网访问权限

1
2
3
4
5
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart

在130、132这两台机器上分别安装haproxy:

1
yum -y install haproxy

两台机器都安装完成后,进行文件配置,在132上修改配置文件:

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
#vi /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
    stats   refresh         5s
    stats   uri             /haproxy
    stats   realm           baison-test-Haproxy
    stats   auth            admin:admin123
    stats   hide-version
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
    stats   refresh         5s
    stats   uri             /haproxy      #haproxy监控界面
    stats   realm           baison-test-Haproxy
    stats   auth            admin:admin123
    stats   hide-version
frontend  main *:80       #监听80端口
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
    use_backend static     if url_static  #匹配url_static条件的url使用static转发
    default_backend       web      #其他的url使用后面定义的web转发
backend static  #static转发服务
    balance     roundrobin
    server  static1 192.168.230.128:8080 check inter 2000 fall 3 weight 30 #128这台机器上运行8080端口的tomcat,用于提供静态文件访问
    server  static2 192.168.230.129:8080 check inter 2000 fall 3 weight 30 #129这台机器上运行8080端口的tomcat,用于提供静态文件访问
backend web     #定义名为”web“的转发服务
    balance     roundrobin
    server  web1 192.168.230.128:8081 check inter 2000 fall 3 #128这台机器上运行8081端口的tomcat,用于提供非静态资源访问
    server  web2 192.168.230.129:8081 check inter 2000 fall 3 #129这台机器上运行8081端口的tomcat,用于提供非静态资源访问

复制配置文件到130服务器上相同的目录,在130服务器上执行操作:

1
2
rm /etc/haproxy/haproxy.cfg //删除130自己的配置文件
scp [email protected]:/etc/haproxy/haproxy.cfg /etc/haproxy/

两台服务器的haproxy就安装配置完成了。

3、在132、130上分别安装keepalived:

首先检查安装openssl-devel

1
yum install openssl-devel

创建keepalived安装目录,并下载安装:

1
2
3
4
5
6
7
mkdir /usr/local/ha
cd /usr/local/ha
wget http://三w.keepalived.org/software/keepalived-1.2.23.tar.gz
tar zxvf keepalived-1.2.23.tar.gz
cd keepalived-1.2.23
./configure
make make install

两台机器都安装好后,配置keepalived(132机器):

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
#mkdir /etc/keepalived/
#cp /usr/local/ha/keepalived-1.2.23/doc/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
  router_id Node_132  ###名称随便取
}
vrrp_script chk_http_port {
  script "/opt/check_haproxy.sh"   ###检测脚本防止不自动切换的问题,接下来会创建
  interval 2
  weight 2
}
vrrp_instance VI_1 {
    state MASTER           ###主服务,表示访问下面虚拟ip 200时,映射到当前机器
    interface eth1         ###你的网卡名称,使用ip a命令查看,并修改
    virtual_router_id 50   ###路由id,主从保持一致
    priority 100           ###权重,比从服务器大
    advert_int 1
    track_script {
        chk_http_port ### 执行监控的服务
    }
    virtual_ipaddress {
        192.168.230.200     ###虚拟ip地址
    }
}
vrrp_instance VI_2 {
    state BACKUP         ###从服务,当另一台机器不工作时,访问下面虚拟ip 201就映射到当前台机器
    interface eth1
    virtual_router_id 52 ###路由id,主从保持一致
    priority 99          权重,比主服务器小
    advert_int 1
    virtual_ipaddress {
       192.168.230.201     ###虚拟ip地址
    }
}

创建检测文件

1
2
3
4
5
6
7
8
#vi /opt/check_haproxy.sh
f [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
     /etc/init.d/haproxy  start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi

复制配置和检测文件到另一台服务器上,在130上操作:

1
2
3
mkdir /etc/keepalived/
scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/
scp [email protected]:/opt/check_haproxy.sh /opt/check_haproxy.sh

这里keepalived就安装完成了。

4、进行tomcat服务环境安装

在128复制两台tomcat,一台8080端口,一台8081端口:

a、修改tomcat端口,太low了,执行操作。

b、在8080端口tomcat中修改tomcat页面,方便测试验证:

1
vi webapps/ROOT/index.jsp
  • 在head中引入js:<script type=”text/javascript” src=”test.js”></script>
  • 在body下加服务器说明的html:<h1>web-128:8080</h1><h1 id=”js_h”>js 位置</h1> (表示这是128主机的8080端口的服务页面)
  • 在index.jsp同目录新建test.js:window.onload = function(){document.getElementById(“js_h”).innerHTML=’js-128:8080′;}

js文件会修改”js 位置”内容,表示这个js文件来自于128主机的8080端口服务

c、在8081端口tomcat中做类似修改:

  • 在head中引入js:<script type=”text/javascript” src=”test.js”></script>
  • 在body下加服务器说明的html:<h1>web-128:8081</h1><h1 id=”js_h”>js 位置</h1>
  • test.js:window.onload = function() {document.getElementById(“js_h”).innerHTML=’js-128:8081′;}

同样在129服务器上复制两个tomcat,一台8080端口,一台8081端口,修改tomcat文件时,只是改ip 128为129。

现在环境就安装完成了。

运行4个tomcat

运行haproxy: service haproxy start

运行keepalived:

1
keepalived -D -f /etc/keepalived/keepalived.conf

打开页面查看haproxy监控页面:http://192.168.230.132/haproxy、http://192.168.230.130/haproxy

通过监控可以看到访问数量等消息

通过访问http://192.168.230.200或者http://192.168.230.201多次刷新页面:

观察js文件,页面的来源的变化,可以看到,js文件来自128、129的8080端口的服务器,页面来自128、129的8081端口服务器。说明对页面,和静态文件的负载使用的不同的haproxy服务规则

访问http://192.168.230.200,http://192.168.230.201。通过监控页面的数据变化,可以发现200是132服务器进行转发,访问201是130进行转发

在实际场景中,当访问动态资源时就使用200地址,当访问静态资源时使用201地址,通过关闭tomcat或者关闭haproxy,可以看到服务器的切换。这样就实现了双主备份,保证了高可用性的同时也提高了服务器利用率。

全文转自:http://www.javaseo.cn/article/63/

    所有主机信息仅是为及时分享并收录,不做推荐!