標籤:
- 最近部署了一套電子商務平台,現將整個過程進行一次梳理。
1. 首先明確業務上的流程
- 項目發起
- 制定方案
- 系統安裝
- 部署Nginx、Tomcat
- 解析網域名稱
- 測試
- 加監控
- 備份
2. 執行1的內容 2.1制定方案
思路,前段使用硬體負載平衡 banggoo ,將訪問負載到nginx,nginx 再將請求反向 Proxy到後端的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前需要安裝pcre (Perl Compatible Regular Expressions) ,Perl相容的Regex,官網為http://www.pcre.org
- Nginx 有 rewrite module 模組,(http rewrite module),偽靜態URL改寫需要它,rewrite 需要pcre的庫。所以nginx需要安裝pcre。
- 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 進行重載。
nginx 中配置了ip_hash,每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。那麼問題來了,都固定訪問後端一台伺服器了,還要負載平衡幹嘛呢????這種只有後端伺服器宕機,才會負載平衡到另一台伺服器。所以這是一個弊端,但是解決了session的問題。起初確認過不需要session ,都部署完畢了後,測試也ok,然後突然間說需要session,然後才有了ip_hash ,這就是它的由來。由於該系統後端儲存使用了redis,考慮將session 儲存到redis,經溝通確認後,開發暫時不能修改業務代碼,將session存入redis或mysql。
Tomcat 需要JAVA 環境,配置環境變數安裝的64位系統,使用的32位jdk,業務需求32位寫到/etc/profile 內即可JAVA_HOME=/usr/java/jdk1.7.0_79/PATH=$JAVA_HOME/bin:$PATHCLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jarexport JAVA_HOME PATH CLASSPATH
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。
電商平台搭建流程梳理