[lvs说明]
官方文档:http://www.linuxvirtualserver.org/zh
[lvs准备]
[root@ceshiapp ~]# lsmod | grep ip_vs
[root@ceshiapp ~]#
lsmod是检查内核运行状况,表明没有运行ipvsadm
[root@ceshiapp ~]# uname -r
3.10.0-327.el7.x86_64
[root@ceshiapp ~]# ln -s /usr/src/kernels/3.10.0-327.13.1.el7.x86_64/ /usr/src/linux
注意:1.lvs安装一定要设定这个软连接,否则编译的时候会报错。
2.在/usr/src/kernel/下没有内核版本信息,则需要安装kernel-devel包,并且内核信息一定跟uname -r 对应。
3.编译安装前 yum install -y libnl* popt*
[lvs安装]
[root@ceshiapp ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
CentOS-5.x版本的推荐安装ipvsadm-1.24版本。
CentOS-6.x版本的推荐安装ipvsadm-1.26版本。
这里在CentOS-7.x下就下载最新的一个版本
[root@ceshiapp srv]# tar xf ipvsadm-1.26.tar.gz
[root@ceshiapp ipvsadm-1.26]# make
[root@ceshiapp ipvsadm-1.26]# make install
编译安装,如果失败,缺包就yum install -y libnl* popt*;
注意此时在lsmod | grep ip_vs 依旧是没有的,因为ipvsadm并没有运行
[root@ceshiapp ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@ceshiapp ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs 140944 0
nf_conntrack 105745 1 ip_vs
libcrc32c 12644 2 xfs,ip_vs
ipvsadm运行接下来配置。
[lvs配置]
lvs配置主要用ipvsadm管理,这里以DR模式为例子设置lvs
[ipvsadm参数说明]
命令选项解释说明:
Commands: |
||
命令格式有长的短的,两者都被允许使用 |
||
长选项 |
短选项 |
解释说明 |
--add-service |
-A |
add virtual service with options 在内核的虚拟服务器表中添加一条心的虚拟服务器记录。也就是增加一个服务器,可以说是添加一个VIP。 |
--edit-service |
-E |
edit virtual service with options 编辑虚拟服务器记录。 |
--delete-service |
-D |
delete virtual service 删除一条虚拟服务器记录。 |
--clear |
-C |
clear the whole table 清空内核虚拟服务器表中的所有记录。 |
--restore |
-R |
restore rules from stdin 恢复虚拟服务器规则。 |
--save |
-S |
save rules to stdout 保存虚拟服务器规则,输出为R选项可读的格式 |
--add-server |
-a |
add real server with options 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器。 |
--edit-server |
-e |
edit real server with options 编辑一条虚拟服务器记录中的某条真实服务器记录。 |
--delete-server |
-d |
delete real server 删除一条虚拟服务器记录中的某条真实服务器记录。 |
--list |
-L|-l |
list the table 显示内核虚拟服务器列表 |
--zero |
-Z |
zero counters in a service or all services 虚拟服务器计数器清零。 |
--set tcp tcpfin udp |
set connection timeout values 设置连接超时 |
|
--start-daemon |
start connection sync daemon 启动同步守护进程。他后面可以是master或backup,用来说明LVS Router是master或是backup。在这个功能上也可以采用keepalived的VRRP功能。 |
|
--stop-daemon |
stop connection sync daemon 停止同步守护进程 |
|
--help |
-h |
display this help message 显示帮助信息 |
Options: |
||
--tcp-service |
-t |
service-address is host[:port] 说明虚拟服务器提供的是tcp的服务[vip:port]or [ip:port] |
--udp-service |
-u |
service-address is host[:port] 说明虚拟服务器提供的是udp的服务 |
--fwmark-service |
-f |
fwmark is an integer greater than zero 说明是经过iptables标记过的服务类型 |
--ipv6 |
-6 |
fwmark entry uses IPv6 使用ipv6 |
--scheduler |
-s |
one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc. 使用的调度算法,默认的算法是wlc。 |
--pe |
engine |
alternate persistence engine may be sip,not set by default.
|
--persistent
|
-p |
[timeout]persistent service 持久温度的服务。意思是同一个客户多次访请求被同一台RS节点处理。默认300秒 |
--netmask |
-M |
[netmask]persistent granularity mask |
--real-server |
-r |
server-address is host (and port) 真实服务器 |
--gatewaying |
-g |
gatewaying (direct routing) (default) DR模式,也是默认的模式 |
--ipip |
-i |
ipip encapsulation (tunneling) TUN模式 |
--masquerading |
-m |
masquerading (NAT). NAT模式 |
--weight |
capacity of real server 真实服务器的权值 |
|
--u-threshold |
-x uthreshold upper threshold of connections 增加持久连接数 |
|
--l-threshold |
-y lthreshold lower threshold of connections 降低持久连接数 |
|
--mcast-interface |
multicast interface for connection sync 指定组 |
|
--syncid sid |
syncid for connection sync (default=255) |
|
--connection |
-c |
output of current IPVS connections 显示IPVS连接 |
--timeout |
output of timeout(tcp tcpfin udp) 显示超时信息 |
|
--daemon |
output of daemon information |
|
--stats |
output of statistics information 显示统计信息 |
|
--rate |
output of rate information 显示速率信息 |
|
--exact |
expand numbers (display exact values) |
|
--thresholds |
output of thresholds information 显示超时时间信息 |
|
--persistent-conn |
output of persistent connection info 显示持久连接信息 |
|
--nosort |
disable sorting output of service/server entries |
|
--sort |
does nothing, for backwards compatibility 后台做处理 |
|
--ops |
-o |
one-packet scheduling 一个包 |
--numeric |
-n |
numeric output of addresses and ports 以数字形式输出地址和端口 |
[ipvsadm使用说明]
Usage:
① ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
这里的t|u|f 表示tcp、udp、iptables标记,下面与这里一致
[root@ceshiapp lvs]# ipvsadm -A -t 192.168.131.200:80 -s wlc
[root@ceshiapp lvs]# ipvsadm -E -t 192.168.131.200:80 -s wwc
② ipvsadm -D -t|u|f service-address
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
[root@ceshiapp lvs]# ipvsadm -D -t 192.168.131.200:80
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
③ ipvsadm -C
清除所有规则,注意是所有,与iptables -F功能类似
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
[root@ceshiapp lvs]# ipvsadm -C
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
④ ipvsadm -R
载入保存在文件中的规则
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@ceshiapp lvs]# ipvsadm -R < a
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
⑤ ipvsadm -S [-n]
保存规则到指定文件
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
[root@ceshiapp lvs]# > a
[root@ceshiapp lvs]# cat a
[root@ceshiapp lvs]# ipvsadm -S > a
[root@ceshiapp lvs]# cat a
-A -t 192.168.131.200:http -s wlc
⑥ ipvsadm -a|e -t|u|f service-address -r server-address [options]
添加RS节点。-a为添加,-e为编辑,与-E类似这里就不对-e进行专门的说明了。
[root@ceshiapp lvs]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.133 -g -w 5
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
-> 192.168.131.133:http Route 5 0 0
⑦ ipvsadm -d -t|u|f service-address -r server-address
这里表示删除一个RS节点。
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
-> 192.168.131.133:http Route 5 0 0
[root@ceshiapp lvs]# ipvsadm -d -t 192.168.131.200:80 -r 192.168.131.133
[root@ceshiapp lvs]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:http wlc
⑧ ipvsadm -L|l [options]
显示虚拟服务器信息
常用的选项[options]:
-n 数字格式显示主机地址和端口
--stats 统计数据
--rate 速率
--timeout 显示tcp、tcpfin、udp的会话超时时长
-c 显示当前ipvs连接情况.
⑨ ipvsadm -Z [-t|u|f service-address]
⑩ ipvsadm --set tcp tcpfin udp
设置tcp、tcpfin、udp的超时时间
11 ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
12 ipvsadm --stop-daemon state
13 ipvsadm -h
查看ipvsadm的帮助信息
[lvs实战]
这里以DR模式为例子实际配置集群。
DR模式数据传输图:
① 配置DNS
按照实际的配置,这里会涉及到DNS解析的问题。一般会自建立DNS服务器或者购买域名,由于时间关系,这里提及一下。之后的访问以IP为主。
② 配置LVS虚拟IP VIP
[root@ceshiapp lvs]# ifconfig eno16777736:0 192.168.131.200/24 up
[root@ceshiapp lvs]# ifconfig
eno16777736:0: flags=4163
inet 192.168.131.200 netmask 255.255.255.0 broadcast 192.168.131.255
ether 00:0c:29:68:85:ca txqueuelen 1000 (Ethernet)
#特别提示:ifconfig eno16777736:0 192.168.131.200 netmask 255.255.255.0 up或或者网上也有添加主机路由的方法
route add -host 192.168.131.200 dev eno16777736
Ping通,说明配置OK了。
① 手工添加2台RS
服务端配置:
[root@ceshiapp lvs]# ipvsadm -C
[root@ceshiapp lvs]# ipvsadm --set 30 5 60
[root@ceshiapp lvs]# ipvsadm -A -t 192.168.131.200:80 -s rr -p 20
[root@ceshiapp lvs]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.133 -g -w 3
[root@ceshiapp lvs]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.135 -g -w 3
[root@ceshiapp lvs]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.131.200:80 rr persistent 20
-> 192.168.131.133:80 Route 3 0 0
-> 192.168.131.135:80 Route 3 0 0
RS配置:
[root@ceshiapp_master ~]# ifconfig lo:0 192.168.131.200/32 up
route add -host 192.168.131.200 dev lo
ARP协议是一种地址解析协议,在LVS-DR模式中,负载均衡服务器与真实服务器在同一个局域网内,所以必须要抑制真实服务器的ARP广播,不然会导致用户无法访问,造成严重的后果。
① 抑制ARP
抑制方法如下:
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
arp_ignore: 定义对目标地址为本地的IP的ARP询问不同的应答模式;
0(默认值):只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标地址配置在到达的接口上的时候,才给予响应;DR模型使用;
2:仅响应目标IP地址是来访问网络接口本地地址的ARP查询请求,且IP必须在该网络接口的子网段内;
3:不回应改网络界面的ARP请求,而只对设置的唯一和连接地址做回应;
4-7:保留未使用;
8:不回应所有。
arp_announce:对网络接口上,本地IP地址的发出的ARP回应做出相应级别的限制;
0(默认):将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;DR模型使用
② 测试LVS服务的转发
首先在客户端浏览器访问RS地址是否正常,然后访问DR的VIP地址,多次测试出现不同的结果说明LVS服务正常。
提示:测试过程中,会话保持的时间,浏览器缓存等可能会影响测试。
③ ipvsadm生产环境常用命令组合
ipvsadm -Ln –stats
ipvsadm -Lnc
ipvsadm -Ln --thresholds
ipvsadm -Ln --timeout
[keepalived+lvs负载均衡及高可用服务]
KeepAlived起初是专门为LVS设计的,专门用来监控LVS集群系统服务节点的状态,后来加入了VRRP的功能,因此除了LVS服务,也可以作为其他服务(nginx,haproxy)的高可用软件,keepalived的主要功能有2个:healthcheck健康检查 & failover失败接管。
VRRP协议,全程Virtual Router Redundancy Protocol,中文名,虚拟路由器冗余协议,VRRP的出现就是为了解决静态路由的单点故障,VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器。
[keepalived实战—高可用]
[keepalived安装与配置]
Keepalived官方站点:www.keepalived.org
① 内核的连接
② 下载解压 ./configure 3个Yes make && make install
Use IPVS Framework : No #表示使用IPVS框架
IPVS sync daemon support : No #支持IPVS同步
Use VRRP Framework : Yes # 使用VRRP框架
lvs_sync_daemon_interface
编译的时候出现3个或者以上的Yes说明是OK的。高版本的keepalived编译后出现多个Yes。本人这里实用CentOS7编译安装keepalived一直出现各种内核编译报错的问题,目前还没有解决,因此这里用理论点的知识说明一下keepalived高可用以及与lvs的整合。
③ 关于keepalived日志的问题
keepalived日志一般在/var/log/messages里面,但是messages里面整个系统的日志都在难免查看的时候会有些不方便,因此这里可以到系统日志设置
目录在/etc/rsyslog.conf 中添加local0.* /var/log/keepalived.log
*表示keepalived的所有日志,重启服务之后keepalived的日志就在你指定的目录/var/log/keepalived.log中了。
keepalived单实例配置
! Configuration File for keepalived
global_defs {
notification_email {
XXX@qq.com #接受的邮件地址
}
notification_email_from [email protected] #发送地址
smtp_server smtp.qq.com#smtp服务器
smtp_connect_timeout 30 #连接超时时间
router_id LVS_7 # 路由id,这是一个全局设定,定义该设备的一个名称
}
上述这些配置是配置发生故障时的通知对象以及设备的标识,但是基本上我们会通话其他手段去监控keepalived这个软件。
vrrp_instance VI_1 { #第一个实例
state MASTER #名称master 主 如果是备的话 填BACKUP
interface eth0 #网络接口
virtual_router_id 55 #虚拟路由IP,主备必须一致。用来区分多实例的组播。
priority 150 # 权值吧。主的要比备的高。 算一种竞争机制,判断谁是主
advert_int 1 # 健康检查时间 单位是秒
authentication {#认证区域
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.131.200/24 #VIP 虚拟IP
}
}
这里再贴出来BACKUP的配置信息,可以对比一下:
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server smtp.qq.com
smtp_connect_timeout 30
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.131.200/24
}
}
如果配置多实例可以与上述实例的配置文件相似,就是再添加一个实例,对应的地方改动一下,尤其是virtual_router_id要不同,否则keepalived会报错。
[keepalived+lvs]
上面已经实现了lvs和keepalived,这里来说明一下keepalived是如何像ipvsadm一样来管理lvs的。
下面贴上配置文件来说明:
Virtual_server 192.168.131.200 80 {
Delay_loop 6
Lb_algo wrr
Lb_kind DR
Net_mask 255.255.255.0
Persistence_timeout 300
Protocol TCP
# ipvsadm -A -t 192.168.131.200:80 -s wrr -p 300 -g
Real_server 192.168.131.131 80 {
Weight 1
Tcp_check{
Connect_timeout 8
Nb_get_retry 3 #延迟重试的
Delay_before_retry 3
Connect_port 80
}
}
}
#ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.131 -g -w 1