使用keepalived實現nginx的高可用

bboysoul發表於2019-02-17

使用keepalived實現nginx的高可用

概述

是這樣子的,我想讓家中所有的應用服務都從nginx中出去,讓nginx處於訪問的最邊緣地帶,為了讓nginx可靠性加強,所以nginx就得實現高可用,分別是下面兩臺機器要做nginx的叢集

  • 10.10.10.2
  • 10.10.10.3

當然上面的機器同時也要安裝nginx,總的架構就是文章圖片那個樣子

當主10.10.10.2掛了的時候可以自動切換到備10.10.10.3上的nginx,這樣就實現了nginx的高可用

文中的後端應用服務可以有很多個不單單隻有一個web網站

dns解析

我們從頭開始

首先使用者訪問www.bboysoul.com這個網站要經過dns解析,所以我們要在dns伺服器上加一條www.bboysoul.com到10.10.10.10的解析,我使用的dns伺服器是dnsmasq,這個怎麼安裝使用我就不詳細解釋了,想要了解的可以在我的部落格裡面搜尋

address=/www.bboysoul.com/10.10.10.10

之後使用者就訪問到了我們的vip,這個時候就是下一步安裝keepalived的時候

安裝配置keepalived

安裝keepalived,記得兩臺機器都要安裝哦

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

安裝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

之後我們在瀏覽器上訪問www.bboysoul.com

不出意外的話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

相關文章