部署文档
2
1. 整体架构
2014 整体架构划分为 4 大部分,web 部分,缓存及内存数据库部分,中间件部分,数据库 部分和文件系统部分.各部分包含的业务如下: Web 部分:包括 Nginx 和 Jetty.Nginx 提供静态资源并缓存到本地,代理用户请求,并将其负 载至后端多台 jetty 服务器. Jetty 服务器提供 web 程序. 缓存及内存数据库部分:包括 Couchbase 集群和 Hazelcast(以下简称 hz)集群.couchbase 缓 存部分 mysql 数据. Hz 集群将 mongodb 所有数据加载到内存中提供快速读取,并将新写入的 数据持久化到 mongodb 中. 中间件部分:包括 zookeeper 和 kafka.zookeeper 主要提供 dubbo 远程调用,服务注册和 kafka 的 topic 注册.kafka 为消息中间件,用来提供消息队列和服务间的通信. 数据库部分:包括多组 mongodb 集群和 mysql 集群,还有 redis 集群. 文件系统部分 :NFS 网络文件系统和 Fastdfs 分布式文件系统 .NFS 提供用户头像的存 储.Fastdfs 存储资源,附件和作业. 整体架构如下图所示:
部署文档
2014.9 v1.0
1
目录
部署文档 .......................................................................................................... 1 目录 ....................................................................................................................................... 2 1. 整体架构 ........................................................................................................................ 3 2. WEB 层 ........................................................................................................................... 3 2.1 Nginx ......................................................................................................................... 4 2.2 Jetty ........................................................................................................................ 33 3. 内存数据库及缓存层 .................................................................................................. 34 3.1 Hazelcast ................................................................................................................. 35 3.2 Couchbase .............................................................................................................. 35 4. 数据库层 ...................................................................................................................... 43 4.1 Mongodb 集群 ....................................................................................................... 43 4.2 Mysql 集群 ............................................................................................................. 52 4.3 Redis 集群 .............................................................................................................. 66
2.1.2 配置 OpenResty
OpenResty 安装完毕后, 会产生相应的安装目录, 根据前面的安装路径, Nginx 的配置文 件路径为/usr/local/ openresty /nginx/conf,其中 nginx.conf 为 Nginx 的主配置文件。这里重点 介绍 nginx.conf 这个配置文件。 Nginx 配置文件主要分为 4 部分:main(全局设置) 、server(主机设置) 、upstream(负 载均衡服务器设置)和 location(URL 匹配特定位置的设置) 。main 部分设置的指令将影响 其他所有设置;server 部分的指令主要用于指定主机和端口;upstream 指令主要用于负载均 衡,设置一系列的后端服务器;location 部分用于匹配网页位置。这四者之间的关系如下: server 继承 main,location 继承 server,upstream 既不会继承其他设置也不会被继承。
3
2.1 Nginx
提供反向代理及缓存,由于本次研修需要 nginx 的多个模块,所以使用 OpenResty(一个集 成了多个第三方模块的 nginx).原则上说 nginx 和 OpenResty 是同一个程序,所以配置文件是通 用的.
2.1.1 安装 OpenResty
下载 /cn/ 解压 tar -zxvf ngx_openresty-1.5.12.1.tar.gz cd ngx_openresty-1.5.12.1 ./configure --prefix=/usr/local/openresty --with-luajit make make install 注:如需编译更多模块,运行 configure 时,使用--add-module 指定相应模块的源码位置,如安装 nginx 上传模块 ./configure --add-module=/software/nginx_upload_module-2.2.0
worker_rlimit_nofile 204800; #一个 nginx 进程打开的最多文件描述符数目 events { use epoll; #工作机制 worker_connections 204800; #每个进程允许的最多连接数 }
http {
5
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"'; #access_log logs/access.log main; access_log off; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript application/javascript text/css application/xml application/json "application/json;charset=UTF-8"; gzip_vary on; ssi on; ssi_silent_errors off; ssi_types text/shtml; upstream user{ server 10.0.0.11:8081 weight=1; server 10.0.0.12:8081 weight=1; server 10.0.0.13:8081 weight=1; server 10.0.0.14:8081 weight=1; server 10.0.0.15:8081 weight=1; server 10.0.0.16:8081 weight=1; server 10.0.0.17:8081 weight=1; server 10.0.0.18:8081 weight=1; check interval=20000 rise=2 fall=5 timeout=1000 type=http; check_http_send "GET /user-web/state/ HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx;