Nginx服務器部署 mycat數據庫中間件

1.開源數據庫中間件-MyCat

如今隨着互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,傳統的關係性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候NoSQL的出現暫時解決了這一危機。它通過降低數據的安全性,減少對事務的支持,減少對複雜查詢的支持,來獲取性能上的提升。
但是,在有些場合NoSQL一些折衷是無法滿足使用場景的,就比如有些使用場景是絕對要有事務與安全指標的。這個時候NoSQL肯定是無法滿足的,所以還是需要使用關係性數據庫。如果使用關係型數據庫解決海量存儲的問題呢?此時就需要做數據庫集羣,爲了提高查詢性能將一個數據庫的數據分散到不同的數據庫中存儲。
1.1 MyCat簡介
Mycat 背後是阿里曾經開源的知名產品——Cobar。Cobar 的核心功能和優勢是 MySQL 數據庫分片,此產品曾經廣爲流傳,據說最早的發起者對 Mysql 很精通,後來從阿里跳槽了,阿里隨後開源的 Cobar,並維持到 2013 年年初,然後,就沒有然後了。
Cobar 的思路和實現路徑的確不錯。基於 Java 開發的,實現了 MySQL 公開的二進制傳輸協議,巧妙地將自己僞裝成一個 MySQL Server,目前市面上絕大多數 MySQL 客戶端工具和應用都能兼容。比自己實現一個新的數據庫協議要明智的多,因爲生態環境在哪裏擺着。
Mycat 是基於 cobar 演變而來,對 cobar 的代碼進行了徹底的重構,使用 NIO 重構了網絡模塊,並且優化了 Buffer 內核,增強了聚合,Join 等基本特性,同時兼容絕大多數數據庫成爲通用的數據庫中間件。
簡單的說,MyCAT就是:一個新穎的數據庫中間件產品支持mysql集羣,或者mariadb cluster,提供高可用性數據分片集羣。你可以像使用mysql一樣使用mycat。對於開發人員來說根本感覺不到mycat的存在。
在這裏插入圖片描述
MyCat支持的數據庫:
在這裏插入圖片描述

1.2MyCat下載及安裝
1.2.1 MySQL安裝與啓動

JDK:要求jdk必須是1.7及以上版本
MySQL:推薦mysql是5.5以上版本
MySQL安裝與啓動步驟如下:( 步驟1-5省略 )
(1)將MySQL的服務端和客戶端安裝包(RPM)上傳到服務器
在這裏插入圖片描述
(2)查詢之前是否安裝過MySQL

rpm -qa|grep -i mysql

(3)卸載舊版本MySQL

rpm -e --nodeps  軟件名稱

(4)安裝服務端

rpm -ivh MySQL-server-5.5.49-1.linux2.6.i386.rpm

(5)安裝客戶端

rpm -ivh MySQL-client-5.5.49-1.linux2.6.i386.rpm

(6)啓動MySQL服務

service mysql start

(7)登錄MySQL

mysql -u root

(8)設置遠程登錄權限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456'  WITH GRANT OPTION;

在本地SQLyog 連接遠程MySQL進行測試
1.2.2 MyCat安裝及啓動
MyCat:
MyCat的官方網站:
http://www.mycat.org.cn/
下載地址:
https://github.com/MyCATApache/Mycat-download
第一步:將Mycat-server-1.4-release-20151019230038-linux.tar.gz上傳至服務器
第二步:將壓縮包解壓縮。建議將mycat放到/usr/local/mycat目錄下。

tar -xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz
mv mycat /usr/local

第三步:進入mycat目錄的bin目錄,啓動mycat

./mycat start

停止:

./mycat stop

mycat 支持的命令{ console | start | stop | restart | status | dump }
Mycat的默認端口號爲:8066
1.3MyCat分片-海量數據存儲解決方案
1.3.1 什麼是分片

