本次案例很特別,來到新公司之后接手了一個項目。作為開發99%情況下都不需要過多考慮基礎設施的安裝配置,比如Nginx、keepalived、mysql等基礎設施安裝配置,故而通過以下幾篇日記來記錄項目上線所面臨的挑戰:
(一) Nginx部署 和 內外網絡配置
(二) keepalived實現VIP和nginx可用性檢查
(三) Mysql高可用主從配置
1、安裝環境:centos7 Nginx 1.16.1 2、主機: 192.168.30.7 從機:192.168.30.8
(一) Nginx部署 和 內外網絡配置
1、安裝Nginx 具體安裝shell腳本 nginx_install.sh
#!/bin/bash echo 'begin install nginx' yum -y install gcc pcre-devel zlib-devel openssl openssl-devel tar -zxvf nginx-1.16.1.tar.gz cd nginx-1.16.1 mkdir -p /var/application/nginx ./configure --prefix=/usr/local/nginx make && make install echo 'end install nginx'
注意點:
(1)需要將nginx-1.16.1.tar.gz 和 nginx_install.sh放在一個目錄
(2)prefix=/usr/local/nginx 為自定義nginx的安裝目錄,可以自由指定
(3)/var/application/nginx存放nginx日志目錄,可以自由指定
2、網絡拓撲 和 nginx.conf 配置
網絡拓撲圖如下:

nginx.conf 配置
#user nobody;
worker_processes 1;
#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;
}
http {
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"'
'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/application/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# nginx ip: 192.168.30.7/8
# vip: 192.168.30.77
upstream myservice {
server 192.168.30.7:8080;
server 192.168.30.8:8080;
}
# 對外
server {
listen 80;
listen [::]:80 default_server;
#root /var/www/html;
# Add index.php to the list if you are using PHP
# index index.html index.htm index.nginx-debian.html;
location / {
root html;
index index.html index.htm;
}
location /path/api/ {
proxy_pass http://myservice;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /path/ui/g-web/ {
proxy_pass http://myservice;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 靜態資源映射
location /static/resource {
alias /usr/app/static/resource/;
}
# 內網deny
location /path/api/inner {
deny all;
}
location /path/inner {
deny all;
}
location /path/ui {
deny all;
}
}
# 對內
server {
listen 8000;
listen [::]:8000;
#root /var/www/html;
# Add index.php to the list if you are using PHP
#index index.html index.htm index.nginx-debian.html;
location /path/ {
proxy_pass http://myservice;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
3、幾個值得注意的點:
(1)Nginx內網配置通過VIP訪問8000端口,實現web內網訪問控制。
(2)Nginx外網配置監聽80端口,由DNS 或者 F5等切入流量。
(3)虛擬IP(Vrtual IP Address),是一種不與特定計算機或者特定計算機網卡相對應的IP地址。所有發往這個IP地址的數據包最后都會經過真實的網卡到達目的主機的目的進程。虛擬IP比較常見的一個用例就是在系統高可用性(High Availability HA)方面的應用,通常一個系統會因為日常維護或者非計划外的情況而發生宕機,為了提高系統對外服務的高可用性,就會采用主備模式進行高可用性的配置。當提供服務的主機M宕機后,服務會切換到備用主機S繼續對外提供服務。而這一切用戶是感覺不到的,在這種情況下系統對客戶端提供服務的IP地址就會是一個虛擬IP,當主機M宕機后,虛擬IP便會漂浮到備機上,繼續提供服務。
