亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Nginx雙機熱備的實現(xiàn)步驟

 更新時間:2024年05月12日 09:49:10   作者:逆流°只是風景-bjhxcc  
本文主要介紹了Nginx雙機熱備的實現(xiàn)步驟,是國內企業(yè)中最為普遍的一種高可用方案,具有一定的參考價值,感興趣的可以了解一下

目前所接觸的項目還不涉及到分布式,都是單機模式。不過好在至今沒出過什么大問題,基本能滿足客戶的需求。

由于數(shù)據(jù)量不是很大,單機的性能已經(jīng)可以滿足,按理不應該做加法,畢竟部署的越復雜,維護起來就越麻煩。

性能雖然可以滿足,但有一個不得不提的痛點:項目無法隨時更新。

目前的解決方式是:白天改bug、測試,等到晚上客戶不使用系統(tǒng)時才停機維護,效率相對較低。

有沒有可能讓項目可以隨時更新?
答案肯定是有,相對簡單的解決方案是:雙機熱備(應用雙活) 。

什么是雙機熱備?

這里引用一下百度百科的解釋。

雙機熱備是應用于服務器的一種解決方案,其構造思想是主機和從機通過TCP/IP網(wǎng)絡連接,正常情況下主機處于工作狀態(tài),從機處于監(jiān)視狀態(tài),一旦從機發(fā)現(xiàn)主機異常,從機將會在很短的時間之內代替主機,完全實現(xiàn)主機的功能。

就是同時部署兩套系統(tǒng),一主一備。主節(jié)點負責對外提供服務,備用節(jié)點默認不提供服務,只有在主節(jié)點出問題的情況下,備用節(jié)點才頂替主節(jié)點,繼續(xù)對外提供服務。
大哥不行了,二弟替一會兒。
可以解決什么問題?
利用這個思路,是否可以實現(xiàn)同時部署AB兩套系統(tǒng),當系統(tǒng)需要更新維護時,停用A服務,B服務頂替A工作。待A服務更新完畢后,A服務啟動提供升級后的服務,B服務停用再更新。實現(xiàn)應用的熱插拔?
答案當然也是可以的。
紙上得來終覺淺,絕知此事要躬行。
本人寫了個小demo親測!

實現(xiàn)思路

搭建項目前先簡單理一下思路。
要做的分為以下幾步:
1、啟動兩套簡單的Web服務
2、服務內就兩個簡單的方法

保存值到Session
從Session取值

3、Nginx配置負載均衡,PC01主,PC02備
3、保存Session到PC01服務,然后停用PC01
4、從PC02服務取值,看PC02能否正常工作并訪問Session
如果服務可以無縫切換,Session也都正常則表示成功。

項目環(huán)境

兩套SpringBoot服務(雙活)
Redis(實現(xiàn)Session共享)
Nginx(負載均衡-主備模式) (也可使用KeepAlived)

為什么需要Redis?
使用多套系統(tǒng)無法避開的一個問題就是Session,再也不能像以前單機模式下直接從request中getSession了,Session是保存在服務器的,多個服務器之間無法共享Session。關于共享Session有很多實現(xiàn)方案,這里采用的是Redis。
搭建步驟

1、先簡單看一下前端

由于只講環(huán)境搭建,所以項目竟可能的簡單。
只有兩個功能,保存值到Session和從Session中取值。

const PATH = ‘/backend/';
//保存到Session
function saveSession() {
    const personName = $('#personName').val();
    if (personName.length <= 0) {
        alert('請輸入再保存');
        return;
    }
    $.ajax({
        type:'post',
        url: PATH+"test/save",
        async:false,
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        data: {
            personName:personName
        },
        success: function(json) {
            $('#screen').text(json);
        }
    });
}

//查詢Session
function requestServer() {
    $.ajax({
        type:'post',
        url: PATH+"test/query",
        async:false,
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        success: function(json) {
            $('#screen').text(json);
        }
    });
}

2、再看一下后端服務

很簡單的一個服務,就兩個方法:保存值到session、從session中取值
只從request中獲取SessionId作為Key,數(shù)據(jù)作為Value保存到Redis。

@RestController
@RequestMapping("/test")
public class TestController {
	private static final String SERVER = "PC01";

	@Autowired
	private RedisUtil redisUtil;

	@RequestMapping("/save")
	public Object save(String personName, HttpServletRequest request, HttpServletResponse response) {
		String sessionId = request.getRequestedSessionId();
		if (redisUtil.set(sessionId, personName)) {
			return SERVER+",Session保存成功";
		}
		return "Session保存失敗";
	}

	@RequestMapping("/query")
	public Object query(HttpServletRequest request) {
		String sessionId = request.getRequestedSessionId();
		Object personName = redisUtil.get(sessionId);
		if (personName != null) {
			return "Hello," + personName+",我是"+SERVER;
		}
		return "Session為空";
	}
}

