keepalived高可用学习 keepalived+nginx高可用负载均衡配置

文章目录

    • Keepalived
        • 1、概述
        • 2、配置文件说明
        • 3、简洁版配置过程
        • 4、keepalived+lvs配置
        • 5、主lvs不可用 可能性
        • 6、防止脑裂,解决方式
        • 7、keepalived的配置补充
    • keepalived+nginx 高可用配置
      • nginx的负载均衡
      • nginx遇到的问题之负载均衡后获取客户端IP
      • nginx配置中upstream的server关键字
      • nginx遇到的问题之 session一致性问题
      • Nginx的常见负载均衡算法实战
      • nginx 四层代理,七层代理

Keepalived

1、概述

keepalived是为lvs设计的,用于管理和监控lvs集群系统中各个服务节点的状态,后面又加入了VRRP虚拟路由冗余协议,可以实现路由器高可用,原理是多台提供路由功能的服务器组成一个路由组,一个master和多个backup,master有vip,可以发组播,当backup收不到就认为master挂了,这时候需要优先级确认下一位master这样就可以保证路由的高可用(lvs是通过ip公网访问,lvs调度私网web服务器。DR模式有vip,web坏掉一台,另一台还是可以访问的,lvs调度服务器挂了就不行了,lvs加上keepalived的话,keepalived就相当于配置了lvs的多个备份,坏掉一台,另一台顶上去)。

Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL、vsnfsd等)的高可用解决方案软件

2、配置文件说明

! Configuration File for keepalived
#发送邮件的配置
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#vrrp协议的配置
vrrp_instance VI_1 {
    #工作模式
    state MASTER
    #监听的网卡
    interface ens33
    #虚拟路由id 需要和备服务器一致
    virtual_router_id 51
    #权重 优先级
    priority 100
    #vrrp包的发送周期  1s
    advert_int 1
    #权限验证
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #需要绑定切换的VIP
    virtual_ipaddress {
        192.168.1.200
    }
}

3、简洁版配置过程

keepalived 用于管理和监控lvs集群,并具有vrrp虚拟路由冗余协议,可以实现路由器的高可用
主配置文件 /etc/keepalived/keepalived.conf
VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

keepalived+lvs(DR模式)配置过程 
1.lvs服务器配置
安装ipvsadm,开启ip_vs模块
配置vip(虚拟ip)地址
配置bl命令,完成lvs的调度功能
关闭重定向
安装keepalived,配置/etc/keepalived/keepalived.conf文件
2.lvs备份服务器配置
安装ipvsadm,开启ip_vs模块
配置vip(虚拟ip)地址
配置bl命令,完成lvs的调度功能
关闭重定向
安装keepalived,配置/etc/keepalived/keepalived.conf文件
3.多台web服务器配置
安装httpd服务,并配置网页
关闭重定向
配置vip(虚拟ip)地址
4. 启动两台lvs服务器 (主lvs先启动)
5.测试
[root@hd1 ~]# ip addr|grep 1.113
inet 192.168.1.113/32 scope global ens33
[root@hd8 ~]# curl 192.168.1.113
this is 192.168.1.13
6.验证keepalived的高可用性 
停掉192.168.1.11的keepalived的服务
[root@hd1 ~]# systemctl stop keepalived(keepalived.server)
查看vip地址现在在哪里?(应该在192.168.1.12上)
[root@hd2 ~]# ip addr |grep 1.113
    inet 192.168.1.113/32 scope global ens33
通过客户端继续访问192.168.1.113   还是可以正常访问 后台的1.13和1.14的


高可用配置

4、keepalived+lvs配置

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件

keepalived是以VRRP协议为基础实现的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议  (冗余:多个)
虚拟路由冗余协议,
可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式。
vrrp模块是来实现VRRP协议的。

3、keepalived组成和原理
Keepalived软件主要是通过VRRP协议实现高可用功能的。
作用:VRRP的目的是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。

