常用于做网站的软件,建设网站用新域名还是老域名,网站技巧,营口网站制作文章目录 1. 引言2. 高可用架构3. 实际步骤3.1 虚拟机新建系统3.2 安装 keepalived3.3 配置 keepalived3.4 启动 keepalived3.5 验证高可用3.5.1 查看当前效果3.5.2 模拟灾难 4 参考 1. 引言
前情提要#xff1a; 《docker 安装及配置 nginx tomcat#xff08;一#xff0… 文章目录 1. 引言2. 高可用架构3. 实际步骤3.1 虚拟机新建系统3.2 安装 keepalived3.3 配置 keepalived3.4 启动 keepalived3.5 验证高可用3.5.1 查看当前效果3.5.2 模拟灾难 4 参考 1. 引言
前情提要 《docker 安装及配置 nginx tomcat一基础安装》 《docker 安装及配置 nginx tomcat二负载均衡》 《docker 安装及配置 nginx tomcat三动静分离》 本文主要描述在在 nginx tomcat 基础上实现高可用。
2. 高可用架构
高可用High Availability简称HA是分布式系统架构设计中必须考虑的因素之一它通常是指通过设计减少系统不能提供服务的时间。高可用的主要目的是为了保障“业务的连续性”即在用户眼里业务永远是正常对外提供服务的。
对于我们这里就是避免单点故障当某个 nginx 服务器出现问题之后可以切到到其他的 nginx 服务。
先看下最终的架构图
3. 实际步骤
3.1 虚拟机新建系统
为了模拟高可用的场景需要在两台机器上模拟在虚拟机上再开一台机器作为 nginx 备服务器如果在阿里云或者其他服务器上有两台机器也可以模拟。
Mac 系统可以参考这篇文章 《Mac VMware Fusion 安装 Centos 系统》 用虚拟机再来开一台机器。
在新的机器上参考 《docker 安装及配置 nginx tomcat一基础安装》 安装 dockernginx 等tomcat 可不安装并启动 nginx 容器。
新机器的 nginx 配置如下
# 高可用
upstream testservers {server 172.16.2.128:8080; # 指向之前实际的 tomcat 服务器1如果不需要可以去掉server 172.16.2.128:8081; # 指向之前实际的 tomcat 服务器2如果不需要可以去掉server 172.16.2.128:8082; # 指向之前实际的 tomcat 服务器3如果不需要可以去掉
}
server {listen 80;listen [::]:80;server_name 172.16.2.129; # 当前新机器的主机 ip#access_log /var/log/nginx/host.access.log main;location / {root /usr/share/nginx/html;proxy_pass http://testservers;index index.html index.htm;}location ^~ /static {root /data/;index index.html;}location / {proxy_pass http://testservers;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location /50x.html {root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#}
}注意 nginx 配置修改了后记得重启服务否则不生效
# 在容器里
nginx -s reload
# 在容器外
docker exec -it nginx nginx -s reload3.2 安装 keepalived
在主、备机器上均需下载 keepalived如下
yum install -y keepalived # CentOS 7 / RHEL 7
dnf install -y keepalived # CentOS 8 / RHEL 83.3 配置 keepalived
在主机器上/etc/keepalived/keepalived.conf 上配置如下
! Configuration File for keepalivedglobal_defs {router_id node01 # 路由 id: 当前安装 keepalived 节点主机的标识符全局唯一vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_nginx {script /etc/keepalived/check_nginx.sh # 检查 nginx 是否正常工作的脚本interval 2 # 脚本检测间隔单位为秒weight -10fall 3 # 连续检测3次失败就算失败每次失败优先级减去 weight 的值rise 2 # 连续检测2次成功就算成功
}vrrp_instance VI_1 {state MASTER # 表示当前为 ngxin 的主节点masterinterface ens160 # 当前实例绑定的网卡名称: ifconfig 或者 ip a 可以查看virtual_router_id 51 # 虚拟路由 id保证主备节点一致priority 100 # 优先级主的优先级设置的应该比备高advert_int 1 # 主备之间同步检查的时间间隔默认1sauthentication { # 认证授权的密码auth_type PASSauth_pass 1111}# vip保证主备一致且最好跟主机 ip 在同一个网段下例如我的主机 ip 是 172.16.2.128virtual_ipaddress { 172.16.2.120}# 检查的脚本track_script {check_nginx}
}在备机器下/etc/keepalived 上配置如下
! Configuration File for keepalivedglobal_defs {router_id node02 # 路由 id: 当前安装 keepalived 节点主机的标识符全局唯一vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_nginx {script /etc/keepalived/check_nginx.sh # 检查 nginx 是否正常工作的脚本interval 2 # 脚本检测间隔单位为秒weight -10fall 3 # 连续检测3次失败就算失败每次失败优先级减去 weight 的值rise 2 # 连续检测2次成功就算成功
}vrrp_instance VI_1 {state BACKUP # 表示当前为 ngxin 的主节点backupinterface ens160 # 当前实例绑定的网卡名称: ifconfig 或者 ip a 可以查看virtual_router_id 51 # 虚拟路由 id保证主备节点一致priority 90 # 优先级主的优先级设置的应该比备高advert_int 1 # 主备之间同步检查的时间间隔默认1sauthentication { # 认证授权的密码auth_type PASSauth_pass 1111}# vip保证主备一致且最好跟主机 ip 在同一个网段下例如我的主机 ip 是 172.16.2.129virtual_ipaddress { 172.16.2.120}# 检查的脚本track_script {check_nginx}
}主、备的区别在于 router_id、state、priority 的配置。
主、备机器都需要放置检测脚本 /etc/keepalived/nginx_check.sh 内容如下
Acurl localhost:80/index.html --connect-timeout 3
if [ $A -eq 0 ]; thenps -ef|grep keepalived|grep -v grep|awk {print $2}|xargs kill -9
fi3.4 启动 keepalived
主、备机器都需执行如下命令
systemctl start keepalived.service查看 vip 是否生效
ip a
# 或者
ifconfig3.5 验证高可用
3.5.1 查看当前效果
通过 keepalived 设置的 vip 访问注意我这里是配置了负载均衡后端有3个 tomcat 服务器如果想达到同样的效果请参考前两章的内容。如果没有配置 tomcat 服务器请直接访问 vip 即可不用带上 /test/test.html
以下是通过 vip 结合负载均衡的效果
3.5.2 模拟灾难
停止主机房的 nginx 容器
docker stop nginx停止之后整体架构退化成如下
停止容器之后由于 keepalived 脚本无法访问 nginx 服务异常自动切换到备机器。此时还是访问 vip注意服务是否中断。 服务依然正常说明高可用已经生效。
4 参考
《docker 安装及配置 nginx tomcat一基础安装》 《docker 安装及配置 nginx tomcat二负载均衡》 《docker 安装及配置 nginx tomcat三动静分离》