當前位置: 車展網首頁 > 導購 > 正文

高可用、負載均衡 集群部署方案:Keepalived + Nginx + Tomcat

高可用、負載均衡 集群部署方案:Keepalived + Nginx + Tomcat

前言:初期應用較小,一般以單機部署為主,即可滿足業務的需求,隨著業務的不斷擴大,單機部署的模式無法承載這么大的業務量,需要進行服務集群化的部署,本文主要介紹服務器Tomcat多實例部署,搭載Keepalived + Nginx,實現Web服務的高可用。

前言:初期應用較小,一般以單機部署為主,即可滿足業務的需求,隨著業務的不斷擴大,單機部署的模式無法承載這么大的業務量,需要進行服務集群化的部署,本文主要介紹服務器Tomcat多實例部署,搭載Keepalived + Nginx,實現Web服務的高可用。

  • Nginx 是一個高性能的 HTTP反向代理服務器
  • Keepalived 是一個基于VRRP協議來實現的服務高可用方案,可以利用其來避免服務的單點故障
  • Nginx作為反向代理服務器,來提供負載均衡的能力,使我們的Web服務器,能夠水平擴容,這時反向代理服務器(Nginx)又變成了一個單點,如果掛掉,整合Web服務器就不能被外界訪問到;所以需要結合Keepalived來保障反向代理服務器(Nginx)的高可用;

    環境準備

    CentOS7系統

    Keepalived-2.0.15

    Nginx-1.14.2

    Tomcat8

    準備2臺服務器,每臺上部署安裝Nginx+Keepalived和Tomcat,另外一個VIP(虛擬IP);這里省略了2臺,這樣在實際模擬中方便演練(Tomcat不單獨部署在一臺服務器而已)

    1、Nginx的安裝

    2、Keepalived的安裝

    3、配置Keepalived + Nginx,實現高可用

    準備的2臺服務器上,一臺作為MASTER,一臺作為BACKUP;每臺上需要準備文件如下圖

    執行如下的約定,上面安裝腳本也是按照這個執行的

    1. keepalived 和 nginx 都編譯安裝到/usr/local目錄下面,名稱分別是keepalived 和 nginx

    2. ck_ng.sh、 keepalived.conf 文件放置到/etc/keepalived/目錄, ck_ng.sh文件權限設置成755

    3. nginx.service、 keepalived.service 文件放置到/usr/lib/systemd/system目錄

    3.1、MASTER配置

    keepalived.conf配置

    global_defs {
    #notification_email {
    # [email protected]
    #}
    #notification_email_from [email protected]
    #smtp_server [email protected]
    #smtp_connect_timeout 30
    router_id 192.168.1.101 #MASTER服務器的IP地址
    }

    #配置vrrp_script,主要用于健康檢查,以及檢查失敗后執行的動作。
    vrrp_script chk_nginx {
    #健康檢查腳本,當腳本返回值不為0時認為失敗
    script "/etc/keepalived/ck_ng.sh"
    #檢查頻率,以下配置每2秒檢查1次
    interval 2
    #當檢查失敗后,將vrrp_instance的priority減小5
    weight -5
    #連續監測失敗3次,才認為真的健康檢查失敗。并調整優先級
    fall 3
    #連續監測2次成功,就認為成功。但不調整優先級
    rise 2
    }

    #定義對外提供服務的VIP vrrp_instance配置
    vrrp_instance VI_1 {
    #指定vrrp_instance的初始狀態,是MASTER還是BackUP主要還是看優先級。
    state MASTER
    #指定vrrp_instance綁定的網卡,最終會通過指定的網卡宣告VIP
    interface ifcfg-eth0
    #發送心跳包的源IP,可使用綁定的網卡IP,也可以使用本服務器上的其他IP
    mcast_src_ip 192.168.1.101
    #相當于VRID,用于在一個網內區分組播,需要組播域內內唯一。
    virtual_router_id 55
    #本機的優先級,VRID相同的機器中,優先級最高的會被選舉為MASTER
    priority 100
    #心跳間隔,下面配置,MASTER會每隔1秒發送一個報文高職組內其他機器,自己還活著。
    advert_int 1
    #定義主從的驗證方式以及密碼,一般使用PASS(最長8位,超過了只會識別前8位作為密碼)
    authentication {
    auth_type PASS
    auth_pass 123456
    }

    #VIP 虛擬 IP 池, 兩個節點設置必須一樣
    virtual_ipaddress {
    192.168.1.100/24
    }

    #本vrrp_instance所引用的腳本配置,名稱就是vrrp_script 定義的容器名
    track_script {
    chk_nginx
    }

    #狀態切換,使用上述配置發送郵件通知
    smtp_alert
    }

    ck_ng.sh配置

    keepalived.service配置

    nginx.service配置

    3.2、BACKUP配置

    keepalived.conf配置(和MASTER類似,列出差異的地方)

    global_defs {
    router_id 192.168.1.102
    }

    #定義對外提供服務的VIP vrrp_instance配置
    vrrp_instance VI_1 {
    #指定vrrp_instance的初始狀態,是MASTER還是BackUP主要還是看優先級。
    state BACKUP
    #發送心跳包的源IP,可使用綁定的網卡IP,也可以使用本服務器上的其他IP
    mcast_src_ip 192.168.1.102
    #本機的優先級,VRID相同的機器中,優先級最高的會被選舉為MASTER
    priority 99
    }

    ck_ng.sh配置(和MASTER一致)

    keepalived.service配置(和MASTER一致)

    nginx.service配置(和MASTER一致)

    3.3、Tomcat服務通過反向代理Nginx對外提供服務

    Tomcat的安裝和應用部署不再具體描述,主要看一下如何通過Nginx的配置實現對外服務(兩個Nginx都通過這樣的配置來完成)

    nginx.conf配置

    # upstream configure 
    upstream myapp {
    ip_hash;
    server 192.168.1.101:8080; #Tomcat的應用
    server 192.168.1.102:8080; #Tomcat的應用
    }

    server
    {
    listen 8888; #假設對外提供的服務端口
    server_name localhost;
    port_in_redirect on;

    location /app1 #Tomcat下的一個應用
    {
    proxy_pass http://myapp/app1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /app2 #Tomcat下的另外一個應用
    {
    proxy_pass http://myapp/app2;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /
    {
    proxy_pass http://myapp;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    通過以上的搭建,可以實現高可用、負載均衡 集群部署方案。

    推薦閱讀:小空調怎么用

    [責任編輯:無]
    末平分野50手电子游戏 排列5走势图带连线专业版 浙江11选5前三直遗漏 新出的棋牌游戏? 贵阳微乐捉鸡麻将下载安装安卓 财富之轮 内蒙古十一选五前三走势图百度乐彩 低调看nba 哈尔滨大众麻将免费下载 三地试机号 手机上赢钱的捕鱼游戏大厅 完美娱乐棋牌 云南快乐十分开奖结果 11选5开奖结果5 235777高手论坛精选 赖子天津麻将手机版下载 3d詹天佑预测