簡單來說,就是指通過某種特定的條件,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單臺設備負載的效果。
數據的切分(Sharding)根據其切分規則的類型,可以分爲兩種切分模式。
(1)一種是按照不同的表(或者Schema)來切分到不同的數據庫(主機)之上,這種切分可以稱之爲數據的垂直(縱向)切分
在這裏插入圖片描述
(2)另外一種則是根據表中的數據的邏輯關係,將同一個表中的數據按照某種條件拆分到多臺數據庫(主機)上面,這種切分稱之爲數據的水平(橫向)切分。
在這裏插入圖片描述
MyCat分片策略:
在這裏插入圖片描述
1.3.2 分片相關的概念
邏輯庫(schema) :

前面一節講了數據庫中間件,通常對實際應用來說,並不需要知道中間件的存在,業務開發人員只需要知道數據庫的概念,所以數據庫中間件可以被看做是一個或多個數據庫集羣構成的邏輯庫。
邏輯表(table)
既然有邏輯庫,那麼就會有邏輯表,分佈式數據庫中,對應用來說,讀寫數據的表就是邏輯表。邏輯表,可以是數據切分後,分佈在一個或多個分片庫中,也可以不做數據切分,不分片,只有一個表構成。
1 分片表:是指那些原有的很大數據的表,需要切分到多個數據庫的表,這樣,每個分片都有一部分數據,所有分片構成了完整的數據。 總而言之就是需要進行分片的表。
2 非分片表:一個數據庫中並不是所有的表都很大,某些表是可以不用進行切分的,非分片是相對分片表來說的,就是那些不需要進行數據切分的表。
分片節點(dataNode)
數據切分後,一個大表被分到不同的分片數據庫上面,每個表分片所在的數據庫就是分片節點(dataNode)。
節點主機(dataHost)
數據切分後,每個分片節點(dataNode)不一定都會獨佔一臺機器,同一機器上面可以有多個分片數據庫,這樣一個或多個分片節點(dataNode)所在的機器就是節點主機(dataHost),爲了規避單節點主機併發數限制,儘量將讀寫壓力高的分片節點(dataNode)均衡的放在不同的節點主機(dataHost)。
分片規則(rule)
前面講了數據切分,一個大表被分成若干個分片表,就需要一定的規則,這樣按照某種業務規則把數據分到某個分片的規則就是分片規則,數據切分選擇合適的分片規則非常重要,將極大的避免後續數據處理的難度。
1.3.3 MyCat分片配置
(1)配置schema.xml
schema.xml作爲MyCat中重要的配置文件之一,管理着MyCat的邏輯庫、邏輯表以及對應的分片規則、DataNode以及DataSource。弄懂這些配置,是正確使用MyCat的前提。這裏就一層層對該文件進行解析。
schema 標籤用於定義MyCat實例中的邏輯庫
Table 標籤定義了MyCat中的邏輯表 rule用於指定分片規則,auto-sharding-long的分片規則是按ID值的範圍進行分片 1-5000000 爲第1片 5000001-10000000 爲第2片… 具體設置我們會在第5小節中講解。
dataNode 標籤定義了MyCat中的數據節點,也就是我們通常說所的數據分片。
dataHost標籤在mycat邏輯庫中也是作爲最底層的標籤存在,直接定義了具體的數據庫實例、讀寫分離配置和心跳語句。
在服務器上創建3個數據庫,分別是db1 db2 db3
修改schema.xml如下:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
	<schema name="PINYOUGOUDB" checkSQLschema="false" sqlMaxLimit="100">
		<table name="tb_test" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
		writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="192.168.25.142:3306" user="root"
			password="123456">
		</writeHost>
	</dataHost>	
</mycat:schema>

(2)配置 server.xml
server.xml幾乎保存了所有mycat需要的系統配置信息。最常用的是在此配置用戶名、密碼及權限。在system中添加UTF-8字符集設置,否則存儲中文會出現問號
utf8
修改user的設置 , 我們這裏爲 PINYOUGOUDB設置了兩個用戶

