欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

程序员文章站 2024-03-20 15:25:04
...

Nginx于Keepalived可以实现高可用,实现双机热备+自动切换,这种操作在现在的集群系统中,比较的常见,还有,通过keepalived和redis实现热备份的,还有和mysql实现的,类似的案例挺多。

Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

系统架构

keepalived虚拟化出192.168.100.100192.168.100.101的虚拟化ip,这个系统是两台计算机上,有4个tomcat,2个Nginx,2个Keepalived实现负载均衡策略。

节点信息

节点 服务 安装目录
192.168.100.10:80 nginx1 /usr/local/nginx
192.168.100.11:80 nginx2 /usr/local/nginx
192.168.100.100 keepalived1 /usr/local/keepalived
192.168.100.101 keepalived2 /usr/local/keepalived
192.168.100.10:8080 tomcat1 /usr/local/nginx/tomcat/tomcat1
192.168.100.10:8081 tomcat2 /usr/local/nginx/tomcat/tomcat2
192.168.100.11:8080 tomcat3 /usr/local/nginx/tomcat/tomcat1
192.168.100.11:8081 tomcat4 /usr/local/nginx/tomcat/tomcat2

Tomcat端口分配

节点 SHUTDOWN(端口) HTTP/1.1(端口) AJP/1.3(端口)
192.168.66.100:8080 8005 8081 8009
192.168.100.11:8081 8006 8082 8010
192.168.100.11:8080 8005 8081 8009
192.168.100.11:8081 8006 8082 8010

安装前准备

1、Centos之Keepalived安装-yellowcong
2、Nginx之解压编译安装-yellowcong
3、CentOS之Tomcat的安装-yellowcong

配置keepalived

Keepalived会根据virtual_router_idauthentication两个来确定集群关系。

#修改配置
vim /etc/keepalived/keepalived.conf

#配置文件
! Configuration File for keepalived

global_defs {
   #从服务器最改一下这个
   router_id node1 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
#监控服务.NGINX mysql等
vrrp_script chk_nginx {
    script "/usr/local/keepalived/check_nginx.sh"
    #每2s检查一次
    interval 2
    #每次检查-20
    weight -20
}
vrrp_instance VI_1 {
    ##主从设置 MASTER/BACKUP  
    state MASTER
    #网卡名称
    interface eth0
    #同一个集群下这个 router_id是一样的
    virtual_router_id 51
    #本机的ip,需要修改
    mcast_src_ip 192.168.100.10 
    #优先级,从节点 配置,需要小于主节点
    priority 100
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    advert_int 1
    #认证的密码
    authentication {
        auth_type PASS
        #设定授权密码,密码相同的为一个集群
        auth_pass yellowcong
    }
    #触发的脚本
    track_script {
        chk_nginx  #检测脚本,上面配置的
    }
    #虚拟ip地址
    virtual_ipaddress {
        192.168.100.100
        192.168.100.101
    }
}

检查脚本

Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

下面是脚本内容,用来进行nginx是否存活的监测

#创建并赋予权限
touch check_nginx.sh && chmod a+x check_nginx.sh

#编辑文件
vim check_nginx.sh

#################下面是内容####################
#!/bin/bash

COUNT=$(ps -C nginx --no-header |wc -l)

echo $COUNT

#判断Nginx 是否都挂掉了
if [ $COUNT -eq 0 ]
then
        #如果挂掉了,就启动nginx
        /usr/local/nginx/sbin/nginx
        echo "重启nginx"

        #等5秒钟后,再次查看是否 启动成功
        sleep 5

        #如果nginx没有启动起来,就直接干掉keepalived
        COUNT=$(ps -C nginx --no-header |wc -l)
        if [ $COUNT -eq 0 ]
        then
                echo "干掉keepalived"
                #如果killall命令不能使用,就需要安装psmisc工具了
                #yum install -y psmisc
                killall keepalived
        fi
fi

Nginx 配置

vim /usr/local/nginx/conf/nginx.conf
#配置完成一个后,直接将另一个拷贝就可以了
#第一个参数 文件地址
#第二个参数 目标地址
scp 192.168.100.10:/usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/

#################配置的内容############### 
#user  nobody;
#配置的线程数目和cpu处理器的核心数目一致
worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    #负载均衡
    upstream myapp{
         server 192.168.100.11:8080 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.100.11:8081 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.100.10:8081 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.100.10:8081 weight=1 max_fails=2 fail_timeout=30s;
    }
    server {
        listen       80;
        server_name  localhost;

        #地址匹配
        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_set_header X-real-ip $remote_addr;
            proxy_pass http://myapp;
        }

        #错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

启动成功后

直接用ifconfig 是看不到虚拟出来的ip的,这点需要注意,要使用ip a命令

#查看虚拟出来的ip
#只有主节点有虚拟出来的ip,子节点没有
ip a

使用ip a命令查看到vip的ip
Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

ip访问

192.168.100.100访问正常,一顿刷新,4个tomcat的数据都可以访问到
Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

192.168.100.101访问正常
Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

错误合集

-bash: killall: 未找到命令

没有发现killall命令,尴尬了吧
Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

killall的命令若不存在就会报错,需要安装下面的工具

yum install -y psmisc

Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong

参考文章

http://www.linuxde.net/2013/04/13381.html

相关标签: tomcat keepalived