《nginx 三》實現nginx的動態負載均衡——實戰

Http動態負載均衡

什麼是動態負載均衡

傳統的負載均衡,若是Upstream參數發生變化,每次都須要從新加載nginx.conf文件,html

所以擴展性不是很高,因此咱們能夠採用動態負載均衡,實現Upstream可配置化、動態化,無需人工從新加載nginx.conf。node

這相似分佈式的配置中心linux

 

動態負載均衡實現方案

 

  1. Consul+Consul-template 

每次發現配置更改須要raload nginx,重啓Nginx。nginx

  1. Consul+OpenResty 實現無需raload動態負載均衡
  2. Consul+upsync+Nginx  實現無需raload動態負載均衡

 

 

經常使用服務器註冊與發現框架

 常見服務發現框架 Consul、Eureka、 ZooKeeper以及Etcd  ZooKeeper是這種類型的項目中歷史最悠久的之一,它起源於Hadoop。它很是成熟、可靠,被許多大公司(YouTube、eBay、雅虎等)使用。git

     etcd是一個採用HTTP協議的健/值對存儲系統,它是一個分佈式和功能層次配置系統,可用於構建服務發現系統。其很容易部署、安裝和使用,提供了可靠的數據持久化特性。它是安全的而且文檔也十分齊全。github

Consul快速入門

Consul是一款開源的分佈式服務註冊與發現系統,經過HTTP API可使得服務註冊、發現實現起來很是簡單,它支持以下特性。算法

 

  服務註冊:服務實現者能夠經過HTTP API或DNS方式,將服務註冊到Consul。後端

服務發現:服務消費者能夠經過HTTP API或DNS方式,從Consul獲取服務的IP和PORT。瀏覽器

故障檢測:支持如TCP、HTTP等方式的健康檢查機制,從而當服務有故障時自動摘除。tomcat

K/V存儲:使用K/V存儲實現動態配置中心,其使用HTTP長輪詢實現變動觸發和配置更改。

多數據中心:支持多數據中心,能夠按照數據中心註冊和發現服務,即支持只消費本地機房服務,使用多數據中心集羣還能夠避免單數據中心的單點故障。

Raft算法:Consul使用Raft算法實現集羣數據一致性。

經過Consul能夠管理服務註冊與發現,接下來須要有一個與Nginx部署在同一臺機器的Agent來實現Nginx配置更改和Nginx重啓功能。咱們有Confd或者Consul-template兩個選擇,而Consul-template是Consul官方提供的,咱們就選擇它了。其使用HTTP長輪詢實現變動觸發和配置更改(使用Consul的watch命令實現)。也就是說,咱們使用Consul-template實現配置模板,而後拉取Consul配置渲染模板來生成Nginx實際配置。

Consul環境搭建

 

1.下載consul_0.7.5_linux_amd64.zip

wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip

 

2.解壓consul_0.7.5_linux_amd64.zip

unzip consul_0.7.5_linux_amd64.zip

若是解壓出現該錯誤

-bash: unzip: 未找到命令

解決辦法

yum -y install unzip

 

3. 執行如下 ./consul 出現如下信息就說明安裝成功

[root@localhost soft] ./consul

usage: consul [--version] [--help] <command> [<args>]

Available commands are:

    agent          Runs a Consul agent

    configtest     Validate config file

    event          Fire a new event

    exec           Executes a command on Consul nodes

    force-leave    Forces a member of the cluster to enter the "left" state

    info           Provides debugging information for operators

    join           Tell Consul agent to join cluster

    keygen         Generates a new encryption key

    keyring        Manages gossip layer encryption keys

    kv             Interact with the key-value store

    leave          Gracefully leaves the Consul cluster and shuts down

    lock           Execute a command holding a lock

    maint          Controls node or service maintenance mode

    members        Lists the members of a Consul cluster

    monitor        Stream logs from a Consul agent

    operator       Provides cluster-level tools for Consul operators

    reload         Triggers the agent to reload configuration files

    rtt            Estimates network round trip time between nodes

    snapshot       Saves, restores and inspects snapshots of Consul server state

    version        Prints the Consul version

    watch          Watch for changes in Consul

 

4.啓動consul

個人linux Ip地址192.168.212.131

./consul agent -dev -ui -node=consul-dev -client=192.168.212.131

 

5.臨時關閉防火牆systemctl stop firewalld

 

6.瀏覽器訪問192.168.212.131:8500

 

 

 

 

 

7.使用PostMan 註冊Http服務

