中型网站架构部署笔记----HAproxy+keepalived篇

随着公司网站访问量增加,原来“单WEB” + “单DB”的架构已无法满足需求。经过查询资料和请教高手,终于规划出了网站架构模型,学习之路劳神费力,特记录以备自查也希望能帮到别人。

规划完整的架构如下:


主要分为5部分进行:HAproxy+keepalived;图片分离以及图片缓存squid;数据库部分双主多从模式;数据库缓存Memcached;web server之间程序的实时同步。

第一部分:HAproxy+keepalived

1、安装HAproxy

wget  http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz

# tar xvfz haproxy-1.4.22.tar.gz

#cd haproxy-1.4.22

#uname –a  #查看linux内核版本

# 修改内核最大打开文件数

#ulimit –n 65536

#make TARGET=linux26  PREFIX=/usr/local/haproxy  #TARGET是内核版本,2.6就写作26

#make install  PREFIX=/usr/local/haproxy

2、配置HAproxy

创建HAproxy配置文件:vi /usr/local/haproxy/haproxy.cfg    #此为线上配置

global
       log 127.0.0.1   local0
       log 127.0.0.1   local1 notice
       chroot          /usr/share/haproxy
       uid             99
       gid             99
       daemon
       maxconn         10000
defaults
       #log             global
       log             127.0.0.1      local3
       mode            http

option          httplog
       option          dontlognull
       retries         3
       option  redispatch
       timeout connect 5000ms
       timeout client  50000ms
       timeout server  50000ms
       stats   uri     /haproxy-admin
frontend                 http-in
       bind 61.135.198.174:80
       default_backend  51-servers
backend 51-servers
       balance static-rr
       appsession PHPSESSID len 64 timeout 5h  request-learn       #将session信息保存在HAproxy服务器,防止轮询后端服务                                                                      器导致用户登录状态不一致的问题。亦可通过将负载方式                                                                      设置为source解决此问题
       option  httpchk HEAD /haproxy-health-check.htm HTTP/1.0
       server  server1 192.168.100.171:80   check inter 2000 rise 2 fall 3 weight 15
       server  server2 192.168.100.174:80   check inter 2000 rise 2 fall 3 weight 10

启动HAproxy:/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

在负载均衡主机和备机上haproxy的配置相同。

3、安装keepalived

configure --prefix=/usr/local/keepalived

make

make install


安装完成后需要将 /usr/local/keepalived/etc (包括keepalived  rc.d  sysconfig三个目录)下的文件拷贝至 /etc下,以保证keepalived服务可用。


编辑keepalived配置文件:

vi /etc/keepalilved/keepalived.conf (主机与备机需注意state字段和priority字段)

vrrp_script chk_http_port {                    #此部分定义一个名为“ chk_http_port”的“vrrp_script”,用于检测haproxy                                                 服务的状态
 script "/etc/keepalived/check_haproxy.sh"    #检测haproxy状态的脚本,详见下文
 interval 2                                   #检测间隔为2秒
 weight 2
}
global_defs {
  # notification_email {
  # root@localhost
  # }
  # notification_email_from keadmin@localhost #注释掉的部分为报警邮件的设置
  # smtp_server 127.0.0.1
  # smtp_connect_timeout 30
  router_id LVS_DEVEL
}
vrrp_instance VI_1 {
   state MASTER                               #此处主机写为MASTER,备机写为SLAVE
   interface eth0                             #虚拟ip所要绑定的接口
   virtual_router_id 55
   priority 100                               #VRRP协议中本机的优先级,优先级高的自动成为主机,备机的优先级要低于主机
   #mcast_src_ip 61.135.198.170               #用于表示本机的ip地址
   advert_int 1                               #主备机之间的检测间隔 1秒
   authentication {                           #认证信息,要求主备机一致
       auth_type PASS
       auth_pass 1111
   }
   track_script {                             #追踪(运行)第一部分定义的vrrp_script

   chk_http_port                          
   }
   virtual_ipaddress {
   61.*.*.*/29
   }
}

然后编辑check_haproxy.sh脚本:

vi /etc/keepalived/check_haproxy.sh

#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi

chmod 755 /etc/keepalived/check_haproxy.sh

启动主机与备机山的keepalived:service keepalived start

特别注意:

1、keepalived启动时不检查配置文件的正确性,所以务必保证不因配置文件格式或字段错误导致问题(我就吃了这个亏),启动后查看/var/log/message 文件的大约后30行,查看keepalived启动过程以及最终进入的模式(master或slave)。

2、务必保证keepalived主机与备机之间的网络连通,我在搭建的时候就被这个问题给坑了许久。线上环境个服务器之间是通过内网ip传输,所以防火墙上没有允许个服务器之间公网ip的通信(因为服务器是允许ping的,所以在两台服务器之间ping公网ip也通就没意识到这个问题)导致vrrp报文无法在主机与备机之间传输,从而导致启动keepalived服务后,两台机器同事绑定了虚拟ip。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。