资讯专栏INFORMATION COLUMN

Web架构 - 预防高并发的服务架构

happyhuangjinjin / 370人阅读

摘要:静态资源负载均衡反向代理主从配置监听集群主从配置介绍业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式,技术迭代的速度非常快,导致我们不断的学习。。。一配置介绍是为俄罗斯访问量第二站点开发的一款高性能和反向代理服务器。

CDN(静态资源) + Nginx(负载均衡&反向代理)+ Redis(主从配置&Sentinel监听集群)+ Mysql(主从配置)

介绍:业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式,技术迭代的速度非常快,导致我们不断的学习。。。
一个可以支持高并发的服务少不了好的服务器架构,需要有负载均衡,主从集群的数据库,主从集群的缓存,静态文件上传cdn,比如 七牛云 等,这些都是让业务程序流畅运行的强大后盾。

闲话不多说,下面简单介绍搭建Windows服务器架构。

一、配置Nginx

介绍:Nginx是 Igor Sysoev 为俄罗斯访问量第二 Rambler.ru 站点开发的一款高性能HTTP和反向代理服务器。

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

正向代理就像是 因为GWF,国内需要使用代理访问Google,但是Google不知道真实的客户端是谁,代理隐藏了真实的客户端请求,客户端请求的服务都被代理服务器代替。

www.baidu.com 是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。

1、下载 Nginx-Windows & Tomcat7

1:重新加载配置 2:关闭 3:开启(或者nginx -c conf/nginx.conf

附录:Nginx工作原理

2、修改配置文件

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

#user  nobody;#用户名
worker_processes  1;#工作进程(与CPU个数一比一)

#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;#单个进程最大连接数(worker_processes*worker_connections/4小于系统进程打开的文件总数)
}


http {
      upstream tomcat  { #反向代理 
                server localhost:8082 weight=2;#weight权重(机器性能好weight就设大些)
                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"";#转发真实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 / {#配置静态文件等
            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、测试

如何知道集群服务器配置好了呢?

我们修改项目页面,将body内容改为aaa...和bbb...,打包分别放到上面的Tomcat中,重新启动Tomcat和Nginx。


根据上图,Nginx会将请求分发到不同的Tomcat中。

介绍:Nginx是采用master-worker多进程的方式,master负责请求转发,worker的数量为CPU数,所有worker进程的listenfd会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。

4、防预CC攻击

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

在http模块中添加

limit_req_zone $binary_remote_addr zone=sym:10m rate=5r/s;   #限制发起的请求频率,每秒5次
limit_conn_zone $binary_remote_addr zone=conn_sym:10m;       #限制发起的连接数

在location中添加

limit_req zone=sym burst=5;
limit_conn conn_sym 10;

配置好后Nginx重启。模拟多线程并发请求,结果显示成功和异常:

查询Nginx/conf/error.log,显示如下:

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

解压redis(主)再复制三份,文件夹名称分别改为redis-slave(从)、redis-slave2(从)、redis-sentinel(哨兵)这些文件夹都能复制多次
(*.conf文件的名字可能不同!sentinel.conf需要新建!)

2、修改配置文件

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

port 6380                          #端口(不能重复) 
logfile "E:/redis.log"             #日志(防止宕机后可查)
slave-read-only no                 #默认为yes,改为no用于主从复制
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(哨兵)下创建sentinel.conf文件,内容为:

port 26379
sentinel monitor mymaster 127.0.0.1 6380 1          #主配置,数字1代表有1个Sentinel监听有问题就进行主从复制并切换
sentinel down-after-milliseconds mymaster 6000
sentinel failover-timeout mymaster 900000
sentinel auth-pass mymaster Alex                    #密码

下面为演示:
(1)运行主从Redis:


(2)运行Sentinel:

介绍:监听Redis的哨兵,具体看附录
附录:Sentinel


运行Sentinel后,.conf中配置内容就会刷新成:


为防止Sentinel宕掉。可复制多份sentinel并修改端口,分别启动。

(3)检测主从切换

当master宕机后,防止整个资源挂掉,将采用Sentinel实时监控Redis,情况发生后会立即主从复制并切换,这样系统崩溃的概率大大降低。


监听的主端口变为6381,非之前的6380,子监听的主也自动切换了。

三、配置Mysql集群 1、配置master主服务器

(1)在Master MySQL上创建用户,允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

创建的用户必须具有REPLICATION SLAVE权限,除此之外没必要添加不必要的权限,密码为"XXX"。192.168.94.%是指明用户所在服务器,%是通配符,表示192.168.94.0/255的Server都可以登陆主服务器。

(2)修改my.Ini文件。启动二进制日志log-bin。

在[mysqld]下面增加:

server-id=1                       #给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index

(3)重启Mysql服务,查看日志

2、配置slaver从服务器

(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;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39452.html

相关文章

  • QQ亿级日活跃业务后台核心技术揭秘

    摘要:本篇文章来自于腾讯和共同举办的技术开放日后台专场出品人傅鸿城的分享,由壹佰案例整理编辑。对于腾讯而言,后台服务可用性都是四个九,四个九转化为时间就要求一年内的故障时间不能超过分钟。 showImg(https://segmentfault.com/img/bVvL5f); 本篇文章来自于腾讯SNG和msup共同举办的技术开放日后台专场出品人傅鸿城的分享,由壹佰案例整理编辑。原文发布在壹...

    Taste 评论0 收藏0

发表评论

0条评论

happyhuangjinjin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<