是這樣子的,我想讓家中全部的應用服務都從nginx中出去,讓nginx處於訪問的最邊緣地帶,爲了讓nginx可靠性增強,因此nginx就得實現高可用,分別是下面兩臺機器要作nginx的集羣nginx
固然上面的機器同時也要安裝nginx,總的架構就是文章圖片那個樣子git
當主10.10.10.2掛了的時候能夠自動切換到備10.10.10.3上的nginx,這樣就實現了nginx的高可用github
文中的後端應用服務能夠有不少個不僅僅只有一個web網站web
咱們從頭開始docker
首先用戶訪問www.bboysoul.com這個網站要通過dns解析,因此咱們要在dns服務器上加一條www.bboysoul.com到10.10.10.10的解析,我使用的dns服務器是dnsmasq,這個怎麼安裝使用我就不詳細解釋了,想要了解的能夠在個人博客裏面搜索vim
address=/www.bboysoul.com/10.10.10.10
後端
以後用戶就訪問到了咱們的vip,這個時候就是下一步安裝keepalived的時候瀏覽器
安裝keepalived,記得兩臺機器都要安裝哦bash
yum install keepalived
服務器
以後修改配置文件,一樣兩臺機器都要 修改
vim /etc/keepalived/keepalived.conf
主的keepalived配置文件
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.10.10/24
}
}
複製代碼
從的keepalived配置文件
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.10.10/24
}
}
複製代碼
兩個配置文件其實就是
priority 99
state BACKUP
兩個地方不同
以後重啓服務,兩臺機器都要重啓
systemctl restart keepalived
接着咱們就是在這兩臺機器上安裝nginx來實現反向代理,爲了簡單呢,我直接使用docker去安裝nginx
首先clone我nginx的docker-compose配置文件
git clone https://github.com/bboysoulcn/awesome-dockercompose.git
cd awesome-dockercompose/nginx
啓動nginx
docker-compose up -d
以後修改配置文件
vim /var/lib/docker/volumes/nginx_nginx-etc/_data/nginx.conf
user nginx;
worker_processes 4;
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;
# bboysoul web upstream
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=bboysoul-tmp:100m inactive=7d max_size=1000g;
upstream bboysoul-web {
server 10.10.10.112:8080;
}
server {
listen 80;
server_name www.bboysoul.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://bboysoul-web/;
proxy_cache bboysoul-tmp;
proxy_cache_valid 200 206 304 301 302 10d;
proxy_cache_key $uri;
}
}
include /etc/nginx/conf.d/*.conf;
}
複製代碼
以後重啓容器
docker-compose restart
最後咱們就要安裝一個後端應用服務來作測試
一樣的,上面咱們再nginx上配置了後端應用服務的地址是10.10.10.112:8080
因此咱們要在10.10.10.112:8080上啓動一個服務,爲了方便咱們直接使用docker來起一個服務
在10.10.10.112上
cd awesome-dockercompose/visualizer
docker-compose up -d
以後咱們訪問這個服務,直接在瀏覽器上輸入www.bboysoul.com
若是看到visualizer的界面就表示成功了
接着咱們來到10.10.10.2和10.10.10.3這兩臺機器上
首先執行
systemctl enable keepalived
讓keepalived能夠開機啓動
而且都執行下面的命令來看nginx的日誌
docker logs -f nginx
不出意外的話10.10.10.2上nginx是會有日誌的,也就是說咱們訪問的是10.10.10.2上的nginx
以後咱們模擬10.10.10.2宕機,直接在10.10.10.2上執行reboot
接着快速切換到瀏覽器上訪問www.bboysoul.com若是不出意外的話是能夠訪問的而且咱們訪問的是10.10.10.3上的nginx,當10.10.10.2重啓完成以後你會發現流量又回到了10.10.10.2上去
歡迎關注Bboysoul的博客www.bboysoul.com
Have Fun