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
下一篇 2016-12-06

相關推薦

  • N25期第七周作業

    創建一個10G分區,并格式為ext4文件系統   要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳 fdisk /dev/sdb # size 10G type 83 mke2fs -t ext4 -b 20…

    Linux干貨 2017-02-28
  • 第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。 5、取出當前主機的…

    Linux干貨 2017-02-06
  • 在CentOS中獲取命令幫助

    在CentOS中獲取命令幫助    在使用和學習CentOS系統中,當我們遇上不熟悉的命令卻又需要了解它的詳細用法的時候,我們需要獲取幫助。除了借助他人和搜索引擎之外,自己通過查看系統幫助文檔來解決問題是很重要的。下面就來介紹如何獲取幫助以及簡單的解決思路:    一、如何獲取命令幫助 Linux提供多層次的命令幫助:…

    Linux干貨 2016-07-27
  • 磁盤分區,文件系統的創建、修改和檢測

        寫博客,對我來說不僅是學習的過程,也是一個心理歷練的過程,多說無益,開始吧!??!     博客是馬哥視頻里的博客作業:文件系統的創建、修改和檢測。我就從磁盤管理開始把      環境:     創建的centos6.5虛擬機 &nb…

    Linux干貨 2016-06-26
  • vsftpd虛擬用戶搭建

    首選的FTP服務器搭建方式 安裝vsftpd      yum install -y vsftpd      systemctl enable vsftpd     #設置開機啟動      systemctl is-enabled vsf…

    Linux干貨 2017-04-27
  • linux網絡管理(基礎-IP、MAC、TCP)

    linux網絡管理 計算機網絡 MACMAC(Media Access Control或者Medium Access Control)地址,意譯為媒體訪問控制、介質訪問控制,或稱為物理地址、硬件地址,用來定義網絡設備的位置。在OSI模型中,第三層網絡層負責IP地址,第二層數據鏈路層則負責MAC地址。因此一個主機會有一個MAC地址,而每個網絡位置會有一個專屬于…

    Linux干貨 2016-09-09
欧美性久久久久