负载均衡集群
    1、集群(cluster)可以在付出较低成本的情况下获得再性能、可靠性、灵活性方面的相对较高的收益,任务调度是集群系统中的核心技术。
    2、集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率。

    负载均衡集群技术的实现:
    负载均衡(Load Balance)
    负载均衡技术类型:基于四层负载均衡技术和基于七层负载均衡技术
    负载均衡的实现方式:硬件负载均衡设备以及软件负载均衡
    硬件负载均衡产品:F5、深信服、Radware
    软件负载均衡产品:LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(apache traffic server)

    负载均衡分类:
    二层负载均衡(mac):一般用于虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接受分配后端实际的MAC地址响应。
    三层负载均衡(ip):一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。
    四层负载均衡(tcp):在三层负载均衡的基础上,用ip+port接受请求,再转发到对应的机器上。
    七层负载均衡(http):根据虚拟的url或ip,主机名接受请求,在转向相应的处理服务器。
    在实际的应用中只有四层、七层比较常用

    实现四层负载均衡的软件有:
    F5:硬件负载均衡器,功能很好,但是成本很高
    lvs:重量级的四层负载均衡
    nginx:轻量级的四层负载均衡软件,带缓存功能,正则表达式较灵活
    haproxy:模拟四层转发,较灵活

    实现七层负载均衡的软件有:
    haproxy:天生负载均衡技能,全面支持七层代理、会话保持、标记、路径转移。
    nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;

    在具体业务架构设计时,使用四层负载均衡或者七层负载均衡还得根据具体情况综合考虑。

    LVS是Linux Virtual Server的简称,也就是linux虚拟服务器
    为什么使用lvs?
    1、高并发连接:有超强的承接能力和并发处理能力
    2、稳定性强:是工作在网络四层之上仅作分发之用,对内存和cpu资源消耗少
    3、成本低廉:lvs只需要一台服务器就能完成免费部署
    4、配置简单:lvs配置非常简单,仅需几行命令,且可以写成脚本进行管理
    5、支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
    6、支持多种工作模式:可根据不同业务场景使用不同的工作模式
    7、应用范围广:几乎所有应用都可以使用lvs来进行负载均衡

    缺点:只工作在四层,不支持七层修改,机制过于庞大,不适合小规模使用

    LVS核心组件和专业术语:
    核心组件:
    LVS管理工具和内核模块: ipvsadm、ipvs
    ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
    ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发;

    专业术语:
    VS: Virtual Server #虚拟服务
    DR: Director,Balancer #负载均衡器、分发器
    RS: Real Server #后端请求处理服务器
    CIP: Client IP #用户端ip
    VIP: Director Virtual IP #负载均衡虚拟IP
    DIP: Director IP #负载均衡IP
    RIP: Real Server IP #后端请求处理服务器IP
    SIP: 源IP

    LVS的四种工作模式:
    1、LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(ip负载均衡,他修改的是IP地址) —利用三层功能
    2、LVS/DR:直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)—利用二层功能mac地址(MAC:mac地址又称为物理地址,具有全球唯一性,可以在局域网中标识一台设备)
    3、LVS/TUN:隧道模式,只有进站的数据流量经过分发器,必须是公网ip合法ip,real server必须是公网ip。
    4、LVS/full-nat:双向转换:将源IP改为DIP,将目标IP转为后端RS的RIP。通过请求报头的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发。

    四者的区别:
    lvs-nat:RIP的网关要指向DIP
    lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
    lvs-dr与lvs-tun:请求报头要经有Director,但响应报文由RS直接发往Client
    lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
    lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

    LVS-server安装lvs管理软件
    yum -y install ipvsadm
    程序包:ipvsadm(lvs管理工具)
    程序命令位置:/usr/sbin/ipvsadm
    规则保存工具:/usr/sbin/ipvsadm —save > /etc/sysconfig/ipvsadm
    配置文件:/etc/sysconfig/ipvsadm-config

    ipvsadm命令选项:
    -A —add-service #在服务器列表中新添加一条新的虚拟服务器记录
    -t #表示为tcp服务
    -u #表示为udp服务
    -s —scheduler #使用的调度算法,rr | wrr | lc | wlc 默认的算法是wlc
    例:ipvsadm -A -t 192.168.157.153:80 -s wrr

    以下为重点常用选项:
    -a —add-server #在服务器表中添加一条新的真实主机记录
    -t —tcp-service #说明虚拟服务器提供tcp服务
    -u —udp-service #说明虚拟服务器提供udp服务
    -r —real-server #真实服务器地址
    -m —masquerading #指定LVS工作模式为NAT模式
    -w —weight #真实服务器的权值
    -g —gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
    -i —ip #指定LVS的工作模式为隧道模式
    -p #会话保持时间,定义流量被转到同一个realserver的会话存留时间
    例:ipvsadm -a -t 192.168.157.153:80 -r 192.168.157.154:80 -m -w 1

    -E -edit-service #编辑内核虚拟服务表中的一条虚拟服务器记录
    -D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录
    -C -clear #清除内核虚拟服务器表中的所有记录
    -R -restore #恢复虚拟服务器规则
    -S -save #保存虚拟服务器规则到标准输出,输出为-R选项可读的格式
    -d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
    -L|-l –list #显示内核虚拟服务器表
    —numeric,-n #以数字形式输出地址和端口号
    —stats #统计信息
    —rate #输出速率信息
    -Z -zero #虚拟服务表计数器清零(清空当前的连接数量等)

    LVS部署实验:
    环境准备:三台干净服务器(有条件可以多准备一台,用于当作客户端进行访问测试),保证网络畅通,防火墙、selinux关闭,base、epel仓库可用,且服务器的网络模式为NAT
    这里准备的三台虚拟机分别为:
    192.168.157.154/24(DR) VIP:192.168.157.10/32
    192.168.157.155/24(SR-1) VIP:192.168.157.10/32
    192.168.157.156/24(SR-2) VIP:192.168.157.10/32

    部署DR机:
    下载lvs管理工具:
    >yum -y install ipvsadm
    如果要使用域名进行访问测试则进行本地域名解析,此次实验未使用域名
    配置VIP(Director分发器配置):
    >ip addr add dev ens33 192.168.157.10/32 #定义了一个VIP为ens33,且子网掩码为32
    >systemctl start ipvsadm #启动ipvsadm
    如果报错可以是缺少文件目录需要手动创建文件:
    >ipvsadm —save > /etc/sysconfig/ipvsadm
    再次启动即可:
    >systemctl start ipvsadm

    定义LVS分发策略:
    >ipvsadm -C #清除内核虚拟服务器表中的所有记录
    >ipvsadm -A -t 192.168.157.10:80 -s rr #创建一个新的虚拟服务器记录且调度算法指定为rr
    >ipvsadm -a -t 192.168.157.10:80 -r 192.168.157.155:80 -g #在虚拟服务器记录中添加真实记录SR-1,-g可不加默认就是直接路由模式
    >ipvsadm -a -t 192.168.157.10:80 -r 192.168.157.156:80 -g #在虚拟服务器记录中添加真实记录SR-2,-g可不加默认就是直接路由模式
    #添加真实服务器记录,模式为DR

    ipvsadm -S > /etc/sysconfig/ipvsadm #保存,保存到一个文件中
    >ipvsadm -ln #查看表中记录以及算法

    SR-1部署:
    下载nginx:
    >yum -y install nginx && systemctl start nginx
    >echo “this is SR-1” > /usr/share/html/index.html #给nginx默认发布目录添加内容
    >ip addr add dev lo 192.168.157.10/32 #在lo接口上绑定VIP
    >echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播,让ARP静默保证用户访问VIP的时候访问DR
    >echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
    >echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确IP地址回包,为了RS直接将数据返还回Client
    以上均为永久修改

    SR-2部署:
    与SR-1步骤相同:
    下载nginx:
    >yum -y install nginx && systemctl start nginx
    >echo “this is SR-2” > /usr/share/html/index.html #给nginx默认发布目录添加内容
    >ip addr add dev lo 192.168.157.10/32 #在lo接口上绑定VIP
    >echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播,让ARP静默保证用户访问VIP的时候访问DR
    >echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
    >echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确IP地址回包,为了RS直接将数据返还回Client
    以上均为永久修改

    随后进行访问测试,在访问时访问我们定义的VIP
    使用服务器时:curl http://192.168.157.10
    使用浏览器直接地址栏输入即可,推荐服务器访问测试