linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解

关于nginx配置tomcat实现负载均衡可参考http://blog.csdn.net/liqi_q/article/details/78063603

安装jdk可参考:http://blog.csdn.net/liqi_q/article/details/72963947

关于IP直接访问nginx可参考http://blog.csdn.net/liqi_q/article/details/78476787

关于lvs长时间轮询real-server原因可阅读http://www.capjsj.cn/keepalived_lvs_nginx_tomcat.html

在LVS+Keepalived环境里面,lvs主要的工作是提供调度算法,把客户端请求按照需求调度在real服务器,keepalived主要的工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real服务器只负责提供服务。

二、lvs和keepalived的安装

      环境规划

      2*(lvs+keepalived服务器)+n*real-server,一般lvs+keepalived是这样的架构。

      开始安装

1、  下载软件包

http://www.linuxvirtualserver.org/ 下载lvs的软件包

http://www.keepalived.org/ 下载keepalived软件包

2、先编译安装lvs,再安装keepalived,安装lvs需要内核源码

下载lvs源码的时候,一定要选择你内核版本对应的源码包。

# uname  -r
2.6.18-164.el5PAE
#yum install kernel-devel -y  //安装内核源码包
#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  //ipvsadm包就是lvs软件包,别觉得名字不一样
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install

检查lvs是否安装成功:

#ipvsadm //查看是否有输出

#lsmod | grep ip_vs  //如果ipvsadm有输出,那么使用这个命令查看是否加载ip_vs模块,如果加载,那么lvs算安装成功。

2、  编译安装keepalived,一定在安装完lvs以后在安装keepalive

Keeplive的下载地址:http://www.keepalived.org/download.html

wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz //不建议选择最新的版本

1.tar -zxvf keepalived-1.2.2.tar.gz
2.cd keepalived-1.2.2
3。

./configure --prefix=/   
Keepalived version       : 1.1.15
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use LinkWatch            : No
Use Debug flags          : Nod

 

看见如上输入,注意yes和no的值,如果一样,证明配置成功,如果lvs为no,那么证明你的lvs没有安装成功,需要从新安装lvs再安装keepalived。

yum -y install openssl-devel   
4.make && make install
5.cd /etc/keepalived/

三、LVS VS/DR模式搭建

环境介绍

主机IP

角色

安装软件

10.10.10.168

Lvs+keepalived MASTER

Ipvsadm keepalived

10.10.10.169

Lvs+keepalived BACKUP

Ipvsadm keepalived

10.10.10.170

Real server

Lvs_real脚本

10.10.10.171

Real server

Lvs_real脚本

10.10.10.11

VIP

 

注意:所有机器都在一个交换机,并且在一个网段。

1、在168和169上安装ipvsadm和keepalived软件。

2、修改keepalived的配置文件



7.vi keepalived.conf
Keepalive安装默认目录会在less /etc/keepalived/keepalived.conf

[root@test01 nginx]# cat /etc/keepalived/keepalived.conf 
#ConfigurationFile for keepalived  
global_defs {  
        #notification_email {                        ######定义接受邮件的邮箱  
        #       wangjj@hrloo.com  
   #}  
 #notification_email_from jiankong@staff.tuge.com    ######定义发送邮件的邮箱  
 #smtp_server mail.tuge.com  
 #smtp_connect_timeout 10  
}  
vrrp_script check_lvs {                   ######定义监控nginx的脚本  
    script "/root/check_lvs.sh"  
    interval 1                            ######监控时间间隔  
    weight 2                              ######负载参数  
  }  
vrrp_instance vrrptest {                 ######定义vrrptest实例  
   state MASTER                                 ######服务器状态  
   nopreempt                                    #非抢占模式
   interface eth0                     ######使用的接口  
   virtual_router_id 51               ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换  
   priority 150                       ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER  
   advert_int 1                        ######服务器之间的存活检查时间  
   track_script {                              ######执行监控nginx进程的脚本  
      check_lvs  
    }  
   virtual_ipaddress {                         ######虚拟IP地址  
        10.10.10.11
    }  
}
virtual_server 10.10.10.11 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0             //此值为0,主要是为了方便测试,每次刷新页面结果会不一样
    protocol TCP
    real_server 10.10.10.170 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 10.10.10.171 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}  

10.10.10.169:

和10.10.10.168相比,值需要删除state MASTER 和 修改priority的值小于master的。

real server:

在所有real server上添加下面脚本,名执行# cat  /sbin/lvs_real

#!/bin/bash
#description:start realserver
vip=10.10.10.11   #虚拟IP
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start Realserver"
        /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
        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
;;
stop)
        echo "Stop Realserver"
        /sbin/ifconfig lo:0 down
        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 "Usage: $0 (start | stop)"
