现阶段项目开发往往采用前后台分离,前台常用的技术有vue、react等,前台代码部署在nginx中,代码中配置了后台服务的网关地址,由网关向后台分发服务请求,架构示意图如下:
在上述架构图中,如果Nginx服务器宕机,那么客户端则无法访问后台服务,本文重点阐述基于Keepalived实现前台服务高可用。改进后架构示意图如下:
实现基于Keepalived的前台服务高可用,步骤如下:
环境说明:系统版本:centos7 ;Nginx版本:nginx-1.20.2.tar.gz;keepalived版本:keepalived-2.0.20.tar.gz;后台2个虚拟机,ip分别是:192.168.136.129、192.168.136.130
1、Nginx安装【129、130】
# 安装四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 解压nginx源码
cd /usr/software/
tar xzvf nginx-1.20.2.tar.gz# 创建安装的文件夹
cd /usr/install
mkdir nginx-1.20.2#指定安装位置
cd /usr/software/nginx-1.20.2
./configure --prefix=/usr/install/nginx-1.20.2#编译&安装
make && make install
2、为了方便观察ip信息,修改nginx的主页面index.html
vim /usr/install/nginx-1.20.2/html/index.html
【129】文件修改内容如下:
【130】文件修改内容如下:
3、【129、130】分别启动nginx
cd /usr/install/nginx-1.20.2/sbin/
./nginx
4、【129、130】安装keepalived
#解压缩keepalived
cd /usr/software/
tar xzvf keepalived-2.0.20.tar.gz#创建keepalived的安装目录
cd /usr/install
mkdir keepalived-2.0.20#配置keepalived的安装目录并编译安装
cd /usr/software/keepalived-2.0.20
./configure --prefix=/usr/install/keepalived-2.0.20
make && make install
5、 【129、130】etc创建keepalived配置目录,拷贝配置文件到etc目录下,并修改此文件
mkdir /etc/keepalived
cp -p /usr/install/keepalived-2.0.20/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
【129】keepalived.conf 文件信息如下:
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.136.250}
}virtual_server 192.168.136.250 80 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPsorry_server 192.168.136.200 80real_server 192.168.136.129 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.136.130 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
【130】keepalived.conf 文件信息如下:
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.136.250}
}virtual_server 192.168.136.250 80 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPsorry_server 192.168.136.200 80real_server 192.168.136.129 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.136.130 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
重点配置如下:
【129】state MASTER;【130】state BACKUP;
interface ens33 :网卡名称
virtual_ipaddress 192.168.136.250:虚拟地址,就是客户端可以访问的地址
【129】priority 100;【130】priority 80;【129】的优先级高
real_server 192.168.136.129 80 真实的nginx地址
real_server 192.168.136.130 80 真实的nginx地址
6、【129】、【130】分别启动keepalived并测试
cd /etc/keepalived
service keepalived start
service keepalived status
浏览器输入虚地址:http://192.168.136.250/ ,由于129是master,显示129的ip地址
当129虚拟机宕机时(模拟关闭电源),再次访问 http://192.168.136.250/是,显示130的ip地址,实现了前台服务的高可用。