痴心VS绝对 发表于 2018-12-31 09:14:34

keepalived+lvs实现高可用负载均衡集群

LVS实战篇
第1章 环境准备
1.1 系统环境
1.1.1 系统版本
# cat /etc/redhat-release
CentOS release 6.9 (Final)
# uname -r
2.6.32-696.el6.x86_64
# uname -m
x86_641.1.2 关闭安全机制
# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/sysconfig/selinux
# setenforce 0
# /etc/init.d/iptables stop1.1.3 更换yum源并添加epel源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# 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安装
# yum install -y ipvsadm==》四台服务器都要执行
# rpm -qa ipvsadm    ==》四台服务器都要执行
ipvsadm-1.26-4.el6.x86_642.2 做软连接并查看是否加载内核模块
# ln -s /usr/src/kernels/`uname -r` /usr/src/linux ==》只需在负载上执行即可
# ll /usr/src/
# lsmod |grep ip_vs ==》四台服务器都要执行
ip_vs               1267050
libcrc32c               12461 ip_vs
ipv6                  336368272 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
# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
或者
# ifconfig eth0:0 10.0.0.3/24 up2.4 在负载上添加节点
# ipvsadm -C==》清空
# ipvsadm -A -t 10.0.0.3:80 -s wrr==》增加vserver
# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1 ==》添加节点
# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
# ipvsadm --set 30 5 60==》优化
# ipvsadm -Ln==》查看
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP10.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

# ip addr add 10.0.0.3/32 dev lo label lo:0==》绑定VIP
或者
# ifconfig lo:0 10.0.0.3/32 up
# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore==》抑制ARP
# 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
##
# 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
##
# route add -host 10.0.0.3 lo==》增加一条路由 不是必须的

2.6在RS上搭建Web服务
  详细搭建过程在前面的nginx基础篇已经介绍过,可以点击下面的连接进行查看
  http://blog.运维网.com/lzhnb/2095335
2.7 测试
  在浏览器中输入10.0.0.3进行访问
http://s1.运维网.com/images/20180527/1527387693697085.png
  可以在命令行输入下面的命令进行监视
# 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
TCP10.0.0.3:80 wrr
-> 10.0.0.7:80                  Route   1      1          0
-> 10.0.0.8:80                  Route   1       2          0第3章 ipvsadm常用参数总结

# 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 ] [-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
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l
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 持久服务   
--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)每秒入流量(字节)

第4章keepalived+lvs
4.1 安装keepalived服务
# yum install keepalived -y==
》在负载上安装

4.2 配置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节点执行下面的脚本
# 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注意需要给该脚本加上可执行权限!!!
# chmod +x /etc/init.d/lvs  keepalived+lvs 是生产中常用的实现lvs负载均衡的方法
第5章 lvs故障排错思路
5.1 导致负载不均衡的原因
qLVS自身的会话保持参数设置(-p 300),优化:大公司常用cookies代替session
qLVS调度算法设置,如rr、wrr、wlc、lc
q后端RS节点的会话保持参数,如apache的keepalived参数
q用户发送请求时间短,请求资源的大小
5.2 排错思路
q调度器上LVS调度规则及IP的正确性
qRS节点上VIP绑定和arp的抑制检查
  vip绑定处理方案:
对RS绑定的VIP做实时监控
‚把RS绑定的VIP 做成配置文件,/etc/sysconfig/network-scripts/ifcfg-lo:0
  arp抑制处理方案:
如果是单个VIP,则可以用stop传参设置0
‚若果RS有多个VIP绑定,即使stop也一定不要设置为0
qRS节点上自身提供服务的检查(DR不能进行端口转换)
q利用辅助工具tcpdump、ping等进行排查



页: [1]
查看完整版本: keepalived+lvs实现高可用负载均衡集群