keepalived的配置文件
keepalived只有一个配置文件
/etc/keepalived/keepalived.conf
里面主要包括以下几个配置区域,分别是
global_defs、
static_ipaddress、
static_routes、
vrrp_script、
vrrp_instance和virtual_server。


环境准备
四台服务器
主lvs 192.168.8.11 vip 192.168.8.111
备lvs 192.168.8.12 vip 192.168.8.111
web1  192.168.8.138 vip 192.168.8.111
web2  192.168.8.139 vip 192.168.8.111

主lvs
root@hd1 ~]#yum -y install ipvsadm
root@hd1 ~]#modprobe ip_vs
root@hd1 ~]#cat /proc/net/ip_vs
配置关闭icmp重定向
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects 
cat /proc/sys/net/ipv4/conf/all/send_redirects 
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects 
echo "1" >/proc/sys/net/ipv4/conf/ens33/send_redirects 
安装keepalived
[root@hd1 ~]# yum -y install keepalived
配置keepalived的主配置文件
清空配置文件的内容
[root@hd1 ~]# > /etc/keepalived/keepalived.conf
[root@hd1 ~]# cat  /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.111
    }
}

virtual_server 192.168.8.111 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    net_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.8.138 80 {
        weight 1
        TCP_CHECK {
                  connect_port 80
                  connect_timeout 3
                  nb_get_retry 3
                 delay_before_retry 4

    }
    }
    real_server 192.168.8.139 80 {
        weight 1
        TCP_CHECK {
                  connect_port 80
                  connect_timeout 3
                  nb_get_retry 3
                 delay_before_retry 4

    }
    }
}

第二台lvs192.168.1.12的配置

安装工具包
[root@hd2 ~]# yum -y install ipvsadm
[root@hd2 ~]# modprobe ip_vs
[root@hd2 ~]# cat /proc/net/ip_vs


配置关闭icmp重定向
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects 
cat /proc/sys/net/ipv4/conf/all/send_redirects 
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects 
echo "1" >/proc/sys/net/ipv4/conf/ens33/send_redirects 



安装keepalived
[root@hd2 ~]# yum -y install keepalived

配置keepalived的配置文件
[root@hd2 ~]# > /etc/keepalived/keepalived.conf
[root@hd2 ~]# cat  /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90   #优先级要变低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.111
    }
}

virtual_server 192.168.8.111 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    net_mask 255.255.255.0
    persistence_timeout 50  #持续的超时时间50s
    protocol TCP

    real_server 192.168.8.138 80 {
        weight 1
        TCP_CHECK {
                  connect_port 80
                  connect_timeout 3
                  nb_get_retry 3
                 delay_before_retry 4

    }
    }
    real_server 192.168.8.139 80 {
        weight 1
        TCP_CHECK {
                  connect_port 80
                  connect_timeout 3
                  nb_get_retry 3
                 delay_before_retry 4

    }
    }
}
配置192.168.1.13为web1服务器 

[root@hd3 ~]# yum -y install httpd
[root@hd3 ~]# echo "this is the web1 " >/var/www/html/index.html
[root@hd3 ~]# systemctl start httpd
[root@hd3 ~]# yum -y install net-tools
[root@hd3 ~]#ifconfig lo:0 192.168.8.111 broadcast 192.168.8.111 netmask 255.255.255.255 up
[root@hd3 ~]#route add -host 192.168.8.111 dev lo:0 

vi /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
7>重启
sysctl -p
2. 配置192.168.1.14为web2服务器

