lvs+keepalived+nginx+lnmp+memcache分布式网站架构

从上个星期到现在弄了一套模仿淘宝2010的双11架构图,为了对自己这一年多学习linux和网站架构有个交代。据说这个高可用架构可以用好几年,不知道现在淘宝有没有变化了。

记得一年前在linux连iP都不会配,vi查找命令都不会用,现在想起都觉得十分尴尬。就算在这个架构我也出了很多错,网上翻阅很多资料,甚至最离谱的是自己粗心所犯下的错耗费了很多时间。不过计划决心在做这个项目之前的兴奋和现在见到可以完工的心悦,还是觉得之前的辛苦和耗时是值得的。不多废话解释下这里面的软件吧。

lvs:国人在国际It界拿得出手见人的开源产品,主要是做4层调度分发

keepalived:主要做监测功能,如果其中一台lvs挂掉,马上启用另外一台。保持集群的高可用

nginx:在这里主要是做反向代理,7层分发功效。为什么不按照淘宝用haproxy?因为自己还没学到,后期继续把他都学了。

lnmp:不解释了。

memcache:在这里是为了session共享。将用户登录后的session保存在memcache,一来保证一致性,二来比文件保存速度快很多。缺点,如果机器死了,所有信息没了。

这是淘宝2010的双11的拓补图:

lvs+keepalived+nginx+lnmp+memcache分布式网站架构_第1张图片

这是我自己根据这图修改下变成的拓补图(因为考虑到本身机器硬件问题,所以改成这样了):

lvs+keepalived+nginx+lnmp+memcache分布式网站架构_第2张图片

先看下lvs+ keepalive(后备机我就不粘贴了,只是改下router_id,state而已,其他一样的)

global_defs {
notification_email {
               [email protected]
        }
        notification_email_from [email protected]
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS1
}
vrrp_sync_group test {
group {
        loadbalance
}
}

vrrp_instance loadbalance {
	state MASTER 
	interface eth0
	lvs_sync_daemon_inteface eth0
	virtual_router_id 51
	priority 180
	advert_int 5
	authentication { 
		auth_type PASS
		auth_pass 1111
	}
virtual_ipaddress {           
        192.168.1.254
}
}
 
virtual_server 192.168.1.254 80 {
        delay_loop 6
	lb_algo rr
        lb_kind DR
	protocol TCP
        #persistence_timeout 20 
        real_server 192.168.1.13 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
		}
	}
        real_server 192.168.1.14 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
		}
	}
}
再看下nginx反向代理(只粘贴一台,用了lvs的rr模式会自动轮询)


 upstream bulutua {
        server 192.168.1.11;
        server 192.168.1.12;
    }

   server {
	listen 80;
	server_name bulutu.a.com;
	location / {
		proxy_pass http://bulutua;
                proxy_set_header Host $host;
                proxy_set_header X-Forward-For $remote_addr;
        }
     access_log  /home/wwwlogs/bulutu.a.com.log;
   }


   upstream bulutub {
        server 192.168.1.11;
        server 192.168.1.12;
    }

   server{
	listen 80;
	server_name bulutu.b.com;
	location / {
		proxy_pass http://bulutub;
                proxy_set_header Host $host;
                proxy_set_header X-Forward-For $remote_addr;
	}
   }
最后看下memcache配置
session.save_handler = memcache
session.save_path = "tcp://192.168.1.17:11211"
配置了这个之后程序代码按照最普通的session_start();这样写就可以了。的确方便了程序员很多功夫。


这个架构图还有一些不完善的地方,例如memache可以做出分布式,用hash来读取,mysql的一主多从,从库机做lvs等等。因为实在不能再安装系统了,太卡了,所以先做得到这样了,求共勉。

最后附上实验网站:

lvs+keepalived+nginx+lnmp+memcache分布式网站架构_第3张图片


你可能感兴趣的:(php,服务器)