分布式環(huán)境搭建的過程記錄
作者:彼岸~擷
來源:SegmentFault 思否社區(qū)
# 分布式實現(xiàn)的過程整理
1、反向代理
1.1 最初的需求
通過image.jt.com的網(wǎng)址訪問自己的圖片信息
虛擬地址:http://image.jt.com/
磁盤地址:D:JT-SOFTimages
//引入配置文件@PropertySource("classpath:/properties/image.properties")//拿到配置文件中的image.localDir的值并注入給localDir@Value("${image.localDir}")private String localDir; // = "D:/JT-SOFT/images"; //1.優(yōu)化點一
2.2 什么是反向代理
業(yè)務(wù)分析:為了讓所有的用戶都可以訪問到圖片信息,準(zhǔn)備虛擬地址,并實現(xiàn)虛擬地址和本地磁盤之間的映射關(guān)系,用反向代理實現(xiàn)
反向代理的說明:反向代理服務(wù)器位于用戶與目標(biāo)服務(wù)器之間,但是對于用戶而言,反向代理服務(wù)器就相當(dāng)于目標(biāo)瀏覽器,及用戶直接訪問反向代理服務(wù)器就可以獲取目標(biāo)服務(wù)器的資源。同時,用戶不需要知道目標(biāo)服務(wù)器的地址,也無需在用戶端做任何設(shè)定,反向代理服務(wù)器用于web加速,即使用反向代理服務(wù)器作為web服務(wù)器的前置機(jī)來降低網(wǎng)絡(luò)和服務(wù)器的負(fù)載,提高訪問效率。
代理服務(wù)器位于用戶與目標(biāo)服務(wù)器之間
用戶并不知道要訪問那個真是的服務(wù)器
用戶并不知道真實的服務(wù)器資源是誰,保護(hù)了真實的服務(wù)器資源i信息
反向代理服務(wù)器一般都是服務(wù)器端代理,保護(hù)真實服務(wù)器信息
正向代理:用戶知道訪問的真實服務(wù)器是誰,只是將請求交給代理服務(wù)器來獲取,正向代理保護(hù)了用戶的信息,服務(wù)器并不知道訪問的真實用戶是誰,除非順著網(wǎng)線一路查
2.3 Nginx
Nginx是一款輕量級的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點是占有內(nèi)存少,并發(fā)能力強(qiáng),事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
內(nèi)存: 不到2M
并發(fā)能力強(qiáng): 3-5萬次/秒 理想環(huán)境下 /tomcat服務(wù)器 150-220/秒nginx官網(wǎng)下載
nginx安裝
路徑不要放到系統(tǒng)盤,路徑不能有中文和空格
以超級管理員的權(quán)限啟動,動態(tài)獲取權(quán)限
在任務(wù)管理其中查看是否啟動成功
瀏覽器訪問:localhost:80/
安裝中的常見問題:
端口被占用:nginx默認(rèn)使用80端口,只要找到系統(tǒng)中占用80端口的進(jìn)程,并殺掉就可以
# 找到占用80或含80字符串的所有進(jìn)程,找到第一個,查看pid號netstat -ano | findstr "80"# 然后在任務(wù)管理器中找到pid,并結(jié)束進(jìn)程即可# 或者可以從控制臺強(qiáng)制結(jié)束對應(yīng)pid的進(jìn)程kill pid
2.4 nginx命令
關(guān)于nginx進(jìn)程項的說明:nginx每次啟動都會同時生成兩個進(jìn)程項,一個是主進(jìn)程,一個是守護(hù)進(jìn)程,主進(jìn)程進(jìn)行反向代理業(yè)務(wù),守護(hù)進(jìn)程防止主進(jìn)程意外關(guān)閉
基本命令
要求在nginx的根目錄中執(zhí)行,在根目錄欄中輸入cmd,enter之后,進(jìn)入dos窗口,輸入以下命令:
# 啟動nginx start nginx# 重啟nginx nginx -s reload# 停止nginx nginx -s stop
輸入http://localhost:80/跳轉(zhuǎn)到目標(biāo)nginx頁面則安裝成功
# 編輯nginx.conf# 配置圖片服務(wù)器server{listen 80;server_name image.jt.com;location / {# 映射到本地的目錄中root C:/Users/tarena/Desktop/CGB-JT/images;}}
編輯hosts文件/利用switchhosts編輯(實現(xiàn)本地模擬網(wǎng)絡(luò)訪問)
127.0.0.1 image.jt.com127.0.0.1 manager.jt.com127.0.0.1 www.jt.com127.0.0.1 sso.jt.com
注:利用host工具編輯失敗則修改hosts文件的權(quán)限
2.5 實現(xiàn)域名代理
配置域名代理
# 配置域名代理server {//監(jiān)聽80端口上域名為manager.jt.com的請求listen 80;server_name manager.jt.com;location / {# 代理服務(wù)器的地址proxy_pass http://localhost:8091;}}
啟動項目之后,在瀏覽器中訪問http://manager.jt.com,就能夠?qū)崿F(xiàn)訪問http://localhost:8091
2.6 nginx負(fù)載均衡原理

