前言
部署了三個nginx
用於前端項目, 並使用keepalived
部署好熱備, 所以總共有5
個nginx
創建好nginx
的文件和配置
根據上面的指令創建好目錄
mkdir /home/web/nginx01
mkdir /home/web/nginx02
mkdir /home/web/nginx03
nginx.conf
配置文件
這里我配置了三個nginx
節點
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 5s;
proxy_send_timeout 5s;
proxy_read_timeout 5s;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
server {
listen 6501;
server_name 192.168.0.200;
location / {
root /home/web/nginx/renren-vue;
index index.html index.htm;
}
}
}
前面的差別不大, 就后面這一點不太一樣
server {
listen 6501;
server_name 192.168.0.200;
location / {
root /home/web/nginx/renren-vue;
index index.html index.htm;
}
}
server {
listen 6502;
server_name 192.168.0.200;
location / {
root /home/web/nginx/renren-vue;
index index.html index.htm;
}
}
server {
listen 6503;
server_name 192.168.0.200;
location / {
root /home/web/nginx/renren-vue;
index index.html index.htm;
}
}
docker
配置指令
docker run -it -d --name=web01 --net=host \
-v /home/web/nginx01/nginx.conf:/etc/nginx/nginx.conf \
-v /home/web/nginx01:/home/web/nginx/renren-vue \
--user=root --privileged=true nginx
docker run -it -d --name=web02 --net=host \
-v /home/web/nginx02/nginx.conf:/etc/nginx/nginx.conf \
-v /home/web/nginx02:/home/web/nginx/renren-vue \
--user=root --privileged=true nginx
docker run -it -d --name=web03 --net=host \
-v /home/web/nginx03/nginx.conf:/etc/nginx/nginx.conf \
-v /home/web/nginx03:/home/web/nginx/renren-vue \
--user=root --privileged=true nginx
利用keepalived
配置熱備方案
配置主機keepalived
- 進入容器
docker exec -it bn01 bash
- 更新
apt update
- 安裝
vim
apt install vim
- 安裝
keepalived
apt install keepalived
- 修改配置文件
vi /etc/keepalived/keepalived.conf
- 寫入配置文件
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.0.160
}
}
virtual_server 192.168.0.160 6701 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.200 6601 {
weight 1
}
}
- 啟動
service keepalived start
- 驗證
docker top bn01
看下keepalived
進程是否運行, 如果運行再訪問
http://192.168.0.160:6701/#/home
看下是否能夠訪問
配置備機
- 進入容器
docker exec -it bn02 bash
- 更新
apt update
- 安裝
vim
apt install vim
- 安裝
keepalived
apt install keepalived
- 修改配置文件
vi /etc/keepalived/keepalived.conf
- 寫入配置文件
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.0.160
}
}
virtual_server 192.168.0.160 6701 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.200 6602 {
weight 1
}
}
- 啟動
service keepalived start
- 驗證
docker top bn02
看下keepalived
進程是否存在, 如果存在則
http://192.168.0.160:6701/#/home
看下是否能夠訪問
現在停止掉主機, 然后稍等一會兒再看看是否能夠運行
exit
退出docker
容器
執行docker stop bn01
停止掉主機
可能需要判斷下,
docker logs bn01
和docker logs bn02
看下最近一次訪問是否, 我這里發現是備機在運行, 所以實際上我執行的是docker stop bn02
發現訪問http://192.168.0.160:6701/#/home
網址還是沒問題
這里需要等待幾分鍾, 可改等待時間
成功部署熱備