exit 1
esac

sh /sbin/lvs_real start启动脚本为Real server设置回环共享虚拟IP

执行脚本以后,使用ip add命令查看lo接口是否添加了虚拟ip地址。

3、配置完成以后,开始测试:

在10.10.10.168和10.10.10.169上使用ip add检查,虚拟IP应该配置在168上面。

测试1{主要测试lvs}:访问虚拟IP是否可以访问真实服务器,是否轮询real server

在master上使用 ipvsadm命令查看lvs状态。

[root@test01 nginx]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.10.10.11:http rr
  -> 10.10.10.171:http            Route   1      0          0         
  -> 10.10.10.172:http            Route   1      0          0         
[root@test01 nginx]# 

在客户端访问虚拟IP 10.10.10.11,看是否可以访问。每次刷新,应该会换一个real server。访问数次后,通过ipvsadm观察lvs状态。

测试2{主要测试keepalived}:lvs服务器的HA,当keepalived master挂掉后,keepalived backup会不会接管虚拟IP。

关闭master主机上的keepalived进程。

在backup上ip add查看是否添加虚拟IP,通过/var/log/message查看相关转换日志。

 

测试3{测试backup的lvs}:使用客户端访问现在虚拟ip,查看是否一切正常

      测试完成后,开启master的keepalived进程,等虚拟ip转移到master以后,在从客户端访问,查看是否存在问题

service keepalived stop停止主服务  使用ip addr查看共享IP是否已经漂移到备机上


接下来查看ipvsadm默认超时时间

[root@DR1 keepalived]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 900 120 300

900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:

[root@DR1 ~]# ipvsadm --set 1 2 1


解决同一个用户session访问同一台服务器

这样LVS基本就配置完成了,BBS存在用户session的问题,虽然有很多种解决方法,这里如果只用lvs来解决的话,就要用到LVS的持久连接了,配置如下:

ipvsadm -E -t 192.168.8.230:80 -s wlc -p 3600

这样用户访问后端一台RS在3600s内都只会访问这一台RS,可以发现这样做会破坏LB的效果,不过可以解决用户session的问题。



LVS调度算法
(2)负载调度算法
静态方法:仅根据算法本身进行调度
rr:Round Robin # 即轮询
wrr:Weighted RR # 即加权轮询
sh:Source Hashing # 即来源IP地址hash
dh:Destination Hashing # 即目标地址hash(不常用,仅用于前端多防火墙的场景,保证防火墙的连接追踪功能有效)
动态方法:根据算法及RS当前的负载情况
lc:Least Connection
# 评判标准:Overhead=Active*256+Inactive
# Overhead最小者胜出
wlc:Weighted LC
# 评判标准:Overhead=(Active*256+Inactive)/weight
# Overhead最小者胜出
sed:Shortest Expect Delay
# 评判标准:Overhead=(Active+1)*256/weight
# Overhead最小者胜出
nq:Never Queue # 集群开始时工作时,每台服务器都至少分配一个连接请求,然后再根据sed算法调度;
lblc:Locality-based Least Connection # 类似于dh+lc
lblcr:Relicated and Locality-based Least Connection # 主要用于后端服务器是缓存服务器时