若只有一臺服務(wù)器,在高并發(fā)的情況下服務(wù)器會立刻崩潰,如果用多臺服務(wù)器,那可以減輕一臺服務(wù)器的壓力,服務(wù)器集群可以解決高并發(fā)中的后端服務(wù)器問題
nginx集群的搭建
要求:啟動三臺服務(wù)器,運行項目,端口號分別是8081、8082、8083,通過getPort請求來獲取當(dāng)前服務(wù)器的端口號并字符串返回
動態(tài)獲取端口號:
//每臺服務(wù)器上都有這個方法,動態(tài)獲取本項目所在的端口號@RestControllerpublic class PortController {//考點:動態(tài)復(fù)制操作@Value("${server.port}")private Integer port;@RequestMapping("/getPort")public String getPort(){return "當(dāng)前訪問的端口號:"+port;}}
發(fā)布三臺tomcat服務(wù)器,占用的端口分別是8081、8082、8083
項目打包:clean--build--install
項目發(fā)布:Java -jar 8081.jar
負(fù)載均衡的策略
輪詢策略
# 商品管理服務(wù)器 監(jiān)聽的是用戶 manager.jt.com:80 映射的是url地址server {listen 80;server_name manager.jt.com;#進(jìn)行反向代理location / {#映射的url請求網(wǎng)址.#proxy_pass http://localhost:8091;proxy_pass http://jtWindows;}}#配置集群 1.默認(rèn)方式 輪詢策略upstream jtWindows {server localhost:8081;server localhost:8082;server localhost:8083;}
nginx將用戶的請求輪流發(fā)送到三臺服務(wù)器,輪詢;但是如果公司中有一臺新服務(wù)器和一臺舊服務(wù)器來同時作為后端服務(wù)器,那么此時采用輪詢策略就不合適了,新服務(wù)器的承載能力要高一些,輪詢顯然不能滿足要求
權(quán)重策略
#配置集群 1.默認(rèn)方式 輪詢策略 2.權(quán)重策略upstream jtWindows {server localhost:8081 weight=6;server localhost:8082 weight=3;server localhost:8083 weight=1;}
性能越高的服務(wù)器,則承擔(dān)的壓力也就越高,但一個用戶在購物車中加入了一些商品,退出界面,再次訪問的時候,輪詢策略和權(quán)重策略會將請求發(fā)往可能與原先服務(wù)器不同的服務(wù)器處理,這個時候,緩存的數(shù)據(jù)全部都找不到了,為了解決這種問題,提出了IPUSHCELUE
ipush策略:將用戶與服務(wù)器之間進(jìn)行綁定,以后該用戶再進(jìn)行訪問時就用原來訪問的服務(wù)器做處理,采用ipush算法
#配置集群 1.默認(rèn)方式 輪詢策略 2.權(quán)重策略 3.IPhash策略upstream jtWindows {ip_hash;server localhost:8081 weight=6;server localhost:8082 weight=3;server localhost:8083 weight=1;}
弊端:用戶與服務(wù)器綁定,當(dāng)服務(wù)器宕機(jī)時可能影響用戶的使用
由于訪問是通過計算的結(jié)果,可能會導(dǎo)致嚴(yán)重的負(fù)載不均衡的現(xiàn)象
nginx高級屬性
#配置集群 1.默認(rèn)方式 輪詢策略 2.權(quán)重策略 3.IPhash策略upstream jtWindows {#ip_hash; server localhost:8081 weight=6;server localhost:8081 down;server localhost:8082 down;server localhost:8083 backup;//備用機(jī)}down屬性:利用down屬性來標(biāo)識故障機(jī),則nginx反向代理服務(wù)器暫時不會訪問該服務(wù)器
備用機(jī)策略:正常情況下一般的服務(wù)器部署時需要準(zhǔn)備幾臺服務(wù)器做備用,正常情況下該服務(wù)器不會參與工作,只有當(dāng)主機(jī)忙或宕機(jī)的時候,該服務(wù)器才會工作
Nginx高可用配置
當(dāng)服務(wù)器宕機(jī)的時候,可以通過配置超時時間和最大訪問失敗次數(shù),來實現(xiàn)服務(wù)器的自動切換,無需人為干預(yù)
如果nginx訪問某臺服務(wù)器時,如果該服務(wù)器訪問失敗,失敗的次數(shù)達(dá)到最大失敗次數(shù)時.在60秒之內(nèi),nginx不會再次訪問故障機(jī).直到下一個周期
#配置集群 1.默認(rèn)方式 輪詢策略 2.權(quán)重策略 3.IPhash策略upstream jtWindows {#ip_hash; server localhost:8081 weight=6;server localhost:8081 max_fails=1 fail_timeout=60s;server localhost:8082 max_fails=1 fail_timeout=60s;server localhost:8083 max_fails=1 fail_timeout=60s;}
2、虛擬機(jī)
1.1 修改虛擬機(jī)網(wǎng)絡(luò)空間地址
將net網(wǎng)絡(luò)配置修改為192.168.126.0(在VMware Workstation Pro)中修改(net模式)

