keepalived+nginx+tomcat 实现高可用

环境:

tomcat1 环境:10.1.2.53

tomcat2 环境:10.1.2.54

 

nginx主 和keepalived主 环境:10.1.2.53

nginx备 和keepalived备 环境:10.1.2.55

 

1、安装tomcat

  省略。

2、安装nginx

  在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,**以下命令均需root权限执行**:   
  首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库)。
  选定**/usr/local**为安装目录,以下具体版本号根据实际改变

 1.安装gcc gcc-c++(如新环境,未安装请先安装)

$ yum install -y gcc gcc-c++

 2.安装PCRE库

$ cd /usr/local/
$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
$ tar -zxvf pcre-8.33.tar.gz
$ cd pcre-8.33
$ ./configure
$ make && make install
如报错:configure: error: You need a C++ compiler for C++ support 解决:yum install -y gcc gcc-c++

 3.安装SSL库

$ cd /usr/local/
$ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz $ tar -zxvf openssl-1.0.1j.tar.gz$ cd openssl-1.0.1j $ ./config $ make && make install

 4.安装zlib库存

$ cd /usr/local/
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz
$ ./configure
$ make && make install

   5.安装nginx

$ cd /usr/local/
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
$ tar -zxvf nginx-1.8.0.tar.gz
$ cd nginx-1.8.0
$ ./configure --user=nobody --group=nobody --prefix=/usr/local/nginxpc --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
--with-pcre=/usr/local/pcre-8.33 --with-zlib=/usr/local/zlib-1.2.11 --with-openssl=/usr/local/openssl-1.0.1j
$ make && make install

修改/usr/local/nginx/config/nginx.conf配置文件

#user  nobody;
worker_processes  8;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

pid        logs/nginx.pid;

worker_rlimit_nofile 204800;

events {
    use epoll;
    worker_connections 65535;
}


http {
     #扩展名与文件类型映射表
    include mime.types;
    #默认类型
    default_type application/octet-stream;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    #日志
    access_log /usr/local/nginx/logs/http/access.log;
    error_log /usr/local/nginx/logs/http/error.log;
    #gzip 压缩传输
    gzip on;
    gzip_min_length 1k;  #最小1K
    gzip_buffers 16 64K;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
    gzip_vary on;
    #负载均衡组
    #静态服务器组
    upstream static.zh-jieli.com {
        server 10.1.2.53:9003 weight=1;
    }
    #动态服务器组
    upstream zh-jieli.com {
        server 10.1.2.54:9003;
		server 10.1.2.53:9003;
    }
    #配置代理参数
    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;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 65;
    proxy_send_timeout 65;
    proxy_read_timeout 65;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    #缓存配置
    proxy_cache_key '$host:$server_port$request_uri';
    proxy_temp_file_write_size 64k;
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

    server{
        listen 802;
        server_name erp.zh-jieli.com;
        location / {
            index index;
        }
        location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
            proxy_cache_valid 200 304 302 5d;
            proxy_cache_valid any 5d;
            proxy_cache_key '$host:$server_port$request_uri';
            add_header X-Cache '$upstream_cache_status from $host';
            proxy_pass http://static.zh-jieli.com;
            expires 30d;
        }
        location ~ .*$ {
            index index;
            proxy_pass http://zh-jieli.com;
        }
    }
    server{
        listen 808;
        server_name static;
        location / {

        }
        location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
            #root /home/sunline/web-app/tomcat/webapps/ROOT/webstatic;
			proxy_pass http://zh-jieli.com;
            expires 30d;
        }
    }
}

6.启动

shell-->cd /usr/local/nginx/sbin/
shell-->./nginx

检查是否启动成功:

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

部分命令如下:
重启:

$ /usr/local/nginx/sbin/nginx –s reload

停止:

$ /usr/local/nginx/sbin/nginx –s stop

测试配置文件是否正常:

 $ /usr/local/nginx/sbin/nginx –t

强制关闭:

$ pkill nginx

 nginx安装参考:https://blog.csdn.net/wxyjuly/article/details/79443432

 nginx安装参考:https://www.cnblogs.com/wunaozai/p/5001742.html

3、安装keepalived

 1、 yum安装keepalived

    分别在53/55机器执行yum安装keepalived

yum install -y keepalived

 2、keepalived命令

shell> service keepalived start   #启动服务
shell> service keepalived stop    #停止服务
shell> service keepalived restart #重启服务

  3、查找53主/etc/keepalived/keepalived.conf配置文件

global_defs {
   notification_email {
   
   }
   router_id LVS_DEVEL
}
 
vrrp_script chk_http_port {
 
   script "/usr/local/src/check_nginx_pid.sh"
 
   interval 2      #(检测脚本执行的间隔)
 
   weight 2
 
}
 
vrrp_instance VI_1 {
    state MASTER   #备份服务器上将 MASTER 改为 BACKUP  
    interface eno1  #网卡
    virtual_router_id 51   #主、备机的virtual_router_id必须相同
    priority 100     #主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  track_script {
	chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        10.1.2.13  #VRRP H虚拟地址
    }
}

 4、查找55备/etc/keepalived/keepalived.conf配置文件

  

global_defs {
   notification_email {
   
   }
   router_id LVS_DEVEL
}
 
vrrp_script chk_http_port {
 
   script "/usr/local/src/check_nginx_pid.sh"
 
   interval 2
 
   weight 2
 
}
 
vrrp_instance VI_1 {
    state BACKUP
    interface enp2s0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  track_script {
	chk_http_port  #(调用检测脚本)
    }
    virtual_ipaddress {
        10.1.2.13
    }
}

 5、分别在53/55上查询网卡,需要将网卡与虚拟IP绑定

  

shell-->ifconfig

 

6、在53/55的 /usr/local/src/创建文件check_nginx_pid.sh配置文件如下:

  

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
       /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
       sleep 2

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

7、执行脚本文件,看是否可以使用。

shell-->cd /user/local/src
shell-->./check_nginx_pid.sh

8、启动服务

shell-->service keepalived start

9、查看keepalived日志

shell-->cd /var/log
shell-->tail -f messages

10、查看网卡是否与虚拟IP进行绑定。或者是否ping的通虚拟IP。

shell-->ip a|grep eno1 #eno1是配置文件中的网卡

   53主keepalived会绑定虚拟IP

  

  55备keepalived不会绑定虚拟IP

  

11、实现服务漂移

  1、将53主服务停掉。 

shell-->service keepalived stop

    2、执行如下命令查看是否网卡还绑定虚拟IP

shell-->ip a|grep eno1 #eno1是配置文件中的网卡

  3、查看55,看是否网卡与虚拟IP进行绑定,如果是绑定的,代表实现了漂移

shell-->ip a|grep enp2s0
shell-->ping 10.1.2.13

 参考地址:https://www.cnblogs.com/youzhibing/p/7327342.html

 简化版参考地址:https://blog.csdn.net/e421083458/article/details/30092795

   问题:https://blog.csdn.net/charthyf/article/details/81456872 

posted on 2018-10-09 11:23  腾飞的鹰  阅读(519)  评论(0)    收藏  举报

导航