• 1
  • 2
  • 3
  • 4
  • 5
阿里云主机ECS 首 页  »  帮助中心  »  云服务器  »  阿里云主机ECS
SLB+ECS实现高可用加负载均衡haproxy
发布日期:2015-11-30 14:11:32

  SLB+ECS实现高可用加负载均衡haproxy

  SLB的业务是不支持DR模式,这里提供的是一个折中的方案,这个方案包含稳健和灵活的特点,稳健的含义来自SLB 可以保障高可用(消除ECS的单点故障问题)和负载均衡(SLB本身的服务)灵活性的含义来自SLB后端的haproxy(这个客户可以完全掌控配置),这个可以配置的参数非常丰富,下面给出一个实例仅供参考,给出一个思路来可以把自己的业务迁移到阿里云的平台上。

  域名有两个(解析到SLB的ip上的)

  1、域名解析

  http://www-B.ethnicity.cn/

  http://www-c.ethnicity.cn/


  2、SLB的架构

  Haproxy有两台,通过SLB实现负载均衡+高可用

  wanyan-HP1和wanyan-HP2


  2.1 haproxy的安装和配置(这里仅仅列举测试需要的配置,客户可以根据自己的站点实际脑洞大开的)

  这里采用的是haproxy-1.5.8.tar.gz的源码安装包

  #tar zxvf haproxy-1.5.8.tar.gz //解压缩

  #cd haproxy-1.5.8

  # make install PREFIX=/usr/local/haproxy //安装

  install -d /usr/local/haproxy/sbin

  install haproxy /usr/local/haproxy/sbin

  install haproxy-systemd-wrapper /usr/local/haproxy/sbin

  install -d /usr/local/haproxy/share/man/man1

  install -m 644 doc/haproxy.1 /usr/local/haproxy/share/man/man1

  install -d /usr/local/haproxy/doc/haproxy

  for x in configuration architecture haproxy-en haproxy-fr; do \

  install -m 644 doc/$x.txt /usr/local/haproxy/doc/haproxy ; \

  done


  新建配置文件

  [root@iZ23s1sj5txZ haproxy-1.5.8]# cat /usr/local/haproxy/haproxy.cfg

  global

  maxconn 51200

  chroot /usr/local/haproxy

  uid 99

  gid 99

  daemon

  #quiet

  nbproc 1 #进程数

  pidfile /usr/local/haproxy/logs/haproxy.pid

  defaults

  mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK

  #retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置

  option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

  option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

  timeout connect 5000ms #连接超时

  timeout client 30000ms #客户端超时

  timeout server 30000ms #服务器超时

  #timeout check 2000 #=心跳检测超时

  log 127.0.0.1 local0 err #[err warning info debug]

  balance roundrobin #负载均衡算法

  option httplog #日志类别,采用httplog

  option httpclose #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现

  option dontlognull

  option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

  listen admin_stats

  bind 0.0.0.0:8888 #监听端口

  option httplog #采用http日志格式

  stats refresh 30s #统计页面自动刷新时间

  stats uri /stats #统计页面url

  stats realm Haproxy Manager #统计页面密码框上提示文本

  stats auth admin:admin #统计页面用户名和密码设置

  stats hide-version #隐藏统计页面上HAProxy的版本信息

  frontend web_in

  mode http

  maxconn 1000

  bind :80

  acl is_b hdr_beg(host) -i www-b.ethnicity.cn #判断域名是不是www-b.ethnicity.cn,是则给与a服务器集群服务

  acl is_c hdr_beg(host) -i www-c.ethnicity.cn #判断域名是不是www-bc.ethnicity.cn,是则给与a服务器集群服务

  use_backend b_server if is_b

  use_backend c_server if is_c

  backend b_server

  mode http #http 模式

  stats uri /haproxy

  balance roundrobin

  cookie JSESSIONID prefix

  stats hide-version

  option httpclose

  server web1 10.175.197.205:1080

  backend c_server

  mode http #http 模式

  stats uri /haproxy

  balance roundrobin

  cookie JSESSIONID prefix

  stats hide-version

  option httpclose

  server web1 10.175.197.205:1081

  创建重启脚本

  [root@iZ23s1sj5txZ haproxy-1.5.8]# cat /etc/init.d/haproxy

  #!/bin/bash

  BASE_DIR="/usr/local/haproxy/"

  ARGV="$@"

  start()

  {

  echo "START HAPoxy SERVERS"

  $BASE_DIR/sbin/haproxy -f $BASE_DIR/haproxy.cfg

  }

  stop()

  {

  echo "STOP HAPoxy Listen"

  kill -TTOU $(cat $BASE_DIR/logs/haproxy.pid)

  echo "STOP HAPoxy process"

  kill -USR1 $(cat $BASE_DIR/logs/haproxy.pid)

  }

  case $ARGV in

  start)

  start

  ERROR=$?

  ;;

  stop)

  stop

  ERROR=$?

  ;;

  restart)

  stop

  start

  ERROR=$?

  ;;

  *)

  echo "hactl.sh [start|restart|stop]"

  esac

  exit $ERROR


  启动

  [root@iZ230pjvrn7Z ~]# /etc/init.d/haproxy restart

  STOP HAPoxy Listen

  STOP HAPoxy process

  START HAPoxy SERVERS


  3、后端ECS服务器的设置

  这里仅仅设置了一台,本次测试的重点不在这里


  默认设置两个站点采用1080和1081端口

  [root@iZ23uqhpwvhZ conf]# cat httpd.conf|grep 10

  Listen 1080

  Listen 1081


  3.1虚拟子目录的设置


  4、测试的部分

  访问http://www-b.ethnicity.cn/示例是访问的haproxy后端的ecs的1080端口


  访问http://www-c.ethnicity.cn/示例是访问的haproxy后端的ecs的1081端口