[root@hd4 ~]# yum -y install httpd
[root@hd4 ~]# echo "this is the web2 " >/var/www/html/index.html
[root@hd4 ~]# systemctl start httpd
[root@hd4 ~]# yum -y install net-tools
[root@hd4 ~]#ifconfig lo:0 192.168.8.111 broadcast 192.168.8.111 netmask 255.255.255.255 up
[root@hd4 ~]#route add -host 192.168.8.111 dev lo:0 
[root@hd4 ~]#vi  /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
重启
[root@hd4 ~]#sysctl -p
5. 启动两台lvs服务器 (主lvs先启动)
在主lvs192.168.1.11上
[root@hd1 ~]# systemctl start keepalived
在备lvs192.168.1.12上
[root@hd2 ~]# systemctl start keepalived
6.测试
查看vip地址是否落到了192.168.1.11上
[root@hd1 ~]# ip addr|grep 1.113
inet 192.168.1.113/32 scope global ens33
[root@hd8 ~]# curl 192.168.1.113
this is 192.168.1.13
7.验证keepalived的高可用性 
停掉192.168.1.11的keepalived的服务
[root@hd1 ~]# systemctl stop keepalived(keepalived.server)
查看vip地址现在在哪里?(应该在192.168.1.12上)
[root@hd2 ~]# ip addr |grep 1.113
    inet 192.168.1.113/32 scope global ens33
通过客户端继续访问192.168.1.113   还是可以正常访问 后台的1.13和1.14的

5、主lvs不可用 可能性

服务器整机不可用,常见于服务器断网,或者断电关机等。

方法一:模拟主服务器断电关闭

    #关闭主服务器  VIP所在服务器
    shell > poweroff

方法二:模拟主服务器断网

    #关闭VIP所在服务器的网卡  使其不能够联网
    shell > service network stop

方法三:停掉主服上keepalived服务

    shell > systemctl  stop keepalived

通过以上实验检测,发现当主服务器整机不可用时,VIP会切换到备用服务器

6、防止脑裂,解决方式

四、实现服务HA

默认keepalived实现的是服务器的高可用,并没有实现基于某个程序的高可用(nginx、lvs) 
但是实际情况下,往往并不是服务器整机不可用,只是对应的服务或者软件不可用。
比如说:lvs提供负载均衡,lvs down掉了,但是主服务器依然可用,vip地址还在本地

实现过程分析:
VIP实际是由keepalived进行绑定的,所以当nginx服务不可用时,就关闭当前机器的keepalived即可,释放VIP。进而绑定到其他备用服务器。
①编写服务检测脚本,实现检测nginx是否可用,不可用则关闭当前所在主机的keepalived
②在keepalived配置中调用检测服务脚本

1、Nginx服务可用检测脚本
主备服务器都要实现此脚本
①编写测试脚本  赋予执行权限
    shell > cd /etc/keepalived
    shell > vim check_nginx.sh
脚本内容:
    #!/bin/bash
    nginx_status=`ps -C nginx --no-header | wc -l`
    if [ $nginx_status -eq 0 ];then
       systemctl stop keepalived 
    fi
赋予脚本执行权限    方便之后其他软件调用执行
    shell > chmod +x check_nginx.sh
②测试脚本可用性
启动nginx和keepalived  
关闭nginx   执行脚本  查看keepalived是否也关闭
2、模拟宕机实现服务切换
在多台服务器中配置keepalived定时触发检测nginx的脚本模块
    #在vrrp_instance外上面定义
    vrrp_script check_nginx {
       #调用脚本地址
       script  /etc/keepalived/check_nginx.sh
       #检测间隔时间
       interval 3
    }
    #在vrrp_instance里调用
    track_script {
        #上线定义的名称
        check_nginx
    }
3、实现web服务器高可用
以上案例已经实现了,服务不可用VIP切换到可用服务器。
现在需求用户的服务是连续不间断的,故用户需要通过VIP进行访问
①解析域名到VIP
②模拟用户访问

7、keepalived的配置补充

五、keepalived的配置补充

脑裂(裂脑):vip出现在了多台机器上。网络不通畅,禁用了数据包,主备服务器没法通讯,造成备服务器认为主服务器不可用,绑定VIP,主服务器VIP不会释放。

