page contents

nginx高可用集群

nginx高可用集群搭建 课程内容 1. nginx动态负载均衡 2. nginx高可用 nginx负载均衡概述 网络负载均衡技术的大致原理是利用一定的分配策略将网络 负载平衡地分摊到网络集群的各个...

nginx高可用集群搭建


课程内容


1. nginx动态负载均衡

2. nginx高可用


nginx负载均衡概述


网络负载均衡技术的大致原理是利用一定的分配策略将网络 负载平衡地分摊到网络集群的各个操作单元上,使得单个重负载任务能够分担到多个单元上并行处理,或者使得大量并发访问或数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间。


>负载均衡会出现的问题以及解决方案


>>问题


* 负载均衡服务器宕机

* 横向扩展


>>解决方案


* keepalived实现ip漂移提高nginx负载均衡高可用

* consul服务注册发现实现nginx负载均衡横向扩展


1. nginx动态负载均衡


1.1 什么consul


Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件。


服务发现以及注册:当服务Producer 启动时,会将自己的Ip/host等信息通过发送请求告知 Consul,Consul 接收到 Producer 的注册信息后,每隔一段时间会向 Producer 发送一个健康检查的请求,检验Producer是否健康。


服务调用:当 Consumer 请求Product时,会先从 Consul 中拿到存储Product服务的 IP 和 Port 的临时表(temp table),从temp table表中任选一个· Producer 的 IP 和 Port, 然后根据这个IP和Port,发送访问请求;temp table表只包含通过了健康检查的 Producer 信息,并且每隔一段时间更新


>consul的安装


Consul安装包下载地址: https://www.consul.io/downloads

```

(1) 下载完后,解压,得到一个可执行文件consul


解压:unzip consul_1.9.4_linux_amd64.zip


(2)将这个文件移动到全局变量环境中


Mv consul /usr/local/bin/


(3) 验证安装

Consul version

```


>consul常用命令


agent命令

```

描述:运行一个consul agent

使用案例:consul agent  -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -bind=192.168.63.101  -ui  -client=0.0.0.0

参数含义:

agent

-server表示启动的是一个服务

-bootstrap-expect 1 表示等待多少个节点再启动,这里1个,就是自己一个就启动了

-node=texun_1 就是给consul服务起个别名为ali_1

-bind=172.17.114.76  绑定内网ip

-data-dir /opt/data1  数据存储目录为/opt/data1

-ui 启动默认ui界面

-client  consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1,可指定允许客户端使用什么ip去访问

```

members命令

```

描述:将agent加入到consul集群

使用案例:consul members

```

join命令

```

描述:列出consul cluster集群中的members

使用案例:consul join 192.168.63.101

```

leave命令

```

描述:将节点移除所在的集群

使用案例:consul leave 192.168.63.101

```


>启动consul并配置nginx的负载均衡


安装nginx的upsync模块


```

1. 获取并解压upsync模块安装包

wget https://github.com/weibocom/nginx-upsync-module/archive/v2.1.0.tar.gz

tar -zxvf v2.1.0.tar.gz


2. nginx重新进行编译

cd /home/nginx-1.18.0

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/home/pcre-8.44 --with-zlib=/home/zlib-1.2.11 --with-openssl=/home/openssl-1.1.1g --add-module=/home/nginx-upsync-module-2.1.0


3. 进行编译安装

make -j2 && make install

```


### 1.1 nginx配置


```

nginx配置如下:

        upstream blogs {

          server www.starsky-nginx.com:8080;

          upsync 192.168.63.102:8500/v1/kv/upstreams/nginx_test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;

          upsync_dump_path /vhost/server_test.conf;

          include /vhost/server_test.conf;

        }

        server

        {

           listen 80;

           server_name www.blog-nginxs.com;

           index index.html index.php;


           location ~ \.php$ {

               proxy_pass http://blogs;

           }

        }


        解释:

        192.168.63.102:8500/v1/kv/upstreams =》 连接consul的api资源地址

        nginx_test                          =》 相当于我们自己在consul中自定义的key

        upsync_timeout                      =》 超时时间6分钟

        upsync_interval                     =》 定时获取信息的时间

        upsync_type                         =》 类型

        strong_dependency=on;               =》 是否依赖consul运行

        upsync_dump_path                    =》 拉取之后申请配置文件

```


