搭建Keepalived + Nginx + Tomcat 的主备架构

简单介绍:

Nginx 是HTTP反向代理服务器;
Keepalived 主要用来避免服务的单点故障;
Tomcat 轻量级web应用服务器。

架构拓扑图

请求逻辑图

搭建步骤

1、准备工作

系统:

centos7

软件:上传至 /usr/local 目录

1. apache-tomcat-8.5.24.tar.gz
2. nginx-1.12.2.tar.gz
3. keepalived-1.3.9.tar.gz

服务器:

192.168.201.130(Master)
192.168.201.131(Backup)

设置固定IP,必要的话,请自行百度

vim  /etc/sysconfig/network 

输入如下内容(131服务器类似)

DNS1=192.168.201.130
DNS2=8.8.8.8

重启网卡:

service network restart

2、安装依赖包

yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel

如果出现错误:

Another app is currently holding the yum lock; waiting for it to exit…

可能是系统自动升级正在运行,yum在锁定状态中,但是kill有时候也杀不掉,那么执行以下命令后,再继续操作:

rm -f /var/run/yum.pid

3、Tomcat 安装

前提:tomcat压缩文件上传至指定位置:

#进入指定目录
cd /usr/local/
#查看所有文件
ls
#解压tomcat
tar -zxvf apache-tomcat-8.5.24.tar.gz
#进入tomcat-8.5.24/bin
cd apache-tomcat-8.5.24/bin
#启动tomcat
./startup.sh

如遇到权限不足,则输入su,接着输入密码即可

启动成功后,外网输入ip地址:8080,但是访问不了,则需要关闭防火墙:

#停止firewall
systemctl stop firewalld.service 
#禁止firewall开机启动
systemctl disable firewalld.service 
#查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
firewall-cmd --state 

默认端口号为:8080,浏览器访问:

192.168.201.130:8080
192.168.201.131:8080

3、Nginx 安装

#进入指定目录
cd /usr/local/
#查看所有文件
ls
#解压安装包
tar -zxvf nginx-1.12.2.tar.gz
#进入nginx-1.12.2目录
cd nginx-1.12.2
#执行编译
./configure --with-http_stub_status_module --with-http_ssl_module  --prefix=/usr/local/nginx
#执行安装
sudo make && sudo make install

修改Nginx配置文件

vi /usr/local/nginx/conf/nginx.conf

内容如下:

#nginx进程数
worker_processes  1;

#单个进程最大连接数
events {
    worker_connections  1024;
}