解决方案:
①双备或者多备模式  BACKUP  通过priority权重来区分谁的优先级更高
②单播(定向广播)的方式 (一些特定环境禁用了组播方式)
③时间不同步  服务器时间校时

1、非抢占模式

①nopreempt
在主备服务器的配置文件,vrrp_instance段中
②设置state工作模式为BACKUP
两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

2、单播模式

一些特定环境下不允许发送组播,造成备服务器无法收到vrrp包,可能会造成脑裂现象。可以通过单播的方式解决。
单播示例配置:注意此语法在keepalived1.2.11版本以上支持
unicast_src_ip 192.168.1.10##(本地IP地址)
unicast_peer {
		192.168.1.11##(对端IP地址)此地址一定不能忘记
}

主服务器server01配置
    #在vrrp_instace段中加入
    #本地IP
    unicast_src_ip 192.168.1.11
    unicast_peer {
        #对象IP  发送vrrp包给备服务器
        192.168.1.10
    }
备服务器server03配置

    #在vrrp_instace段中加入
    #本地IP
    unicast_src_ip 192.168.1.10
    unicast_peer {
        #对象IP  发送vrrp包给备服务器
        192.168.1.11
    }
tcpdump抓vrrp包的方式:
shell > tcpdump vrrp -n -i ens33

keepalived+nginx 高可用配置

所有的请求流量,都要经过负载均衡服务器,负载均衡服务器压力很大,防止它宕机,导致后端服务所有都不可用,需要对负载均衡服务器,做高可用
给负载均衡服务器做一台备用服务器,通过keepalived实现高可用。

通过keepalived实现VIP在负载均衡服务器组的切换。
server03   master LB   192.168.1.11
server04   backup LB   192.168.1.14
主负载均衡的keepalived配置

    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        #虚拟路由ID 新ID 不要之前的冲突
        virtual_router_id 52
        priority 100
        nopreempt
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            #添加新VIP
            192.168.1.100
        }
        track_script {
            check_nginx
        }
    }

备负载均衡的keepalived配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    #修改route_id
    virtual_router_id 52
    priority 99
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #unicast_src_ip 192.168.1.12
    #unicast_peer {
    #    192.168.1.11
    #}
    virtual_ipaddress {
        #新VIP
        192.168.1.100
    }
    track_script {
        check_nginx
    }
}

nginx的负载均衡

负载均衡
负载均衡:分发流量、请求到不同的服务器。使流量平均分配(理想的状态的)
作用:服务器容灾   流量分发
主要作用:
①流量分发  请求平均  降低单例压力
其他作用:
②安全  隐藏后端真实服务
③屏蔽非法请求(七层负载均衡)
实现方式分类:
①软件级别  性价比高  可控性强
②硬件级别   性能好  价格高  几万到几十万不等
硬件是实现方式:
F5 BIG-IP   四层和七层
七层   Nginx、HAProxy
四层   LVS、HAProxy、Nginx(1.9版本后)

1)二层负载均衡(mac)
根据OSI模型分的二层进行负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后,再分配后端实际的MAC地址响应 
2)三层负载均衡(ip) 
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后,再分配后端实际的IP地址响应
3)四层负载均衡(tcp)  网络运输层面的负载均衡
在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器
4)七层负载均衡(http)  智能型负载均衡
根据虚拟的url或IP,主机接收请求,再转向(反向代理)相应的处理服务器

架构分析:

①用户访问请求Nginx负载均衡服务器 
②Nginx负载均衡服务器再分发请求到web服务器
实际配置负载均衡,只需修改作为负载均衡服务器的Nginx即可。

