码迷,mamicode.com
首页 > 其他好文 > 详细

电商平台搭建流程梳理

时间:2016-08-02 20:44:49      阅读:1156      评论:0      收藏:0      [点我收藏+]

标签:

  •       最近部署了一套电子商务平台,现将整个过程进行一次梳理。

1.  首先明确业务上的流程

  1. 项目发起 
  2. 制定方案
  3. 系统安装 
  4. 部署Nginx、Tomcat 
  5. 解析域名 
  6. 测试   
  7. 加监控 
  8. 备份

2. 执行1的内容

    2.1制定方案

  • 根据项目情况制定方案,拓扑图如下
 技术分享

思路,前段使用硬件负载均衡 banggoo ,将访问负载到nginx,nginx 再将请求反向代理到后端的tomcat上。

服务器一共购买了4台,其中2台作为数据库服务器,另外两台使用虚拟机,每台服务器虚拟5台服务器。

每台服务器配置、操作系统、分区、主机名、IP地址、交换机接口划分

 

    2.2 系统安装略过。。

    系统安装后,所以web应用机器需要统一执行
    echo ‘export HISTTIMEFORMAT="%F %T `whoami`"‘ >> /etc/profile
    echo ‘export PROMPT_COMMAND=‘{ msg=$(history 1 | { read x y ; echo $y ;});logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }‘‘  >>  /etc/profile

    /etc/sysctl.conf

vm.swappiness=10

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_synack_retries = 2

vm.overcommit_memory = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_tw_recycle = 0

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1800

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.ip_local_port_range = 10000 65000

 

/etc/security/limits.conf

*               soft     nofile          102400

 

*               hard    nofile          102400

    2.3 部署Nginx、Tomcat

  • Nginx前期准备。
  1. 安装Nginx前需要安装pcre (Perl Compatible Regular Expressions) ,Perl兼容的正则表达式,官网为http://www.pcre.org 
  2. Nginx 有 rewrite module 模块,(http rewrite module),伪静态URL改写需要它,rewrite 需要pcre的库。所以nginx需要安装pcre。
  3. yum install -y pcre pcre-devel  openssl openssl-devel

安装Nginx 

configure arguments: --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module

 

Nginx 部分修改配置

worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent $request_time {$upstream_addr $upstream_status $upstream_http_content_length $upstream_response_time} ‘
‘"$http_x_real_ip" "$http_x_forwarded_for" "$host"‘;
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;

upstream dealer {
ip_hash;
server 192.168.1.54:8081;
server 192.168.1.64:8081;
}
upstream shop{
ip_hash;
server 192.168.1.55:8081;
server 192.168.1.65:8081;
}
upstream platform{
ip_hash;
server 192.168.1.56:8081;
server 192.168.1.66:8081;
}


server {
listen 80 default;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
server_name backend;
access_log logs/backend.access.log main;
location / {
proxy_pass http://platform/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
proxy_set_header Host $host;
allow 192.168.0.0/16;
deny all;
}
}

