设为首页 收藏本站
查看: 967|回复: 0

[经验分享] keepalived+lvs实现高可用负载均衡集群

[复制链接]

尚未签到

发表于 2018-12-31 09:14:34 | 显示全部楼层 |阅读模式
LVS实战篇

1 环境准备
1.1 系统环境
1.1.1 系统版本
[root@lb01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@lb01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@lb01 ~]# uname -m
x86_641.1.2 关闭安全机制
[root@lb01 ~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/sysconfig/selinux
[root@lb01 ~]# setenforce 0
[root@lb01 ~]# /etc/init.d/iptables stop1.1.3 更换yum源并添加epel
[root@lb01 ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[root@lb01 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
[root@lb01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo1.2 主机及IP地址规划
主机名

IP地址

说明

lb01

10.0.0.5

负载1

lb02

10.0.0.6

负载2

web02

10.0.0.7

web服务1

web01

10.0.0.8

web服务2

2 安装ipvsadm
2.1 yum安装
[root@lb01 ~]# yum install -y ipvsadm  ==》四台服务器都要执行
[root@web02 ~]# rpm -qa ipvsadm    ==》四台服务器都要执行
ipvsadm-1.26-4.el6.x86_642.2 做软连接并查看是否加载内核模块
[root@lb01 ~]# ln -s /usr/src/kernels/`uname -r` /usr/src/linux ==》只需在负载上执行即可
[root@lb01 ~]# ll /usr/src/
[root@lb01 ~]# lsmod |grep ip_vs ==》四台服务器都要执行
ip_vs                 126705  0
libcrc32c               1246  1 ip_vs
ipv6                  336368  272 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6,ib_ipoib,ib_addr  注意:若用lsmod |graep ip_vs没出现上述内容,则执行ipvsadm或者modprobe ip_vs命令即可 然后在执行lsmod |graep ip_vs即可出现上述内容
2.3 在负载上添加VIP
[root@lb01 ~]# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
或者
[root@lb02 ~]# ifconfig eth0:0 10.0.0.3/24 up2.4 在负载上添加节点
[root@lb01 ~]# ipvsadm -C  ==》清空
[root@lb01 ~]# ipvsadm -A -t 10.0.0.3:80 -s wrr  ==》增加vserver
[root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1 ==》添加节点
[root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
[root@lb01 ~]# ipvsadm --set 30 5 60  ==》优化
[root@lb01 ~]# ipvsadm -Ln  ==》查看
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 wrr
  -> 10.0.0.7:80                  Route   1      0          0        
  -> 10.0.0.8:80                  Route   1      0          02.5 RS上绑定VIP和一直ARP

[root@web01 ~]# ip addr add 10.0.0.3/32 dev lo label lo:0  ==》绑定VIP
或者
[root@web01 ~]# ifconfig lo:0 10.0.0.3/32 up
[root@web01 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  ==》抑制ARP
[root@web01 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@web01 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@web01 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
##
[root@web02 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web02 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@web02 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@web02 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
##
[root@web01 ~]# route add -host 10.0.0.3 lo  ==》增加一条路由 不是必须的

2.6RS上搭建Web服务
  详细搭建过程在前面的nginx基础篇已经介绍过,可以点击下面的连接进行查看
  http://blog.运维网.com/lzhnb/2095335
2.7 测试
  在浏览器中输入10.0.0.3进行访问

  可以在命令行输入下面的命令进行监视
[root@lb01 ~]# watch -n 1 ipvsadm -Ln
Every 1.0s: ipvsadm -Ln                                                                                      Sat May 26 21:15:56 2018
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 wrr
  -> 10.0.0.7:80                  Route   1        1          0
  -> 10.0.0.8:80                  Route   1       2          03 ipvsadm常用参数总结

[root@lb01 ~]# ipvsadm --help
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
  ipvsadm -D -t|u|f service-address
  ipvsadm -C
  ipvsadm -R
  ipvsadm -S [-n]
  ipvsadm -a|e -t|u|f service-address -r server-address [options]
  ipvsadm -d -t|u|f service-address -r server-address
  ipvsadm -L|l [options]
  ipvsadm -Z [-t|u|f service-address]
  ipvsadm --set tcp tcpfin udp
  ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
  ipvsadm --stop-daemon state
  ipvsadm -h
命令:   
允许长或短选项。   
--add-service -A添加具有选项的虚拟服务   
--edit-service -E使用选项编辑虚拟服务   
--delete-service -D删除虚拟服务   
--clear -C清除整个表   
--restore -R从stdin恢复规则   
--save -S将规则保存到stdout   
--add-server -a添加带有选项的实服务器   
--edit-server -e编辑带有选项的实服务器   
--delete-server -d删除真实服务器   
--list -L | -l列出表   
--zero -Z零计数器在服务或所有服务   
--set tcp tcpfin udp设置连接超时值   
--start-daemon启动连接同步守护程序   
--stop-daemon停止连接同步守护程序   
--help -h显示此帮助消息
选项:   
--tcp-service -t service-address service-address是host [:port]   
--udp-service -u service-address service-address是host [:port]   
--fwmark-service -f fwmark fwmark是一个大于零的整数   
--scheduler -s调度程序rr | wrr | lc | wlc | lblc | lblcr | dh | sh | sed | nq默认调度程序是wlc。     
--persistent -p [timeout]持久服务   
--netmask -M netmask持久粒度掩码   
--real-server -r服务器地址服务器地址是主机(和端口)   
--gatewaying -g网关(直接路由)(默认)   
--ipip -i ipip encapsulation(tunneling)   
--masquerading -m伪装(NAT)   
--weight -w实服务器的权重   
--syncid sid syncid用于连接同步(默认值= 255)     
--ipip -i ipip encapsulation(tunneling)   
指定LVS的工作模式为隧道模式   
--masquerading -m伪装(NAT)   
指定LVS的工作模式为NAT模式      
--u-threshold -x连接的阈值上限阈值   
--l-threshold -y lthreshold连接的下限阈值         
--mcast-interface接口用于连接同步的组播接口   
指定组播的同步接口   
--syncid sid syncid用于连接同步(默认值= 255)   
--connection -c当前IPVS连接的输出   
显示LVS目前的连接如:ipvsadm -L -c   
超时输出超时(tcp tcpfin udp)   
显示tcp tcpfin udp的超时值如:ipvsadm -L --timeout   
--daemon输出守护进程信息   
显示同步守护进程状态   
统计信息的统计输出   
显示统计信息   
速率信息的速率输出   
显示速率信息   
阈值输出阈值信息   
   --persistent-conn输出持久连接信息   
服务/服务器条目的排序输出   
对虚拟服务器和真实服务器排序输出   
--ops -O单分组调度        
--numeric -n地址和端口的数字输出   
输出IP地址和端口的数字形式      
-numeric -n输出IP地址和端口的数字形式  
--stat选项是统计自那条转发规则生效以来的包   
Conns(connections scheduled)已经转发过的连接数   
InPkts(incoming packets)入包个数   
OutPkts(outgoing packets)出包个数   
InBytes(传入字节)入流量(字节)      
OutBytes(outgoing bytes)出流量(字节)      
--rate选项是显示速率信息   
CPS(current connection rate)每秒连接数   
InPPS(当前包速率)每秒的入包个数   
OutPPS(当前输出包速率)每秒的出包个数   
InBPS(字节速率)每秒入流量(字节)   
OutBPS(current out byte rate)每秒入流量(字节)

4keepalived+lvs
4.1 安装keepalived服务
[root@lb01 ~]# yum install keepalived -y  ==
》在负载上安装

4.2 配置keepalived
[root@lb01 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
virtual_server 10.0.0.3 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 10.0.0.7 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
    }
}
    real_server 10.0.0.8 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
      }
}
}4.3 RS节点执行下面的脚本
[root@web02 init.d]# cat /etc/init.d/lvs#!/bin/bash
#description Config LVS to realserver lo and apply noarp
#Written by LZH
VIP=10.0.0.3
. /etc/init.d/functions
case "$1" in
        start)
               ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
               #/sbin/route add -host $SNS_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
               sysctl -p >/dev/null 2>&1
               echo "RealServer Start OK"
               ;;
        stop)
               ifconfig lo:0 down
             #  route del $VIP >/dev/null 2>&1
               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 "RealServer Stoped"
               ;;
        *)
               echo "Usage: $0 {start|stop}"
               exit 1
        esac
        exit 0注意需要给该脚本加上可执行权限!!!
[root@web02 init.d]# chmod +x /etc/init.d/lvs  keepalived+lvs 是生产中常用的实现lvs负载均衡的方法
5 lvs故障排错思路
5.1 导致负载不均衡的原因
q  LVS自身的会话保持参数设置(-p 300),优化:大公司常用cookies代替session
q  LVS调度算法设置,如rrwrrwlclc
q  后端RS节点的会话保持参数,如apachekeepalived参数
q  用户发送请求时间短,请求资源的大小
5.2 排错思路
q  调度器上LVS调度规则及IP的正确性
q  RS节点上VIP绑定和arp的抑制检查
  vip绑定处理方案:
  RS绑定的VIP做实时监控
‚  RS绑定的VIP 做成配置文件,/etc/sysconfig/network-scripts/ifcfg-lo:0
  arp抑制处理方案:
  如果是单个VIP,则可以用stop传参设置0
‚  若果RS有多个VIP绑定,即使stop也一定不要设置为0
q  RS节点上自身提供服务的检查(DR不能进行端口转换)
q  利用辅助工具tcpdumpping等进行排查




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657838-1-1.html 上篇帖子: lvs+keepalived 实现高可用 下篇帖子: keepalived+lvs+mysql实现MySQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表