http://192.168.212.131:8500/v1/catalog/register

參數1

{"Datacenter": "dc1",

 "Node":"tomcat", "Address":"192.168.5.165","Service": {"Id" :"192.168.5.165:8080", "Service": "itmayiedu","tags": ["dev"], "Port": 8080}}

參數2

{"Datacenter": "dc1", "Node":"tomcat", "Address":"192.168.5.165","Service": {"Id" :"192.168.5.165:8081", "Service": "itmayeidu","tags": ["dev"], "Port": 8081}}

 

Datacenter指定數據中心,Address指定服務IP,Service.Id指定服務惟一標識,Service.Service指定服務分組,Service.tags指定服務標籤(如測試環境、預發環境等),Service.Port指定服務端口。

 

7.發現Http服務

http://192.168.212.131:8500/v1/catalog/service/item_jd_tomcat

 

 

nginx-upsync-module

注意:清除以前Nginx環境,從新安裝。

 

nginx-upsync-module簡介

Upsync是新浪微博開源的基於Nginx實現動態配置的三方模塊。Nginx-Upsync-Module的功能是拉取Consul的後端server的列表,並動態更新Nginx的路由信息。此模塊不依賴於任何第三方模塊。Consul做爲Nginx的DB,利用Consul的KV服務,每一個Nginx Work進程獨立的去拉取各個upstream的配置,並更新各自的路由。

nginx-upsync-module安裝

下載文件

 

  1. 安裝Nginx

wget http://nginx.org/download/nginx-1.9.10.tar.gz

     做用:實現反向代理、負載負載庫

  1. 安裝consul

wget https://releases.hashicorp.com/consul/0.7.1/consul_0.7.1_linux_amd64.zip

做用:對動態負載均衡均配置實現註冊

  1. 安裝nginx-upsync-module

wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip

做用:nginx動態獲取最新upstream信息

解壓安裝

unzip master.zip

unzip consul_0.7.1_linux_amd64.zip

若是解壓出現該錯誤

-bash: unzip: 未找到命令

解決辦法

yum -y install unzip

 

安裝Nginx
解壓Nginx

 

tar -zxvf nginx-1.9.10.tar.gz

 

配置Nginx

 

groupadd nginx

useradd -g nginx -s /sbin/nologin nginx

mkdir -p /var/tmp/nginx/client/

mkdir -p /usr/local/nginx

 

編譯Nginx

 

cd nginx-1.9.0

 

./configure   --prefix=/usr/local/nginx   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --with-http_realip_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre --add-module=../nginx-upsync-module-master

make && make install

 

編譯的是報錯

./configure: error: SSL modules require the OpenSSL library.

解決辦法

yum -y install openssl openssl-devel

Upstream 動態配置

  ##動態去consul 獲取註冊的真實反向代理地址

   upstream itmayiedu{

        server 127.0.0.1:11111;

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

        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;

    }

 

    server {

        listen       80;

        server_name  localhost;

 

        location / {

            proxy_pass http://itmayiedu;

            index  index.html index.htm;

        }

    }

 

upsync指令指定從consul哪一個路徑拉取上游服務器配置;upsync_timeout配置從consul拉取上游服務器配置的超時時間;upsync_interval配置從consul拉取上游服務器配置的間隔時間;upsync_type指定使用consul配置服務器;strong_dependency配置nginx在啓動時是否強制依賴配置服務器,若是配置爲on,則拉取配置失敗時nginx啓動一樣失敗。upsync_dump_path指定從consul拉取的上游服務器後持久化到的位置,這樣即便consul服務器出問題了,本地還有一個備份。

注意:替換 consul 註冊中心地址

建立upsync_dump_path

mkdir /usr/local/nginx/conf/servers/

upsync_dump_path指定從consul拉取的上游服務器後持久化到的位置,這樣即便consul服務器出問題了,本地還有一個備份。

啓動consul

臨時關閉防火牆systemctl stop firewalld

個人linux Ip地址192.168.212.131

./consul agent -dev -ui -node=consul-dev -client=192.168.212.131

 

添加nginx  Upstream服務

1.使用linux命令方式發送put請求

curl -X PUT http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

curl -X PUT http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

 

2.使用postmen 發送put請求

http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081 http://192.168.212.134:8500/v1/kv/upstreams/itmayiedu/192.168.212.1:8081

 

負載均衡信息參數

{"weight":1, "max_fails":2, "fail_timeout":10, "down":0}

啓動Nginx

Nginx

相關文章
相關標籤/搜索