03_Nginx搭建高可用的集群

  • 一、Nginxde 高可用
  • 二、Keepalived
  • Keepalived的安装
  • 三、keepalived的配置
  • 3.1.三个配置文件:
  • 3.1.1.nginx_check.sh
  • 3.1.2.keepalived(BACKUP).conf
  • 3.1.3.keepalived(MASTER).conf
  • 3.2.将配置文件传入:


一、Nginxde 高可用

nginx集群 如果master挂了 nginx做集群_nginx集群 如果master挂了


使用如下的nginx配置

user  root;            #运行用户
worker_processes  1;        #启动进程,通常设置成和cpu的数量相等

#全局错误日志及PID文件
error_log  /usr/local/nginx/logs/error.log;
error_log  /usr/local/nginx/logs/error.log  notice;
error_log  /usr/local/nginx/logs/error.log  info;
pid        /usr/local/nginx/logs/nginx.pid;

# 工作模式及连接数上线
events 
{
    use epoll;            #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

    worker_connections  1024;    #单个后台worker process进程的最大并发链接数
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
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   8m;
    
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;

    #连接超时时间
    keepalive_timeout  65;

    #开启gzip压缩,降低传输流量
    gzip  on;
    gzip_min_length    1k;
    gzip_buffers    4 16k;
    gzip_http_version  1.1;
    gzip_comp_level  2;
    gzip_types  text/plain application/x-javascript text/css  application/xml;
    gzip_vary on;

    #添加tomcat列表,真实应用服务器都放在这
    upstream tomcat_pool 
    {
       #server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
	server 192.168.230.132:8080 weight=4 max_fails=2 fail_timeout=30s;
	server 192.168.230.133:8080 weight=4 max_fails=2 fail_timeout=30s;
    }

    server 
    {
        listen       80;        #监听端口    
        server_name  localhost;
    
    #默认请求设置
    location / {
        proxy_pass http://tomcat_pool;    #转向tomcat处理
    }
    
    #所有的jsp页面均由tomcat处理
    location ~ \.(jsp|jspx|dp)?$
    {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://tomcat_pool;    #转向tomcat处理
    }
    
    #所有的静态文件直接读取不经过tomcat,nginx自己处理
    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ 
    { 
        expires  30d;
    }
    location ~ .*\.(js|css)?$
    {
       expires  1h;
    }

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

    }
}

克隆一台Nginx服务器 两台nginx采用完全相同的配置 此时Nginx服务器没有主从之分。同等地位
当配置了keepalived之后 此时就会有主从之分

二、Keepalived

是一款开源免费的,用c语言编写的交换机制的软件 具备我们所认知的网络7层架构中的第3 4 7层的交换机功能。主要提供负载均衡和高可用功能。负载均衡的实现 需要依赖于linxu的虚拟服务 高可用需要通过VRRR协议实现多台机器之间的故障转移。
一句话:keepalived就是集群管理中保证集群高可用的一个服务软件。
模式:一主多备 master存在一个对外提供服务的虚拟Ip (VIP) master宕机 此时会根据VRRR来采用选举机制 在备机中 选举产生一个master 这样就可以保证高可用
keepalived 所有功能的实现 都是通过配置文件来实现

Keepalived的安装

  1. 下载
  2. 上传
  3. 解压
tar -zxvf keepalived-2.0.20.tar.gz -C /opt/programfiles/
  1. 安装
    需要安装的辅助软件
[root@localhost programfiles]# yum install -y openssl openssl-devel
[root@localhost programfiles]# yum -y install libnl libnl-devel

运行配置

[root@localhost keepalived2]# ./configure --prefix=/usr/local/keepalived

nginx集群 如果master挂了 nginx做集群_nginx_02


编译

make

安装

make install

将keepalived安装成Linux的系统服务 使得keepalived可以随着Linux系统进行初始化及启动

[root@localhost keepalived]# cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived

将keepalived主程序加入到环境变量

[root@localhost sbin]# cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/keepalived

将keepalived启动脚本 复制到目录 就可以使用service命令来调用

[root@localhost etc]# cp /opt/programfiles/keepalived2/keepalived/etc/init.d/keepalived   /etc/init.d/keepalived

将配置文件放置到默认路径下

[root@localhost etc]# mkdir /etc/keepalived
[root@localhost etc]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf

设置开机启动

[root@localhost etc]# chkconfig keepalived on

keepalived 的常用命令

nginx集群 如果master挂了 nginx做集群_nginx_03

三、keepalived的配置

3.1.三个配置文件:

nginx集群 如果master挂了 nginx做集群_nginx集群 如果master挂了_04

3.1.1.nginx_check.sh

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

nginx集群 如果master挂了 nginx做集群_nginx_05

3.1.2.keepalived(BACKUP).conf

! Configuration File for keepalived
global_defs {
   router_id lvs2
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state BACKUP #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.230.134#填写本机ip
    # 非抢占模式,与state BACKUP 同用
    nopreempt
    priority 100 # 节点优先级,主要比从节点优先级高
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.230.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
    }
}

nginx集群 如果master挂了 nginx做集群_tomcat_06

3.1.3.keepalived(MASTER).conf

! Configuration File for keepalived
global_defs {
   router_id lvs1
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state MASTER #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.230.131#填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.230.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
    }
}

nginx集群 如果master挂了 nginx做集群_tomcat_07

3.2.将配置文件传入:

主机的配置文件:

nginx集群 如果master挂了 nginx做集群_tomcat_08


从机的配置文件:

nginx集群 如果master挂了 nginx做集群_nginx_09


对nginx_check.sh赋予权限:

nginx集群 如果master挂了 nginx做集群_配置文件_10


nginx集群 如果master挂了 nginx做集群_tomcat_11

nginx集群 如果master挂了 nginx做集群_配置文件_12


当将主机的keepalived停掉时对访问无影响

nginx集群 如果master挂了 nginx做集群_tomcat_13