①在客户端解析域名到负载均衡服务器
②在192.168.1.11上安装nginx做负载均衡
[root@localhost ~]#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
[root@localhost ~]#yum -y install epel-release 
[root@localhost ~]#yum -y install nginx
shell > cat /etc/nginx/nginx.conf
配置文件示例:
worker_processes  1;
events {
    worker_connections  1024;
}
http {

#在http段进行配置
#分发请求到后端服务器
upstream shop {
    #web1 server01
    server 192.168.1.12;
    #web2 server02
    server 192.168.1.13;
}
#修改之前的shop的server段配置
server {
    listen 80;
    server_name www.a.com;
    location / {
        #匹配到上面的upstream
        proxy_pass http://shop;
        #以下两条配置,实质是设置了传输的header头信息  
        #传输域名给后端服务器  进行识别  方便匹配对应server虚拟主机
        proxy_set_header Host $host;
        #发送客户端IP  给后端服务器  用来方便后端服务器识别用户真实IP
        proxy_set_header X-Real-IP $remote_addr;
    }
}
#重启nginx服务
[root@localhost nginx]# systemctl restart nginx 


==方法一:在不同服务器写入不同信息==
①分别修改web服务器的信息

    shell11 > echo wo shi 192.168.1.12 >>/usr/share/nginx/html/index.html
    shell12 > echo wo shi 192.168.1.13 >>/usr/share/nginx/html/index.html
测试:
    [root@localhost ~]# curl 192.168.1.11
    wo shi 1.13
    [root@localhost ~]# curl 192.168.1.11
    wo shi 1.12
可以停掉其中一台web服务器进行测试
    #停掉192.168.1.13
    省略15个字...... 
    #再次访问nginx负载均衡发现 1.13故障机器自动被踢出,说明nginx负载均衡默认就具备健康检查功能
    [root@localhost ~]# curl 192.168.1.11
    wo shi 1.12
    [root@localhost ~]# curl 192.168.1.11
    wo shi 1.12
    
方法二:查看后端web服务器的访问日志,有没有记录真正客户端的ip地址
    shell > cat /var/log/nginx/access.log



nginx遇到的问题之负载均衡后获取客户端IP

负载均衡之后,在后端的web服务器获取到的是负载均衡服务器的IP,而不能够获取到客户端的真实IP。

需要进行以下特殊配置:
①首先在负载均衡服务器中配置,转发客户端IP给后端web服务器
location{
    ..........
      #发送客户端IP  给后端服务器  用来方便后端服务器识别用户真实IP
        proxy_set_header X-Real-IP $remote_addr;
}
②后端web服务器需要配置,识别从负载均衡服务器传输过来的客户端真实IP
    set_real_ip_from  192.168.1.11;(负载均衡的ip)
官方网址:http://nginx.org/en/docs/http/ngx_http_realip_module.html
使用ngx_http_realip_module模块提供的set_real_ip_from语法,默认此模块没有安装,需要编译时添加编译参数
web服务器上配置set_real_ip_from  代表从哪儿来源的IP,需要识别真实客户端IP
示例配置:
    #此配置在web服务器上的nginx
    #可配置到http、server、location中,推荐配置到server中
    #配置需要识别的IP来源   负载均衡的IP
    set_real_ip_from  192.168.1.11;

nginx配置中upstream的server关键字

upstream中的分发之后的几个关键字:
backup  备  其他的没有backup标识的都无响应,才分发到backup
down   此条配置,不会被分发到
upstream shop {
    server 192.168.1.12 ;
    server 192.168.1.13 backup;
}

nginx遇到的问题之 session一致性问题

访问管理后端页面,登录发现验证码不通过
分析原因:
①比如分发到web1服务器,生成验证码,存储到session中,默认在服务器本地
②再次校验的时候,请求分发到web2服务器了,所有验证码一直校验不通过

解决方案思路:
①生成和验证session都请求同一台服务器
②共享session  nfs  mysql ==内存缓存软件(memcached、redis)==

Nginx的常见负载均衡算法实战

Nginx 官方默认3种负载均衡的算法
①==Round-Robin  RR轮询(默认)==  一次一个的来(理论上的,实际实验可能会有间隔)
②==weight 权重==  权重高多分发一些  服务器硬件更好的设置权重更高一些
③==ip_hash==  同一个IP,所有的访问都分发到同一个web服务器
Tip:
第三方模块实现的调度算法  需要编译安装第三方模块
④fair  根据后端服务器的繁忙程度  将请求发到非繁忙的后端服务器
⑤url_hash  如果客户端访问的url是同一个,将转发到同一台后端服务器
验证一:验证加权轮询算法
示例配置:
    upstream shop {
        #web1 server01
        server 192.168.1.12 weight=5;
        #web2 server02
        server 192.168.1.13 weight=3;
    }

server01   web 1      1    1   1   1   1
server03   web 2      1    1   1
8次中,server01分发5次,server03分发3次
验证二:ip一致性算法
示例配置:
    upstream shop {
        #ip hash 一致性算法配置  设置此项  weight就失效了
        ip_hash;
        #web1 server01
        server 192.168.1.12 weight=5;
        #web2 server02
        server 192.168.1.13 weight=3;
    }



nginx 四层代理,七层代理

nginx两种反向代理区别
7层反向代理和4层反向代理

在nginx中,upstream和stream都是指向不同类型的模块。

upstream模块用于HTTP协议的负载均衡,主要用于将客户端请求分发到多个后端服务器,从而提高系统的稳定性和执行效率。

stream模块用于TCP/UDP协议的负载均衡,主要用于将客户端请求分发到多个后端服务器,从而提高系统的稳定性和执行效率,也可以用于TCP代理和UDP代理。

因此,upstream和stream的区别在于它们适用的协议不同。
upstream适用于HTTP协议的负载均衡,stream适用于TCP/UDP协议的负载均衡和代理。



nginx做七层反向代理

以下是使用nginx做七层反向代理的步骤:
1. 安装nginx:在Linux系统中使用包管理器安装nginx,或者从官网下载源码后编译安装。
2. 配置nginx:修改nginx配置文件,一般在/etc/nginx/nginx.conf(/usr/local/nginx/nginx.conf),增加以下内容:
    http {
        upstream backend {
            server backend1.example.com:8080;
            server backend2.example.com:8080;
        }
    
        server {
            listen 80;
            server_name example.com;
    
            location / {
                proxy_pass http://backend;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
            }
        }
    }

其中,
upstream定义了后端服务器集群,
server定义了监听的端口和域名,
location定义了访问路径。
3. 重启nginx:执行以下命令重启nginx服务,使新的配置生效。
    # 查看nginx进程
    ps -ef | grep nginx
    # 重启nginx
    /usr/local/nginx/sbin/nginx -s reload
    /etc/nginx/sbin/nginx -s reload
    
    

 测试反向代理:
访问配置的域名,可以看到nginx反向代理到后端服务器集群,将请求分发到多个后端服务器(负载均衡)处理,并返回响应。



nginx做四层反向代理
以下是使用nginx做四层反向代理的步骤:
1. 安装nginx:在Linux系统中使用包管理器安装nginx,或者从官网下载源码后编译安装。
2. 配置nginx:修改nginx配置文件,一般在/etc/nginx/nginx.conf,增加以下内容:
    stream {
        upstream backend {
            server backend1.example.com:8080;
            server backend2.example.com:8080;
        }
    
        server {
            listen 80;
            proxy_pass backend;
        }
    }

其中,
stream定义了四层代理,
upstream定义了后端服务器集群,
server定义了监听的端口和代理地址。

1. 重启nginx:执行以下命令重启nginx服务,使新的配置生效。
    # 查看nginx进程
    ps -ef | grep nginx
    # 重启nginx
    /usr/local/nginx/sbin/nginx -s reload
    /etc/nginx/sbin/nginx -s reload
测试反向代理:
使用TCP客户端工具(如telnet、netcat、nc等)连接nginx代理地址,
可以看到nginx反向代理到后端服务器集群,将请求分发到多个后端服务器处理,并返回响应。

你可能感兴趣的:(运维工程师,学习,nginx,负载均衡)