Centos7-Lvs+Keepalived架构

LVS+Keepalived

介绍

1、  LVS

LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。

2、  keepalived

Keepalived 是运行在lvs 之上,是一个用于做双机热备(HA)的软件,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性。

运行原理

keepalived通过选举(看服务器设置的权重)挑选出一台热备服务器做MASTER机器,MASTER机器会被分配到一个指定的虚拟ip,外部程序可通过该ip访问这台服务器,如果这台服务器出现故障(断网,重启,或者本机器上的keepalived crash等),keepalived会从其他的备份机器上重选(还是看服务器设置的权重)一台机器做MASTER并分配同样的虚拟IP,充当前一台MASTER的角色。

选举策略

选举策略是根据VRRP协议,完全按照权重大小,权重最大(0~255)的是MASTER机器,下面几种情况会触发选举。

1. keepalived启动的时候;

2. master服务器出现故障(断网,重启,或者本机器上的keepalived crash等,而本机器上其他应用程序crash不算);

3.有新的备份服务器加入且权重最大。

配置实例

lvs_vip:172.16.10.188

lvs1+keepalived主:172.16.10.102

lvs2+keepalived备:172.16.10.142

nginx1:172.16.10.162

nginx2:172.16.10.167

安装ipvsadm和keepalived

# yum -y install ipvsadm keepalived

修改keepalived主的配置

# vim/etc/keepalived/keepalived.conf
global_defs{
notification_email{
               ******@163.com         #报警接收人,多个写多行
        }
        notification_email_from ******@163.com    #报警发件人
        smtp_server smtp.163.com   #发送email时使用的smtp服务器地址
        smtp_connect_timeout 30   #smtp超时时间
        router_id LVS1      #表示运行keepalived服务器的一个标识,发邮件时显示在邮件主题的信息
}
#不使用SYNCGroup的话,如果路由有2个网段,一个内网,一个外网,每个网段开启一个VRRP实例,假设VRRP配置为检查内网,那么当外网出现问题时,VRRP会认为自己是健康的,则不会发送Master和Backup的切换,从而导致问题,SyncGroup可以把两个实例都放入SyncGroup,这样的话,Group里任何一个实例出现问题都会发生切换
vrrp_sync_grouptest {     
group{
        loadbalance
}
}
 
vrrp_instanceloadbalance {
        state MASTER          #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
        interface eno16777736   #指定HA监测网络的接口
        lvs_sync_daemon_inteface eno16777736    #负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线
        virtual_router_id 38    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
        priority 100    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
        advert_int 5   #定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication{
        auth_type PASS   #设置验证类型,主要有PASS和AH两种
        auth_pass 1111   #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress{
        172.16.10.188   #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
}
}
 
virtual_server172.16.10.188 80 {     #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
        delay_loop 6    #设置运行情况检查时间,单位是秒
        lb_algo rr    #设置负载调度算法,这里设置为rr,即轮询算法
        lb_kind DR   #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
        #persistence_timeout 20   #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
        protocol TCP   #指定转发协议类型,有TCP和UDP两种
        real_server 172.16.10.162 80 {    #配置服务节点1,需要指定realserver的真实IP地址和端口,IP与端口之间用空格隔开
        weight1   #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高
        TCP_CHECK {
        connect_timeout 3   #表示3秒无响应超时
        nb_get_retry 3   #表示重试次数
        delay_before_retry 3  #表示重试间隔
}
}
        real_server 172.16.10.167 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
}
}
}
 
virtual_server172.16.10.188 443 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        #persistence_timeout 20
        protocol TCP
        real_server 172.16.10.162 443 {
        weight 1
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
}
}
        real_server 172.16.10.167 443 {
        weight 1
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
}
}
}

修改keepalived备的配置

基本都和主一样,只需要修改几处

stateBACKUP
priority99
router_idLVS2

在两台lvs服务器上开启路由转发功能

# vim/etc/sysctl.conf
net.ipv4.ip_forward= 1
# sysctl-p

添加realserver ip地址

# ipvsadm-A -t 172.16.10.188:80 -s rr
# ipvsadm-a -t 172.16.10.188:80 -r 172.16.10.162:80 -w 1
# ipvsadm-a -t 172.16.10.188:80 -r 172.16.10.167:80 -w 1
# ipvsadm-A -t 172.16.10.188:443 -s rr
# ipvsadm-a -t 172.16.10.188:443 -r 172.16.10.162:443 -w 1
# ipvsadm-a -t 172.16.10.188:443 -r 172.16.10.167:443 -w 1

