随着公司网站访问量增加,原来“单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 |
启动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 服务的状态 } 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。