LVS+keepalived均衡nginx配置
如果单台LVS发生突发情况,例如宕机、发生不可恢复现象,会导致用户无法访问后端所有的应用程序。避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可以基于LVS+Keepalived实现负载均衡及高可用功能,满足网站7x24小时稳定高效的运行。
Keepalived基于三层检测(IP层,TCP传输层,及应用层),主要用于检测WEB服务器的状态,如果有一台WEB服务器死机,或工作出现故障,Keepalived检测到并将有故障的WEB服务器从系统中剔除;
当后端一台WEB服务器工作正常后Keepalived自动将WEB服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB服务器。
需要注意,如果使用了keepalived.conf配置,就不需要再执行ipvsadm -A命令去添加均衡的realserver命令了,所有的配置都在keepalived.conf里面设置即可
LVS+Keepalived负载均衡高可用集群架构适用于千万级并发网站,在互联网企业得到大力的应用,如下为完整LVS+Keepalived企业级配置方法和步骤:
一、Ipvsadm编译安装
基于yum安装
- yum install -y ipvsadm*
基于源码安装
- wget -c http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
- ln -s /usr/src/kernels/2.6.* /usr/src/linux
- tar -xzf ipvsadm-1.24.tar.gz
- cd ipvsadm-1.24
- make
- make install
二、 Keepalived安装配置
1)keepalive编译安装
yum install -y keepalived*
- cd /usr/src
- wget -c http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
- tar -xzvf keepalived-1.1..tar.gz
- cd keepalived-1.1.
- ./configure
- make && make install
- DIR=/usr/local/
- cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
- cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/
- mkdir -p /etc/keepalived
- cp $DIR/sbin/keepalived /usr/sbin/
2)Master上keepalived.conf配置代码:
- ! Configuration File for keepalived
- global_defs {
- notification_email {
- wgkgood@.com
- }
- notification_email_from wgkgood@.com
- smtp_server 127.0.0.1
- smtp_connect_timeout
- router_id LVS_DEVEL
- }
- vrrp_instance VI_1 {
- state MASTER
- interface ens33
- lvs_sync_daemon_inteface ens33
- virtual_router_id
- priority
- advert_int 5
nopreempt- authentication {
- auth_type PASS
- auth_pass
- }
- virtual_ipaddress {
- 192.168.1.15
- }
- }
- virtual_server 192.168.1.15 {
- delay_loop
- lb_algo rr
- lb_kind DR
- persistence_timeout
- protocol TCP
- real_server 192.168.1.13 {
- weight
- TCP_CHECK {
- connect_timeout
- nb_get_retry
- delay_before_retry
- connect_port
- }
- HTTP_GET {
- url {
- path /index.html
- digest 922fce4cfdadc6a0774b2eb63e5b1e9c
- status_code
- }
- }
- }
- real_server 192.168.1.14 {
- weight
- TCP_CHECK {
- connect_timeout
- nb_get_retry
- delay_before_retry
- connect_port
- }
- HTTP_GET {
- url {
- path /index.html
- digest 99e0f897e1cf8971e3ad95885709a5a0
- status_code
- }
- }
- }
- }
2)Backup上keepalived.conf配置代码:
- ! Configuration File for keepalived
- global_defs {
- notification_email {
- wgkgood@.com
- }
- notification_email_from wgkgood@.com
- smtp_server 127.0.0.1
- smtp_connect_timeout
- router_id LVS_DEVEL
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface ens33
- lvs_sync_daemon_inteface ens33
- virtual_router_id
- priority
- advert_int 5
nopreempt- authentication {
- auth_type PASS
- auth_pass
- }
- virtual_ipaddress {
- 192.168.1.15
- }
- }
- virtual_server 192.168.1.15 {
- delay_loop
- lb_algo rr
- lb_kind DR
- persistence_timeout
- protocol TCP
- real_server 192.168.1.13 {
- weight
- TCP_CHECK {
- connect_timeout
- nb_get_retry
- delay_before_retry
- connect_port
- }
- HTTP_GET {
- url {
- path /index.html
- digest 922fce4cfdadc6a0774b2eb63e5b1e9c
- status_code
- }
- }
- }
- real_server 192.168.1.14 {
- weight
- TCP_CHECK {
- connect_timeout
- nb_get_retry
- delay_before_retry
- connect_port
- }
- HTTP_GET {
- url {
- path /index.html
- digest 99e0f897e1cf8971e3ad95885709a5a0
- status_code
- }
- }
- }
- }
Master Keepalived配置state状态为MASTER,Priority设置100,Backup Keepalived配置state状态为BACKUP,Priority设置90,转发方式为DR直连路由模式,算采用wrr模式,在LVS BACKUP服务器写入如下配置,需要注意的是客户端的配置要修改优先级及状态:
LVS+keepalived负载均衡主备配置完毕,由于LVS采用DR模式,根据DR模式转发原理,需在客户端realserver绑定VIP。
三、LVS DR客户端配置VIP
客户通过浏览器访问director的VIP,director接收请求,将通过相应的转发方式及算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的IP地址不变。Realserver接收请求,并直接响应客户端。
Director与realserver位于同一个物理网络中,当director直接将请求转发给realserver时,如果realserver检测到该请求包目的IP是VIP而并非自己,便会丢弃,而不会响应。
为了解决这个问题,需在所有Realserver上都配上VIP,保证数据包不丢弃,同时由于后端realserver都配置VIP会导致IP冲突,所以需将VIP配置在lo网卡上,这样限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突。 LVS DR客户端启动Realserver.sh脚本内容如下:
- #!/bin/sh
- #LVS Client Server
- VIP=192.168.33.188
- case $ in
- start)
- ifconfig lo: $VIP netmask 255.255.255.255 broadcast $VIP
- /sbin/route add -host $VIP dev lo:
- echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
- echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
- echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
- sysctl -p >/dev/null >&
- echo "RealServer Start OK"
- exit
- ;;
- stop)
- ifconfig lo: down
- route del $VIP >/dev/null >&
- echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
- echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
- echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
- echo "RealServer Stoped OK"
- exit
- ;;
- *)
- echo "Usage: $0 {start|stop}"
- ;;
- esac
四、LVS负载均衡企业实战排错经验
LVS在企业生产环境中如何去排错呢,遇到问题我们该怎么办呢?LVS使用过程中,会遇到很多问题,如下为LVS故障排错思路。
企业网站LVS+Keepalived+Nginx架构中,突然发现网站www.jfedu.net 部分用户访问巨慢,甚至无法访问,这个问题我们该如何定位呢?
1) 客户端ping www.jfedu.net ,通过ping返回域名对应的IP是否正常;
2) 如果无法返回IP,或者响应比较慢,定位DNS或者网络延迟问题,可以通过tracert www.jfedu.net测试客户端本机到服务器的链路延迟;
3)登录LVS服务器,ipvsadm -Ln 查看当前后端web连接信息,显示如下:
- [root@LVS-Master keepalived]# ipvsadm -Ln
- IP Virtual Server version 1.2. (size=)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 192.168.1.10: wlc
- -> 192.168.1.6: Route
- -> 192.168.1.5: Route
- -> 192.168.1.4: Route
通过LVS ipvsadm信息,看到LVS 选择的轮训方式为加权最少连接,而网站也是部分无法访问,猜测是其中一台WEB服务器无法访问或者访问巨慢导致,如果单台WEB异常,为什么LVS+keepalived不能将异常的WEB服务器IP异常均衡列表呢?
查看keepalived.conf负载均衡健康检查配置,部分截图如下:
- real_server 192.168.1.4 {
- weight
- TCP_CHECK {
- connect_timeout
- nb_get_retry
- delay_before_retry
- connect_port
- }
- }
通过配置文件发现LVS默认用的是TCP检测方式,只要80端口能通,请求就会被转发到后端服务器。紧接着在LVS服务器使用wget http://192.168.1.4/ 返回很慢,直至超时,而另外几台Nginx realserver返回正常,查看Nginx 192.168.1.4服务器80端口服务正常启动,所以对于LVS服务器来说是打开的,所以LVS会把请求转发给给它。
为什么部分用户可以访问,有的用户无法访问呢,发现192.168.1.4服务器ifconfig查看IP,但是没有看到VIP地址绑定在lo:0网卡上,经排错由于该服务器被重启,realserver脚本配置VIP异常,启动realserver脚本,网站恢复正常。
为了防止以上突发问题,增加LVS对后端Nginx URL的检测,能访问URL则表示服务正常。 对比之前的检测方式,从单纯的80端口到现在的URL检测,后端如果某台出现502超时错误,keepalived列表会自动踢出异常的realserver,等待后端realserver恢复后自动添加到服务器正常列表。Keepalived基于URL检查代码如下:
- real_server 192.168.1.4 {
- weight
- HTTP_GET {
- url {
- path /monitor/warn.jsp
- status_code
- }
- connect_timeout
- nb_get_retry
- delay_before_retry
- }
- }
LVS+keepalived均衡nginx配置的更多相关文章
- Lvs+Keepalived+Squid+Nginx负载均衡
前言* 随着互联网IT行业的发展,越来越多的企业开始使用开源软件搭建自己的web架构,主流的LVS也得到了广泛的应用,在保证高可用的同时,用户对网站的体验速度也有了很高的要求,这时候需要我们在我们的架 ...
- LVS+keepalived DR模式配置高可用负载均衡集群
实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave 10.0.100.204 WEB1-Tomcat 10.0.2.29 gat ...
- LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案
方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...
- LVS负载均衡简单配置
一.简单介绍 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtu ...
- CentOS7.1下生产环境Keepalived+Nginx配置
CentOS7.1下生产环境Keepalived+Nginx配置 [日期:2015-07-20] 来源:Linux社区 作者:soulful [字体:大 中 小] 注:下文涉及到配置的,如无特别 ...
- 高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
LVS(负载均衡器).Heartbeat.Corosync.Pacemaker.Web高可用集群.MySQL高可用集群.DRDB.iscsi.gfs2.cLVM等,唯一没有讲解的就是L ...
- Mysql双主热备+LVS+Keepalived高可用操作记录
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- Mysql双主热备+LVS+Keepalived高可用部署实施手册
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- 你需要知道的Nginx配置二三事
做服务端开发的,工作中难免会遇到处理Nginx配置相关问题.在配置Nginx时,我一直本着“照葫芦画瓢”的原则,复制已有的配置代码,自己修修改改然后完成配置需求,当有人问起Nginx相关问题时,其实仍 ...
随机推荐
- <%=%>、<%%>、<%@%>、<%#%>的区别
1.<%= %> 里面放变量名,获取后台的变量值,直接输入变量到页面上,里面放的变量名,未经过encode eg: 后台: seession["ab"]=ab; 前台: ...
- out ref params
out的使用 out 能够使我们的函数返回多个类型的值,不再受返回类型的设置: 就是相当于在方法里不仅仅给了一个返回值,被out修饰的参数的值也能带出去: 所以就是说,在方法体内被out修饰的参数,都 ...
- dl learn task
https://deeplearning4j.org/cn/word2vec Task 1 分类http://blog.csdn.net/czs1130/article/details/7071734 ...
- iF.svnadmin 安装遇到的坑
iF.svnadmin 官网:http://svnadmin.insanefactory.com/ 安装配置iF.svnadmin : http://blog.linhere.com/archives ...
- 使用VUE开发微信小程序
使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力: 彻底的组件化开发能力:提高代码复用性完整的 Vue.js 开发体验方便的 Vuex 数据管理方案:方便构建复杂应用快捷的 ...
- Qt之自定义布局管理器(QCardLayout)
简述 手动布局另一种方法是通过继承QLayout类编写自己的布局管理器. 下面我们详细来举一个例子-QCardLayout.它由同名的Java布局管理器启发而来.也被称之为卡片布局,每个项目偏移QLa ...
- 过Hard题目.周末
# Title Editorial Acceptance Difficulty Frequency . 65 Valid Number 12.6% Hard . 126 Word ...
- Mac OS X10.10_xcode6.1_ios8.1环境下,编译lame静态库libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集
近期升级了系统到Mac OS X 10.10 而且更新了XCode6.1和iOS 8.1 之前app用到的libmp3lame.a静态库.也要支持64位的模拟器(x86_64)和64位的真机(arm6 ...
- Mybatis Generator for SQL Server
Mybatis Generator for SQL Server <?xml version="1.0" encoding="UTF-8" ?> & ...
- OCP-1Z0-051-题目解析-第50题
50. SLS is a private synonym for the SH.SALES table. The user SH issues the following command: DRO ...