Keepalived+Nginx+Tomcat 实现高可用Web集群

一、配置阿里yum源

1.进入yum配置路径下载阿里yum源

进入yun配置地址

cd /etc/yum.repos.d/

rm -rf *

2.下载阿里源

wget http://mirrors.aliyun.com/repo/Centos-7.repo

3.加载阿里yum源

yum clean all

yum makecache

yum update

二、Nginx的安装过程

1.下载Nginx安装包,安装依赖环境包

(1)安装 C++编译环境

yum  -y install gcc  #C++

(2)安装pcre

yum  -y install pcre-devel

(3)安装zlib

yum  -y install  zlib-devel

(4)安装Nginx

定位到nginx 解压文件位置,执行编译安装命令

[root@localhost nginx-1.12.2]# pwd

/usr/local/nginx/nginx-1.12.2

[root@localhost nginx-1.12.2]# ./configure  && make && make install

(5)启动Nginx

安装完成后先寻找那安装完成的目录位置

[root@localhost nginx-1.12.2]# whereis nginx

nginx: /usr/local/nginx

进入Nginx子目录sbin启动Nginx

[root@localhost sbin]# ./nginx &

[1] 5768

查看Nginx是否启动

(6)Nginx快捷启动和开机启动配置

编辑Nginx快捷启动脚本【注意Nginx安装路径,需要根据自己的NGINX路径进行改动】

[root@localhost init.d]# vim /etc/rc.d/init.d/nginx

#!/bin/sh

# nginx - this script starts and stops the nginx daemon

#

# chkconfig: - 85 15

# description: Nginx is an HTTP(S) server, HTTP(S) reverse \

# proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /usr/local/nginx/conf/nginx.conf

