Nginx+keepalived+tomcat环境介绍

系统:centos6.5_64_mini

nginx版本:Nginx-1.6.0

keepalived版本:keepalived-1.2.12

tomcat版本:tomcat-7.0.54

实验节点如下:

主节点:192.168.100.41

备用节点:192.168.100.42 

漂移IP:192.168.100.40

 

1.安装所需的库(主备节点都需要安装)
#  yum -y install gcc gcc-c++ openssl openssl-devel popt-devel  wget

 

2.建立相关目录以及用户组(主备节点都需要建立)

#  cd /yunwei8
#  mkdir soft
#  mkdir apps
#  mkdir server
#  mkdir /etc/keepalived

#  cd /yunwei8/soft
#  /usr/sbin/groupadd www
#  /usr/sbin/useradd -s /sbin/nologin -M -g www www
#  mkdir -p /yunwei8/web/www
#  chmod 777 /yunwei8/web/www
#  chown -R www:www /yunwei8/web/www
#  chmod g+s /yunwei8/web/www
#  mkdir -p /yunwei8/web/logs
#  chmod +w /yunwei8/web/logs
#  chown -R www:www /yunwei8/web/logs

 

3.将所有软件下载到/yunwei8/soft目录下(主备节点都需要下载)

#  wget http://down.yunwei8.com/soft/linux/keepalived-1.2.12.tar.gz
#  wget http://down.yunwei8.com/soft/linux/jdk-7u60-linux-x64.tar.gz

#  wget http://down.yunwei8.com/soft/linux/nginx-1.6.0.tar.gz
#  wget http://down.yunwei8.com/soft/linux/apache-tomcat-7.0.54.tar.gz
#  wget http://down.yunwei8.com/soft/linux/pcre-8.35.tar.gz

 

4.nginx安装(主备节点都需要安装)
4.1安装Nginx所需的pcre库
解压并安装
#  cd /yunwei8/soft
#  tar zxvf pcre-8.35.tar.gz
#  cd pcre-8.35/
#  ./configure
#  make && make install

 

4.2安装niginx
解压并安装
#  cd /yunwei8/soft
#  tar zxvf nginx-1.6.0.tar.gz
#  cd nginx-1.6.0
#  ./configure --user=www --group=www --prefix=/yunwei8/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-pcre=../pcre-8.35 --with-pcre-jit
#  make && make install

 

4.3修改主节点nginx.conf配置文件

#  rm -rf /yunwei8/server/nginx/conf/nginx.conf
#  vi /yunwei8/server/nginx/conf/nginx.conf
复制以下内容

user  www www;
worker_processes  8;
error_log  /yunwei8/web/logs/nginx_error.log  crit;
pid logs/nginx.pid;
events
{
    use epoll;
    worker_connections 65535;
}

http
{
   include mime.types;
   default_type application/octet-stream;
   server_names_hash_bucket_size 128;
   client_header_buffer_size 32k;
   large_client_header_buffers 4 32k;
   client_max_body_size 300m;
   sendfile on;
   tcp_nopush on;
   keepalive_timeout 65;
   tcp_nodelay on;
   client_body_buffer_size 128k;
   proxy_connect_timeout 600;  
   proxy_read_timeout 600;
   proxy_send_timeout 600;
   proxy_buffer_size 16k;
   proxy_buffers 4 32k;
   proxy_busy_buffers_size 64k;
   proxy_temp_file_write_size 64k;
   gzip on;
   gzip_min_length 1k;
   gzip_http_version 1.1;
   gzip_buffers 4 16k;
   gzip_comp_level 2;
   gzip_types text/plain application/x-javascript text/css application/xml
   gzip_vary on;

   upstream tomcat_server
  {
    ip_hash;
    server 192.168.100.41:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.100.42:8080 weight=1 max_fails=2 fail_timeout=30s;
  }


server
  {
      listen 80;
      server_name 192.168.100.41;
    
      location / {
           proxy_redirect    off;
           proxy_set_header  Host $host;
           proxy_set_header  X-Real-IP  $remote_addr;
           proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://tomcat_server;
      }

   }
      log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
         '$status $body_bytes_sent "$http_referer" '
         '"$http_user_agent" $http_x_forwarded_for';
         access_log  /yunwei8/web/logs/access.log  access;
   }

 

