使用Haproxy,Keepalived,Tproxy实现高可用透明反向代理

Tproxy     //tproxy实现透明代理


声明
本文为Gleasy原创文章,转载请指明引自Gleasy团队博客

一。需求场景

具体需求如下:
4台Server,2台为Proxy Server,2台为Web Server,均为双网卡;
1个公网IP(183.129.228.91);
要求如下:
1. 2台Proxy Server反向代理2台WEB Server,作负载均衡
2. 2台Proxy Server为主备模式,公网IP在两台Server之间自动切换
3. Proxy Server作透明代理(web server日志中要记录真实的访问IP)

二。配置步骤
1. 安装软件(proxy server)
Gleasy有自己的Yum库,全部软件已经打成RPM包供安装;
其中haproxy打包时使用了下面的参数:

1make TARGET=linux26 CPU=x86_64 USE_STATIC_PCRE=1 USE_LINUX_TPROXY=1
2make install target=linux26

安装:

1yum install keepalived
2yum install haproxy

 

2. 配置keepalived(proxy server)
配置主:

01vrrp_instance VI_3{
02    interface eth1 #这里的eth1是内网(192.168.1.X网段)的网卡!!!
03    state MASTER
04    priority 100 #从为99
05    virtual_router_id 101#路由ID,可通过#tcpdump vrrp查看。
06    garp_master_delay 1 #主从切换时间,单位为秒。
07 
08    advert_int 1 #检查间隔,默认1秒
09    authentication {
10        auth_type PASS
11        auth_pass KJj23576hYgu23IP
12    }
13    virtual_ipaddress {
14        192.168.1.1/32 dev eth1
15        183.129.228.91/27 brd 183.129.228.95 dev eth0
16    }
17    virtual_routes {
18        via 183.129.228.65 dev eth0
19    }
20}

 

配置备:

01vrrp_instance VI_3{
02    interface eth1 #这里的eth1是内网(192.168.1.X网段)的网卡!!!
03    state BACKUP #
04    priority 99 # 主为100
05    virtual_router_id 101#路由ID,可通过#tcpdump vrrp查看。
06    garp_master_delay 1 #主从切换时间,单位为秒。
07 
08    advert_int 1 #检查间隔,默认1秒
09    authentication {
10        auth_type PASS
11        auth_pass KJj23576hYgu23IP
12    }
13    virtual_ipaddress {
14        192.168.1.1/32 dev eth1
15        183.129.228.91/27 brd 183.129.228.95 dev eth0
16    }
17    virtual_routes {
18        via 183.129.228.65 dev eth0
19    }  
20}

 

3. 配置tproxy(proxy server)

01#!/bin/sh
02/sbin/iptables -I FORWARD -i eth+ -j ACCEPT
03/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
04/sbin/iptables -t mangle -N DIVERT
05/sbin/iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
06/sbin/iptables -t mangle -A DIVERT -j MARK --set-mark 1
07/sbin/iptables -t mangle -A DIVERT -j ACCEPT
08  
09/sbin/ip rule add fwmark 1 lookup 100
10/sbin/ip route add local 0.0.0.0/0 dev lo table 100
11 
12echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
13echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
14echo 1 > /proc/sys/net/ipv4/conf/eth0/send_redirects

 

4. 配置haproxy(proxy server)

01global
02    log         127.0.0.1 local3 err
03    chroot      /usr/local/haproxy
04    maxconn     13000
05    daemon
06    nbproc  4   #设置并发进程
07    pidfile     /usr/local/haproxy/logs/haproxy.pid
08 
09defaults
10    log         global
11    option      dontlognull     # 不记录空连接
12    option      redispatch
13    timeout connect 50000
14    timeout client 120000
15    timeout server 120000
16    maxconn     10000
17    balance roundrobin   # 设置服务器分配算法
18    retries     5  # 重连次数 
19    errorfile 400 /usr/local/haproxy/html/400.http
20    errorfile 403 /usr/local/haproxy/html/403.http
21    errorfile 408 /usr/local/haproxy/html/408.http
22    errorfile 500 /usr/local/haproxy/html/500.http
23    errorfile 502 /usr/local/haproxy/html/502.http
24    errorfile 503 /usr/local/haproxy/html/503.http
25    errorfile 504 /usr/local/haproxy/html/504.http
26 
27 
28frontend proxy-80
29    bind            *:80
30    mode            http
31    option          httplog
32    option          dontlognull
33    option          forwardfor # This sets X-Forwarded-For
34    option          http_proxy
35    maxconn         13000
36    timeout client  50s
37    timeout http-keep-alive 1s
38    timeout http-request 10s
39    default_backend proxy-80
40   
41 
42#backend配置
43backend proxy-80
44    mode            http
45    timeout server 120s
46    timeout connect 50s
47    option          nolinger
48    option          http_proxy
49    option          forwardfor # This sets X-Forwarded-For
50    option          httplog
51    option          http-server-close
52    cookie          JSESSIONID prefix
53    stats           enable
54    balance         roundrobin
55    source  0.0.0.0 usesrc clientip #透明代理!!!!!
56    option httpchk GET /check.html
57    server  S 192.168.1.27:80 weight 3  cookie JSESS1 check inter 1500 rise 3 fall 3
58    server  S 192.168.1.28:80 weight 3  cookie JSESS2 check inter 1500 rise 3 fall 3

 

5. 配置Web server网关(web server)

1ip route default via 192.168.1.1 dev eth0

特别说明一下,这里的192.168.1.1是一个VIP(虚拟IP,它的配置在上面keepalived配置中可以找到)。它会在两台proxy server间自动切换。

6. 注意事项:
HAPROXY所在的服务器网关必须配置为外网(ip route default必须为外网网关);
web服务器网关必须配置为HAPROXY所在服务器的IP地址;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 HAProxy+Keepalived 可用需要按照以下步骤进行: 1. 安装 HAProxyKeepalived 在主服务器和备份服务器上安装 HAProxyKeepalived。 2. 配置 HAProxy 编辑 HAProxy 配置文件,配置监听端口和后端服务器信息,并启用统计页面。例如: ``` global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull option forwardfor option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen webfarm bind 0.0.0.0:80 mode http stats enable stats uri /haproxy balance roundrobin option httpchk HEAD / HTTP/1.1\r\nHost:localhost server web1 192.168.0.1:80 check server web2 192.168.0.2:80 check ``` 3. 配置 Keepalived 编辑 Keepalived 配置文件,配置虚拟 IP 地址、HAProxy 的状态检测方式和状态转移时的优先级。例如: ``` vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 weight 2 } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 101 virtual_ipaddress { 192.168.0.100/24 } track_script { chk_haproxy } } ``` 4. 启动 HAProxyKeepalived 在两台服务器上分别启动 HAProxyKeepalived。 5. 测试可用 访问虚拟 IP 地址,检查是否能够正常访问,并手动切换主备服务器,检查是否能够自动切换。 注意:以上仅为简单示例,请根据实际情况进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值