成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Web架構(gòu) - 預(yù)防高并發(fā)的服務(wù)架構(gòu)

happyhuangjinjin / 397人閱讀

摘要:靜態(tài)資源負載均衡反向代理主從配置監(jiān)聽集群主從配置介紹業(yè)務(wù)從發(fā)展的初期到逐漸成熟,服務(wù)器架構(gòu)也是從相對單一到集群,再到分布式,技術(shù)迭代的速度非???,導(dǎo)致我們不斷的學(xué)習(xí)。。。一配置介紹是為俄羅斯訪問量第二站點開發(fā)的一款高性能和反向代理服務(wù)器。

CDN(靜態(tài)資源) + Nginx(負載均衡&反向代理)+ Redis(主從配置&Sentinel監(jiān)聽集群)+ Mysql(主從配置)

介紹:業(yè)務(wù)從發(fā)展的初期到逐漸成熟,服務(wù)器架構(gòu)也是從相對單一到集群,再到分布式,技術(shù)迭代的速度非???,導(dǎo)致我們不斷的學(xué)習(xí)。。。
一個可以支持高并發(fā)的服務(wù)少不了好的服務(wù)器架構(gòu),需要有負載均衡,主從集群的數(shù)據(jù)庫,主從集群的緩存,靜態(tài)文件上傳cdn,比如 七牛云 等,這些都是讓業(yè)務(wù)程序流暢運行的強大后盾。

閑話不多說,下面簡單介紹搭建Windows服務(wù)器架構(gòu)。

一、配置Nginx

介紹:Nginx是 Igor Sysoev 為俄羅斯訪問量第二 Rambler.ru 站點開發(fā)的一款高性能HTTP和反向代理服務(wù)器。

那么有些人不明白反向代理與正向代理有什么不同?

正向代理就像是 因為GWF,國內(nèi)需要使用代理訪問Google,但是Google不知道真實的客戶端是誰,代理隱藏了真實的客戶端請求,客戶端請求的服務(wù)都被代理服務(wù)器代替。

www.baidu.com 是我們的反向代理服務(wù)器,反向代理服務(wù)器會幫我們把請求轉(zhuǎn)發(fā)到真實的服務(wù)器那里去。

1、下載 Nginx-Windows & Tomcat7

1:重新加載配置 2:關(guān)閉 3:開啟(或者nginx -c conf/nginx.conf

附錄:Nginx工作原理

2、修改配置文件

修改Tomcatconfserver.xml (三個端口)& ginx-1.11.6conf ginx.conf

#user  nobody;#用戶名
worker_processes  1;#工作進程(與CPU個數(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;#單個進程最大連接數(shù)(worker_processes*worker_connections/4小于系統(tǒng)進程打開的文件總數(shù))
}


http {
      upstream tomcat  { #反向代理 
                server localhost:8082 weight=2;#weight權(quán)重(機器性能好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ā)真實ip

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;#默認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、測試

如何知道集群服務(wù)器配置好了呢?

我們修改項目頁面,將body內(nèi)容改為aaa...和bbb...,打包分別放到上面的Tomcat中,重新啟動Tomcat和Nginx。


根據(jù)上圖,Nginx會將請求分發(fā)到不同的Tomcat中。

介紹:Nginx是采用master-worker多進程的方式,master負責(zé)請求轉(zhuǎn)發(fā),worker的數(shù)量為CPU數(shù),所有worker進程的listenfd會在新連接到來時變得可讀,為保證只有一個進程處理該連接,所有worker進程在注冊listenfd讀事件前搶accept_mutex,搶到互斥鎖的那個進程注冊listenfd讀事件,在讀事件里調(diào)用accept接受該連接。

4、防預(yù)CC攻擊

使用 NGINX 流控和 fail2ban 防止 CC 攻擊

在http模塊中添加

limit_req_zone $binary_remote_addr zone=sym:10m rate=5r/s;   #限制發(fā)起的請求頻率,每秒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ā)請求,結(jié)果顯示成功和異常:

查詢Nginx/conf/error.log,顯示如下:

二、配置Redis&Sentinel 1、下載 Redis3.0

解壓redis(主)再復(fù)制三份,文件夾名稱分別改為redis-slave(從)、redis-slave2(從)、redis-sentinel(哨兵)這些文件夾都能復(fù)制多次
(*.conf文件的名字可能不同!sentinel.conf需要新建?。?/p> 2、修改配置文件

修改redis(主)文件夾下的redis.windows.conf:

port 6380                          #端口(不能重復(fù)) 
logfile "E:/redis.log"             #日志(防止宕機后可查)
slave-read-only no                 #默認為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個Sentinel監(jiān)聽有問題就進行主從復(fù)制并切換
sentinel down-after-milliseconds mymaster 6000
sentinel failover-timeout mymaster 900000
sentinel auth-pass mymaster Alex                    #密碼

下面為演示:
(1)運行主從Redis:


(2)運行Sentinel:

介紹:監(jiān)聽Redis的哨兵,具體看附錄
附錄:Sentinel


運行Sentinel后,.conf中配置內(nèi)容就會刷新成:


為防止Sentinel宕掉??蓮?fù)制多份sentinel并修改端口,分別啟動。

(3)檢測主從切換

當(dāng)master宕機后,防止整個資源掛掉,將采用Sentinel實時監(jiān)控Redis,情況發(fā)生后會立即主從復(fù)制并切換,這樣系統(tǒng)崩潰的概率大大降低。


監(jiān)聽的主端口變?yōu)?381,非之前的6380,子監(jiān)聽的主也自動切換了。

三、配置Mysql集群 1、配置master主服務(wù)器

(1)在Master MySQL上創(chuàng)建用戶,允許其他Slave服務(wù)器可以通過遠程訪問Master,通過該用戶讀取二進制日志,實現(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文件。啟動二進制日志log-bin。

在[mysqld]下面增加:

server-id=1                       #給數(shù)據(jù)庫服務(wù)的唯一標(biāo)識,一般為大家設(shè)置服務(wù)器Ip的末尾號
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)啟動Slave

start slave;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39452.html

相關(guān)文章

  • QQ億級日活躍業(yè)務(wù)后臺核心技術(shù)揭秘

    摘要:本篇文章來自于騰訊和共同舉辦的技術(shù)開放日后臺專場出品人傅鴻城的分享,由壹佰案例整理編輯。對于騰訊而言,后臺服務(wù)可用性都是四個九,四個九轉(zhuǎn)化為時間就要求一年內(nèi)的故障時間不能超過分鐘。 showImg(https://segmentfault.com/img/bVvL5f); 本篇文章來自于騰訊SNG和msup共同舉辦的技術(shù)開放日后臺專場出品人傅鴻城的分享,由壹佰案例整理編輯。原文發(fā)布在壹...

    Taste 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<