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