<think>嗯,用户想要一个关于在两台Linux服务器上配置NginxKeepalived实现高可用的部署文档。首先,我需要确保自己理解高可用性的基本概念。高可用通常指的是通过冗余和故障转移来确保服务持续可用。这里用户提到了NginxKeepalived,所以应该是使用Keepalived实现虚拟IP(VIP)的故障转移,当主服务器宕机时,备用服务器接管VIP,从而保证服务的连续性。 接下来,我需要回忆一下Keepalived的工作原理。Keepalived使用VRRP协议,主备服务器之间通过多播通信,主服务器持有虚拟IP,备用服务器监听主服务器的状态。如果主服务器不可用,备用服务器会抢占虚拟IP,继续提供服务。同时,需要配置Nginx在两台服务器上,作为反向代理或者负载均衡器,处理实际的请求。 然后,我需要考虑用户的配置步骤。首先是前置条件:两台Linux服务器,安装NginxKeepalived,确保防火墙和SELinux不会阻止通信。然后需要配置静态IP,或者至少确保网络稳定。可能需要检查用户的网络配置,比如是否需要关闭防火墙或者设置特定的iptables规则。 接下来,安装NginxKeepalived。不同的Linux发行版安装命令不同,比如CentOS使用yum,Ubuntu使用apt。用户可能需要安装EPEL仓库,如果使用CentOS的话。安装完成后,需要配置Nginx,确保两台服务器上的配置一致,比如定义相同的upstream或者server块,监听相同的端口。 然后是配置Keepalived,这部分比较复杂。需要创建或修改keepalived.conf文件,定义全局段、VRRP实例。需要指定虚拟路由ID,虚拟IP地址,优先级,认证信息,以及健康检查脚本。用户可能需要一个检测Nginx状态的脚本,如果Nginx进程不存在,则降低优先级,触发故障转移。 另外,健康检查脚本是关键。如果Keepalived只检测网络接口状态而不检测Nginx进程,可能会出现Nginx崩溃但VIP仍然留在主服务器的情况。因此,脚本需要定期检查Nginx是否运行,如果失败,则停止Keepalived服务,让备用服务器接管。 测试部分也很重要。用户需要知道如何手动停止Nginx或关闭主服务器,观察VIP是否迁移到备用服务器。然后恢复主服务器,检查VIP是否切换回来,即是否支持抢占模式。同时,要确保Nginx配置正确,可以通过VIP访问服务。 可能还需要考虑的一些细节:虚拟路由ID需要一致,但必须在同一个VRRP组内唯一;认证密码需要相同;优先级主服务器高于备用;通知脚本的权限是否正确;是否需要非抢占模式;日志的查看方式,比如tail -f /var/log/messages。 此外,用户可能会遇到的问题包括:VRRP协议通信被防火墙阻止,导致脑裂现象;虚拟IP配置不成功;脚本执行权限不足;SELinux导致脚本无法执行;Nginx配置错误导致服务不可用。这些可能需要提醒用户检查的地方。 最后,整理出一个结构清晰的文档,分步骤说明安装、配置、测试过程,确保用户能够按步骤操作。同时,注意使用正确的中文术语,避免翻译错误,保持步骤的简洁和明确。</think>以下为两台Linux服务器通过Nginx+Keepalived实现高可用的配置文档: --- # Nginx+Keepalived高可用集群部署文档 $$拓扑结构:$$ ``` 虚拟IP(VIP):192.168.1.100 主节点:192.168.1.101 (优先级100) 备节点:192.168.1.102 (优先级90) ``` ## 一、前置条件 1. 两台服务器安装相同版本Linux系统(CentOS 7+/Ubuntu 20.04+) 2. 关闭防火墙或放行VRRP协议(112端口) ```bash systemctl stop firewalld && systemctl disable firewalld # 或 ufw allow 224.0.0.18/28 ufw allow 112 ``` 3. 确保双机网络互通,配置静态IP ## 二、安装组件 ### 1. 安装Nginx(双机执行) ```bash # CentOS yum install epel-release -y yum install nginx -y # Ubuntu apt install nginx -y ``` ### 2. 安装Keepalived(双机执行) ```bash # CentOS yum install keepalived -y # Ubuntu apt install keepalived -y ``` ## 三、配置Keepalived ### 主节点配置(192.168.1.101) ```bash vim /etc/keepalived/keepalived.conf ``` ```conf global_defs { router_id LVS_MASTER # 唯一标识,备机改为LVS_BACKUP } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 # 检测间隔 weight -20 # 检测失败时优先级降低值 } vrrp_instance VI_1 { state MASTER interface ens160 # 改为实际网卡名 virtual_router_id 51 # 必须相同 priority 100 authentication { auth_type PASS auth_pass 1111 # 双机密码需一致 } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_nginx # 绑定健康检查 } } ``` ### 备节点配置(192.168.1.102) ```conf global_defs { router_id LVS_BACKUP } vrrp_instance VI_1 { state BACKUP priority 90 # 其他配置与主节点一致 } ``` ## 四、配置健康检测脚本 双机创建检测脚本: ```bash vim /etc/keepalived/check_nginx.sh ``` ```sh #!/bin/bash if ! pgrep -x nginx >/dev/null ; then systemctl stop keepalived fi ``` 赋予执行权限: ```bash chmod +x /etc/keepalived/check_nginx.sh ``` ## 五、启动服务 ```bash systemctl start nginx keepalived systemctl enable nginx keepalived ``` ## 六、验证配置 1. 查看VIP绑定: ```bash ip addr show ens160 | grep 'inet' ``` 2. 主节点故障模拟: ```bash systemctl stop keepalived # 主节点执行 ``` 3. 观察备节点是否接管VIP ## 七、注意事项 1. 确保双机时间同步(建议配置NTP) 2. 生产环境建议使用独立心跳线 3. 日志查看命令: ```bash tail -f /var/log/messages # CentOS journalctl -u keepalived # Ubuntu ``` --- $$故障转移原理:$$ 当主节点Nginx服务异常→健康检测脚本触发→Keepalived停止→VRRP协议通知备节点接管VIP→实现服务无缝切换 建议在测试环境验证后上线,实际部署时需根据网络环境调整参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值