在7层分发中,http,mysql是如何控制数据包的走向

环境拓扑: 

                                           apache-php
          nginx+keepalived主   apache-php                               mysql-写-主
client                                                      amoeba                  mysql-读-从
                                            tomcat
          nginx+keepalived从                                                    mysql-读2-从
                                            tomcat

分析数据流的走向分析:

一、原理:

1.当客户端发送请求(请求发向keepalived配置文件中所定义的vip)

2.nginx+keepalived主服务器,接受客户端的请求,并与nginx的配置参数进行对比,得出客户端所要访问的页面类型,并将该请求传递给相应的web服务器进行处理,(1)客户端对数据库进行写操作,主服务器将与amoeba服务器连接,amoeba服务器根据配置文件中的规则进行计算,从而连接至mysql写服务器,Mysql写服务器处理前端的请求并将操作写入数据库,这时由于mysql主服务器中的数据发生变化,将该操作保存至binlog日志中,Mysql服务器通过IO进程与slave服务器进行连接告知slave服务器数据发生变化,并将binlog日志同步至slave,slave服务器再由sql进程对binlog日志中的操作进行读取并传递至slave服务器中的relay-log日志,relay-log通过回滚的方式对slave服务器进行数据的写。(2)客户端对数据库进行读操作,主服务器与amoeba服务器连接,amoeba服务器根据配置文件中的规则进行计算,得出到来的请求应该给哪个Mysql从服务器,Mysql服务器将查询结果返回。

3.数据包的分析(HTTP)

客户端发送请求并建立连接(TCP3次握手),请求包中包含了源ip、源mac、目的ip、目的mac等等,此时源ip和源mac为客户端自己,目的ip为keepalived+nginx服务器的vip地址,目的mac为keepalived+nginx服务器,keepalived+nginx服务器处理后发现客户端要访问的是html/php/jsp,keepalived+nginx服务器在与对应的服务器建立连接,将客户端的请求进行传递,此时的源ip保持不变,keepalived+nginx服务器更改目的ip、目的mac为对应的WEB服务器,WEB服务器处理到来的请求。数据库处理完成请求并将结果返回给WEB服务器,web服务器将信息给nginx+keepalived服务器,这时回包中包含了源ip、源mac、目的ip、目的mac等等,源为自己本身,目的ip为nginx+keepalived服务器的vip,目的mac为nginx+keepalived服务器,数据包到达nginx+keepalived服务器,nginx+keepalived服务器更改目的ip和目的mac为客户端,将源更改为自己。

4.数据包的分析(MYSQL)

WEB服务器与amoeba服务器建立连接,amoeba服务器先对web服务器发送的连接请求进行身份验证,验证通过后amoeba服务器在查看请求是对数据库进行写还是读,并依据配置文件定义的规则进行相应的转发。对于mysql数据包的控制是由amoeba服务器决定的,在amoeba服务器的配置文件中可以指定哪台数据库为写,哪台为读,如果读是集群的话,还可以定义是使用rr的方式还是wrr的方式。

本文出自 “海纳百川” 博客,谢绝转载!

你可能感兴趣的:(http,mysql,分发中,控制数据包)