N25_第二周作業

前言

我們這次使用HAProxy作為負載均衡調度器來實現后端httpd服務的負載均衡和動靜分離,實現將來自用戶的80端口的http請求轉發只后端8080端口的server服務

HAProxy介紹

HAProxy的是一個免費的,非??焖俸涂煽康慕鉀Q方案,提供高可用性,負載均衡和代理對TCP和HTTP的應用程序。它特別適用于非常高流量網站。多年來,它已成為標準的開源的負載均衡程序,現在隨最主流的Linux發行版,并且通常默認的云平臺部署。其運作模式使得其集成到現有的架構非常容易,無風險,同時還提供了可能性不暴露脆弱的Web服務器到網絡

實驗拓撲

N25_第二周作業

實驗環境

VIP1: 192.168.31.6 

主機 IP 功用
C7node1 192.168.31.21, VIP HAproxy, KeepAlived
C7node2 192.168.31.22, VIP HAproxy, KeepAlived
C7node3 192.168.31.23 httpd, php 動態資源
C7node4 192.168.31.24 nginx, 靜態資源

注意: 本文實驗中所有主機SElinux和iptables都是關閉的,  系統為:CentOS 7.2 x86_64

實驗步驟

配置后端httpd服務器

node4 靜態服務器,靜態資源

[root@c7node4 ~]# yum -y install nginx   #安裝nginx服務器
[root@c7node4 ~]# vim /etc/nginx/nginx.conf   #編輯nginx配置文件,修改堅挺端口
    server {
    listen       8080 default_server;   #由80改為8080端口
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}
[root@c7node4 ~]# echo '<h1> Jingtai server 192.168.31.24:8080</h1>' > /usr/share/nginx/html/index.html
[root@c7node4 ~]# cp /usr/share/backgrounds/*.jpg /usr/share/nginx/html/   #復制一些圖片文件到網站根目錄做測試
[root@c7node4 ~]# systemctl start nginx.service

N25_第二周作業

node3 動態服務器,動態資源
[root@c7node3 ~]#yum install httpd php          #安裝httpd,php
[root@c7node3 ~]#vim /etc/httpd/conf/httpd.conf #修改配置文件,更改監聽端口8080
ServerRoot "/etc/httpd"
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8080
[root@c7node3 ~]# systemctl start httpd.service  #啟動httpd服務
[root@c7node3 ~]#cat >> /var/www/html/index.php << "EOF"  #創建網頁文件
><h1>Dongtai server 192.168.31.23:8080</h1>
><img src="/morning.jpg"/>     #我們動態的網頁目錄下并沒有這張圖片
><?php
>phpinfo();
>?>
>EOF

N25_第二周作業

配置HAProxy實現backend負載均衡

[root@c7node1 ~]# yum install  -y haproxy    #安裝haproxy
[root@c7node1 ~]# vim /etc/haproxy/haproxy.cfg   #配置文件如下
mode                    http
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option forwardfor       except 127.0.0.0/8
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
timeout check           10s
maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
stats enable
stats hide-version
stats uri /haproxyadm

acl url_static       path_end       -i .jpg .gif .png .css .js .html

default_backend     dongtai
use_backend static          if url_static

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance     roundrobin
server      static 192.168.31.24:8080 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend dongtai
balance     roundrobin
server  dongtai 192.168.31.23:8080 check
[root@c7node1 ~]#systemctl start haproxy.service

測試動靜分離效果

我們訪問 192.168.31.21  這個是haproxy服務器IP地址

N25_第二周作業

我們關閉 192.168.31.24 這個靜態服務器nginx服務后結果
[root@c7node4 ~]# systemctl stop nginx.service

N25_第二周作業

我們再次開啟192.168.31.24 這個靜態服務器nginx服務后,圖片顯示正常
[root@c7node4 ~]# systemctl start nginx.service
我們打開了stats頁面, 可以通過設置的URI進行訪問

N25_第二周作業

配置keepalived

配置c7node1上keepalived的配置文件

[root@c7node4 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from zhong@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER                #配置為主節點
    interface eno16777736
    virtual_router_id 51
    priority 100                #主節點的權重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.6 dev eno16777736 label eno16777736:0   #虛擬vIP
    }
}
[root@c7node4 ~]#systemctl start keepalived.service
[root@c7node4 ~]#ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
   valid_lft forever preferred_lft forever
inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:13:c2:04 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.21/24 brd 192.168.31.255 scope global eno16777736
   valid_lft forever preferred_lft forever
inet 192.168.31.6/32 scope global eno16777736:0  #虛擬VIP,已經配置上了
   valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe13:c204/64 scope link 
   valid_lft forever preferred_lft forever


#配置c7node2上的keepalived配置文件#
[root@c7node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from zhong@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP            #備節點
    interface eno16777736
    virtual_router_id 52
    priority 95             #權重,應該小于主節點
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.6 dev eno16777736 label eno16777736:0
    }
}
[root@c7node2 ~]# systemctl start keepalived.service
[root@c7node2 ~]# ip addr   #發現虛擬VIP沒有在備用節點上啟用
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
   valid_lft forever preferred_lft forever
inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:60:20:b7 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.22/24 brd 192.168.31.255 scope global eno16777736
   valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe60:20b7/64 scope link 
   valid_lft forever preferred_lft forever

最終測試

直接訪問192.168.31.6  此時VIP在C7node1上面

N25_第二周作業

將C7node1上面的keepalived停止,VIP自動轉移到C7node2上面,

N25_第二周作業

總結

我們輕松地通過HAProxy實現資源的動靜分離和后端httpd主機的負載均衡,也通過KeepAlived實現HAProxy的高可用, 對于一個集群架構來說,整套架構還不算是很完整的。比如,在keepalived上面沒有做后端主機健康檢查;后端還沒有配置varnish緩存服務器。這些知識還需要在后續的學習中繼續來實踐。

原創文章,作者:N25_木頭鐘,如若轉載,請注明出處:http://www.www58058.com/63371

(0)
N25_木頭鐘N25_木頭鐘
上一篇 2016-12-12 12:37
下一篇 2016-12-12 15:13

相關推薦

  • 集中練習2

    用戶管理、文本處理、文件管理相關

    2017-09-20
  • N26_第二周作業

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理命令:cp,mv,rm 1、cp命令 功能說明:復制copy語法格式:        單源復制:  cp [OPTION]… [-T] SOURCE DEST  …

    Linux干貨 2017-02-21
  • System作業

    1、求每班總成績和平均成績 [root@Centos7 bin]# awk '!/^name/{a[$2]++;b[$2]+=$3}END{for(i in a){print i,b[i],b[i]/a[i]}}' f1 4 100 50 5&nbs…

    Linux干貨 2016-09-20
  • 壓縮和解壓縮總結

                      壓縮和解壓縮的命令很多,今天總結如下: gzip  壓縮比1–9  默認是6  壓縮比越高  耗費CPU資源也多,文件比較小的話,不建議使用gzip壓縮,因為使用gzip越壓縮越大?!?/p>

    Linux干貨 2017-04-17
  • 網絡理論基礎

    一、網絡概述   1、什么是網絡     網絡就是通過有線或無線技術將各種硬件設備連接起來進行數據傳輸的一種方式。   2、網絡的分類     根據距離范圍可以將網絡劃分為局域網和廣域網。       局域網:傳輸距離較近,傳輸速率快。     &n…

    Linux干貨 2016-01-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-16 23:18

    贊~ keepalived 中的其中一個配置參數 virtual_router_id 需要注意下~~繼續加油~

欧美性久久久久