4.4测试(主节点)
#  /yunwei8/server/nginx/sbin/nginx -t
如果显示下面信息,即表示配置没问题
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful

 

4.5修改备节点nginx.conf配置文件 

#  rm -rf /yunwei8/server/nginx/conf/nginx.conf
#  vi /yunwei8/server/nginx/conf/nginx.conf
复制以下内容

user  www www;
worker_processes  8;
error_log  /yunwei8/web/logs/nginx_error.log  crit;
pid logs/nginx.pid;
events
{
    use epoll;
    worker_connections 65535;
}

http
{
   include mime.types;
   default_type application/octet-stream;
   server_names_hash_bucket_size 128;
   client_header_buffer_size 32k;
   large_client_header_buffers 4 32k;
   client_max_body_size 300m;
   sendfile on;
   tcp_nopush on;
   keepalive_timeout 65;
   tcp_nodelay on;
   client_body_buffer_size 128k;
   proxy_connect_timeout 600;  
   proxy_read_timeout 600;
   proxy_send_timeout 600;
   proxy_buffer_size 16k;
   proxy_buffers 4 32k;
   proxy_busy_buffers_size 64k;
   proxy_temp_file_write_size 64k;
   gzip on;
   gzip_min_length 1k;
   gzip_http_version 1.1;
   gzip_buffers 4 16k;
   gzip_comp_level 2;
   gzip_types text/plain application/x-javascript text/css application/xml
   gzip_vary on;

   upstream tomcat_server
  {
    ip_hash;
    server 192.168.100.41:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.100.42:8080 weight=1 max_fails=2 fail_timeout=30s;
  }


server
  {
      listen 80;
      server_name 192.168.100.42;
    
      location / {
           proxy_redirect    off;
           proxy_set_header  Host $host;
           proxy_set_header  X-Real-IP  $remote_addr;
           proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://tomcat_server;
      }

   }
      log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
         '$status $body_bytes_sent "$http_referer" '
         '"$http_user_agent" $http_x_forwarded_for';
         access_log  /yunwei8/web/logs/access.log  access;
   }

 

4.6测试(备节点)
#  /yunwei8/server/nginx/sbin/nginx -t
如果显示下面信息,即表示配置没问题
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful

 

4.7编写nginx 启动服务(主备节点)

#  vi /etc/init.d/nginx
##输入以下代码并保存

#!/bin/sh## nginx - this script starts and stops the nginx daemin## chkconfig:   - 85 15 # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \#               proxy and IMAP/POP3 proxy server# processname: nginx# config:      /yunwei8/server/nginx/conf/nginx.conf# pidfile:     /yunwei8/server/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="/yunwei8/server/nginx/sbin/nginx"prog=$(basename $nginx) NGINX_CONF_FILE="/yunwei8/server/nginx/conf/nginx.conf" lockfile=/var/lock/subsys/nginx start() {    [ -x $nginx ] || exit 5    [ -f $NGINX_CONF_FILE ] || exit 6    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    start} reload() {    configtest || return $?    echo -n $"Reloading $prog: "    killproc $nginx -HUP    RETVAL=$?    echo} 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        ;;    status)        rh_status        ;;    *)        echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"        exit 2esac


4.8设置权限并添加到启动服务列表中(主备节点)
#  chmod 755 /etc/init.d/nginx
#  chkconfig --add nginx
#  chkconfig --level 345 nginx on

 

4.9启动nginx(主备节点)

#  service nginx start

 

5.JDK安装(主备节点)
5.1解压缩包
#  cd /yunwei8/soft
#  tar zxvf jdk-7u60-linux-x64.tar.gz
#  mv jdk1.7.0_60/ /yunwei8/server/

 

5.2让我们装的JDK成为默认的JDK(主备节点)
#  update-alternatives --install /usr/bin/java java /yunwei8/server/jdk1.7.0_60/bin/java 300
#  update-alternatives --install /usr/bin/javac javac /yunwei8/server/jdk1.7.0_60/bin/javac 300

 

5.3设置环境变量(主备节点)
#  cd /yunwei8/soft
#  vi /etc/profile
##在最后加入如下参数
Java_HOME=/yunwei8/server/jdk1.7.0_60
PATH=$Java_HOME/bin:$PATH
CLASSPATH=.:$Java_HOME/lib/tools.jar:$Java_HOME/lib/dt.jar
export Java_HOME PATH CLASSPATH

 

