开发者学堂课程【基于 Zookeeper、Dubbo 构建互联网分布式基础架构:互联网基础架构演进(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/635/detail/10160
互联网基础架构演进(2)
内容介绍
一、课程介绍
二、正向代理与反向代理
三、具体操作
一、课程介绍
只能解析一个服务器,一个IP,比方说现在 abc.com,原先想让他访问1,2,3,这三个服务器,我们解析ip只能访问一个,那我们能不能解析的时候能不能不是只解析一个,解析到一个中间值,我们直接访问中间值,然后中间值可以去访问三个IP,各找一个,将寻找IP转给中间值取处理,从哪取出数据,再把反馈值返回去,如果说1号服务器出现问题,那么久终止,然后选择2号服务器,等待返回,这样就可以达到。
一个机器坏了,其他的也可以正常访问,这是解决思路,这个思路叫做负载均衡,又可以称作反向代理。
有了反向代理,那么也就会有正向代理。
二、正向代理与反向代理
正向代理就是我们常用的 VPN 俗称的翻墙,我们告诉 VPN,我们要去访问谷歌,那么 VPN 就带我们去访问谷歌,已经告知了目的地,这就是正向代理;相应的谷歌也有很多服务器,那么这个时候就需要谷歌来帮我们找到相对应的服务器,这个也就是反向代理。
还可以用面试说话举例子,我们去百度面试,跟司机说去百度,然后司机把你送到百度,这就是正向代理,然后去了公司哪一个面试官面试你这个是不知道的,那么百度公司就会给你安排,这个就是反向代理。
三、具体操作
然后我们打开虚拟机,我已经配置了两个 tomcat,都跑着两个一样的程序,叫做测试集群,不一样的地方只在于服务器名字,都是去爬取线上id,两个程序同时运行,就相当于l多个用户访问,我们去看一下网站,然后访问服务器,就可以看到此时是服务器11111,另外一个访问服务器是22222,这两个服务器是一样的程序,但是同时运行就相当于,在某天有一个服务器坏掉了,另外一个服务器仍然可以继续处理任务,这两个是一个集群。
如果说我们一定要去访问某一个地址,那么就需要一个配置文件,nginx,这个是一个反向代理的服务器,可以帮我们去配置一个文件,然后进行安装后,启用这个终端,然后我们就可以去通过网站去访问端口号,这个时候 nginx 就代表启动成功了,如果说在后面加一个 tastcluster,
然后是找不到的,我们只需要给 nginx 做一个反向代理的配置,找到一个nginx.conf的文件,打开后,在文件里面带#的是注释,在没有#的 sever 里面,找到 location,然后再后面加一行代码,proxy_pass https://192.168.30.239:9080;
然后保存文件,保存之后要重新启动一次, # nginx·s reload,没有报错,启动成功,然后重新访问,打开后得到现在所访问的服务器是11111,无论怎样刷新都是11111,现在如果坏掉了,将11111修改一下,让他不能使用,再次查看服务器无法访问,那么还是没有解决问题,我们接下来重新启动,又可以访问了,如果我们重新启动还是11111,然后想让他访问22222,那么我们在配置文件里面写一个,定义一个地址组,相当于去打包一个文件,然后当某一一个服务器损坏时自行检索可以正常使用的服务器去连接。
定义组的代码:
Upstream suibianxie{
Server 192.168.30.239.8090;
Server 192.168.30.239.10080;
}
我们在 http 这个地方,定义一个名字,然后写好组之后,还要把后面的地方改掉,把地址替换成我们的组的名称,
前面的http://要在,然后终止 nginx,重新启动,然后访问网站,查看服务器,多次刷新发现服务器在不断的切换,这个时候就可以访问多个服务器,但是我们发现在我们访问的时候,域名是同一个,但是服务器名字后面的东西会变化,session 是放在 cookie 里面的,叫做 jsessionid,里面的值就是我们服务器名字后面的部分,不同的服务器的 session 是不一样的,因为服务器的不同,所以说 session也 是不同步的,很多人 session 存数据,如果说你在服务器存数据,检测到未登录,先跳转页面登录,那么当你切换服务器时,第二台服务器检测到你没有登陆记录,就需要你再次登录,当你用2返回的cookie跳转登录,但是登陆页面服务器1响应,那么此时,就会陷入一个死循环,一直无法登录,使用集群时,session 不能共享,
我们要解决这个问题,问题是我们的 session 在不同的服务器跳转,导致服务器没有接收信息,我们解决办法就是让服务器之间共享session或者让同一台设备运行时不跳跃服务器就可以了,两种方式解决,要么共享,要么避免跳转,怎样去实现。
首先第一种,同一台设备访问同一台服务器,需要负载均衡的算法,我们的 nginx 是有默认范围的,是有轮询的,我们可以指定 ip 去访问特定的服务器,加上 ip_hash;这样就可以了,然后我们重新启动 nginx,没有报错,正常运行,然后开始访问网站,一直查询到的都是22222号服务器,无论重新进入还是重新检索都是这里,相应的出现了问题,最开始的,如果22222服务器出现问题,那么我们就无法访问,然后配置文件会自行跳转服务器,但是有一个服务延迟,如果说在访问时,刚好出现问题,那么就会显示服务中断,虽然延迟,但是最后还是可以完成指令任务,但是在切换服务器时 session 还是会改变。