摘要:靜態(tài)資源負(fù)載均衡反向代理主從配置監(jiān)聽集群主從配置介紹業(yè)務(wù)從發(fā)展的初期到逐漸成熟,服務(wù)器架構(gòu)也是從相對(duì)單一到集群,再到分布式,技術(shù)迭代的速度非常快,導(dǎo)致我們不斷的學(xué)習(xí)。。。一配置介紹是為俄羅斯訪問量第二站點(diǎn)開發(fā)的一款高性能和反向代理服務(wù)器。
CDN(靜態(tài)資源) + Nginx(負(fù)載均衡&反向代理)+ Redis(主從配置&Sentinel監(jiān)聽集群)+ Mysql(主從配置)
介紹:業(yè)務(wù)從發(fā)展的初期到逐漸成熟,服務(wù)器架構(gòu)也是從相對(duì)單一到集群,再到分布式,技術(shù)迭代的速度非常快,導(dǎo)致我們不斷的學(xué)習(xí)。。。
一個(gè)可以支持高并發(fā)的服務(wù)少不了好的服務(wù)器架構(gòu),需要有負(fù)載均衡,主從集群的數(shù)據(jù)庫,主從集群的緩存,靜態(tài)文件上傳cdn,比如 七牛云 等,這些都是讓業(yè)務(wù)程序流暢運(yùn)行的強(qiáng)大后盾。
閑話不多說,下面簡(jiǎn)單介紹搭建Windows服務(wù)器架構(gòu)。
一、配置Nginx介紹:Nginx是 Igor Sysoev 為俄羅斯訪問量第二 Rambler.ru 站點(diǎn)開發(fā)的一款高性能HTTP和反向代理服務(wù)器。
那么有些人不明白反向代理與正向代理有什么不同?
正向代理就像是 因?yàn)镚WF,國(guó)內(nèi)需要使用代理訪問Google,但是Google不知道真實(shí)的客戶端是誰,代理隱藏了真實(shí)的客戶端請(qǐng)求,客戶端請(qǐng)求的服務(wù)都被代理服務(wù)器代替。
www.baidu.com 是我們的反向代理服務(wù)器,反向代理服務(wù)器會(huì)幫我們把請(qǐng)求轉(zhuǎn)發(fā)到真實(shí)的服務(wù)器那里去。
1:重新加載配置 2:關(guān)閉 3:開啟(或者nginx -c conf/nginx.conf)
附錄:Nginx工作原理
2、修改配置文件修改Tomcatconfserver.xml (三個(gè)端口)& ginx-1.11.6conf ginx.conf :
#user nobody;#用戶名 worker_processes 1;#工作進(jìn)程(與CPU個(gè)數(shù)一比一) #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024;#單個(gè)進(jìn)程最大連接數(shù)(worker_processes*worker_connections/4小于系統(tǒng)進(jìn)程打開的文件總數(shù)) } http { upstream tomcat { #反向代理 server localhost:8082 weight=2;#weight權(quán)重(機(jī)器性能好weight就設(shè)大些) server localhost:8083 weight=3; } include mime.types; default_type application/octet-stream; #log_format main "$remote_addr - $remote_user [$time_local] "$request" " # "$status $body_bytes_sent "$http_referer" " # ""$http_user_agent" "$http_x_forwarded_for"";#轉(zhuǎn)發(fā)真實(shí)ip #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80;#默認(rèn)80端口 server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {#配置靜態(tài)文件等 root html; index index.html index.htm; proxy_pass http://tomcat;#反向代理(上面upstream tomcat) } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }3、測(cè)試
如何知道集群服務(wù)器配置好了呢?
我們修改項(xiàng)目頁面,將body內(nèi)容改為aaa...和bbb...,打包分別放到上面的Tomcat中,重新啟動(dòng)Tomcat和Nginx。
根據(jù)上圖,Nginx會(huì)將請(qǐng)求分發(fā)到不同的Tomcat中。
介紹:Nginx是采用master-worker多進(jìn)程的方式,master負(fù)責(zé)請(qǐng)求轉(zhuǎn)發(fā),worker的數(shù)量為CPU數(shù),所有worker進(jìn)程的listenfd會(huì)在新連接到來時(shí)變得可讀,為保證只有一個(gè)進(jìn)程處理該連接,所有worker進(jìn)程在注冊(cè)listenfd讀事件前搶accept_mutex,搶到互斥鎖的那個(gè)進(jìn)程注冊(cè)listenfd讀事件,在讀事件里調(diào)用accept接受該連接。
4、防預(yù)CC攻擊使用 NGINX 流控和 fail2ban 防止 CC 攻擊
在http模塊中添加
limit_req_zone $binary_remote_addr zone=sym:10m rate=5r/s; #限制發(fā)起的請(qǐng)求頻率,每秒5次 limit_conn_zone $binary_remote_addr zone=conn_sym:10m; #限制發(fā)起的連接數(shù)
在location中添加
limit_req zone=sym burst=5; limit_conn conn_sym 10;
配置好后Nginx重啟。模擬多線程并發(fā)請(qǐng)求,結(jié)果顯示成功和異常:
查詢Nginx/conf/error.log,顯示如下:
二、配置Redis&Sentinel 1、下載 Redis3.0解壓redis(主)再復(fù)制三份,文件夾名稱分別改為redis-slave(從)、redis-slave2(從)、redis-sentinel(哨兵)這些文件夾都能復(fù)制多次
(*.conf文件的名字可能不同!sentinel.conf需要新建!)
修改redis(主)文件夾下的redis.windows.conf:
port 6380 #端口(不能重復(fù)) logfile "E:/redis.log" #日志(防止宕機(jī)后可查) slave-read-only no #默認(rèn)為yes,改為no用于主從復(fù)制 requirepass "XXX" #密碼(主從密碼需相同)
修改redis-slave(從)下的redis.windows.conf:
port 6381 logfile "E:/redis_slave1.log" slaveof 127.0.0.1 6380 #master slave-read-only no masterauth "XXX" #主密碼 requirepass "XXX"
在redis-sentinel(哨兵)下創(chuàng)建sentinel.conf文件,內(nèi)容為:
port 26379 sentinel monitor mymaster 127.0.0.1 6380 1 #主配置,數(shù)字1代表有1個(gè)Sentinel監(jiān)聽有問題就進(jìn)行主從復(fù)制并切換 sentinel down-after-milliseconds mymaster 6000 sentinel failover-timeout mymaster 900000 sentinel auth-pass mymaster Alex #密碼
下面為演示:
(1)運(yùn)行主從Redis:
(2)運(yùn)行Sentinel:
介紹:監(jiān)聽Redis的哨兵,具體看附錄
附錄:Sentinel
運(yùn)行Sentinel后,.conf中配置內(nèi)容就會(huì)刷新成:
為防止Sentinel宕掉。可復(fù)制多份sentinel并修改端口,分別啟動(dòng)。
(3)檢測(cè)主從切換
當(dāng)master宕機(jī)后,防止整個(gè)資源掛掉,將采用Sentinel實(shí)時(shí)監(jiān)控Redis,情況發(fā)生后會(huì)立即主從復(fù)制并切換,這樣系統(tǒng)崩潰的概率大大降低。
監(jiān)聽的主端口變?yōu)?381,非之前的6380,子監(jiān)聽的主也自動(dòng)切換了。
三、配置Mysql集群 1、配置master主服務(wù)器(1)在Master MySQL上創(chuàng)建用戶,允許其他Slave服務(wù)器可以通過遠(yuǎn)程訪問Master,通過該用戶讀取二進(jìn)制日志,實(shí)現(xiàn)數(shù)據(jù)同步。
創(chuàng)建的用戶必須具有REPLICATION SLAVE權(quán)限,除此之外沒必要添加不必要的權(quán)限,密碼為"XXX"。192.168.94.%是指明用戶所在服務(wù)器,%是通配符,表示192.168.94.0/255的Server都可以登陸主服務(wù)器。
(2)修改my.Ini文件。啟動(dòng)二進(jìn)制日志log-bin。
在[mysqld]下面增加:
server-id=1 #給數(shù)據(jù)庫服務(wù)的唯一標(biāo)識(shí),一般為大家設(shè)置服務(wù)器Ip的末尾號(hào) log-bin=master-bin log-bin-index=master-bin.index
(3)重啟Mysql服務(wù),查看日志
2、配置slaver從服務(wù)器(1)修改my.ini文件,在[mysqld]下面增加
log_bin = mysql-bin server_id = 2 relay_log = mysql-relay-bin log_slave_updates = 1 read_only = 1
重啟Mysql
(2)連接Master
change master to master_host="192.168.XXX.XXX", master_port=3306, master_user="alexnevsky", master_password="XXXX", master_log_file="master-bin.000001", master_log_pos=0;
(3)啟動(dòng)Slave
start slave;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39452.html
摘要:本篇文章來自于騰訊和共同舉辦的技術(shù)開放日后臺(tái)專場(chǎng)出品人傅鴻城的分享,由壹佰案例整理編輯。對(duì)于騰訊而言,后臺(tái)服務(wù)可用性都是四個(gè)九,四個(gè)九轉(zhuǎn)化為時(shí)間就要求一年內(nèi)的故障時(shí)間不能超過分鐘。 showImg(https://segmentfault.com/img/bVvL5f); 本篇文章來自于騰訊SNG和msup共同舉辦的技術(shù)開放日后臺(tái)專場(chǎng)出品人傅鴻城的分享,由壹佰案例整理編輯。原文發(fā)布在壹...
閱讀 3773·2021-09-22 15:17
閱讀 1961·2021-09-22 14:59
閱讀 2358·2020-12-03 17:00
閱讀 3222·2019-08-30 15:55
閱讀 496·2019-08-30 11:23
閱讀 3496·2019-08-29 13:56
閱讀 529·2019-08-29 12:54
閱讀 2266·2019-08-29 12:49