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,每学到一点东西就写一点,如有不对的地方,恳请包涵!