负载均衡(ipvsadm 和 keepalived 的设置)

理论

  1. 网络知识
  1. 七层模型:物数网传会表应
  1. 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
  1. 四层模型:物数网传
  1. 物理层,数据链路层,网络层,传输层
  1. 负载均衡:
  1. 负载均衡包括应用程序处理和网络流程负载均衡
  2. 负载均衡实现方式分为:硬件和软件
  1. 硬件负载均衡:F5 深信服 rasware
  2. 软件负载均衡:LVS  HAPROXY  ATS
  1. 负载均衡分类:
  1. 二层:虚拟mac地址作为相应
  2. 三层:虚拟IP地址进行相应
  3. 四层:在三层的基础上添加port(端口)
  4. 七层:虚拟URL或者ip,主机名接收请求,站到相应的处理服务器
  1. 四层与七层负载均衡的区别
  1. 四层负载均衡基于ip和port,链接路由器,复杂度低,性能高,无需解析内容,但是安全性低
  2. 七层负载均衡基于虚拟URL和主机ip,连接代理服务器,安全性高,有会话保持和图片压缩功能,但是复杂度高,性能低需要对内容进行解析。
  1. 专业术语:

VS:Virtual Server #虚拟服务

Director, Balancer #负载均衡器、分发器

RS:Real Server #后端请求处理服务器

CIP: Client IP #用户端IP

VIP:Director Virtual IP #负载均衡器虚拟IP

DIP:Director IP #负载均衡器IP

RIP:Real Server IP #后端请求处理服务器IP

  1. LVS的优势与不足

高并发连接:单台LVS负载均衡器可以并发上万条连接

稳定性强:基于4层网络上建立的应用,稳定想抢,内存和cpu消耗少

成本低:1台即可部署

配置简单:

支持多种算法:

支持多种工作模型

应用范围广:

但是:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

  1. Lvs的四种工作模式
  1. NAT :只需要一个合法ip,但是扩展性有限,负载过多,整个路径瘫痪。
  2. DR直接路由:不需要隧道结构不需要太多的操作系统座位物理服务器,但是负载均衡器的网卡必须与物理网卡在一个物理段上。
  3. IP隧道
  1. LVS的算法调度:静态和动态

静态:RR(轮叫) WRR(加权轮叫)DH(目标地址散列) SH(源地址)

动态:LC(最少链接) WLC(加权最少连接) SED(最短期望延迟调度) NQ(永不排队) LBLC(局部性最少连接) LBLCR(复制的基于局部性最少连接)

实操

  • LVS负载均衡四种工作模式

  1. LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址)  --利用三层功能
  2. LVS/DR  :直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)--利用二层功能mac地址
  3. LVS/TUN: 隧道模式,只有进站的数据流量经过分发器
  4. LVS/full-nat:双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
  • NAT的工作原理

客户发来数据包ip到负载端,director负载将客户的cip转位vip传输给rs机器,

rs机器处理,处理结束后将vip包结果反馈给负载均衡器

负载均衡器将回收的反馈vip结果转化为cip包发送给客户端。

  • LVS ipvsadm命令

规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file

配置文件:/etc/sysconfig/ipvsadm-config

命令参数

-A 在服务器列表中新添加一条新的虚拟服务器记录

-s 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq

-a 在服务器表中添加一条新的真实主机记录

-t 说明虚拟服务器提供tcp服务:ipvsadm  -a -t

-u 说明虚拟服务器提供udp服务

-r 真实服务器地址

-m 指定LVS工作模式为NAT模式

-w 真实服务器的权值

-g 指定LVS工作模式为直接路由器模式(也是LVS默认的模式)

-i 指定LVS的工作模式为隧道模式  

-p 会话保持时间,定义流量被转到同一个realserver的会话存留时间

例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1

-E 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C 清除内核虚拟服务器表中的所有记录。

-R 恢复虚拟服务器规则

-S 保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式

-e 编辑一条虚拟服务器记录中的某条真实服务器记录

-d 删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l 显示内核虚拟服务器表

-n 以数字形式输出地址和端口号

--exact 扩展信息,精确值

--connection,-c: #当前IPVS连接输出

--stats: #统计信息

--rate : #输出速率信息

参数也可以从/proc/net/ip_vs*映射文件中查看

-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)

  • NAT模式下的配置方法:

  • 负载平衡:
  1. ipvsadm:
    1. 安装ipvsadm: yun -y ipvsadm
    2. 启动ipvsadm: touch /etc/sysconfig/ipvsadm && systemctl start ipvsadm && systemctl enadle ipvsadm
    3. 配置负载均衡主机: ipvsadm -A -t(tcp协议) ip:port(端口)-s(算法) rr(调度)/wrr
    4. 真实主机:ipvsadm -a -t 负载ip:port -r ip:port -m(nat模式) -w(权重)
  2. 虚拟路由器转发:
    1. 在虚拟机上添加临时nat网卡,或者临时添加网卡§ip a add 新ip dev ens33
    2. 路由配置:Cat >> /etc/sysctl.conf <<EOF

                        Net.ipv4.ip_forward=1

                        EOF

    1. 路由规则生成:Sysctl -p

备注:在使用过程中,出错可以使用journalctl -xe 查看日志。

  • 真实机器:
  1. 配置跳转路由:ip r add default via 负载均衡的新ip
  2. 安装对应服务,上传web包。

  • DR模式下的配置方法:
  • keepalived 高可用项目实战

  • 实操-nginx:

准备四台机器:

类型

安装的软件

Kedpalived 1

Ipvsadm  keepalived

Maxist

Keepalived 2

Ipvsadm  keepalived

backup

真实机 1

Nginx

真实机 2

Nginx

  1. NGINX安装:

下载数据包:yum -y install nginx

启动nginx: systemctl start nginx |systemctl enable nginx

添加虚拟网关:ip a a dev lo 相同ip和32位子网掩码

添加开机自动绑定ip:echo “ip a add dev lo ip ” >> /etc/rc.local

关闭广播: echo “net.ipv4.conf.all.arp_ignore=1” >> /etc/sysctl.conf

echo “net.ipv4.conf.all.arp_announce=2” >> /etc/sysctl.conf

刷新内核参数:sysctl -p

  1. Ipvsadm 和keepalived 的安装
  1. 方法一:使用命令建立关联
  1. Ipvsadm 建立

安装ipvsadm:yum -y install ipvsadm

启动:systemctl start ipvsadm && systemctl enable ipvsadm

启动失败排查: journalctl -xe

添加负载dip: ipvsadm -A -t ip:pront -s (rr wrr)

  添加rip: ipvsadm -a -t dip:pront -r rip:pront -g(m) -w 权重

  1. Keepalived 高可用

安装keepalived:yum -y install keepalived

修改/etc/keepalived/keepalived.conf配置文件

! Configuration File for keepalived



global_defs {

   router_id directory1   #辅助改为directory2

}

#定义轮转时发送邮件提醒的脚本位置

vrrp_script check_run {

   script /etc/keepalived/keepalived_check_mysql.sh

   interval 5

}



vrrp_instance VI_1 {

    state MASTER        #定义主还是备

    interface ens33     #VIP绑定接口

nopreempt        #设置到back上面,不抢占资源

    virtual_router_id 80  #整个集群的调度器一致

    priority 100         #back改为50

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.16.147.100/24   # vip

    }

#脚本引用

track_script {

        check_run

    }

#脚本中各个参数的引用

    notify_master "/etc/keepalived/sendmail.sh master"

    notify_backup "/etc/keepalived/sendmail.sh backup"

    notify_fault "/etc/keepalived/sendmail.sh fault"

}

}

添加脚本,当发升故障跳转时发送邮件。Vim sendmail.sh

#!/bin/bash

to_email='1428653005@qq.com'

ipaddress=`ip -4 a show dev ens33 | awk '/brd/{print $2}'`

notify() {

    mailsubject="${ipaddress}to be $1, vip转移"

    mailbody="$(date +'%F %T'): vrrp 飘移, $(hostname) 切换到 $1"

    echo "$mailbody" | s-nail -s "$mailsubject" $to_email

}

case $1 in

master)

    notify master

    ;;

backup)

    notify backup

    ;;

fault)

    notify fault

    ;;

*)

    echo "Usage: $(basename $0) {master|backup|fault}"

    exit 1

    ;;

esac

启动高可用: systemctl start keepalived && systemctl enable keepalived

  1. 方法二:配置文件实现ipvsadm和高可用

Keepalived 高可用和 ipvsadm

安装keepalived:yum -y install keepalived

修改/etc/keepalived/keepalived.conf配置文件

! Configuration File for keepalived



global_defs {

   router_id directory1   #辅助改为directory2

}

#定义轮转时发送邮件提醒的脚本位置

vrrp_script check_run {

   script /etc/keepalived/keepalived_check_mysql.sh

   interval 5

}



vrrp_instance VI_1 {

    state MASTER        #定义主还是备

    interface ens33     #VIP绑定接口

nopreempt        #设置到back上面,不抢占资源

    virtual_router_id 80  #整个集群的调度器一致

    priority 100         #back改为50

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.16.147.100/24   # vip

    }

#脚本引用

track_script {

        check_run

    }

#脚本中各个参数的引用

    notify_master "/etc/keepalived/sendmail.sh master"

    notify_backup "/etc/keepalived/sendmail.sh backup"

    notify_fault "/etc/keepalived/sendmail.sh fault"

}

}

#设置vs的dip

virtual_server 172.16.147.101 80 {

delay_loop 3

lb_algo rr

lb_kind DR

net_mask 255.255.255.0

protocol TCP

#设置rs的 rip1

real_server 172.16.147.153 80 {

weight 1

inhibit_on_failure  #当该节点失败时,把权重设置为

TCP_CHECK {

connect_port 80

connect_timeout 3

}

}

#设置rs的 rip2



real_server 172.16.147.156 80 {

weight 1

inhibit_on_failure #当该节点失败时,把权重设置为

TCP_CHECK {

connect_timeout 3

connect_port 80

}

}

        }

添加脚本,当发升故障跳转时发送邮件。Vim sendmail.sh

#!/bin/bash

to_email='1428653005@qq.com'

ipaddress=`ip -4 a show dev ens33 | awk '/brd/{print $2}'`

notify() {

    mailsubject="${ipaddress}to be $1, vip转移"

    mailbody="$(date +'%F %T'): vrrp 飘移, $(hostname) 切换到 $1"

    echo "$mailbody" | s-nail -s "$mailsubject" $to_email

}

case $1 in

master)

    notify master

    ;;

backup)

    notify backup

    ;;

fault)

    notify fault

    ;;

*)

    echo "Usage: $(basename $0) {master|backup|fault}"

    exit 1

    ;;

esac

启动高可用: systemctl start keepalived && systemctl enable keepalived

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值