查看

# ipvsadm-l

启动服务

# systemctlstart keepalived
# systemctlenable keepalived

ipvsadm脚本

# vim /etc/init.d/ipvsadm
#!/bin/bash
#
#LVS script for VS/DR
#
#./etc/rc.d/init.d/functions
#
VIP=172.16.10.188
RIP1=172.16.10.162
RIP2=172.16.10.167
PORT1=80
PORT2=443
Algorithm=rr
Weight=1
#
case"$1" in
start)
#Since this is the Director we must be able to forward packets
#只是临时修改,重启机器或重启网卡失效
  echo 1 > /proc/sys/net/ipv4/ip_forward
#Clear all ipvsadm rules/services.
  /usr/sbin/ipvsadm -C
#Add an IP virtual service for VIP 
  /usr/sbin/ipvsadm -A -t $VIP:$PORT1 -s$Algorithm
#Now direct packets for this VIP to
#the real server IP (RIP) inside the cluster
  /usr/sbin/ipvsadm -a -t $VIP:$PORT1 -r $RIP1-g -w $Weight
  /usr/sbin/ipvsadm -a -t $VIP:$PORT1 -r $RIP2-g -w $Weight
#Add an IP virtual service for VIP 
  /usr/sbin/ipvsadm -A -t $VIP:$PORT2 -s$Algorithm
#Now direct packets for this VIP to
#the real server IP (RIP) inside the cluster
  /usr/sbin/ipvsadm -a -t $VIP:$PORT2 -r $RIP1-g -w $Weight
  /usr/sbin/ipvsadm -a -t $VIP:$PORT2 -r $RIP2-g -w $Weight
  /bin/touch /var/lock/subsys/ipvsadm &>/dev/null
;;
stop)
#Stop forwarding packets
  echo 0 > /proc/sys/net/ipv4/ip_forward
#Reset ipvsadm
  /usr/sbin/ipvsadm -C
# Bringdown the VIP interface
  /usr/sbin/route del $VIP
  /bin/rm -f /var/lock/subsys/ipvsadm
  echo "ipvs is stopped..."
;;
status)
  if [ ! -e /var/lock/subsys/ipvsadm ]; then
    echo "ipvsadm is stopped ..."
  else
    echo "ipvs is running ..."
    ipvsadm -L -n
  fi
;;
*)
  echo "Usage: $0{start|stop|status}"
;;
esac

添加开机启动

# vim/etc/rc.d/rc.local
/etc/init.d/ipvsadmstart
# chmod+x /etc/rc.d/rc.loca

relearserver端配置(nginx)

修改内核参数

# vim/etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.ip_forward=0
# sysctl -p

配置虚拟IP地址

临时添加

# ifconfiglo:0 172.16.10.188 netmask 255.255.255.255 broadcast 172.16.10.188

永久添加

# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.10.188
NETMASK=255.255.255.255

配置路由

临时添加

# routeadd -host 172.16.10.188 dev lo:0

永久添加

# vim /etc/sysconfig/network-scripts/route-lo:0
172.16.10.188dev lo:0

到此配置完成

测试

停止keepalived主,查看vip是否漂移到备,并测试是否可以正常访问

查看日志信息

# tail-f /var/log/messages

查看LVS当前设置

# watch ipvsadm -Ln

查看转发情况

# watch ipvsadm -Lnc

在测试中我发现,使用rr算法,一个用户的请求会被分发到两台nginx上,这并不是我想要的结果,大概看了一下lvs的八种算法,最后将rr替换为了sh(源地址散列),具体介绍自行百度,之后,同一个用户的请求可以被分发在同一台nginx上面了。

但是我又发现keepalived配置中有调度算法和权重,ipvsadm中也有调度算法和权重,这是不是会有冲突呢,会使用谁的算法。

经过测试,手动配置完keepalived和ipvsadm之后,例如:keepalived算法为sh,权重为3。ipvsadm算法为rr,权重为1。启动keepalived,ipvsadm-l 查看,发现算法替换为sh,权重为3。

手动将ipvsadm的配置修改,算法为rr,权重为1,keepalived不重启,ipvsadm-l 查看,配置生效,经测试,使用的是手动改动过后的配置。

所以这两个的配置要一样。

LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义

arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 
4-7 - 保留未使用 
8 -不回应所有(本地地址)的arp查询
arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

ipvsadm参数详解

