----------26-----张立---
在7层分发中,http,mysql是如何控制数据包的走向
一、架构说明:
apache-php
分发nginx mysql-a
apache-php
client 分发mysql mysql-b1
tomcat
分发nginx mysql-b2
tomcat
1、如上图所示:分发nginx把.php$的交给后面的apache处理,把.jsp$的交给tomcat处理。
2、然后链接后端数据库时,连接到分发mysql上,再由分发mysql交给 后面的mysql数据库去处理。
3、在2的基础上,三个mysql是a-b-b的结构,所以需要由分发mysql去把写入的包交给mysql-a,把读取的包分开交给mysql-b1或者mysql-b2,因此分发mysql也需要有分发的功能。
二、实现:
1、分发nginx和apache、tomcat的架构实现。
a、首先在分发nginx上用反向代理功能将.php结尾的交给apache-php处理;将.jsp结尾的交给tomcat处理;.html的交给自己处理。
b、然后由于是多台apache-php和tomcat,因此利用upstream功能分别将相同的两个绑定起来。
c、分发nginx也需要做负载平衡,因此利用keepalive技术,虚拟ip地址,实现两个分发nginx的负载平衡。
2、分发mysql和mysql a-b-b的架构实现
a、首先需要把三台mysql做成a-b-b结构。
b、利用amoeba实现,分发数据库的写数据和读数据,并分别交给mysql的master和slave。
c、由于有两台slave,因此利用amoeba的分发功能,将读取数据分发给两台slave。
d、amoeba的配置文件中的ip指向不同的mysql服务器。
3、1和2的链接的实现。
a、利用隋老师写的实现读取分离的脚本mysql-w-r.tar.gz。
b、因为是php语言写的,所以将主页放在nginx上,然后将需要调用的php文件放到后面apache-php上。
c、实现时,修改上述需要调用的php文件中的ip指向amoeba(分发mysql)的ip;
三、数据的流向:
(1)客户端请求服务器的数据时:
1、客户端请求虚拟ip地址——nginx服务器
2、nginx服务器通过uri的不同然后分别将数据交给自己或者apache-php或者tomcat。
3、apache-php或者tomcat需要链接数据库时,将数据交给分发mysql(amoeba)。
4、amoeba通过判断,将写入的交给mysql master;将要读取的通过分发分别交给aleve1和slave2.
(2)服务器给客户端回数据时
5、mysql的数据——amoeba——返回给交给amoeba数据的web服务器——活动的nginx——客户端。
转载于:https://blog.51cto.com/im007/1080801