1.2 向consul加入服务


>启动consul服务并加入负载均衡服务器


```

启动consul:consul agent  -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -bind=192.168.63.101  -ui  -client=0.0.0.0


新增负载均衡nginx配置文件:

1. cd /vhost/

2. touch server_nginx.conf


向consul新增nginx服务器:

curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}' http://192.168.63.101:8500/v1/kv/upstreams/nginx_test/192.168.63.102:80


curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}' http://192.168.63.101:8500/v1/kv/upstreams/nginx_test/192.168.63.103:80

```


2. nginx高可用


2.1 keepalived概述


Keepalived是Linux下一个轻量级的高可用解决方案,它与HeartBeat、RoseHA实现的功能类似,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能


完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,监测集群中的系统服务,在集群节点间转移共享IP地址的所有者等,HeartBeat功能强大,但是部署和使用相对比较麻烦;与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HearBeat功能强大,但Keepalived部署和使用非常简单,所有配置只需一个配置文件即可完成。


>什么是keepalived


 Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。它根据TCP/IP参考模型的第三、第四和第五层交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点


 >keepalived的安装


```

1. 安装Keepalived需要的扩展

[root@localhost keepalived]# yum install gcc gcc-c++ openssl openssl-devel

[root@localhost home]# wget -q https://www.keepalived.org/software/keepalived-1.2.18.tar.gz


2. 解压Keepalived并安装

[root@localhost home]# tar -zxvf keepalived-1.2.18.tar.gz

[root@localhost home]# cd keepalived-1.2.18

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

[root@localhost keepalived-1.2.18]# make && make install


3. 将 keepalived 安装成 Linux 系统服务

因为没有使用 keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工作 复制默认配置文件到默认路径


[root@localhost keepalived-1.2.18]# mkdir /etc/keepalived

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


4. 复制 keepalived 服务脚本到默认的地址

[root@localhost keepalived-1.2.18]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

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

[root@localhost keepalived-1.2.18]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/


5. 设置 keepalived 服务开机启动

[root@localhost keepalived-1.2.18]# chkconfig keepalived on

```


2.2 keepalived的主从配置


>主的配置


```

! Configuration File for keepalived


global_defs {

    router_id LVS_MASTER

}


vrrp_script chk_nginx {

    script "/etc/keepalived/nginx.sh" ##检测nginx状态的脚本

    interval 2 ##检测的时间间隔

    weight 2

}


vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 79

    priority 100

    advert_int 1

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1234

    }

    virtual_ipaddress {

        192.168.63.104

    }

    track_script {

        chk_nginx

    }

}

```


>从的配置


```

! Configuration File for keepalived


global_defs {

    router_id LVS_MASTER

}


vrrp_script chk_nginx {

    script "/etc/keepalived/nginx.sh" ##检测nginx状态的脚本

    interval 2 ##检测的时间间隔

    weight 2

}


vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 79

    priority 90

    advert_int 1

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1234

    }

    virtual_ipaddress {

        192.168.63.104

    }

    track_script {

        chk_nginx

    }

}

```


完成以上配置后,主备服务器能够实现ip漂移,但是我们需要的功能实际是keepalived检测nginx负载均衡服务,一旦nginx负载均衡服务宕机,keepalived需要尝试去启动nginx,否则停止keepalived,让ip漂移到备用机上。下面是检测的脚本:

```sh

#! /bin/bash

START_NGINX="service nginx start"

LOG_FILE="/usr/local/nginx/logs/nginx_upstreams.log"

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

date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE

echo "check nginx status" >> $LOG_FILE

if [ $HAPS -eq 0 ];then

   echo $START_HAPROXY >> $LOG_FILE

   service nginx start

   sleep 3

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

      echo "start nginx failed, killall keepalived" >> $LOG_FILE

      killall keepalived

      service keepalived stop

   fi

fi

```


而在keepalived的配置中我们可以看到配置了

```

vrrp_script chk_nginx {

    script "/etc/keepalived/nginx.sh" ##检测nginx状态的脚本

    interval 2 ##检测的时间间隔

    weight 2

}


track_script {

    chk_nginx

}

```


keepalived的配置就是在引入与执行nginx的脚本对nginx进行检测。


  • 发表于 2021-04-23 20:11
  • 阅读 ( 800 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章