# ipvsadm-h
ipvsadmv1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
  ipvsadm -A|E -t|u|f service-address [-sscheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-bsched-flags]
  ipvsadm -D -t|u|f service-address
  ipvsadm -C
  ipvsadm -R
  ipvsadm -S [-n]
  ipvsadm -a|e -t|u|f service-address -rserver-address [options]
  ipvsadm -d -t|u|f service-address -rserver-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
 
Options:
  --tcp-service -t service-address  service-address is host[:port]
  --udp-service -u service-address  service-address is host[:port]
  --fwmark-service  -f fwmark         fwmark is an integer greater than zero
  --ipv6        -6                   fwmark entryuses IPv6
  --scheduler   -s scheduler         one ofrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                                      thedefault scheduler is wlc.
  --pe            engine              alternate persistence engine maybe sip,
                                      not setby default.
  --persistent  -p [timeout]         persistentservice
  --netmask     -M netmask           persistentgranularity mask
  --real-server -r server-address   server-address is host (and port)
  --gatewaying  -g                   gatewaying(direct routing) (default)
  --ipip        -i                   ipip encapsulation (tunneling)
  --masquerading -m                   masquerading (NAT)
  --weight      -w weight            capacity ofreal server
  --u-threshold -x uthreshold        upperthreshold of connections
  --l-threshold -y lthreshold        lowerthreshold of connections
  --mcast-interface interface         multicast interface for connectionsync
  --syncid sid                        syncid for connectionsync (default=255)
  --connection  -c                   output ofcurrent IPVS connections
  --timeout                           output of timeout(tcp tcpfin udp)
  --daemon                            output of daemoninformation
  --stats                             output ofstatistics information
  --rate                              output of rateinformation
  --exact                             expand numbers(display exact values)
  --thresholds                        output of thresholdsinformation
  --persistent-conn                   output of persistentconnection info
  --nosort                            disable sortingoutput of service/server entries
  --sort                              does nothing, forbackwards compatibility
  --ops         -o                   one-packet scheduling
  --numeric     -n                   numericoutput of addresses and ports
  --sched-flags -b flags             schedulerflags (comma-separated)
 
 
 --add-service     -A        add virtual service with option  
  在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器  
  --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   service-address is host[:port]  
  说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]  
  --udp-service  -u service-address   service-address is host[:port]  
  说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]  
  --fwmark-service  -f fwmark         fwmark is an integer greater than zero  
  说明是经过iptables 标记过的服务类型。  
  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.  
  使用的调度算法,有这样几个选项,默认的调度算法是: wlc.  
  --persistent   -p [timeout]         persistent service  
  持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒  
  --netmask      -M netmask           persistent granularity mask  
    
  --real-server  -r server-address    server-address is host (and port)  
  真实的服务器[Real-Server:port]  
  --gatewaying   -g                   gatewaying (direct routing) (default)  
  指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式  
  --ipip         -i                   ipip encapsulation (tunneling)  
  指定LVS 的工作模式为隧道模式  
  --masquerading -m                   masquerading (NAT)  
  指定LVS 的工作模式为NAT 模式  
  --weight       -w weight            capacity of real server  
  真实服务器的权值  
  --u-threshold  -x uthreshold        upper threshold of connections  
    
  --l-threshold  -y lthreshold        lower threshold of connections  
   
  --mcast-interface interface         multicast interface for connection sync  
  指定组播的同步接口  
  --syncid sid                        syncid for connection sync (default=255)  
   
  --connection   -c                   output of current IPVS connections  
  显示LVS 目前的连接 如:ipvsadm -L -c  
  --timeout                           output of timeout (tcp tcpfin udp)  
  显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout  
  --daemon                            output of daemon information  
  显示同步守护进程状态  
  --stats                             output of statistics information  
  显示统计信息  
  --rate                              output of rate information  
  显示速率信息  
  --thresholds                        output of thresholds information  
    
  --persistent-conn                   output of persistent connection info  
    
  --sort                              sorting output of service/server entries  
   对虚拟服务器和真实服务器排序输出  
  --ops          -O                   one-packet scheduling  
    
  --numeric      -n                   numeric output of addresses and ports  
  输出IP 地址和端口的数字形式
时间: 2024-10-06 22:39:55

Centos7-Lvs+Keepalived架构的相关文章

centos7+LVS+KeepAlived实现Nginx服务的高可用性

centos7+LVS+KeepAlived实现Nginx服务的高可用性 说到服务的高可用性,我们前面文章介绍了很多了,在linux下实现的方式有很多种,在此主要介绍Centos7+LVS+Keepalived实现Nginx服务的高可用性,具体见下: 环境介绍 hostname:Nginx01 IP:192.168.6.10 Role:Nginx Server hostname:Nginx02 IP: 192.168.6.11 Role:Nginx Server hostname:LVS01 I

