Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
Linux专题第25篇:Keepalived+Nginx高可用架构
相关专辑:
Linux专题
<div style="display:none"></div> ## 1、Nginx架构 在系统设计中,可以利用Nginx的反向代理和负载均衡实现后端应用的高可用性,同时我们还需要考虑Nginx的单点故障。如果Nginx所在服务器宕机,或者Nginx服务不可用就会造成整个系统的不可用。为了解决这个问题可以使用Keepalived解决单点故障的问题。 keepalived它是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。 ## 2、Keepalived+Nginx高可用集群(主从模式) ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/213c7e94-00f2-4b9b-b05c-27f4a54f3af0.png) 129和130两台服务器需要安装Keepalived和Nginx,Keepalived的配置一主一丛,虚拟相同的ip(192.168.233.100),这个虚拟的ip只会在129上面出现。只有主机挂了以后,这个虚拟的ip才会转移到备用的服务器上面。主节点没挂之前用户就可以通过这个虚拟ip进行访问到129上面的资源,在通过nginx进行负载到两台web服务器。如果129挂了以后,这个虚拟ip会从129上面转移到130。从130上面的nginx进行负载访问两台web的服务。从而达到nginx的高可用。 本案例没有搭建后面两台web服务器。也就没有做负载均衡到两台web服务器。直接在129和130上面做测试。 ### 2.1、Keepalived安装参考 http://itsoku.com/course/16/346 ### 2.2、主从配置 129主 ```shell global_defs { # 路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_129 } vrrp_instance VI_1 { # 表示当前的129为ngxin的主节点,master state MASTER # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } # VIP virtual_ipaddress { 192.168.233.100 } } ``` 130从 ```shell ! Configuration File for keepalived global_defs { # 路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_130 } vrrp_instance VI_1 { # 表示当前的130为ngxin的备用节点 state BACKUP # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } # VIP virtual_ipaddress { 192.168.233.100 } } ``` ### 2.3、Nginx安装参考 在129和130上面分别安装上nginx,修改首页的html,做上标识。 安装:http://itsoku.com/course/16/345 ### 2.4、效果展示 正常情况下访问到的是129上面的资源, ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/7f916459-8266-4c1c-b963-4896eda0740a.png) 虚拟ip还是在129上面 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/5dd26ed7-b9d8-4a19-b98a-9a6858df3689.png) 模拟129服务出现故障 ```shell systemctl stop keepalived.service ``` 查看130上面的ip,发现虚拟ip已经在130上面了 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/6528bd55-79dc-4581-b4ca-8e00f2d17060.png) 刷新网页 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/9f7b2477-f3aa-4212-80c1-2651ffef2eb6.png) ## 3、Keepalived+Nginx高可用集群(双机主备) 主从模式的缺点就是如果说主服务器一直都没有问题的话,那么从服务器完全就是浪费资源。为了避免这种情况,可以将两台服务器设置为双机主备的架构。 架构图 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/ddf33ea9-dd90-4ad4-b84f-c1afa6a8bd4e.png) 比主备模式除了多虚拟出一个ip外,还添加了一个dns轮询。一般来说用户访问的都是网址。如用户访问 `www.baidu.com`这个网址,这个网址需要通过dns解析出具体的ip才能去访问相应的服务器。一个网址就会对应多个ip,可能访问的是192.168.233.100也有可能访问192.168.233.101。如果轮询的是100,那么就会去129上面访问资源,再通过129上面的nginx负载到不同的服务器集群中。如果轮询到101,那么就回去130上面访问资源。如果129挂了,自然就只能去130上面访问了。 ### 3.1、双机主备配置 主备之间的virtual_router_id需要一致。 129 keepalived配置 ```shell ! Configuration File for keepalived global_defs { # 路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_129 } vrrp_instance VI_1 { # 表示当前的129为ngxin的主节点,master state MASTER # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 110 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } # VIP virtual_ipaddress { 192.168.233.100 } } vrrp_instance VI_2 { # 表示当前的130的备用节点 state BACKUP # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 55 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } # VIP virtual_ipaddress { 192.168.233.101 } } ``` 130keepalived配置 ```shell ! Configuration File for keepalived global_defs { # 路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_130 } vrrp_instance VI_1 { # 表示当前的130为ngxin的备用节点 state BACKUP # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } # VIP virtual_ipaddress { 192.168.233.100 } } vrrp_instance VI_2 { # 表示当前的130的主节点 state MASTER # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 55 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 110 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } # VIP virtual_ipaddress { 192.168.233.101 } } ``` ### 3.2、效果展示 两个虚拟ip,对于访问不同的资源 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/ff7d9c5d-137c-46f1-9468-dcd9f8a40676.png) 关闭129上面的keepalived ```shell systemctl stop keepalived ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/c19ff5d5-1580-440f-8185-91ce250d28ab.png) 变成全都访问130上面的资源了 开启129的keepalived,然后关闭130的keepalived ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/347/703db40b-c6b9-4c16-a9e7-1e79544c5c68.png) 变成全都访问129上面的资源了 ## 4、keepalived配置nginx自动重启 如果说只是nginx服务器挂掉的话,用户通过keepalived的ip是访问不到资源的,为了避免这种情况,可以让keepalived去检测nginx是否在运行中,如果没有运行的话就重启nginx。 ### 4.1、nginx重启脚本 添加`/etc/keepalived/check_nginx_alive.sh`文件,内容如下 ```shell #!/bin/sh # nginx进程数 count=`ps -C nginx --no-header | wc -l` # 判断nginx是否宕机,如果宕机了,尝试重启 if [ $count -eq 0 ];then # 启动nginx,根据自己安装的目录调整 /usr/local/nginx/sbin/nginx #等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机 sleep 5 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then killall keepalived fi fi ``` 添加执行权限 ```shell chmod +x /etc/keepalived/check_nginx_alive.sh ``` ### 4.2、keepalived配置 ```shell global_defs { # 路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_129 } vrrp_script check_nginx_alivel { script "/etc/keepalived/check_nginx_alive.sh" interval 2 #每隔两秒运行上一行脚本 weight -10 #如果脚本运行失败,则权重-10 } vrrp_instance VI_1 { # 表示当前的129为ngxin的主节点,master state MASTER # 当前实例绑定的网卡名称:ifconfig可以查看 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法的节点进入 authentication { auth_type PASS auth_pass 1111 } track_script { check_nginx_alive # 追踪 nginx脚本 } # VIP virtual_ipaddress { 192.168.233.100 } } ``` <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
相关专辑:
Linux专题