5.4激活刚才的配置(主备节点)
#  source /etc/profile

 

5.5查看Java版本,看是否配置合适(主备节点)
#  java -version

 

6.tomcat安装(主备节点)
6.1解压并安装apache-tomcat-7.0.54
#  cd /yunwei8/soft
#  tar zxvf apache-tomcat-7.0.54.tar.gz
#  mv apache-tomcat-7.0.54 /yunwei8/apps/tomcat7

 

6.2设置tomcat权限(主备节点)
#  cd /yunwei8/apps/tomcat7/bin/
#  chmod 777 *.sh

 

6.3启动tomcat(主备节点)
#  /yunwei8/apps/tomcat7/bin/startup.sh 

 

7.keepalived安装(主备节点)
7.1安装keepalived-1.2.12
#  cd /yunwei8/soft

#  tar zxvf keepalived-1.2.12.tar.gz
#  cd keepalived-1.2.12
#  ./configure --prefix=/yunwei8/server/keepalived
#  make && make install

 

7.2复制相关目录(主备节点)
#复制keepalived启动文件到默认路径,也可以通过设置环境变量的path实现
#  cp /yunwei8/server/keepalived/sbin/keepalived /usr/sbin/

 

#复制keepalived服务脚本到默认的地址,也通过修改init.d/keepalived文件中的相应配置实
#  cp /yunwei8/server/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

 

#复制服务启动脚本到,以便可以通过service控制keepalived服务
#  cp /yunwei8/server/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

 

7.3设置权限并添加到启动服务列表中(主备节点)
#  chmod 755 /etc/init.d/keepalived
#  chkconfig --add keepalived
#  chkconfig --level 345 keepalived on

 

7.4创建nginx监控脚本(主备节点)
#  vi /yunwei8/server/nginx/conf/check_nginx.sh
复制以下脚本

#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /yunwei8/server/nginx/sbin/nginxsleep 3if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi

7.5给nginx监控脚本赋予权限(主备节点)
#  chmod 755 /yunwei8/server/nginx/conf/check_nginx.sh

 

7.6编写配置文件,主节点(192.168.100.41)创建keepalived配置文件
#  vi /etc/keepalived/keepalived.conf
复制以下配置文件
!Configuration File for keepalived

global_defs {
   notification_email {
   77121151@qq.com
}
   notification_email_from 41@yunwei8.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX1_DEVEL
}
vrrp_script chk_nginx {
    script "/yunwei8/server/nginx/conf/check_nginx.sh"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    state MASTER
    nopreempt
    interface eth0
    virtual_router_id 41
    mcast_src_ip 192.168.100.41
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass fds#FSAF897
    }
    virtual_ipaddress {
        192.168.100.40
    }
track_script {
     chk_nginx
    }
}

 

备用节点(192.168.100.42)创建keepalived配置文件
#  vi /etc/keepalived/keepalived.conf
##复制以下配置文件
! Configuration File for keepalived

global_defs {
   notification_email {
   77121151@qq.com
}
   notification_email_from 42@yunwei8.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX2_DEVEL
}
vrrp_script chk_nginx {
    script "/yunwei8/server/nginx/conf/check_nginx.sh"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 41
    mcast_src_ip 192.168.100.42
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass fds#FSAF897
    }
    virtual_ipaddress {
        192.168.100.40
    }

track_script {
     chk_nginx
    }
}

 

7.7保存配置文件后,启动keepalived服务(主备节点)
#  service keepalived start

 

8.防火墙设置
端口开放

#  iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
#  iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#  iptables -I INPUT 3 -p vrrp -j ACCEPT
#  /etc/rc.d/init.d/iptables save

 

9.测试,这里简单做下,大家可以自己多测试

9.1主节点测试,查看是否有漂移IP,如果有192.168.1.40则表示主节点漂移IP绑定成功

#  ip a

 

9.2备节点测试,查看是否有漂移IP,如果在主节点没有故障的前提下没有绑定192.168.1.40则表示成功
#  ip a

 

9.3关闭主节点访问http://192.168.1.40测试,如果能成功访问说明漂移IP已经绑定到备节点上