文档章节

Keepalived配合Nginx搭建高可用服务器集群

小致dad
 小致dad
发布于 2017/08/13 18:52
字数 939
阅读 40
收藏 2

系统

两台Nginx:

CentOS6.5 x86_64

两台tomcat:

CentOS6.5 x86_64

1.拓扑

机器IP

安装软件

角色

虚拟ip

描述

192.168.15.132

Nginx、keepalived

Nginx主机

192.168.15.135

反向代理到tomcat1和tomcat2

192.168.15.133

Nginx、keepalived

Nginx备机

主机挂了切换虚拟ip 192.168.15.135

反向代理到tomcat1和tomcat2

192.168.15.128

Tomcat

Tomcat1

 

192.168.15.30

Tomcat

Tomcat2

 

IP地址

nginx(主LB):192.168.15.132

nginx(备LB):192.168.15.133

VIP地址:192.168.15.135

Real1的IP:192.168.15.128

Real2的IP:192.168.15.30

2.安装keepalived和nginx

在两台nginx服务器张安装keepalived:

wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
./configure --sysconf=/etc/  --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64
make && make install
ln -s /usr/local/sbin/keepalived  /sbin/  

ln -s这一步很重要

不执行ln -s会报错“Starting keepalived: /bin/bash: keepalived: command not found”

service keepalived start

上述步骤也可以直接通过yum –y install keepalived 来代替,不同安装方式而已,不是重点

3.配置keepalived和nginx

二台Nginx上keepalived.conf配置文件如下

user  nobody;
worker_processes  1;
error_log  /usr/local/nginx/logs/error.log notice;
pid        /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
    use epoll;
    worker_connections  51200;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;
    sendfile        on;
    tcp_nopush     on;
    server_tokens off;
    keepalive_timeout  60;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip  on;
    upstream backend
    {
    server 192.168.15.128;
    server 192.168.15.130;
    }
    server {
        listen       80;
        server_name  192.168.15.135;
        location / {
            root   html;
            index  index.php index.html index.htm;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://backend;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
         
        location /nginx_status {
            stub_status on; 
            auth_basic "NginxStatus";
            auth_basic_user_file /usr/local/nginx/htpasswd;
            #allow 127.0.0.1;
            #deny all;
        }
        location ~* \.(ini|docx|txt|doc|pdf)$ {
        #禁止访问文档性文件
        root /usr/share/nginx/html;
        deny all;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {
        root /home/image;
        proxy_store on;
        proxy_store_access user:rw group:rw all:rw;
        proxy_temp_path /home/image;
        if ( !-e $request_filename) {
           proxy_pass  http://backend;
        }
    }
}
}

配置完成后分别service keepalived start启动。检验keepalived配置是否成功

两台keepalived的配置如下:可以看出两者之间的区别仅仅是主备的权重不同,主为100备为66,其余一些有作用的配置已经用红色标注

主:

global_defs {
   notification_email {
     test@163.com
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_MASTER
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2                           #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
   #state MASTER
    state BACKUP
    nopreempt                       
    #设置非抢占模式时,修改“state MASTER”为“state BACKUP”,添加“nopreempt“
    interface bond0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
track_script {
chk_http_port            #(调用检测脚本)
}
    virtual_ipaddress {
        192.168.15.135
    }
}

备: 

global_defs {
   notification_email {
     test@163.com
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_BACKUP
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2                           #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface bond0
    virtual_router_id 51
    priority 66
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
track_script {
chk_http_port            #(调用检测脚本)
}
    virtual_ipaddress {
        192.168.15.135
    }
}

以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程

vim  /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/local/nginx/sbin/nginx        
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
              killall keepalived                    
      fi
fi

Ok,开始nginx负载均衡测试,停掉其中一台的任何服务,不影响整个系统的运作。

4.测试

依次启动两个tomcat=》启动两个nginx=》启动两个keepalived,查看主机上是否有虚拟ip 192.168.15.135

在192.168.15.128和192.168.15.30上分别解压修改tomcat的index页面:

vi webapps/ROOT/index.jsp

修改页面html部分

<html>
    <head>
    </head>
    <body>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat1 page</h1>
</body>
</html>

这样可以通过访问index来判断访问是不是轮询的

通过虚拟ip访问nginx,看页面是不是轮询两个tomcat

将主机的nginx进程kill掉,看看vip是不是切换到备机器上了

访问虚拟ip是不是还能轮询访问tomcat

© 著作权归作者所有

小致dad

小致dad

粉丝 165
博文 543
码字总数 584211
作品 0
济南
技术主管
私信 提问
Keepalived高可用集群应用场景与配置

1.Keepalived单实例主备模式集群方案 这是最简单的模式,不只考虑高可用集群,先不考虑后方的Nginx负载均衡集群,即后端的服务器集群,参考下面的图示: 其对应的Keepalived核心配置如下: ...

xpleaf
2017/03/07
0
0
Linux集群:搭建高可用集群

一、集群介绍 根据功能划分为两大类:高可用和负载均衡; 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务; 实现高可用的开源软件...

BatmanLinux
2018/10/24
0
0
服务器集群之keepalived配置高可用(资料)

Linux集群概述 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开...

寰宇01
2018/05/24
0
0
Nginx-keepalived+Nginx实现高可用集群

Keepalived+Nginx 高可用集群(主从模式) 集群架构图: 说明:Keepalived机器同样是nginx负载均衡器。 1)实验环境准备(此处都是使用的centos7系统) # cat /etc/redhat-releaseCentOS Li...

别来无恙-
04/10
0
0
集群介绍、keepalived介绍、keepalived配置高可用集群

集群介绍 将多台服务器搭建成一个集群来运行应用程序,可以避免单点故障,还能提升服务器的承载能力 linux集群按功能可以划分为两大类:高可用和负载均衡。 高可用集群:通常是两条服务器,一...

黄昏残影
2018/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

九、RabbitMQ的集群安装

概述 理解RabbitMQ的集群原理可能需要花点功夫,但是配置RabbitMQ的集群则非常容易。 注意 如果有防火墙,请提前开放相关端口: client端通信口5672 管理口15672 server间内部通信口25672 e...

XuePeng77
17分钟前
1
0
今天的学习

今天学到了用ci框架向数据库添加数据,代码是这样的: $picture = $this->input->post('picture');$price = $this->input->post('price');$name = $this->input->post('name');$standa......

墨冥
26分钟前
1
0
Java agentlib参数分析

Java agentlib参数分析 再用intellij idea进行远程调试的时候,具体的配置选项如下: 标红的一行显示了远程调试需要添加的虚拟机参数。这个参数到底有什么意义? 我在命令行输入java命令,输...

Mr_Tea伯奕
42分钟前
2
0
四种软件架构演进史,程序员会一种就很牛了!

如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面。 ...

我最喜欢三大框架
47分钟前
5
0
如何做高可用的架构设计?

定义目标 既然我们的目标是做到高可用,那么我们就有必要先明确清楚高可用的含义,并通过拆解目标,让目标可以被量化。按照我的理解,可以将目标按照以下三条进行拆解: 1. 保持业务高稳定性...

别打我会飞
47分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部