• 23.ubuntu16.04 实现vip(虚ip)


    两台机器

    192.168.88.47

    192.168.88.48

    192.168.88.40(要设置的虚IP)

    查看ip 

    ifconfig
    

      

     两台机器分别执行

    ifconfig ens33:0 192.168.88.40 netmask 255.255.255.0 up
    

      

    然后可以ping,关掉任一一个机器都还可以访问

    写在/etc/rc.local里也可以,写在这里就不怕断电后机器无法正常使用了。

     

     重启,再查看

    附:

    lvs+nginx负载均衡 

    参考:

    https://blog.csdn.net/qq9808/article/details/84553632

    https://www.cnblogs.com/arjenlee/p/9262737.html

    1:DS:Director Server。虚拟服务,负责调度
    
    2:RS:Real Server。后端真实的工作服务器。
    
    3:VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
    
    4:DIP:Director Server IP,DS的IP
    
    5:RIP:Real Server IP,后端服务器的IP地址
    
    6:CIP:Client IP,访问客户端的IP地址
    
    

      

    准备三台机器

    DS:192.168.66.49
    RS:192.168.66.41 nginx
    RS:192.168.66.42 nginx
    vip:192.168.66.40
    

      

    负载均衡服务器(director)配置 DS:192.168.66.49

    执行脚本

    #!/bin/bash
    vip=192.168.66.40
    rs1=192.168.66.41
    rs2=192.168.66.42
    netName=ens160
    #set virttual ip address
    /sbin/ifconfig $netName:0 $vip broadcast $vip netmask 255.255.255.255 up
    /sbin/route add -host $vip dev $netName:0
    #clear ipvs tables
    /sbin/ipvsadm -C
    #set LVS  Server
    /sbin/ipvsadm -A -t $vip:80 -s rr
    /sbin/ipvsadm -a -t $vip:80 -r $rs1:80 -g
    /sbin/ipvsadm -a -t $vip:80 -r $rs2:80 -g
    #run lvs
    /sbin/ipvsadm
    # update /etc/sysctl.conf
    #echo "0" >/proc/sys/net/ipv4/ip_forward
    #echo "1" >/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/eht0/send_redirects
    #/sbin/sysctl -p
    

      

    真实服务器 (real server)配置: RS:192.168.66.41/RS:192.168.66.42

    分别执行脚本

    #!/bin/bash
    vip=192.168.66.40
    /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    /sbin/route add -host $vip 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
    /sbin/sysctl -p
    

    192.168.66.41

    192.168.66.42

    轮询结果

    附:

    #删除虚拟ip命令
    ip addr del 192.168.66.40 dev ens160:0
    #路由列表查询
    netstat -rn
    ip route
    

      

    附录 lvs参数简介
    部分参数如下:man ipvsadm可以全部看到。
    -A, --add-service    Add  a  virtual service
    -E, --edit-service    Edit a virtual service
    -D, --delete-service        Delete a virtual service
    -C, --clear      Clear the virtual server table.
    -R, --restore
    -S, --save
    -a, --add-server      Add a real server to a virtual service
    -e, --edit-server      Edit a real server in a virtual service
    -d, --delete-server   Remove a real server from a virtual service
    -L, -l, --list     List  the  virtual  server  table  if no argument is specified
    -t, --tcp-service      Use TCP service.
    -u, --udp-service    Use UDP service
    
    -s 指定服务采用的算法,常用的算法参数如下:
    
        rr   轮叫(Round Robin)
        调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。
        wrr   加权轮叫(Weighted Round Robin)
        调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
        lc   最少链接(Least Connections)
        调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
        wlc   加权最少链接(Weighted Least Connections)
        在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
        lblc   基于局部性的最少链接(Locality-Based Least Connections)
        "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
        lblcr   带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
        "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
        dh   目标地址散列(Destination Hashing)
        "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
        sh   源地址散列(Source Hashing)
        "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
    
    -a 表示往一个服务内增加一个real server
    -r 指定real server的IP地址
    -w 表示权重
    -g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。
    
    

      

    附:

    keepalived + 双LVS 热备

    参考:https://segmentfault.com/a/1190000016294818

    DS1:192.168.66.48
    
    DS2:192.168.66.49

    RS:192.168.66.41 nginx
    RS:192.168.66.42 nginx
    DS服务的安装参照上面

      

    安装Keepalived

    参考:https://blog.csdn.net/lili_lady/article/details/106856309

    1.安装依赖

    sudo apt-get install libssl-dev
    sudo apt-get install openssl
    sudo apt-get install libpopt-dev
    sudo apt-get install keepalived
    

      

    文件说明
    /usr/sbin/keepalived 二进制程序
    /etc/keepalived/keepalived.conf 配置文件
    /usr/lib/systemd/system/keepalived.service 服务文件

    修改主lvs下/etc/keepalived/keepalived.conf文件

    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_DEVEL1
    }
    
    vrrp_instance VI_1 {
        state MASTER             # 标示为主lvs
        interface ens160           # HA检测端口 实际网卡对应上
        virtual_router_id 51     # 主备的virtual_router_id 必须相同
        priority 100             # 优先级,备lvs要比主lvs稍小
        advert_int 1             # VRRP Multicast 广播周期秒数
        authentication {         # 定义认证
            auth_type PASS       # 认证方式为口令认证
            auth_pass 1111       # 定义口令
        }
        virtual_ipaddress {      # 定义vip
            192.168.66.40        # 多个vip可换行添加
        }
    }
    
    virtual_server 192.168.66.40 80 {
        delay_loop 3
        lb_algo rr       
        lb_kind DR        
        protocol TCP            
        real_server 192.168.66.41 80 {       
            weight 1                       
            TCP_CHECK {  
                connect_timeout 3         
            }
        }
        real_server 192.168.66.42 80 {
            weight 3
            TCP_CHECK {
                connect_timeout 3
            }
        }
    }
    

      

    修改从lvs下/etc/keepalived/keepalived.conf文件
    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_DEVEL2 #两边不一样
    }
    
    vrrp_instance VI_1 {
        state BACKUP             # 标示为备lvs
        interface ens160           # HA检测端口 跟实际网卡对应上
        virtual_router_id 51     # 主备的virtual_router_id 必须相同
        priority 99              # 优先级,备lvs要比主lvs稍小
        advert_int 1             # VRRP Multicast 广播周期秒数
        authentication {         # 定义认证
            auth_type PASS       # 认证方式为口令认证
            auth_pass 1111       # 定义口令
        }
        virtual_ipaddress {      # 定义vip
            192.168.66.40        # 多个vip可换行添加
        }
    }
    
    virtual_server 192.168.66.40 80 {
        delay_loop 3
        lb_algo rr       
        lb_kind DR        
        protocol TCP            
        real_server 192.168.66.41 80 {       
            weight 1                       
            TCP_CHECK {  
                connect_timeout 3         
            }
        }
        real_server 192.168.66.42 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
            }
        }
    } 
    

      

    设置成启动服务

    # systemctl enable keepalived
    # systemctl start keepalived
    # reboot
    

     

    按照如下步骤执行

    两台ds分别执行脚本

    #!/bin/bash
    vip=192.168.66.40
    rs1=192.168.66.41
    rs2=192.168.66.42
    netName=ens160
    #set virttual ip address
    /sbin/ifconfig $netName:0 $vip broadcast $vip netmask 255.255.255.255 up
    /sbin/route add -host $vip dev $netName:0
    #clear ipvs tables
    /sbin/ipvsadm -C
    #set LVS  Server
    /sbin/ipvsadm -A -t $vip:80 -s rr
    /sbin/ipvsadm -a -t $vip:80 -r $rs1:80 -g
    /sbin/ipvsadm -a -t $vip:80 -r $rs2:80 -g
    #run lvs
    /sbin/ipvsadm
    
    # update /etc/sysctl.conf
    #echo "0" >/proc/sys/net/ipv4/ip_forward
    #echo "1" >/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/eht0/send_redirects
    #/sbin/sysctl -p
    

      

    两台rs分别执行脚本

    #!/bin/bash
    vip=192.168.66.40
    /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    /sbin/route add -host $vip 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
    /sbin/sysctl -p
    

      

    然后重启两台ds的keepalived

    systemctl restart keepalived
    

      

    测试

    1)观察lvs路由条目
    master上查询 # ipvsadm -L
    
    2)观察vip地址在哪台机器上
    master上查询 # ip a
    
    3)客户端浏览器访问vip
    192.168.66.40
    
    4)关闭master上的keepalived服务,再次访问vip
    
    5)关闭web1站点服务,再次访问VIP
    

      

    附:Keepalived 配置文件

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc     #设置报警邮件地址,可以设置多个,每行一个。
         failover@firewall.loc    #需开启本机的sendmail服务
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc  #设置邮件的发送地址
       smtp_server 127.0.0.1      #设置smtp server地址
       smtp_connect_timeout 30    #设置连接smtp server的超时时间
       router_id LVS_DEVEL        #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
    }
    
    vrrp_instance VI_1 {
        state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
        interface eno16777736     #指定HA监测网络的接口
        virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
        priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
        advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {          #设置验证类型和密码
            auth_type PASS        #设置验证类型,主要有PASS和AH两种
            auth_pass 1111        #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
        }
        virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
            192.168.244.10 
        }
    }
    
    virtual_server 192.168.244.10 8066 {  #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
        delay_loop 6              #设置运行情况检查时间,单位是秒
        lb_algo rr                #设置负载调度算法,这里设置为rr,即轮询算法
        lb_kind DR                #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
        nat_mask 255.255.255.0 
        persistence_timeout 50    #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                  #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                  #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
                                  #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
        protocol TCP              #指定转发协议类型,有TCP和UDP两种
    
        real_server 192.168.244.148 8066 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
            weight 1              #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                  #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
            TCP_CHECK {           #realserver的状态检测设置部分,单位是秒
                connect_timeout 3    #表示3秒无响应超时
                nb_get_retry 3       #表示重试次数
                delay_before_retry 3 #表示重试间隔
                connect_port 8066
            } 
        }
        real_server 192.168.244.149 8066 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8066
            }
        }
    }
    

      

  • 相关阅读:
    犯错记录(一)
    BullseyeCoverage:代码覆盖率。
    测试工具:insure++
    C++ 常见容器
    linux修改rm指令执行(数据安全)
    C++细节系列(零):零散记录
    vim中使用gdb。
    vim自动补全文章搜集
    排序算法的个人心得体会。
    面向对象的三个特征。
  • 原文地址:https://www.cnblogs.com/ff111/p/15848331.html
Copyright © 2020-2023  润新知