介绍:业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式,技术迭代的速度很是快,致使咱们不断的学习。。。
一个能够支持高并发的服务少不了好的服务器架构,须要有负载均衡,主从集群的数据库,主从集群的缓存,静态文件上传cdn,好比 七牛云 等,这些都是让业务程序流畅运行的强大后盾。html
闲话很少说,下面简单介绍搭建Windows服务器架构。mysql
介绍:Nginx是 Igor Sysoev 为俄罗斯访问量第二 Rambler.ru 站点开发的一款高性能HTTP和反向代理服务器。nginx
那么有些人不明白反向代理与正向代理有什么不一样?redis
正向代理就像是 由于GWF,国内须要使用代理访问Google,可是Google不知道真实的客户端是谁,代理隐藏了真实的客户端请求,客户端请求的服务都被代理服务器代替。sql
www.baidu.com 是咱们的反向代理服务器,反向代理服务器会帮咱们把请求转发到真实的服务器那里去。数据库
1:从新加载配置 2:关闭 3:开启(或者
nginx -c conf/nginx.conf
)segmentfault
附录:Nginx工做原理windows
修改\Tomcat\conf\server.xml (三个端口)& \nginx-1.11.6\conf\nginx.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; } } }
如何知道集群服务器配置好了呢?tomcat
咱们修改项目页面,将body内容改成aaa...和bbb...,打包分别放到上面的Tomcat中,从新启动Tomcat和Nginx。
根据上图,Nginx会将请求分发到不一样的Tomcat中。
介绍:Nginx是采用master-worker多进程的方式,master负责请求转发,worker的数量为CPU数,全部worker进程的listenfd会在新链接到来时变得可读,为保证只有一个进程处理该链接,全部worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该链接。
使用 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(主)再复制三份,文件夹名称分别改成redis-slave(从)、redis-slave2(从)、redis-sentinel(哨兵)这些文件夹都能复制屡次(*.conf文件的名字可能不一样!sentinel.conf须要新建!)
修改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,子监听的主也自动切换了。
(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服务,查看日志
(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;