LVS

一 LVS工作原理

1. lvs-nat模型

lvs-nat:多目標的DNAT, 通過將請求報文中的目標地址和目標端口修改為挑選出的某RS的RIP和PORT 實現轉發。

(1) RIP和DIP必須在同一IP網絡,且應該使用私有地址,RS的網絡要指向DIP(保證響應報文必須由VS);
(2) 請求報文和響應報文都經由Director轉發,較高負載下,Director易于成為系統性能瓶頸;             
(3) 支持端口映射;
(4) VS必須是Linux, RS可以是任意OS.

lvs-nat模型工作原理如圖:

1.png

2. lvs-dr模型

lvs-dr:通過為請求報文的重新封裝一個MAC首部進行轉發,源MAC是DIP所在接口的MAC, 目標MAC是挑選出某RS的RIP所在接口的MAC地址,IP首部不會發生變化。

(1) 確保前端路徑將目標IP為VIP的請求報文發往Director;
    解決方案:
       在路由器上靜態綁定VIP和Director的MAC地址;
       禁止RS響應VIP的ARP請求,禁止RS對VIP進行通告。
          (a) arptables;
          (b) 修改RS的內核參數,并把VIP綁定lo的別名上
              arp_ignore, arp_announce.
(2) RS的RIP可以使用私有地址,也可以使用公網地址;
(3) RS跟Director必須在同一物理網絡;
(4) 請求報文必須由Director調度,但響應報文必須不能經由Director;
(5) 不支持端口映射;
(6) RS可以使用大多的OS;

lvs-dr模型工作原理如圖:

2.png

3. lvs-tun模型

lvs-tun:轉發方式:不修改請求報文的IP首部(源IP為CIP, 目標IP為VIP),而是源IP首部之外再封裝一個IP首部(源IP為DIP, 目標IP為挑選出的RS的RIP)。

(1) RIP, DIP, VIP全得是公網地址;
(2) RS網關不能指向也可能指向DIP;
(3) 請求報文經由Director轉發,但響應報文將直接發往CIP;
(4) 不支持端口映射;
(5) RS的OS必須支持隧道功能。

lvs-tun模型工作原理如圖:

3.png

4. lvs-fullnat

lvs-fullnat:通過同時修改請求報文的源IP地址(CIP—>DIP)和目標地址(VIP—>RIP)進行轉發。

