IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【运维手记】keepalived和负载均衡 -> 正文阅读

[系统运维]【运维手记】keepalived和负载均衡

一、VRRP

keepalived提供Vrrp虚拟ip(Vip)。如果未开启LVS配置,keepalived本身并无负载均衡。每次只有一个真实服务器(RS)接管Vip。可以设置一个条件,如配置一个检测脚本,达到触发条件后,进行Vip接管切换,即运维人常说的“ip飘走”。

客户端
VIP
RS1
RS2

Vip难道不是为了实现负载均衡?对,不需要负载均衡的Vip也是很常见的需求,比如有明显主备关系的反代,平时只需要反代一个主节点,确保效率,只有出故障才需要切换到性能较弱的备份节点);还比如无法实现多点的架构,后端有多个读入口但是每次只能有一个写入口;再比如局域网内访问,无负载压力,仅为了稳定性和连通。

(1)部署

Cent OS

  1. yum -y install keepalived && systemctl enable keepalived
  2. 编辑/etc/sysctl.conf,修改net.ipv4.ip_nonlocal_bind=1,后执行sysctl -p
  3. 修改keepalive单独存放日志,其中-S指定syslog的facility,编辑/etc/sysconfig/keepalived,增加KEEPALIVED_OPTIONS="-D -d -S 0"
  4. 编辑/etc/rsyslog.conf,增加local0.* /var/log/keepalived.log
  5. systemctl restart rsyslog
  6. systemctl restart keepalived

Ubuntu
apt安装同上,但是日志无需配置syslog。可用journalctl -u keepalived.service -f查看日志

(2)配置

配置案例:

global_defs {
    router_id 【本机hostname】
}
vrrp_script chk_ha_proc {
    #script "/etc/keepalived/nginx_check.sh"【检查nginx的脚本】
    #script "</dev/tcp/127.0.0.1/443"【Centos检查端口】
    script "killall -0 haproxy"【检查进程】
    interval 2
    fall 2
    rise 2
}
vrrp_instance VI_1 {
    state BACKUP【非抢占都backup,抢占Master/backup】
    interface ens192【参与vrrp的本机网卡】
    virtual_router_id 53【都配置一样的路由号】
    priority 100
    nopreempt【非抢占必配】
    authentication {
        auth_type PASS
        auth_pass 123456【路由号验证】
    }
    virtual_ipaddress {
        【Vip】
    }
    track_script {
        chk_ha_proc【对应采用哪种script】
        #chk_443_port
    }
}

需要注意script "</dev/tcp/127.0.0.1/443"是bash命令,如centos默认可用。在ubuntu中不可

  1. 启动keepalived;
  2. 检查两台机器ip a | grep 【Vip】查看是谁接管了Vip;
  3. 尝试对检测脚本的条件触发,查看是否“ip飘走”。

二、LVS

keepalived提供Vrrp虚拟ip(Vip),并作为调度服务器Director Server(DS)提供请求调度。确定Vip、DS可以有多个、RS(真实服务器),请求发出的关系如下:

客户端
VIP
DS1
DS2
RS1
RS2
RS...

当然DS可以部署于RS上

S2
S1
DS2
RS2
DS1
RS1
客户端
VIP

这样,既确保了LVS的多点互备也确保了服务多点均衡。
但是需要注意的是,上图仅限访问时的数据包传递,服务器响应数据时并非如此,是服务器直接在局域网内直接返回数据包,不经过DS。

RS1
网关
RS2
RS...
客户端

(1)部署

  1. 真实服务器需要配置lo:0接口,并抑制arp响应。
    # 先检查是不是已经有lo:0接口了,有则忽略
    # 执行或以脚本运行:
    VIP=【写VIP】
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    IPADDR=$VIP
    NETMASK=255.255.255.255
    ONBOOT=yes
    EOF
    cat << EOF > /etc/sysconfig/static-routes
    any host $VIP dev lo:0
    EOF
    systemctl restart network
    # 配置arp抑制:
    cat << EOF >> /etc/sysctl.conf
    net.ipv4.conf.lo.arp_ignore=1
    net.ipv4.conf.lo.arp_announce=2
    net.ipv4.conf.【网卡名】.arp_ignore=1
    net.ipv4.conf.【网卡名】.arp_announce=2
    EOF
    sysctl -p
    
    如果是ubuntu,可以设置开机启动的网络配置脚本
    cat /etc/profile.d/at_restart.sh
    #/bin/sh
    ifconfig lo:0 【vip】 netmask 255.255.255.255 broadcast 【vip】
    
  2. 在作为DS服务器上安装keepalived(同上)

(2)配置

global_defs {
    router_id 【本机hostname】
}
#vrrp_script chk_443_port {
    #script \"/etc/keepalived/nginx_check.sh\"
#    script \"</dev/tcp/127.0.0.1/443\"
#    interval 2 #检查脚本的频率,单位(秒)
#    fall 2
#    rise 2
#}
vrrp_instance VI_1 {
    state BACKUP【非抢占都backup,抢占Master/backup】
    interface ens192【参与vrrp的本机网卡】
    virtual_router_id 93
    priority 100
    nopreempt【非抢占必配】
    authentication {
        auth_type PASS
        auth_pass 123456【路由号验证】
    }
    virtual_ipaddress {
        【VIP】
    }
#    track_script {
#        chk_443_port
#    }
}
virtual_server 【VIP】 【port】 {
  delay_loop 3
  lb_algo lc
  lb_kind DR
  nat_mask 255.255.255.0
  persistence_timeout 0
  protocol TCP
  real_server 【server1】 【port】 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 【port】
        }
    }
   real_server 【server2】 【port】 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 【port】
        }
     }
}

注意事项:

  1. 网络服务重启后keepalived也需要重启。
  2. persistence_timeout 0会话保持,某ip在这个时间段内全部发到同一个真实服务器,在压测时需要特别关注。
  3. 查看数据转发情况ipvsadm -l --statsipvsadm -L -n -c
  4. 均衡算法lb_algo lc解释:
    • rr 轮叫调度(Round Robin),这种算法是最简单的,不管RS的后端配置和处理能力,均衡的分发下去
    • wrr 加权轮叫(Weight Round Robin),比上面的算法多了一个权重的概念,可以给RS设置权重,权重越高,那么分发的请求数越多,权重取值范围0-100
    • LC最少链接(least connection),这个算法会根据后端的RS的连接数来决定把请求发给谁,比如RS1连接数比RS2连接数少,那么请求优先发给RS1
    • WLC 加权最少链接(Weighted Least Connecttion)比最少链接算法多了一个权重
    • Dh 目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
    • SH 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
    • lblc 最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:48:04  更:2022-09-04 01:51:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:57:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码