# pidfile: /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

    # make required directories

    user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`

    if [ -z "`grep $user /etc/passwd`" ]; then

    useradd -M -s /bin/nologin $user

    fi

    options=`$nginx -V 2>&1 | grep 'configure arguments:'`

    for opt in $options; do

    if [ `echo $opt | grep '.*-temp-path'` ]; then

    value=`echo $opt | cut -d "=" -f 2`

    if [ ! -d "$value" ]; then

    # echo "creating" $value

    mkdir -p $value && chown -R $user $value

    fi

    fi

    done

}

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    make_dirs

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}

stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}

restart() {

    #configtest || return $?

    stop

    sleep 1

    start

}

reload() {

    #configtest || return $?

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

    echo

}

force_reload() {

    restart

}

configtest() {

    $nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

    status $prog

}

rh_status_q() {

    rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

为启动脚本授权 并加入开机启动

[root@localhost init.d]# chmod -R 777 /etc/rc.d/init.d/nginx

[root@localhost init.d]# chkconfig  nginx

启动Nginx

[root@localhost init.d]# ./nginx start

将Nginx加入系统环境变量

[root@localhost init.d]# echo 'export PATH=$PATH:/usr/local/nginx/sbin'>>/etc/profile && source /etc/profile

[root@localhost init.d]# service nginx start

三、KeepAlived安装和配置

1. 主、从服务器上安装keepalived

使用yum安装keepalived

yum -y install keepalived

2.查看keepalived是否安装成功,出现版本即成功

rpm -q -a keepalived

2.主、从服务器上修改keepalived配置(配置文件路径:/etc/keepalived/keepalived.conf)

1)主服务上修改配置

! Configuration File for keepalived

global_defs {

  router_id just01

}

vrrp_script chk_nginx {

    script "/usr/local/src/nginx_check.sh"  #脚本文件路径

    interval 3  # 检测脚本执行的间隔:3s

    weight 2  #权重,如果这个脚本检测为真,服务器权重+2

}

vrrp_instance VI_1 {

    state MASTER  # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP

    interface ens192  # 通信端口 通过ip addr可以看到,根据自己的机器配置

    virtual_router_id 51  # vrrp实例id  keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同

    priority 100  #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小

    advert_int 1  #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;

    authentication {

        auth_type PASS  #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信

        auth_pass justech  #密码,主备服务器的要设成一样

    }

    virtual_ipaddress {

        10.66.53.200 # 定义虚拟ip(VIP),可多设,每行一个,需要是公司中未使用的ip,最好跟服务器真实ip的网段一样,比如测试环境10.66.53 正式环境10.66.52

    }

track_script {

  chk_nginx  #定义脚本名称,与上面的 vrrp_script 的值一致

}

}

2)从服务上修改配置

! Configuration File for keepalived

global_defs {

  router_id just02

}

vrrp_script chk_nginx {

    script "/usr/local/src/nginx_check.sh"  #脚本文件路径

    interval 3  # 检测脚本执行的间隔:3s

    weight 2  #权重,如果这个脚本检测为真,服务器权重+2

}

vrrp_instance VI_1 {

    state BACKUP  # 指定keepalived的角色,MASTER为主,BACKUP为备。

    interface ens192  # 通信端口 通过ip addr可以看到,根据自己的机器配置

    virtual_router_id 51 # vrrp实例id  keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同

    priority 80  #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小

    advert_int 1  #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;

    authentication {

        auth_type PASS  #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信

        auth_pass justech  #密码,主备服务器的要设成一样

    }

    virtual_ipaddress {

        10.66.53.200  # 定义虚拟ip(VIP),可多设,每行一个,需要是公司中未使用的ip,最好跟服务器真实ip的网段一样,比如测试环境10.66.53 正式环境10.66.52

    }

track_script {

chk_nginx #定义脚本名称,与上面的 vrrp_script 的值一致

}

}

2.主、从服务器上新增脚本文件,用于重启nginx或关闭keepalived

1) 创建文件

touch /usr/local/src/nginx_check.sh

2) 修改脚本文件内容

1.使用vim修改脚本文件

vim /usr/local/src/nginx_check.sh

2.将下面内容复制到脚本文件中

#! /bin/bash

#检测nginx是否启动了

A=`ps -C nginx --no-header | wc -l`

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #启动nginx,视各个服务器上的nginx启动命令决定

sleep 2 #睡眠2秒

if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then

  systemctl stop keepalived.service #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点

fi

fi

注意:里面的启动nginx配置需要修改成主、从服务器上对应的启动命令

3) 对/usr/local/src/nginx_check.sh赋可执行权限

chmod 777 /usr/local/src/*.sh

3.启动相关服务

1) 启动nginx

1.如果以启动,则忽略

2) 启动keepalived

1.启动keepalived

systemctl start keepalived.service

2.查看keepalived是否启动成功

ps -ef|grep  keepalived

3.补充关闭、重启keepalived命令

关闭:

systemctl stop keepalived.service

重启:

systemctl restart keepalived.service

四、安装tomcat

安装JDK

上传安装包至/data目录下

jdk-8u131-linux-x64.tar.gz

tar -zxvf jdk-8u131-linux-x64.tar.gz

mv jdk-8u131-linux-x64 jdk

pwd

/data/jdk

vi /etc/pfofile

JAVA_HOME=/data/jdk

JRE_HOME=/data/jdk/jre

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME JRE_HOME CLASS_PATH PATH

source /etc/profile

安装tomcat

上传安装包至/data目录下

tar -zxvf apache-tomcat-8.5.51.tar.gz

mv apache-tomcat-8.5.51 tomcat

cd tomcat/bin

./start.sh

1.更改Tomcat默认欢迎页面,用于标识切换Web

更改TomcatServer01 节点ROOT/index.jsp 信息,加入TomcatIP地址,并加入Nginx值,即修改节点192.168.43.103信息如下:

<divid="asf-box"><h1>${pageContext.servletContext.serverInfo}(192.168.224.103)<%=request.getHeader("X-NGINX")%></h1></div>

更改TomcatServer02 节点ROOT/index.jsp信息,加入TomcatIP地址,并加入Nginx值,即修改节点192.168.43.104信息如下:

<divid="asf-box"><h1>${pageContext.servletContext.serverInfo}(192.168.224.104)<%=request.getHeader("X-NGINX")%></h1></div>

2.启动Tomcat服务,查看Tomcat服务IP信息,此时Nginx未启动,因此request-header没有Nginx信息。

3.配置Nginx代理信息

1.配置Master节点[192.168.43.101]代理信息

upstream tomcat{server192.168.43.103:8080weight=1;

server192.168.43.104:8080weight=1;}

server{location/{proxy_pass http://tomcat;

proxy_set_header X-NGINX"NGINX-1";}

#......其他省略}

2.配置Backup节点[192.168.43.102]代理信息

upstream tomcat{server192.168.43.103:8080weight=1;

server192.168.43.104:8080weight=1;}

server{location/{proxy_pass http://tomcat;

proxy_set_header X-NGINX"NGINX-2";}

#......其他省略}

此时访问 192.168.43.101 可以看到103和104节点Tcomat交替显示,说明Nginx服务已经将请求负载到了2台tomcat上。

同理配置Backup[192.168.43.102] Nginx信息,启动Nginx后,访问192.168.43.102后可以看到Backup节点已起到负载的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容