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]