Centos7+LVS+Keepalived实现Exchange2016高可用性

说到Exchange的话题,相信管理员都很敏感,为什么这么说呢,因为作为一个Exchange管理员的话,Exchange的服务运行状态是一个管理员最关心的问题,只要提高Exchange高可用性,管理员的工作相对比较轻松一点,如果Exchange不做高可用的话,只要其中一个服务有问题就会导致所有相关用户服务不可用,当然说到这,我们再说说Exchange2016的高可用性配置介绍,我们前面文章中也有介绍到,Exchange2016已经将角色集中到了一个Mailbox功能上,只要发布一个Mailbox

Lvs+keepalived架构简单案列

Lvs(DR) +keepalived的架构部署 IP地址规划: 1.环境的大家和软件的安装 检查Linux内核版本是否支持ipvsadm模块 (1)源码编译安装 wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz uname -r                 

LVS+OSPF 架构(转)

http://blog.51cto.com/pmghong/1399385 LVS 和 LVS+keepalived 这两种架构在平时听得多了,最近才接触到另外一个架构LVS+OSPF.这个架构实际上是LVS+Keepalived 的升级版本,我们所知道LVS+Keepalived 架构是这样子的: 随着业务的扩展,我们可以对web服务器做水平扩展,以此来提高系统的处理能力.但是我们会发现,两台Director间始终只有一台是处于工作状态,而另一台处于不工作的备份状态,即使访问的流量再大,同时也

CentOS7 搭建LVS+keepalived负载均衡

CentOS7 搭建LVS+keepalived负载均衡(一) 本文中只涉及一台负载均衡服务器,和两台真实服务器,主要是初步体验负载均衡:实际的环境中,lvs和keepalived一起用才是黄金搭档,下篇将继续讲述lvs+keepalived的搭建过程 一.本次搭建的系统架构图- 虚拟机:VirtualBox- virtaulbox host-only的IP地址:192.168.137.1- 所用系统:CentOS7- 真实web服务器(RS1):192.168.137.5- 真实web服务器(

LVS+Keepalived负载均衡双主架构全攻略

二.LVS+Keepalived负载均衡双主互备架构 IP信息清单:名称 IP LVS-DR-Master 192.168.2.98 LVS-DR-Backup 192.168.2.99 LVS-DR-VIP1 192.168.2.100 LVS-DR-VIP2 192.168.2.105 Realserver01 192.168.2.101 Realserver02 192.168.2.102 Realserver03 192.168.2.103 Realserver04 192.168.2.

架构设计:负载均衡层设计方案(7)——LVS + Keepalived + Nginx安装及配置

1.概述 上篇文章<架构设计:负载均衡层设计方案(6)--Nginx + Keepalived构建高可用的负载层>(http://blog.csdn.net/yinwenjie/article/details/47130609) 我们解说了Nginx的故障切换.而且承诺各位读者会尽快解说 LVS + Keepalived + Nginx的安装和配置.在中间由于工作的原因.我又插写了三篇关于zookeeper的原理使用的文章.今天这边文章我们回归主题.为各位读者解说LVS + Keepalive

高性能业务架构解决方案(LVS+Keepalived)

高性能业务架构解决方案(LVS+Keepalived) 一. 概况2 1.1 应用场景2 1.2 LVS/Nginx/HAProxy特点3 二. 相关理论4 2.1 Keepalived工作原理4 2.2 LVS工作原理4 三. 架构拓扑5 四. 资源规划5 五. 实施部署5 5.1初始化配置6 5.2 LVS配置6 5.3 Keepalived部署7 5.3.1 Keepalived的安装8 5.3.2 配置keepalived8 5.4 后端WEB服务器10 5.5 共享存储11 5.6 测

LVS+Keepalived+Squid+Nginx+MySQL主从 高性能集群架构配置

原文地址:LVS+Keepalived+Squid+Nginx+MySQL主从 高性能集群架构配置 作者:gron 原文链接:http://www.linuxidc.com/Linux/2012-07/65547.htm 架构图 先进行优化 vi /etc/sysctl.conf   # 编辑sysctl.conf文件添加以下内容 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 65536 4194304 net.c

LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor=50 worker.tomcat.cachesize=10 worker.tomcat.cache_timeout=600 worker.tomcat.socket_keepalive=1 worker.tomcat.socket_timeout=300 Linux内核优化: vi /etc/sysctl.conf   # 编辑sysctl.conf文件添加以下内容net.