Consul+Nginx+Upsync+Linux+Keepalived+Lvs的動態負載均衡

来源:https://www.cnblogs.com/lzh110/archive/2018/08/09/9452463.html
-Advertisement-
Play Games

註: Nginx版本必須大於等於1.9,linux我使用的是7.0版本,記得關閉防火牆 開始正文: 這裡只提一下兩個比較會出錯的配置,consul,upsync,PCRE庫,SSL庫,ZLIB庫的配置網上很多不一一詳解(我是在/usr/local中配置的) Nginx的配置: cd /usr/loc ...


 

註:

linux我使用的是7.0版本,Nginx版本是1.9.9,記得關閉防火牆

開始正文(我是在/usr/local中配置的):

安裝PCRE庫:

1.cd /usr/local/

2.wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz

3.tar -zxvf pcre-8.33.tar.gz

4cd pcre-8.33

5. ./configure

6.make && make install

如果報錯:

在 linux 中執行 wget 命令提示 -bash: wget: command not found

解決辦法 yum -y install wget

安裝SSL庫:

1.cd /usr/local/

2.wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz

3.tar -zxvf openssl-1.0.1j.tar.gz

4cd openssl-1.0.1j

5. ./config

6.make && make install

安裝zlib庫:

1.cd /usr/local/

2.wget http://zlib.net/zlib-1.2.11.tar.gz

3.tar -zxvf zlib-1.2.11.tar.gz

4.cd zlib-1.2.11

5. ./configure

6.make && make install

安裝Nginx:

1.cd /usr/local/

2.wget http://nginx.org/download/nginx-1.9.9.tar.gz

3.tar -zxvf nginx-1.9.9.tar.gz

4.groupadd nginx

5.useradd -g nginx -s /sbin/nologin nginx

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

7.mkdir -p /usr/local/nginx

8.cd nginx-1.9.9

9. ./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

此時如果報錯SSL modules require the OpenSSL library

解決辦法

yum -y install openssl openssl-devel,然後重新執行以上代碼

10.make && make install

如下圖已經啟動完成

 

 

安裝Consul:

1.cd /usr/local/

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

3.unzip consul_0.7.5_linux_amd64.zip

如果解壓出現該錯誤

-bash: unzip: 未找到命令

解決辦法

yum -y install unzip

執行./consul出現如下內容說明已安裝成功

 

安裝nginx-upsync-module:

1.cd /usr/local/

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

unzip master.zip

如果解壓出現該錯誤

-bash: unzip: 未找到命令

解決辦法

yum -y install unzip

安裝Keepalived:

1.下載keepalived

wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2.解壓安裝:

tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

3.下載插件openssl

yum install -y openssl openssl-devel(需要安裝一個軟體包)

4.開始編譯keepalived

cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

5. make && make install

執行./configure --prefix=/usr/local/keepalived時報錯:configure: error: Popt libraries is required

出現此錯誤的原因:

未安裝popt的開發包

解決方法:

yum install popt-devel

安裝好popt的開發包。重新執行以上步驟即可。

keepalived安裝成Linux系統服務:

將keepalived安裝成Linux系統服務,因為沒有使用keepalived的預設安裝路徑,安裝完成之後,需要做一些修改工作:

首先創建文件夾,將keepalived配置文件進行複製:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然後複製keepalived腳本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/sbin/keepalived /usr/sbin/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

安裝到這一步可能會報錯文件已經存在,所以執行下麵代碼:

cd /usr/sbin/ 

rm -f keepalived  

cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

可以設置開機啟動:chkconfig keepalived on,最後再創建一個存放備份的文件夾,mkdir /usr/local/nginx/conf/servers/,到此安裝完畢。

執行命令:

service keepalived start
service keepalived stop

如下圖,說明安裝成功

 

local目錄下的內容:

 

Nginx.config配置文件:

截取關鍵兩部分:

upstream test {
        #這個不用管,固定的
        server 127.0.0.1:11111;
        #連接ConculServer,動態獲取upstream配置負載均衡信息
        upsync 192.168.44.128:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        #動態獲取ConculServer相關負載均衡信息持久化到硬碟
        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
    }
    server {
        listen 80;
        server_name  localhost;
        location = / {
        proxy_pass http://test;      
        index index.html index.htm;
        proxy_connect_timeout 1;
        proxy_send_timeout 1;
        proxy_read_timeout 1;
        }
    }

 

Keepalived.config配置文件:

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,AA_1 為虛擬路由的標示符,自己定義名稱
vrrp_instance AA_1 {
    ###MASTER 主的意思  BACKUP 從
    state MASTER #來決定主從
    interface ens33 # 綁定虛擬 IP 的網路介面,根據自己的機器填寫
    virtual_router_id 111 # 虛擬路由的 ID 號, 有主備連個nginx時,兩個節點設置必須一樣(自己定義的)
    mcast_src_ip 192.168.44.128 #填寫虛擬機ip
    priority 100 # 節點優先順序,主要比從節點優先順序高
    nopreempt # 優先順序高的設置 nopreempt 解決異常恢復後再次搶占的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,預設 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
    ### 虛擬IP地址配置規範 前三個一致,最後一個不一樣
    virtual_ipaddress {
        192.168.44.110 # 虛擬ip
    }
}

配置完畢後在虛擬機中查看ip地址,有如下兩個說明配置成功

最後部署腳本:

 #!/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

授權腳本:

chmod 777 nginx_check.sh

配置完畢,開始測試

啟動keepalived:service keepalived start

啟動consul(local目錄下啟動):./consul agent -dev -ui -node=consul-dev -client=(虛擬機ip地址)

ConculWeb的ip地址(要和虛擬機的ip地址相同):http://192.168.44.128:8500

Postman中的URL(必須用put,Postman的使用不寫了,發送下麵鏈接便可以在consulweb中的key/value中查看到):

我開了兩個tomcat,一個埠號為8081,另一個為8082

http://192.168.44.128:8500/v1/kv/upstreams/test/......:8081

http://192.168.44.128:8500/v1/kv/upstreams/test/......:8082

安裝好keepalived後我只要啟動Lvs的vip虛擬ip地址便可以啟動nginx

註:URL中的“test”是和配置文件中的一致的,192.168.44.110是我設置的虛擬ip地址,192.168.44.128是我的虛擬機的ip地址,打碼的是我的ip地址,但後面必須跟兩個tomcat的埠號。

 通過開啟keepalived也可以開啟nginx,所以不需要手動開啟nginx了

 

 

至此,結束。有錯地方希望各位指正。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需求出現/使用場景: 因為公司需要將word辦的介面文檔線上化,看起來是個很好的事情,但是就是苦逼了我們這些幹活的,其中工程量最大的就是參數的錄入,要是參數少也罷,有的介面動輒三四十個參數,更甚八九十個,我手動複製了一個三四十個的就讓我懷疑人生,我覺的我的人生不能在賦值介面參數中浪費掉。以前也學過一 ...
  • 記憶體限制:256 MiB 時間限制:2000 ms 標準輸入輸出 題目類型:傳統 評測方式:文本比較 上傳者: 匿名 【題目描述】 這是一道模板題。 維護一個 nnn 點的無向圖,支持: 加入一條連接 uuu 和 vvv 的無向邊 查詢 uuu 和 vvv 的連通性 由於本題數據較大,因此輸出的時候 ...
  • 面向對象 面向過程的代表主要是 語言,面向對象是相對面向過程而言, 是面向對象的編程語言,面向過程是通過函數體現,面向過程主要是功能行為。 而對於面向對象而言,將功能封裝到對象,所以面向對象是基於面向過程的。以前是主要以面向過程為思想,現在是將功能裝進對象中,如果要用到功能時,就調用該對象即可。 面 ...
  • 數組的綜合應用 冒泡排序 為什麼這個排序要叫冒泡呢?為什麼不叫其他名詞呢? 其實這個取名是根據排序演算法的基本思路命名的,見名知意,冒泡排序,就是想泡泡在水裡一樣,在水裡大的泡泡先浮出水面,就是大的先排出來,最小的最慢排出。 冒泡排序,是對排序的各個元素從頭到尾依次進行相鄰的大小比較, 比如你是隊長, ...
  • 給定一個僅包含大小寫字母和空格 ' ' 的字元串,返回其最後一個單詞的長度。 如果不存在最後一個單詞,請返回 0 。 說明:一個單詞是指由字母組成,但不包含任何空格的字元串。 示例: 輸入: "Hello World" 輸出: 5 給定一個僅包含大小寫字母和空格 ' ' 的字元串,返回其最後一個單詞 ...
  • 給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大,為 6。 class Solution: def maxSubAr ...
  • 前言 SqlSession是Mybatis最重要的構建之一,可以簡單的認為Mybatis一系列的配置目的是生成類似 JDBC生成的Connection對象的SqlSession對象,這樣才能與資料庫開啟“溝通”,通過SqlSession可以實現增刪改查(當然現在更加推薦是使用Mapper介面形式), ...
  • 前面寫過關於傅里葉演算法的應用例子。 《基於傅里葉變換的音頻重採樣演算法 (附完整c代碼)》 當然也就是舉個例子,主要是學習傅里葉變換。 這個重採樣思路還有點瑕疵, 稍微改一下,就可以支持多通道,以及提升性能。 當然思路很簡單,就是切分,合併。 留個作業哈。 本文不講過多的演算法思路,傅里葉變換的各種變種 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...