/images/hugo/avatar.png

25.2 nginx反向代理facgi

nginx反向代理facgi

/images/linux_mt/linux_slb.jpg

在讲解 httpd 的时候,我们说过通过 php 搭建一个 动态站点时,httpd 与 php 有三种结合方式

  1. CGI: 由 httpd 服务创建子进程来加载和执行 php 脚本
  2. fpm(FastCGI Process Manager): php 进程管里器,将 php 的解析执行作为独立的应用程序服务器
  3. modules: 将 php编译成为 httpd 的模块,httpd 既是 web 服务器也是应用程序服务器

nginx 与 php 结合的话则只能通过 fpm,将 php 运行为独立的应用程序服务器,nginx 通过反代的模式与 fpm 结合起来。nignx 基于 ngx_http_fastcgi_module 模块就能作为 fastcgi 协议的客户端与 fpm 通信。本节我们就来详解 nignx fastcgi 反向代理的相关配置。

25.1 nginx反向代理http

nginx反向代理http

/images/linux_mt/linux_slb.jpg

26 章我们讲解了 nginx 作为 web 服务的应用,除了 web 服务功能,nginx 还能作为七层的反向代理实现负载均衡功能。本章我们就来讲解 nginx 的另两项主要功能:

24.7 LVS 高可用

LVS 高可用

/images/linux_mt/linux_slb.jpg

前面我们搭建的负载均衡集群,一旦调度器发生故障,整个服务将不可用,我们需要对其进行高可用。keepalived 是 LVS 高可用最简单有效的解决方案,但是本节我们先不会讲解 keepalived,后面有一个章的内容专门讲解。本节的目的是通过对 LVS 高可用的讲解,让大家理解高可用集群中的重要概念,特别是健康状态检测。

24.6 防火墙标记和LVS持久链接

防火墙标记和LVS持久链接

/images/linux_mt/linux_slb.jpg

前面我们演示了如何使用 LVS 创建一个负载均衡服务,然而在生产环境中,我们可能要同时调度两个及以上的集群服务。典型的情景是,同时部署了 http,https 服务,用户浏览网页的时候使用的 http 服务,当用户登陆或支付时因为 http 是明文的不安全,此时必需切换成 https。如果这个两个服务是单独调度,很有可能用户登陆之后被重新调度到其他服务器上,这样用户原有的缓存就会丢失。所以我们必需将 http,https 作为一组服务进行同一调度,这就需要使用到防火墙标记。我们本节我们就来演示如何使用LVS 统一调度 http,https 服务。

24.5 LVS DR模型实战

LVS DR模型实战

本节我们将搭建一个 LVS-DR 的负载均衡集群。

1. 网络拓扑结构

/images/linux_mt/lvs-dr-frame.png

拓扑结构说明:

  • VS, RS1, RS2 在虚拟机内均采用桥接方式,桥接到物理机的网卡上
  • VIP 配置在 DIP 所在网卡的别名上

2. lvs-dr 配置示例

2.1 RS 配置脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

vip="192.168.1.99"

case $1 in
start)
	echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
	echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  iptables -F
  ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip up
	route add -host $vip dev lo:0
	;;
stop)
	ifconfig lo:0 down
	echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
	echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
	;;
*)
  echo "Usage $(basename $0) start|stop"
  exit 1
  ;;
esac

echo "/proc/sys/net/ipv4/conf/all/arp_ignore:"   `cat  /proc/sys/net/ipv4/conf/all/arp_ignore`
echo "/proc/sys/net/ipv4/conf/lo/arp_ignore:"   `cat  /proc/sys/net/ipv4/conf/lo/arp_ignore`
echo "/proc/sys/net/ipv4/conf/all/arp_announce:"   `cat  /proc/sys/net/ipv4/conf/all/arp_announce`
echo "/proc/sys/net/ipv4/conf/lo/arp_announce:"   `cat  /proc/sys/net/ipv4/conf/all/arp_announce`

2.2 VS 配置脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
vip="192.168.1.99"
ifc="enp0s3:0"
port=80
rs1="192.168.1.107"
rs2="192.168.1.109"

case $1 in
start)
	ifconfig $ifc $vip netmask 255.255.255.255 broadcast $vip up
	iptables -F
	ipvsadm -A -t $vip:$port -s wrr
	ipvsadm -a -t $vip:$port -r $rs1 -g -w 1 	
	ipvsadm -a -t $vip:$port -r $rs2 -g -w 1
	;;
stop)
	ipvsadm -C
	ifconfig $ifc down
	;;
*)
  echo "Usage $(basename $0) start|stop"
  exit 1
  ;;
esac

24.4 LVS nat模型实战

LVS nat模型实战

本节我们将搭建一个 LVS-NAT 的负载均衡集群。

1. 网络拓扑结构

/images/linux_mt/LVS-NAT-FRAME.png

2. lvs-nat 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1. 配置 RS
# - 配置 ip 地址
# - 配置 httpd
# - 关闭 iptables
# - 关闭 SELinux

# 2. 配置 Director ipvs
sysctl net.ipv4.ip_foward=1
ipvsadm -A -t 192.168.1.254:80 -s rr
ipvsadm -a -t 192.168.1.254:80 -r 172.16.0.251 -m -w 1
ipvsadm -a -t 192.168.1.254:80 -r 172.16.0.252 -m -w 1

ipvsadm -L -n

ipvadm -S -n    > /etc/sysconfig/ipvsadm
ipvsadm-save -n > /etc/sysconfig/ipvsadm

ipvsadm -C
ipvsadm -R < /etc/sysconfig/ipvsadm

# 修改规则
ipvsadm  -E -t 192.168.1.148:80 -s sh
ipvsadm -L -n

ipvsadm -e -t 192.168.1.148:80 -r 172.16.0.2:8080 -m # 不行
ipvsadm -d -t 192.168.1.148:80 -r 172.16.0.2