Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

Centos7-Lvs+Keepalived架构

$
0
0

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/sysct

Viewing all articles
Browse latest Browse all 11063