<user name="test">
		<property name="password">test</property>
		<property name="schemas">PINYOUGOUDB</property>
	</user>
	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">PINYOUGOUDB</property>
	</user>

1.3.4 MyCat分片測試
進入mycat ,執行下列語句創建一個表:

CREATE TABLE tb_test (
  id BIGINT(20) NOT NULL,
  title VARCHAR(100) NOT NULL ,
  PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 

創建後你會發現,MyCat會自動將你的錶轉換爲大寫,這一點與Oracle有些類似。
在這裏插入圖片描述
我們再查看MySQL的3個庫,發現表都自動創建好啦。好神奇。
接下來是插入表數據,注意,在寫INSERT語句時一定要寫把字段列表寫出來,否則會出現下列錯誤提示:
錯誤代碼: 1064
partition table, insert must provide ColumnList
我們試着插入一些數據:

INSERT INTO TB_TEST(ID,TITLE) VALUES(1,'goods1');
INSERT INTO TB_TEST(ID,TITLE) VALUES(2,'goods2');
INSERT INTO TB_TEST(ID,TITLE) VALUES(3,'goods3');

我們會發現這些數據被寫入到第一個節點中了,那什麼時候數據會寫到第二個節點中呢?
我們插入下面的數據就可以插入第二個節點了

INSERT INTO TB_TEST(ID,TITLE) VALUES(5000001,'goods5000001');

因爲我們採用的分片規則是每節點存儲500萬條數據,所以當ID大於5000000則會存儲到第二個節點上。
目前只設置了兩個節點,如果數據大於1000萬條,會怎麼樣呢?執行下列語句測試一下

INSERT INTO TB_TEST(ID,TITLE) VALUES(10000001,'goods10000001');

1.3.5 MyCat分片規則
rule.xml用於定義分片規則 ,我們這裏講解兩種最常見的分片規則
(1)按主鍵範圍分片rang-long
在配置文件中我們找到

id rang-long

tableRule 是定義具體某個表或某一類表的分片規則名稱 columns用於定義分片的列 algorithm代表算法名稱 我們接着找rang-long的定義


autopartition-long.txt

Function用於定義算法 mapFile 用於定義算法需要的數據,我們打開autopartition-long.txt

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

(2)一致性哈希murmur
當我們需要將數據平均分在幾個分區中,需要使用一致性hash規則
我們找到function的name爲murmur 的定義,將count屬性改爲3,因爲我要將數據分成3片

<function name="murmur"
		class="org.opencloudb.route.function.PartitionByMurmurHash">
		<property name="seed">0</property><!-- 默認是0 -->
		<property name="count">3</property><!-- 要分片的數據庫節點數量,必須指定,否則沒法分片 -->
		<property name="virtualBucketTimes">160</property><!-- 一個實際的數據庫節點被映射爲這麼多虛擬節點,默認是160倍,也就是虛擬節點數是物理節點數的160倍 -->
		<!-- <property name="weightMapFile">weightMapFile</property> 節點的權重,沒有指定權重的節點默認是1。以properties文件的格式填寫,以從0開始到count-1的整數值也就是節點索引爲key,以節點權重值爲值。所有權重值必須是正整數,否則以1代替 -->
		<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
			用於測試時觀察各物理節點與虛擬節點的分佈情況,如果指定了這個屬性,會把虛擬節點的murmur hash值與物理節點的映射按行輸出到這個文件,沒有默認值,如果不指定,就不會輸出任何東西 -->
	</function>

我們再配置文件中可以找到表規則定義

id murmur

但是這個規則指定的列是id ,如果我們的表主鍵不是id ,而是order_id ,那麼我們應該重新定義一個tableRule:

order_id murmur

在schema.xml中配置邏輯表時,指定規則爲sharding-by-murmur-order

<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" />

我們測試一下,創建品優購的訂單表 ,並插入數據,測試分片效果。

1.4瞭解數據庫讀寫分離
數據庫讀寫分離對於大型系統或者訪問量很高的互聯網應用來說,是必不可少的一個重要功能。對於MySQL來說,標準的讀寫分離是主從模式,一個寫節點Master後面跟着多個讀節點,讀節點的數量取決於系統的壓力,通常是1-3個讀節點的配置
在這裏插入圖片描述
在這裏插入圖片描述
Mycat讀寫分離和自動切換機制,需要mysql的主從複製機制配合。

Nginx反向代理配置:

 server {
            listen       80;
            server_name  manage.ayh.com;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        location / {
			proxy_pass http://192.168.0.101:9001;
			proxy_connect_timeout 600;
			proxy_read_timeout 600;
        }
    }
	server {
        listen       80;
        server_name  api.ayh.com;
 
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
        location / {
			proxy_pass http://192.168.0.101:10010;
			proxy_connect_timeout 600;
			proxy_read_timeout 600;
        }
    }

2.Nginx的安裝與啓動

2.1什麼是Nginx
Nginx 是一款高性能的 http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師伊戈爾·西索夫(Igor Sysoev)所開發,官方測試 nginx 能夠支支撐 5 萬併發鏈接,並且 cpu、內存等資源消耗卻非常低,運行非常穩定。

Nginx 應用場景:
1、http 服務器。Nginx 是一個 http 服務可以獨立提供 http 服務。可以做網頁靜態服務器。
2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集羣可以使用 nginx 做反向代理。並且多臺服務器可以平均分擔負載,不會因爲某臺服務器負載高宕機而某臺服務器閒置的情況。
2.2 Nginx在Linux下的安裝
重新準備一臺虛擬機作爲服務器。比如IP地址爲192.168.25.141
2.2.1環境準備
(1)需要安裝 gcc 的環境【】

**yum install gcc-c++**   **聯網狀態**下

(2)第三方的開發包。【】
 PCRE
PCRE(Perl Compatible Regular Expressions)是一個 Perl 庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫。

yum install -y pcre pcre-devel

注:pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx 也需要此庫。
 zlib
zlib 庫提供了很多種壓縮和解壓縮的方式,nginx 使用 zlib 對 http 包的內容進行 gzip,所以需要在 linux 上安裝 zlib 庫。

yum install -y zlib zlib-devel

 OpenSSL
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程序供測試或其它目的使用。nginx 不僅支持 http 協議,還支持 https(即在 ssl 協議上傳輸 http),所以需要在 linux安裝 openssl 庫。

yum install -y openssl openssl-devel

2.2.2 Nginx下載
官方網站下載 nginx:http://nginx.org/
我們使用的版本是 1.8.0 版本。
2.2.3 Nginx安裝
第一步:把 nginx 的源碼包nginx-1.8.0.tar.gz上傳到 linux 系統
Alt+p 啓動sftp ,將nginx-1.8.0.tar.gz上傳
第二步:解壓縮
tar zxvf nginx-1.8.0.tar.gz
第三步:進入nginx-1.8.0目錄 使用 configure 命令創建一 makeFile 文件。
./configure
–prefix=/usr/local/nginx
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi
執行後可以看到Makefile文件
在這裏插入圖片描述
---- 知識點小貼士 ----

Makefile是一種配置文件, Makefile
一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲
makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。

---- 知識點小貼士 ----

configure參數 ./configure
–prefix=/usr \ 指向安裝目錄
–sbin-path=/usr/sbin/nginx \ 指向(執行)程序文件(nginx)
–conf-path=/etc/nginx/nginx.conf \ 指向配置文件
–error-log-path=/var/log/nginx/error.log \ 指向log
–http-log-path=/var/log/nginx/access.log \ 指向http-log
–pid-path=/var/run/nginx/nginx.pid \ 指向pid
–lock-path=/var/lock/nginx.lock \ (安裝文件鎖定,防止安裝文件被別人利用,或自己誤操作。)
–user=nginx
–group=nginx
–with-http_ssl_module \ 啓用ngx_http_ssl_module支持(使支持https請求,需已安裝openssl)
–with-http_flv_module \ 啓用ngx_http_flv_module支持(提供尋求內存使用基於時間的偏移量文件)
–with-http_stub_status_module \ 啓用ngx_http_stub_status_module支持(獲取nginx自上次啓動以來的工作狀態)
–with-http_gzip_static_module \ 啓用ngx_http_gzip_static_module支持(在線實時壓縮輸出數據流)
–http-client-body-temp-path=/var/tmp/nginx/client/ \ 設定http客戶端請求臨時文件路徑
–http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 設定http代理臨時文件路徑
–http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 設定http fastcgi臨時文件路徑
–http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 設定http uwsgi臨時文件路徑
–http-scgi-temp-path=/var/tmp/nginx/scgi \ 設定http scgi臨時文件路徑
–with-pcre 啓用pcre庫

第四步:編譯
make
第五步:安裝
make install
2.3 Nginx啓動與訪問
注意:啓動nginx 之前,根目錄下 上邊將臨時文件目錄指定爲/var/temp/nginx/client, 需要在/var 下創建此 目錄
mkdir /var/temp/nginx/client -p
進入到Nginx目錄下的sbin目錄
cd /usr/local/ngiux/sbin
輸入命令啓動Nginx
./nginx
啓動後查看進程
ps aux|grep nginx
在這裏插入圖片描述

地址欄輸入虛擬機的IP即可訪問(默認爲80端口)
在這裏插入圖片描述
關閉 nginx:

./nginx -s stop

或者

./nginx -s quit

重啓 nginx:
1、先關閉後啓動。
2、刷新配置文件:

./nginx -s reload

3.Nginx靜態網站部署
3.1 靜態網站的部署

將我們之前生成的靜態頁(d:\item)上傳到服務器的/usr/local/nginx/html下即可訪問

3.2 配置虛擬主機
虛擬主機,也叫“網站空間”,就是把一臺運行在互聯網上的物理服務器劃分成多個“虛擬”服務器。虛擬主機技術極大的促進了網絡技術的應用和普及。同時虛擬主機的租用服務也成了網絡時代的一種新型經濟形式。
3.2.1 端口綁定
(1)上傳靜態網站
將前端靜態頁cart.html 以及圖片樣式等資源 上傳至 /usr/local/nginx/cart 下
將前端靜態頁search.html 以及圖片樣式等資源 上傳至 /usr/local/nginx/search 下
(2)修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf

 server {
        listen       81;
        server_name  localhost;
        location / {
            root   cart;
            index  cart.html;
        }      
    }
    server {
        listen       82;
        server_name  localhost;
        location / {
            root   search;
            index  search.html;
        }        
    }

(3)訪問測試:
地址欄輸入http://192.168.25.141:81 可以看到購物車頁面
地址欄輸入http://192.168.25.141:82 可以看到搜索頁面
3.2.2 域名綁定
什麼是域名:

域名(Domain Name),是由一串用“點”分隔的字符組成的Internet上某一臺計算機或計算機組的名稱,用於在數據傳輸時標識計算機的電子方位(有時也指地理位置,地理上的域名,指代有行政自主權的一個地方區域)。域名是一個IP地址上有“面具” 。域名的目的是便於記憶和溝通的一組服務器的地址(網站,電子郵件,FTP等)。域名作爲力所能及難忘的互聯網參與者的名稱。域名按域名系統(DNS)的規則流程組成。在DNS中註冊的任何名稱都是域名。域名用於各種網絡環境和應用程序特定的命名和尋址目的。通常,域名錶示互聯網協議(IP)資源,例如用於訪問因特網的個人計算機,託管網站的服務器計算機,或網站本身或通過因特網傳送的任何其他服務。世界上第一個註冊的域名是在1985年1月註冊的。
域名級別:
(1)頂級域名
頂級域名又分爲兩類:
一是國家頂級域名(national top-level domainnames,簡稱nTLDs),200多個國家都按照ISO3166國家代碼分配了頂級域名,例如中國是cn,美國是us,日本是jp等;
二是國際頂級域名(international top-level domain names,簡稱iTDs),例如表示工商企業的 .Com .Top,表示網絡提供商的.net,表示非盈利組織的.org,表示教育的.edu,以及沒有限制的中性域名如.xyz等。大多數域名爭議都發生在com的頂級域名下,因爲多數公司上網的目的都是爲了贏利。但因爲自2014年以來新頂級域名的發展,域名爭議案件數量增長幅度越來越大[5] 。爲加強域名管理,解決域名資源的緊張,Internet協會、Internet分址機構及世界知識產權組織(WIPO)等國際組織經過廣泛協商, 在原來三個國際通用頂級域名:(com)的基礎上,新增加了7個國際通用頂級域名:firm(公司企業)、store(銷售公司或企業)、Web(突出WWW活動的單位)、arts(突出文化、娛樂活動的單位)、rec (突出消遣、娛樂活動的單位)、info(提供信息服務的單位)、nom(個人),並在世界範圍內選擇新的註冊機構來受理域名註冊申請。
例如:baidu.com
(2)二級域名
二級域名是指頂級域名之下的域名,在國際頂級域名下,它是指域名註冊人的網上名稱,例如 ibm,yahoo,microsoft等;在國家頂級域名下,它是表示註冊企業類別的符號,例如.top,com,edu,gov,net等。
中國在國際互聯網絡信息中心(Inter NIC) 正式註冊並運行的頂級域名是CN,這也是中國的一級域名。在頂級域名之下,中國的二級域名又分爲類別域名和行政區域名兩類。類別域名共7個, 包括用於科研機構的ac;用於工商金融企業的com、top;用於教育機構的edu;用於政府部門的 gov;用於互聯網絡信息中心和運行中心的net;用於非盈利組織的org。而行政區域名有34個,分別對應於中國各省、自治區和直轄市。
例如:map.baidu.com
(3)三級域名
三級域名用字母( A~Z,a~z,大小寫等)、數字(0~9)和連接符(-)組成, 各級域名之間用實點(.)連接,三級域名的長度不能超過20個字符。如無特殊原因,建議採用申請人的英文名(或者縮寫)或者漢語拼音名 (或者縮寫) 作爲三級域名,以保持域名的清晰性和簡潔性。
例如:
item.map.baidu.com
域名與IP綁定:
一個域名對應一個 ip 地址,一個 ip 地址可以被多個域名綁定。
本地測試可以修改 hosts 文件(C:\Windows\System32\drivers\etc)
可以配置域名和 ip 的映射關係,如果 hosts 文件中配置了域名和 ip 的對應關係,不需要走dns 服務器。
我們可以通過一個叫SwitchHosts的軟件來修改域名指向
新增方案:

指定綁定規則 IP 域名 然後確定。

做好域名指向後,修改nginx配置文件

 server {
        listen       80;
        server_name  cart.pinyougou.com;
        location / {
            root   cart;
            index  cart.html;
        }
    }
    server {
        listen       80;
        server_name  search.pinyougou.com;
        location / {
            root   search;
            index  search.html;
        }
    }

執行以下命令,刷新配置
[root@localhost sbin]# ./nginx -s reload
測試:
地址欄輸入http://cart.ayh.com/

地址欄輸入http://search.ayh.com/

4.Nginx反向代理與負載均衡
4.1 反向代理
4.1.1 什麼是反向代理

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。
首先我們先理解正向代理,如下圖:
在這裏插入圖片描述
正向代理是針對你的客戶端,而反向代理是針對服務器的,如下圖

在這裏插入圖片描述
在這裏插入圖片描述
4.1.2 配置反向代理-準備工作
(1) 將網站首頁頁面部署到tomcat中(ROOT目錄),上傳到服務器。
(2)啓動TOMCAT,輸入網址http://192.168.25.141:8080可以看到網站首頁
4.1.3 配置反向代理
(1)在Nginx主機修改 Nginx配置文件

  upstream tomcat-portal {
	   server 192.168.25.141:8080;
    }
    server {
        listen       80;
        server_name  www.ayh.com;   
        location / {
            proxy_pass   http://tomcat-portal;
            index  index.html;
        }
    }

(2)重新啓動Nginx 然後用瀏覽器測試: www.ayh.com (此域名須配置域名指向)
4.2 負載均衡
4.2.1 什麼是負載均衡

負載均衡 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
負載均衡,英文名稱爲Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。
4.2.2 配置負載均衡-準備工作
(1)將剛纔放有首頁工程的tomcat複製兩份,端口分別爲8180 和8280 。
(2)分別啓動這兩個tomcat服務器的tomcat服務。
(3)爲了能夠區分是訪問哪個服務器的網站,可以在首頁標題加上標記以便區分。
4.2.3 配置負載均衡
修改 Nginx配置文件:

 upstream tomcat-portal {
	server 192.168.25.141:8080;
	server 192.168.25.141:8180;
	server 192.168.25.141:8280;
    }
    server {
        listen       80;
        server_name  www.ayh.com;
 
        location / {
            proxy_pass   http://tomcat-portal;
            index  index.html;
        }       
       
    }

地址欄輸入http://www.ayh.com/ 刷新觀察每個網頁的標題,看是否不同。
經過測試,三臺服務器出現的概率各爲33.3333333%,交替顯示。
如果其中一臺服務器性能比較好,想讓其承擔更多的壓力,可以設置權重。
比如想讓NO.1出現次數是其它服務器的2倍,則修改配置如下:
upstream tomcat-portal {
server 192.168.25.141:8080;
server 192.168.25.141:8180 weight=2;
server 192.168.25.141:8280;
}
經過測試,每刷新四次,有兩次是8180
4.3 瞭解高可用
4.3.1什麼是高可用

nginx 作爲負載均衡器,所有請求都到了 nginx,可見 nginx 處於非常重點的位置,如果nginx 服務器宕機後端 web 服務將無法提供服務,影響嚴重。
爲了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監控程序,通過傳送諸如“I am alive”這樣的信息來監控對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務 IP 並繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務 IP 地址,這樣的主服務器就開始再次提供負載均衡服務。
4.3.2 keepalived簡介
keepalived 是集羣管理中保證集羣高可用的一個服務軟件,用來防止單點故障。
Keepalived 的作用是檢測 web 服務器的狀態,如果有一臺 web 服務器死機,或工作出現故障,Keepalived 將檢測到,並將有故障的 web 服務器從系統中剔除,當 web 服務器工作正常後 Keepalived 自動將 web 服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的 web 服務器。
keepalived 是以 VRRP 協議爲實現基礎的,VRRP 全稱 Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,可以認爲是實現路由器高可用的協議,即將 N 臺提供相同功能的
路由器組成一個路由器組,這個組裏面有一個 master 和多個 backup,master 上面有一個對外提供服務的 vip(VIP = Virtual IPAddress,虛擬 IP 地址,該路由器所在局域網內其他機器的默認路由爲該 vip),master 會發組播,當 backup 收不到 VRRP 包時就認爲 master 宕掉了,這時就需要根據 VRRP 的優先級來選舉一個 backup 當 master。這樣的話就可以保證路由器的高可用了。
keepalived 主要有三個模塊,分別是 core、check 和 VRRP。
core 模塊爲 keepalived 的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。
check 負責健康檢查,包括常見的各種檢查方式。
VRRP 模塊是來實現 VRRP 協議的。
初始狀態:
在這裏插入圖片描述
主機宕機:
在這裏插入圖片描述
主機恢復:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章