lvs和keepalived

LVS调度算法参考

RR:轮询
WRR :加权轮询
DH :目标地址哈希
SH:源地址hash
LC:最少连接
WLC:加权最少连接,默认
SED:最少期望延迟
NQ:从不排队调度方法
LBLC:基于本地的最少连接
LBLCR:带复制的基于本地的最少连接  

ipvsadm命令参考

ipvsadm -A|E -t|u virutal-service-address:port [-s scheduler]
#-A:添加虚拟服务器记录
#-E:修改虚拟服务器记录
#-t:tcp服务
#-u:udp服务
#-s:调度算法,默认wlc

ipvsadm -D -t|u|f virtual-service-address
#-D:删除虚拟服务器记录

ipvsadm -C
#-C:清空lvs规则

ipvsadm -R
#-R:重载lvs配置

ipvsadm -S [-n] > ipvs.save
#-S:保存lvs配置
#-n:不解析地址

ipvsadm -a|e -t|u service-address:port -r real-server-address:port [-g|i|m] [-w weight]
#-a:添加真实服务器记录
#-e:修改真实服务器记录
#-r:对应的真实服务器地址
#-g:指定lvs工作模式为DR,默认
#-i:指定lvs工作模式为tunnel
#-m:指定lvs工作模式为NAT
#-w:手工指定权重

ipvsadm -d -t|u|f service-address -r server-address
#-d:删除真实服务器记录

ipvsadm -Ln [options]
#-L:显示lvs运行状态
#-n:不解析地址
#-c:显示ipvs连接
#--stats:统计数据
#--rate:速率
#--exact:精确值
 
ipvsadm -Z [-t|u|f service-address]
#-Z:清空lvs计数器

ipvsadm -h
#-h:显示帮助信息

NAT模型

 NAT模型可以做端口映射

1.首先在两台真实服务器上安装http服务
2.开启lvs服务器的转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
3.配置lvs服务
#定义一个lvs服务,指定vip和端口,指定调度方式为轮询
~]# ipvsadm -A -t VIP:PORT -s rr   
#添加第一台真实服务器,并指定为NAT模型
~]# ipvsadm -a -t VIP:PORT -r RIP1:PORT -m
#添加第二台真实服务器,并指定为NAT模型
~]# ipvsadm -a -t VIP:PORT -r RIP2:PORT -m 
#查看ipvs定义的规则
~]# ipvsadm -L -n 

DR模型 

三台服务器的所有ip地址都指向路由器的网关接口,DR模式不能做端口映射,也就是lvs服务器的端口和RS服务器端口必须对应

arp_announce:arp通告
    0:全部通告(默认)
    1:尽量避免通告非本网段地址
    2:不通告非本网段地址

arp_ignore:arp应答
    0:有的话就应答(默认)
    1:不在请求的接口就不应答

1.RS服务器添加vip到lo口,并关闭lo口和其他接口的arp通告和应答,添加vip路由到lo口,下面是相应脚本,只需要更改对应vip即可

#!/bin/bash
#description:start realserver
vip=192.168.159.111
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start Realserver"
        ip addr add $vip/32 dev lo
        ip route add  $vip/32 dev lo
        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
;;
stop)
        echo "Stop Realserver"
        ip addr del $vip/32 dev lo
        ip route del  $vip/32
        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
;;
*)
        echo "Usage: $0 (start | stop)"
exit 1
esac

2.在RS上开启相应服务
~]# systemctl start nginx

3.在lvs服务器上添加vip到eth0:0口,并开启转发功能

#添加vip
~]# ip addr add vip/32 dev eth0:0

#开启转发
~]# echo 1 > /proc/sys/net/ipv4/ip_forward 

#添加路由
~]# ip route add  vip/32 dev eth0:0

4.添加ipvs记录,DR模式不能做端口映射
~]# ipvsadm -A -t VIP:80 -s rr
~]# ipvsadm -a -t VIP:80 -r RIP1 -g 
~]# ipvsadm -a -t VIP:80 -r RIP2 -g 

