• lvs集群和DR模式


     
    Ngnix:
    1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
    2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
    3、Nginx安装和配置比较简单,测试起来比较方便;
    4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
    5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
    6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
    7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
    8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好,
    9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
    10、Nginx还能做Web服务器即Cache功能。
     
    HAProxy的特点是:
    1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
    2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
    3、支持url检测后端的服务器出问题的检测会有很好的帮助。
    4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
    5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
    6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
    9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
    10、不能做Web服务器即Cache。

    集群:多台主机对外提供服务
    负载均衡集群
    高可用集群
    负载均衡:
    软件:
    Lvs,nginx,haproxy
    硬件:
    F5
    LVS:
    1、抗负载能力强 7、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
    2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
    2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
    3、应用范围比较广,可以对所有应用做负载均衡;
    4、不支持正则处理,不能做动静分离。
    5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
    10种算法
    6、配置 复杂,对网络依赖比较大,稳定性很高。
    三种模式:
    dr路由
    nat模式
    tun隧道模式
    -A:添加一个虚拟服务(添加vip)[相当于负载均衡哪个服务器]
    -E:编辑修改一个虚拟服务
    -D:删除虚拟服务
    -C:清空规则表
    -R:从标准输入恢复规则表
    --save|-S:将当前内存中的规则保存到标准输出
    -a:指定在虚拟服务中添加RS节点 [添加后端的web服务器]
    -e:指定在虚拟服务中编辑修改RS节点
    -d:指定在虚拟服务中删除RS节点
    -L|-l:显示lvs中的规则表 << ipvsadm -L -n --stats
    -Z:将计数器清零
    -t service-address[:port]:该规则是对tcp协议的请求做调度
    -u service-address[:port]:该规则是对udp协议的请求做调度
    -f:表示这个请求是经过iptables所标记过的服务类型
    -r: 指定真实服务器的地址(remote)
    -s scheduler:指定该规则要用的调度算法192.(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
    -p [time]:指定在多次时间以内,将相同的客户端调度到相同的后端节点之上,默认时间300s
    -w:设置RS节点的权重
    -g:指定用DR模式(默认)
    -i:指定用tunnel模式
    -m:指定用nat模式

    DS:net:192.168.126.7
    255.255.255.0
    192.168.192.2
    vmnet2:192.168.100.5
    255.255.255.0

    RS1:192.168.100.6
    255.255.255.0
    192.168.100.5
    RS2:192.168.100.8
    255.255.255.0
    192.168.100.5
    #挂在本地镜像
    mount /dev/cdrom /mnt/
    cd /mnt/Packages/
    #安装ipvsadm包
    rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm
    #开启转发模式
    [root@db1 ~]# cat /proc/sys/net/ipv4/ip_forward
    0
    [root@db1 ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
    或者
    vim /etc/sysctl.conf 
    net.ipv4.ip_forward = 1


    #配置nat模式
    ╭─root@zxw7 /etc/sysconfig/network-scripts
    ╰─➤ ipvsadm -A -t 192.168.126.7:80 -s rr
    ╭─root@zxw7 /etc/sysconfig/network-scripts
    ╰─➤ ipvsadm -a -t 192.168.126.7:80 -r 192.168.100.6 -m 127 ↵
    ╭─root@zxw7 /etc/sysconfig/network-scripts
    ╰─➤ ipvsadm -a -t 192.168.126.7:80 -r 192.168.100.8 -m

    #如果想让配置保存下来需要 #查看ipvsadm包的文件位置
    [root@db1 ~]# rpm -ql ipvsadm-1.27-7.el7.x86_64
    /etc/sysconfig/ipvsadm-config
    /usr/lib/systemd/system/ipvsadm.service
    /usr/sbin/ipvsadm /usr/sbin/ipvsadm-restore
    /usr/sbin/ipvsadm-save /usr/share/doc/ipvsadm-1.27
    /usr/share/doc/ipvsadm-1.27/README /usr/share/man/man8/ipvsadm-restore.8.gz
    /usr/share/man/man8/ipvsadm-save.8.gz /usr/share/man/man8/ipvsadm.8.gz
    #查看ipvsadm.service服务的结构可以看到配置未见在/etc/sysconfig/ipvsadm


    [root@db1 ~]# cat /usr/lib/systemd/system/ipvsadm.service
    那么我们只需要ipvsadm -S > /etc/sysconfig/ipvsadm就可以把配置文件保存在配置文件中
    ipvsadm -R < /etc/sysconfig/ipvsadm就可以从配置文件中恢复到当前配置

     


    DR模式

    direct_server:192.168.254.17

    real_server:192.168.254.18
    real_server:192.168.254.19

    #vip为虚拟服务ip
    vip:192.168.254.250


    direct_server:
    yum install ipvsadm
    老板
    direct_server:
    ipvsadm -C #清除配置信息


    #添加对外提供的服务ip
    ipvsadm -A -t 192.168.254.250:80 -s rr #-A为ADD -t为tcp -s rr为设置算法为轮叫算法

    #添加2台real_server主机
    ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式
    ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式

    #配置网卡的子网口为vip,ip地址为192.168.254.250
    ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up

    #添加路由(访问192.168.254.250都走ens33:0这个网卡)
    route add -host 192.168.254.250 dev ens33:0
    员工1 | 员工2
    real_server:
    #在回环地址的子网口上配置服务ip(vip)
    ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up

    #添加路由
    route add -host 192.168.254.250 dev lo:0
    echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
    echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0">/proc/sys/net/ipv4/conf/all/arp_announce


    arp_ignore:定义接收到ARP请求时的响应级别
    0:默认,只用本地配置的有响应地址都给予响应
    1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
    (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
    arp_announce:定义将自己的地址向外通告时的级别
    0:默认,表示使用配置在任何接口的任何地址向外通告
    1:尽量仅向目标网络通告与其网络匹配的地址
    2:仅向与本地接口上地址匹配的网络进行通告

     


    DR模式

    direct_server:192.168.126.7
    real_server:192.168.126.6
    real_server:192.168.126.8

    #vip为虚拟服务ip
    vip:192.168.126.5

    第一步:下载
    direct_server:
    yum install ipvsadm -y
    老板
    第二步:清空配置信息
    direct_server:
    ipvsadm -C #清除配置信息


    第三步:添加对外提供的服务ip
    ipvsadm -A -t 192.168.126.5:80 -s rr #-A为ADD -t为tcp -s rr为设置算法为轮叫算法
    第四步:配置网卡的子网口为vip,ip地址为192.168.126.5
    net-tools
    ifconfig ens33:0 192.168.126.5 broadcast 192.168.126.5 netmask 255.255.255.255 up

    第五步:添加路由(访问192.168.126.5都走ens33:0这个网卡)
    route add -host 192.168.126.5 dev ens33:0

    ─root@zxw7 ~
    ╰─➤ route -n
    ╭─root@zxw7 ~
    ╰─➤ ifconfig ens33:0 down

    第六步:添加2台real_server主机
    ipvsadm -a -t 192.168.126.5:80 -r 192.168.126.6:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式
    ipvsadm -a -t 192.168.126.5:80 -r 192.168.126.8:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式

    员工1 | 员工2
    real_server:
    #在回环地址的子网口上配置服务ip(vip)
    ifconfig lo:0 192.168。126.5 broadcast 192.168.126.5 netmask 255.255.255.255 up

    #添加路由
    route add -host 192.168.126.5 dev lo:0
    echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
    echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0">/proc/sys/net/ipv4/conf/all/arp_announce


    arp_ignore:定义接收到ARP请求时的响应级别
    0:默认,只用本地配置的有响应地址都给予响应
    1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
    (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
    arp_announce:定义将自己的地址向外通告时的级别
    0:默认,表示使用配置在任何接口的任何地址向外通告
    1:尽量仅向目标网络通告与其网络匹配的地址
    2:仅向与本地接口上地址匹配的网络进行通告

    ╭─root@zxw7 ~
    ╰─➤ cat server.yaml
    - hosts: zxw
    remote_user: root
    tasks:
    - name: yum install net-tools -y
    yum: name=net-tools state=latest
    - name: ifconfig
    command: ifconfig lo:0 192.168.126.5 broadcast 192.168.126.5 netmask 255.255.255.255 up
    ignore_errors: yes
    - name: route add -host 192.168.126.5 dev lo:0
    command: route add -host 192.168.126.5 dev lo:0
    ignore_errors: yes
    - name: echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    shell: echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    - name: echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    shell: echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    - name: echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    shell: echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    - name: echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    shell: echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    ╭─root@zxw7 ~
    ╰─➤ cat /etc/ansible/hosts

    [zxw]
    192.168.126.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
    192.168.126.8 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
    ─root@zxw7 ~
    ╰─➤ ansible-playbook --syntax-check

  • 相关阅读:
    函数高阶(函数,改变函数this指向,高阶函数,闭包,递归)
    案例:新增数组方法
    案例:商品查询
    案例:forEach和some区别
    ES5新增方法(数组,字符串,对象)
    案例:借用父构造函数继承属性和方法
    构造函数 和 原型
    汽车小常识别让六大汽车驾驶软肋阻碍你
    Opencv 图像增强和亮度调整<6>
    C# StringBulider用法<1>
  • 原文地址:https://www.cnblogs.com/itzhao/p/11266391.html
Copyright © 2020-2023  润新知