(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一網絡中,但需要經由路由器互通;
(2) RS收到的請求報文源IP為DIP, 因此響應報文將直接響應給DIP;
(3) 請求和響應報文都經由Director;
(4) 支持端口映射。

二 搭建LVS-DR的高性能集群實驗

1. 架構描述

通過Director訪問調度到RS1和RS2實現負載均衡,另一臺服務器負責動態分離及給RS1和RS2提供共享實現數據同步并提供數據庫服務。

架構圖如下:

4.png

2. 環境情況

操作系統:CentOS7.2

Director:ipvsadm

  • VIP:192.168.20.108

  • DIP:192.168.237.128

RS1:nginx

  • RIP:192.168.237.129

RS2:nginx

  • RIP:192.168.237.130

RS3:MariaDB+PHP+NFS

  • IP:192.168.237.131

3. 安裝配置

(1) RS1安裝配置nginx

#安裝nginx
yum install nginx

#配置nginx
vim /etc/nginx/conf.d/default.conf
server {
listen       80;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/log/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   192.168.237.131:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
    include        fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}

#啟動nginx
systemctl start nginx

#RS2同RS1安裝配置nginx

(2) RS3安裝配置MariaDB,NFS及PHH-FPM

#安裝MariaDB, NFS, PHP-FPM和PHP
yum install mariadb nfs-utils php-fpm php

#啟動MariaDB
systemctl start mariadb

#創建共享目錄,與RS1和RS2的nginx根目錄一致
mkdir -p /usr/share/nginx/html

#配置NFS
vim /etc/exports
/usr/share/nginx/html 192.168.237.0/24(rw,no_root_squash)

#啟動NFS服務
systemctl start nfs

#創建nginx用戶,與RS1和RS2上的nginx用戶UID和GID一致, nginx的UID為994, GID為996
groupadd -g 996 nginx
useradd -u 994 -g nginx -s /sbin/nologin nginx

#配置php-fpm
vim /etc/php-fpm.d/www.conf
listen = 192.168.237.131:9000
listen.allowed_clients = 192.168.237.129,192.168.237.130
user = nginx
group = nginx

#啟動PHP-FPM
systemctl start php-fpm

(3) 在RS1和RS2上掛載共享文件

#安裝NFS
yum install nfs-utils

#掛載共享文件
mount 192.168.237.131:/usr/share/nginx/html /usr/share/nginx/html

#RS2同RS1操作

(4) 在Director安裝配置ipvs

#安裝ipvs
yum install ipvsadm

#增加集群服務
ipvsadm -A -t 192.168.20.108:80 -s rr

#配置集群規則
ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.129:80 -g
ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.130:80 -g

#開啟路由轉發
echo 1 > /proc/sys/net/ipv4/ip_forward

(5) 在RS1上配置VIP及修改相關內核參數

#修改arp_ignore和arp_announce兩個內核參數
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

#配置VIP
ifconfig lo:0 192.168.20.108 netmask 255.255.255.255 broadcast 192.168.20.108

#增加路由
route add -host 192.168.20.108 dev lo:0

#RS2同RS1配置

(6) 創建wordpress數據庫并分配權限

#創建數據庫
MariaDB [(none)]> create database wordpress;

#創建數據庫用戶、設置密碼并分配權限
MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'192.168.237.131' identified by '123456';

(7) 安裝wordpress

#解壓目錄到nginx根目錄
[root@localhost ~]# tar xvzf wordpress-4.5.3-zh_CN.tar.gz -C /usr/share/nginx/html/

在瀏覽器中輸入192.168.237.129/wordpress/wp-admin/setup-config.php

5.png

6.png

7.png

這樣就可以進行安裝了,就不再具體演示。

不過LVS調度還有些問題,有待進一步研究。

原創文章,作者:N25_zzc,如若轉載,請注明出處:http://www.www58058.com/62885

(0)
N25_zzcN25_zzc
上一篇 2016-12-06 17:07
下一篇 2016-12-06 20:51

相關推薦

  • LInux 網絡及相關進程作業管理

    馬哥教育網絡班23期+第四周課堂練習 Linux 網絡及相關進程作業管理 一、概述 1.1 簡介: 進入Linux學習第四周,這一周講的知識點非常的多,也特別的碎,感覺這一周的內容掌握起來有很大的難度,主要是要記的命令很多,包括yum 的一些安裝的命令,配置yum 源,相關的網絡的命令和參數,還有就是進程管理和作業管理中的相關工具的使用,最后還講了bash腳…

    Linux干貨 2016-10-24
  • mysql—MHA原理與實現

    MHA 一:簡述MHA 1.1關于MHA MHA(Master HA)是一款開源的MySQL的高可用程序,它為MySQL主從復制架構提供了automating master failover 功能。MHA在監控到master節點故障時,會提升其中擁有最新數據的slave節點成為新的master節點,在此期間,MHA會通過與其它從節點獲取額外信息來避免一致性方…

    2016-11-27
  • 海量數據處理算法—Bit-Map

    1. Bit Map算法簡介         來自于《編程珠璣》。所謂的Bit-map就是用一個bit位來標記某個元素對應的Value, 而Key即是該元素。由于采用了Bit為單位來存儲數據,因此在存儲空間方面,可以大大節省。 2、 Bit Map的基本思想       &nbs…

    Linux干貨 2015-11-10
  • linux基礎學習-第八天

    2016-08-08 授課內容: 處理文本的工具sed vim編輯器 Shell腳本編程基礎介紹 sed:sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),     接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。默認不編輯原文件,僅…

    Linux干貨 2016-08-10
  • mysql-proxy 讀寫分離

    1. 簡介     mysql-proxy 是官方為此的一個測試,項目, 可以完成讀寫分離。但是項目目前還不是很成熟,這里僅作測試。  2. mysql-proxy安裝部署 # wget http://downloads.mysql.com/archives/get/file/mysql-…

    Linux干貨 2015-12-21
  • vim

    VIM是什么? Vim是從VI發展出來的一個文本編輯器,擁有許多豐富的功能,便于編程開發,在程序員中被廣泛使用,是類Unix系統用戶最喜歡的功能強大的跨平臺文本文件編輯工具。 為什么要用VIM? vi編輯器是所有類UNIX系統下標準的編輯器,他是我們使用Linux系統不能缺少的工具。對于所有類UNIX系統的任何版本,vi編輯器是完全相同的。而vim是從VI發…

    2017-06-07
欧美性久久久久