1. 反向代理概念

1.1什么是反向代理?

反向代理是服务器端的代理。客户端访问反向代理服务器,由代理服务器将请求转发给后 端真实服务器,再将响应返回给客户端。客户端并不知道真实服务器的存在

1.2 反向代理的作⽤

第⼀,负载均衡。将请求分发到多台后端服务器,提⾼系统处理能⼒。

第⼆,安全隔离。后端服务器隐藏在内⽹,不直接暴露给公⽹。

第三,SSL 终⽌。在代理层处理 HTTPS 加解密,减轻后端负担。

第四,缓存加速。缓存后端响应,减少重复请求

2.高可用

高可用是什么?

高可用:就是业务尽量不宕机、不停服、不挂掉

干什么的:

防止单点故障,一台服务器挂了有另外的服务器接手业务

为什么要用:

1.避免服务宕机

服务器死机、虚拟机崩溃、意外重启、网线断了、系统崩了,单台直接废;高可用自动切机,业务不中断。

2.可以不停机维护

想升级配置、更新程序、打补丁、重启服务:

一台下线维护,另一台顶着对外提供服务,用户完全没感觉。

3.企业业务不能停

电商、银行、系统、官网、OA 系统,停一分钟都损失钱,必须高可用。

4.分担流量

不只是防挂,还能多台一起扛并发,人多也不会崩。

3.举例:

使用nginx + keepalived 实现高可用场景,并可以使用www.503.com访问到后端httpd服务器(自定义页面方便区分)

虚拟机A:

# 安装、开启,设置开机自启动nginx服务,并查看nginx状态
yum install -y nginx
systemctl start nginx
systemctl enable nginx
systemctl status nginx
# 下载 keepalived
yum install -y keepalived
# 查看keepalived配置文件路径
rpm -qc keepalived
# cd 进入 并 vi编辑
cd /etc/keepalived
vi keepalived.conf
​
global_defs {
   router_id nginx-master
   script_user root
   enable_script_security
}
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    fall 2
    rise 1
}
vrrp_instance NGINX {
    state MASTER
    interface ens33
    virtual_router_id 42
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    track_script {
        check_nginx
    }
    virtual_ipaddress {
        192.168.202.100/24 dev ens33 label ens33:0
    }
}
# 编辑健康检查脚本
vi /etc/keepalived/check_nginx.sh
vi check_nginx.sh
#!/bin/bash
#判断 Nginx 是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ]; then
systemctl stop keepalived
fi
​
# 开启keepalived服务并查看状态确认
systemctl start keepalived
systemctl status keepalived
# 查看vip地址
ip a
# 配置DNS映射
vi /etc/hosts
192.168.202.100 www.503.com
​
# 编辑nginx配置文件
vi /etc/nginx/nginx.conf
……
 upstream httpd_server {
        server 192.168.202.133:80;
        }
    server {
        listen       80;
        server_name  www.503.com;
        root         /usr/share/nginx/html;
       
       location / {
            proxy_pass http://httpd_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
……
​
​
# 重启nginx服务
systemctl restart nginx
​
# curl 访问
[root@localhost keepalived]# curl http://www.503.com                            This is Nginx Node A
​

远程传输文件给另一台虚拟机B(虚拟机B需先下载keepalived)

[root@localhost keepalived]# scp /etc/keepalived/* 192.168.202.132:/etc/keepalived/
root@192.168.202.132's password:
check_nginx.sh                                100%  460   155.2KB/s   00:00
keepalived.conf                               100%  519   441.2KB/s   00:00

注意关闭主机和备机的防火墙(可能导致备机找不到主机的路由)

systemctl stop firewalld
systemctl disable firewalld

虚拟机B:

# 下载nginx、keepalived
yum install -y nginx keepalived
​
# cd 进入
cd /etc/keepalived
​
# 修改主备关系和服务器优先级
vi keepalived.conf
……
state BACKUP
……
priority 90
……
​
# 修改健康检测脚本
vi check_nginx.sh
​
#!/bin/bash
#判断 Nginx 是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ]; then
systemctl stop keepalived
fi
​
# 修改nginx配置文件
vi /etc/nginx/nginx.conf
……
 upstream httpd_server {
        server 192.168.202.133:80;
        }
    server {
        listen       80;
        server_name  www.503.com;
        root         /usr/share/nginx/html;
       
       location / {
            proxy_pass http://httpd_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
……
​
# 配置DNS映射
vi /etc/hosts
192.168.202.100 www.503.com
​
# 开启并设置自启动
systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived
# 关闭防火墙
systemctl disable firewalld --now

后端httpd服务器C:

# 下载httpd
yum install -y httpd
# 写入页面文件
echo "this is httpd web page" > /var/www/html/index.html
# 开启,自启动
systemctl start httpd
systemctl enable httpd
# DNS域名解析
vi /etc/hosts
192.168.202.100 www.503.com
# 关闭防火墙
systemctl disable firewalld --now
​
# 验证
[root@128 ~]# curl www.503.com
this is httpd web page
[root@132 ~]# curl www.503.com
this is httpd web page
[root@128 ~]# curl 192.168.202.128
this is httpd web page
[root@132 ~]# curl 192.168.202.132
this is httpd web page
​
[root@128 ~]# systemctl stop nginx
[root@128 ~]# curl 192.168.202.128
curl: (7) Failed connect to 192.168.202.128:80; 拒绝连接
​
[root@132 ~]# ip a | grep 202.100
    inet 192.168.202.100/24 scope global secondary ens33:0
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