前言
终于到这篇文章了,心情是有点激动的。因为这篇文章会集中以前博客讲到的所有Nginx功能点,包括基本的负载均衡,还有动静分离技术再加上这篇文章的重点,通过Keepalived实现的HA(High Available),为什么要实现高可用呢?以前在搭建的时候只用了一台Nginx服务器,这样的话如果Nginx服务器宕机了,那么整个网站就会挂掉,所以要实现Nginx的高可用,一台挂掉还会有另一台顶上去,从而保证网站可以持续的提供服务。关于负载均衡和动静分离在前面博客中都有相关的介绍,这篇博客就不在详细提了,只会在配置文件中体现。不多说了,下面开始搭建。
拓扑环境
下面表格是这次测试需要的拓扑环境,几台服务器,每台服务器上安装什么,都有介绍。
服务器名称 | 系统版本 | 预装软件 | IP地址/VIP |
---|---|---|---|
Nginx主服务器 | CentOS 7 最小安装 | Nginx +Keepalived | 192.168.22.227/192.168.22.231 |
Nginx从服务器 | CentOS 7 最小安装 | Nginx +Keepalived | 192.168.22.228/192.168.22.231 |
Web服务器A | CentOS 7 最小安装 | tomcat+jdk | 192.168.22.229 |
Web服务器B | CentOS 7 最小安装 | tomcat+jdk | 192.168.22.230 |
前置条件
这是一个系列博客,如果有困难可以查看之前的博客。
服务器配置VIP:http://blog.csdn.net/u010028869/article/details/50574907
Keepalived安装见:http://blog.csdn.net/u010028869/article/details/50527817
Keepalived原理解析:http://blog.csdn.net/u010028869/article/details/50596805
Nginx动静分离、负载均衡:http://blog.csdn.net/u010028869/article/details/50522033
原理图
开始搭建
一、配置VIP
关于VIP(即虚拟IP)的作用,上篇博客《Keepalived原理篇》已经介绍过了。227和228服务器需要配置相同的VIP,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不可用时,备用节点接管虚拟IP,成为主节点(即虚拟IP漂移至从节点),提供正常服务。这个VIP就像个墙头草,两头跑,谁是主他就为谁服务。配置VIP的博客,上面也有链接哦。
二、安装软件
按照上面的表格,在相应服务器上安装软件,安装过程不再多说了,有问题可以点击上面的博客链接哦。
三、配置Nginx
227服务器上的Nginx配置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
228服务器上的Nginx配置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
另外还需要在227,228服务器上新建一个目录/usr/local/webapps/drp/img,在img文件夹中存放图片girl.jpg。如果Nginx服务器较多的话,可以使用Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储,避免一个个拷贝文件。
还有,这块Nginx配置是做过一些优化的,比如开启gzip压缩,开启高效文件传输模式,设置缓存,动静分离,负载均衡等,可以直接拿到项目中使用。
四、配置Keepalived
227服务器上的Keepalived配置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
228服务器上的Keepalived配置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
特别注意,Nginx健康监测脚本。在本地写一个shell脚本,Keepalived监测不到。不知道为什么,网上的博客都是这么写的。但是在我这里就不行。最后直接在Keepalived配置文件的script标签中写了这段监测的脚本,才得以成功。
- 1
- 2
- 3
- 4
- 5
另外,如果你不明白某些配置的意思,可以查看上篇博客,里面针对每条配置文件都做了详细解析。
五、Tomcat配置
229服务器,添加默认页
在Tomcat的webapps目录下新建文件夹drp,并且创建index.jsp页面
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
230服务器同上
六、启动服务并测试
分别启动各个服务器上的Nginx、Keepalived、Tomcat,并测试能否正常访问。
①启动测试Tomcat
可以看到229和230服务器上的Tomcat已经可以正常访问,图片没有加载出来,是因为图片没有在Tomcat服务器上存储,而放在了Nginx上。
②启动测试Nginx
可以看到227和228上的Nginx启动成功,并且实现了负载均衡和动静分离的效果,图片被成功的加载了出来。
③ 保证所有服务均可正常访问后,启动Keepalived测试。
启动227,228服务器上的Keepalived,在浏览器中输入地址:http://192.168.22.231:8088/drp/index.jsp
192.168.22.231是咱们设置的虚拟ip,在访问网站的时候不在通过Nginx的ip了,而要通过这个vip进行访问。
Keepalived启动后咱们可以通过查看/var/log 下的messages文件(日志文件),查看主从状态。
查看227服务器/var/log/messages:
可以看到227为Master服务器,那么咱们现在通过192.168.22.231访问的就是227上的Nginx。
Nginx高可用测试
现在咱们通过两个方面来测试高可用:
① 服务器层的双机热备,模拟方式为关闭服务器,或者关闭Keepalived。
a. 关闭227Keepalived进程
现在提供服务的是227服务器,使用命令service keepalived stop将227上的Keepalived进程关闭掉之后。
查看227服务器messas日志:
将192.168.22.231这个虚拟ip移除,关闭Keepalived。
查看228服务器messages日志:
228原来为从服务器,当227服务器宕机后,228服务器由从服务器升级为主服务器,并且绑定上192.168.22.231这个虚拟IP,以继续提供服务,网站能够继续访问。
b. 启动227Keepalived
查看227服务器messas日志:
Keepalived成功启动后,227服务器继续接管192.168.22.231,成为MASTER服务器,继续提供服务。
查看228服务器messages日志:
相应的228服务器,转变为BACKUP服务器,并且移除VIP。
② 应用层的双机热备,模拟方式为Kill掉Nginx进程
a. 关闭227Nginx
查看227服务器messages日志:
VRRP_Script(check_nginx) failed ,意思是健康监测脚本执行失败,表明Nginx服务坏掉,或者没有启动。然后Keepalived会使227服务器转变为BACKUP状态,移除VIP。
查看228服务器messages日志:
当然不出所料,228服务器已经变为MASTER状态,从而继续提供服务。
b. 重新启动227Nginx
查看227服务器messages日志:
VRRP_Script(check_nginx) succeeded ,意思是健康监测脚本执行成功,Nginx正常运行。然后227服务器就会转变为MASTER状态,并提供服务。
查看228服务器messages日志:
228服务器已经变为BUCKUP状态。
小结
至此,高可用的一系列测试就已经完成了。在整个测试过程中,无论是关闭某台服务器的Nginx,Keepalived还是整个服务器宕机,网站一直没有中断提供服务,这已经达到了基本的高可用;但是还有个缺陷就是如果Nginx主服务器不出问题的话,那么备用服务器将长期处于备份状态,这样的巨大资源浪费是不能容忍的。当然这也有相应的方案来解决:Nginx双主集群+DNS轮询,敬请期待。。。
这就是一个架构不断演变,进化的过程。