設(shè)置DHCP的租用時間,起始ip和結(jié)束ip
在windows中校驗nat8的ip地址(在windows中 利用cmd命令 ipconfig 檢查net8IP地址 是否為192.168.126.1 即可)
ipconfig如果Linux系統(tǒng)開機(jī)之后輸入ip addr,不能展現(xiàn)正常的ip地址,則重啟網(wǎng)卡來實現(xiàn)ip的獲取
systemctl stop NetworkManagerservice network restart
1.2 遠(yuǎn)程連接工具的安裝和使用
session
SSH
設(shè)置遠(yuǎn)程host
新建用戶
通過用戶來登錄服務(wù)器
1.3 JDK的配置
定位工作目錄:Linux的安裝目錄在/usr/local/src
cd /usr/local/src/
將JDK壓縮文件傳入該目錄中
解壓JDK
tar -xvf jdk-8u51-linux-x64.tar.gz
修改JDK的名稱
mv jdk-8u51-linux-x64.tar.gz jdk1.8
修改環(huán)境變量配置文件
vim /etc/profile
配置JDK
# 設(shè)定JDK環(huán)境export JAVA_HOME=/usr/local/src/jdk1.8export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib重啟環(huán)境變量
1.4 mariadb的安裝
安裝命令:yum install mariadb-server輸入命令之后會直接去網(wǎng)上下載mariadb數(shù)據(jù)庫
數(shù)據(jù)庫的常規(guī)命令
啟動數(shù)據(jù)庫:systemctl start mariadb重啟數(shù)據(jù)庫:systemctl?restart?mariadb關(guān)閉數(shù)據(jù)庫:systemctl stop mariadb
初始化數(shù)據(jù)庫配置:剛開始沒有設(shè)定用戶名和密碼,所以需要設(shè)定
命令:mysql_secure_installation第一次使用直接回車,然后一路yes,設(shè)定密碼之后登陸mysql -uroot -proot,查看數(shù)據(jù)庫中的表等信息
修改數(shù)據(jù)庫權(quán)限
//查看select host ,user from user where user=‘root’;//設(shè)定哪些ip地址可以訪問數(shù)據(jù)庫%代表統(tǒng)配update user set host='%' where host="localhost";select host,user from user where user='root';//刷新數(shù)據(jù)庫權(quán)限flush privileges;
操作結(jié)束后用exit或ctrl+c退出
1.5 Linux防火墻命令
防火墻是防火墻的全局變量,如果操作了全局的變量開關(guān),則影響的是下一次的防火墻操作
永久關(guān)閉防火墻systemctl disable firewalld.service
永久開啟防火墻systemctl enable firewall.service
現(xiàn)在關(guān)閉現(xiàn)有的防火墻systemctl stop firewalld.service
現(xiàn)在打開現(xiàn)有的防火墻systemctl start firewalld.service
檢查防火墻的狀態(tài)firewall-cmd --state
firewall-cmd --zone=public --add-port=3306/tcp --permanent命令含義:–zone #作用域–add-port=80/tcp #添加端口,格式為:端口/通訊協(xié)議–permanent #永久生效,沒有此參數(shù)重啟后失效- 檢查數(shù)據(jù)庫連接是否正常可視化界面來鏈接部署在某臺主機(jī)上的數(shù)據(jù)庫### 1.6 導(dǎo)入京淘數(shù)據(jù)庫