#http服务器配置
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #长连接超时时间,单位是秒
    keepalive_timeout  65;
    #upstream负载均衡配置,配置路由到tomcat的服务地址以及权重
    #上线后,在130服务器上启动多个实例,upstream配置本机多个实例
    upstream localhost{
       server 192.168.201.130:8080 weight=2;
       server 192.168.201.131:8080 weight=2;
    }
    
    #虚拟主机的配置
    server {
        #监听端口
        listen       80;
        #域名可以有多个,用空格隔开
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
            #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_connect_timeout 3;
            #后端服务器数据回传时间(代理发送超时)
            proxy_send_timeout 30;
            #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_read_timeout 30;
            proxy_pass http://localhost;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置完成后,启动Nginx

#进入指定目录
cd /usr/local/nginx/sbin
#验证nginx配置文件是否正确
./nginx -t   
#出现 nginx.conf test is successful 则表示成功
#启动nginx
./nginx
#重启nginx
./nginx -s reload
#查看nginx进程
ps -ef|grep nginx

4、Keepalived 安装

#进入指定目录
cd /usr/local/
#查看所有文件
ls
#解压安装包
tar -zxvf keepalived-1.3.9.tar.gz
#进入keepalived-1.3.9目录
cd keepalived-1.3.9
#执行编译
./configure --prefix=/usr/local/keepalived --sysconf=/etc
#执行安装
sudo make && sudo make install
#检查一下/etc/keepalived 下有没有配置文件,如果没有,可手动创建
vim /etc/keepalived/keepalived.conf

Master 配置文件:

global_defs {
    #hostname
    router_id nginx_master 
}
vrrp_script chk_nginx {
    #检测nginx的脚本
    script "/home/keepalived/nginx_check.sh" 
    #每2秒检测一次
    interval 2    
    #如果某一个nginx宕机 则权重减20                          
    weight -20                                                          
}
vrrp_instance VI_1 {
    #状态 MASTER BACKUP
    state MASTER                                                        
    #绑定的网卡
    interface ens33     
    #虚拟路由的ID号,两个节点设置必须一样                               
    virtual_router_id 51      
    #本机的IP              
    mcast_src_ip 192.168.201.130         
    priority 90
    advert_int 1
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。
    virtual_ipaddress {
        192.168.201.222
    }
    # nginx存活状态检测脚本
    track_script {
        chk_nginx
    }
}    

Backup配置文件:

global_defs {
    #hostname
    router_id nginx_backup 
}
vrrp_script chk_nginx {
    #检测nginx的脚本
    script "/home/keepalived/nginx_check.sh" 
    #每2秒检测一次
    interval 2     
    #如果某一个nginx宕机 则权重减20                         
    weight -20                                                          
}
vrrp_instance VI_1 {
    #状态 MASTER BACKUP
    state BACKUP                            
    #绑定的网卡
    interface ens33     
    #虚拟路由的ID号,两个节点设置必须一样                               
    virtual_router_id 51      
    #本机的IP              
    mcast_src_ip 192.168.201.131         
    priority 90
    advert_int 1
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。
    virtual_ipaddress {
        192.168.201.222
    }
    # nginx存活状态检测脚本
    track_script {
        chk_nginx
    }
}    

创建Nginx服务检测脚本

/home/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    #尝试重新启动nginx
    /usr/local/nginx/sbin/nginx 
    #睡眠2秒
    sleep 2  
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
        killall keepalived 
    fi
fi

配置开机自启

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
#添加到开机自启
chkconfig keepalived on

配置完成后,启动keepalived

#启动Keepalived服务
service keepalived start
#然后再Master机器上查看VIP地址
ip addr
Master机器,可以查看到虚拟IP:192.168.201.222绑定在了ens33(正常为eth0)上;
Backup机器,则没有虚拟ip。

如果启动出现错误,则先排除是否应权限不足引起后,其余问题多半出现在keepalived.conf

测试

1、正常情况

访问虚拟IP(192.168.201.222:80)
能访问指定服务,即访问 master

> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.130:80(nginx)
> 192.168.201.130:8080(nginx配置的tomcat服务中的其中一个)

2、异常情况

访问虚拟IP(192.168.201.222:80)
master服务异常,即访问 backup

> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.131:80(nginx)
> 192.168.201.131:8080(nginx配置的tomcat服务中的其中一个)

采用监控手段,获取服务器异常报警,及时修复后,启动tomcat服务、nginx服务、keepalived服务,则vip访问将自动切换回master。

补充

需要考虑session同步的问题

命令汇总

#启动tomcat,进入 /usr/local/tomcat-8.5.24/bin
./startup.sh

#重启nginx,进入/usr/local/nginx/sbin目录
./nginx -s reload

#刷新systemctl配置
systemctl daemon-reload
#停止keepalived服务
service keepalived stop
#启动keepalived服务
service keepalived start
#重启keepalived服务
service keepalived restart
#查看keepalived进程
ps -aux |grep keepalived  
#修改keepalived配置文件
vim /etc/keepalived/keepalived.conf

 

以上内容均来自于百度,但确实是经过自己实践所得,希望让大家能够更简单的使用此架构。

 

参考1:https://my.oschina.net/feinik/blog/1590941
参考2:https://my.oschina.net/xshuai/blog/917097

转载于:https://my.oschina.net/gmarshal/blog/1595468

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值