keepalived:配置文件不能有中文注释!停止keepalived使用systemctl kill keepalived

[root@localhost roles]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   #notification_email {
   #  acassen@firewall.loc
   #  failover@firewall.loc
   #  sysadmin@firewall.loc
   #}
   #notification_email_from Alexandre.Cassen@firewall.loc
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

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.2.88
    }
}

注释,不要复制下面的内容,请复制上面的内容对应更改

global_defs {                   #全局配置
   router_id mmm             #路由器标识,全局唯一
}
 
vrrp_instance VI_1 {        #高可用实例1
    state MASTER              #状态为主节点
    interface eno16777736 #使用哪块网卡
    virtual_router_id 51      #虚拟路由器标识,同一个高可用内要相同
    priority 100                  #优先级,主节点要高于备用节点
    advert_int 1                  #监听时间间隔
    authentication {            #认证功能
        auth_type PASS        #明文认证
        auth_pass 1111        #认证密码
    }
    virtual_ipaddress {        #虚拟出来的ip地址
        192.168.1.30
    }
} 
#备节点不一样的字段为
#router_id nnn
#state BACKUP
#priority 99
#interface视网卡而定  

Keepalived+lvs  

RS节点同样需要做lvs DR模型的配置

1.RS服务器添加vip到lo口,并关闭lo口和其他接口的arp通告和应答,添加vip路由到lo口,下面是相应脚本,只需要更改对应vip即可

#!/bin/bash
#description:start realserver
vip=192.168.159.111
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start Realserver"
        ip addr add $vip/32 dev lo
        ip route add  $vip/32 dev lo
        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
;;
stop)
        echo "Stop Realserver"
        ip addr del $vip/32 dev lo
        ip route del  $vip/32
        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
;;
*)
        echo "Usage: $0 (start | stop)"
exit 1
esac

2.在RS上开启相应服务
~]# systemctl start nginx  

主节点

! Configuration File for keepalived

global_defs {
   router_id master
   vrrp_mcast_group4 224.0.0.7
}

vrrp_instance DR1 {
    state MASTER
    interface ens33
    virtual_router_id 77
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.159.111
    }
}
virtual_server 192.168.159.111 8888 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP
    sorry_server 192.168.159.130 8888
    real_server 192.168.159.132 8888 {
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8888
         }
    }
    real_server 192.168.159.133 8888 {
        HTTP_GET {
             url {
                path / 
                status_code 200
        }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3 
       }
   }
}  

备节点

! Configuration File for keepalived

global_defs {
   router_id slave
   vrrp_mcast_group4 224.0.0.7
}

vrrp_instance DR1 {
    state BACKUP
    interface ens33
    virtual_router_id 77
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.159.111
    }
}
virtual_server 192.168.159.111 8888 {   #虚拟地址组,就是上面虚拟出来的ip加上业务端口
    delay_loop 6                                     #健康检查周期,单位为秒
    lb_algo rr                                          #调度算法
    lb_kind DR                                        #调度模型 
    persistence_timeout 0                        #同一ip在多少秒内发来的请求都送给同一realserver
    protocol TCP
    sorry_server 192.168.159.130 8888   #当realserver都挂掉的时候,将请求发送给谁
    real_server 192.168.159.132 8888 {   #rs1的检查
        TCP_CHECK {                                #检查方法,有HTTP_GET,SSL_GET,TCP_CHECK
            connect_timeout 3                     #连接超时时间
            nb_get_retry 3                          #重试次数
            delay_before_retry 3                  #重试时间间隔
            connect_port 8888                    #连接端口
         }
    }
    real_server 192.168.159.133 8888 {
        HTTP_GET {
             url {                                       #检查方法
                path /                                  #请求路径
                status_code 200                   #返回状态码为200代表正常
        }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3 
       }
   }
}

  

  

  

 

初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
原文地址:https://www.cnblogs.com/forlive/p/10004278.html