server {
listen 443 ssl;
server_name dealer.tb.com;
access_log logs/dealer.access.log main;
server_tokens off;
ssl_certificate /usr/local/nginx/conf/server_2019.crt;
ssl_certificate_key /usr/local/nginx/conf/server_2019.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

rewrite ^/$ /dealerShop/ redirect;
location / {
proxy_pass http://dealer/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
proxy_set_header Host $host;
}
location /platform/captcha/getCaptchaImg.do {
proxy_pass http://platform;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name shop.tb.com;
access_log logs/shop.access.log main;
server_tokens off;
ssl_certificate /usr/local/nginx/conf/server_2019.crt;
ssl_certificate_key /usr/local/nginx/conf/server_2019.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
rewrite ^/$ /payonline/ redirect;
location / {
proxy_pass http://shop/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
proxy_set_header Host $host;
}

location ~ /payonline/paySuccess {
if ( $uri ~ ([\w]+.xhtml)$ ) {
set $d_path $1;
rewrite .xhtml /payonline/#/$d_path redirect;
}
proxy_pass http://shop;
}

location ~ /payonline/payFail {
if ( $uri ~ ([\w]+.xhtml)$ ) {
set $d_path $1;
rewrite .xhtml /payonline/#/$d_path redirect;
}
proxy_pass http://shop;
}

location ~ /payonline {
if ( $uri ~ ([\w]+.xhtml)$ ) {
set $d_path $1;
rewrite .xhtml$ /payonline/#/$d_path redirect;
}
proxy_pass http://shop;
}

}

server {
listen 80;
listen 443 ssl;
server_name tmail.tb.com;
access_log logs/tmail.access.log main;
server_tokens off;
ssl_certificate /usr/local/nginx/conf/server_2019.crt;
ssl_certificate_key /usr/local/nginx/conf/server_2019.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
rewrite ^/$ /cherryHomePage/home.html redirect;
location / {
proxy_pass http://dealer/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
proxy_set_header Host $host;
}
}
}

 
注:这里使用了证书,并关闭了些80,使用443,以及上传文件大小进行了调整。
rewrite 时使用的就 redirect ,该处需要临时重定向,不然不ok。注意log的格式及每个模块的log进行单独记录。切不可将所以log默认记录到一个文件内。
nginx 修改完毕后 sbing/ngiinx -t  进行检测配置是否正确,sbinx/nginx -s reload 进行重载。
 
  • 关于Session
nginx 中配置了ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
那么问题来了,都固定访问后端一台服务器了,还要负载均衡干嘛呢????这种只有后端服务器宕机,才会负载均衡到另一台服务器。
所以这是一个弊端,但是解决了session的问题。起初确认过不需要session ,都部署完毕了后,测试也ok,然后突然间说需要session,
然后才有了ip_hash ,这就是它的由来。
由于该系统后端存储使用了redis,考虑将session 保存到redis,经沟通确认后,开发暂时不能修改业务代码,将session存入redis或mysql。
 
  • Tomcat 安装
Tomcat 需要JAVA 环境,配置环境变量
安装的64位系统,使用的32位jdk,业务需求32位
写到/etc/profile 内即可
JAVA_HOME=/usr/java/jdk1.7.0_79/
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH  CLASSPATH
 
  • 数据库Mysql Mongodb 主从安装部署
Mysql 使用版本为Server version: 5.5.50  安装过程略过
Mongodb 使用版本MongoDB shell version: 2.6.12  ,起初安装的Mongodb 3.0 的版本,原因是在性能上3.0 甩出2.0 好几条街,
但经过一段 时间测试后又换回了2.0 的版本, 3.0的版本程序无法写入数据。后期等待程序修改后再升级Mongodb版本。
Mongodb 主从使用的2台服务器,并没有按官方3台服务器来做。
Redis 版本:redis-3.0.7 
 

    2.4解析域名 

    2.5测试   

    测试时需要对应的看下log及系统io情况

    2.6加监控 

    Zabbix 监控主机状态,Zabbix很强大,但对url的监控个人更倾向于Nagion。
    Nagion 监控url ,Nagios 主要是自由,灵活。

    2.7备份

    业务系统主要写在Mysql数据库内,写脚本每天凌晨进行全备份,同时开启了binglog。
 
新环境建议使用saltstack 进行部署管理,原因嘛 统一部署,并行执行,远程管理。
如果需要网络备份系统的话,建议使用 bacula , web管理建议使用webacula 。该软件在前期部署阶段可能有些麻烦,
但在应用上展示的很好, 尤其使用Web界面操作备份、恢复,很便捷。与Amanda 相比个人更倾向于Bacula。
 
 

电商平台搭建流程梳理

标签:

原文地址:http://www.cnblogs.com/raindsky/p/5730399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!