項目會編譯兩個jar包,同時部署。
PC01對應8081端口,PC02對應8082端口。

3、Nginx配置負載均衡

#主備模式,backup只有在主節(jié)點故障時才提供服務
upstream backend {  
   server 127.0.0.1:8081;  
   server 127.0.0.1:8082 backup;  
}
server {
    listen       81;
    server_name  localhost;
     location /{
		#前端
        root www/back; 
     } 
     location /backend{
        #反向代理到8081、8082
        proxy_pass http://backend;
     } 
}

到這一步環(huán)境就算搭建完成了。

4、測試

現(xiàn)在雖然PC01和PC02都是啟動的,但是只有PC01對外提供服務。
我們將‘小潘’保存到Session,然后查詢。

可以看到,我們現(xiàn)在訪問的是PC01服務,且Session也保存成功了。
接下來,我們停用PC01服務。

[root@localhost test]# lsof -i:8081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 71972 root 13u IPv6 88606 0t0 TCP *:tproxy (LISTEN)
[root@localhost test]# kill -9 71972

強制殺掉進程,項目會不會因此而掛掉呢?
再次請求查詢Session

可以看到,項目并沒有掛掉。不僅如此,而且Session也能正常訪問,PC02迅速頂替了PC01的位置,繼續(xù)對外提供服務。
接下來,就可以對PC01進行維護更新了,更新好了直接啟用,PC02又會退居幕后,等待下一次復出。
整個過程對于用戶而言是無縫的。
利用雙機熱備,不僅可以實現(xiàn)項目的隨時更新,而且還實現(xiàn)了高可用。即使PC01意外宕機,PC02也會迅速接替,不至于整個項目癱瘓。

到此這篇關于Nginx雙機熱備的實現(xiàn)步驟的文章就介紹到這了,更多相關Nginx雙機熱備內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Nginx+Lua腳本+Redis 實現(xiàn)自動封禁訪問頻率過高IP

    Nginx+Lua腳本+Redis 實現(xiàn)自動封禁訪問頻率過高IP

    本文主要介紹了如何使用OpenResty+Lua進行動態(tài)封禁IP的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • Nginx upstream的5種權重分配方式分享

    Nginx upstream的5種權重分配方式分享

    Nginx upstream的5種權重分配方式分享,需要的朋友可以參考下
    2012-09-09
  • Nginx單IP地址配置多個SSL證書的方法示例

    Nginx單IP地址配置多個SSL證書的方法示例

    這篇文章主要介紹了Nginx單IP地址配置多個SSL證書的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • LNMP 解決Access Denied錯誤詳細介紹

    LNMP 解決Access Denied錯誤詳細介紹

    這篇文章主要介紹了LNMP 解決Access Denied錯誤詳細介紹的相關資料,需要的朋友可以參考下
    2016-10-10
  • nginx代理本地文件夾如何獲取數(shù)據(jù)

    nginx代理本地文件夾如何獲取數(shù)據(jù)

    本文介紹了如何在Windows上安裝和配置Nginx,包括下載、解壓、啟動服務以及修改配置文件以實現(xiàn)特定功能,還提供了關于Nginx常用命令的說明,方便用戶管理服務
    2025-01-01
  • Nginx服務器中設置禁止訪問文件或目錄的方法

    Nginx服務器中設置禁止訪問文件或目錄的方法

    這篇文章主要介紹了Nginx服務器中設置禁止訪問文件或目錄的方法,對于協(xié)同遠程管理服務器的情況來講很有實用性,需要的朋友可以參考下
    2015-07-07
  • nginx中root和alias指令的使用

    nginx中root和alias指令的使用

    這篇文章主要介紹了nginx中root和alias指令的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Nginx下無法使用中文URL的解決方法

    Nginx下無法使用中文URL的解決方法

    最近發(fā)現(xiàn)有很多的url打不開,后來仔細觀察后發(fā)現(xiàn)是中文url的問題,所以這篇文章主要給大家介紹了Nginx下無法使用中文URL的解決方法,文中提供了兩種方法供大家參考學習,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Nginx的一些常用配置匯總

    Nginx的一些常用配置匯總

    nginx配置說簡單也簡單,說復雜也復雜,入門簡單,精通難,下面這篇文章主要給大家介紹了關于Nginx的一些常用配置,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 一句簡單命令重啟nginx

    一句簡單命令重啟nginx

    最近我的多個VPS經(jīng)常出現(xiàn)502錯誤,經(jīng)常需要重啟nginx,但網(wǎng)上的很多教程都需要繁瑣的啟動腳本,遠不如apache的重啟命令那么簡單。
    2010-03-03

最新評論