N21沉舟17周作業

1、結合圖形描述LVS的工作原理;

N21沉舟17周作業

NAT模型

NAT模型其實就是通過網絡地址轉換來實現負載均衡的,它的工作方式幾乎跟iptables 中的DNAT一模一樣的,NAT模型的工作方式:

1.用戶請求VIP(也就是是CIP請求VIP)

2,Director Server 收到用戶的請求后,發現源地址為CIP請求的目標地址為VIP,那么Dorector Server會認為用戶請求的是一個集群服務,那么Director Server 會根據此前設定好的調度算法將用戶請求負載給某臺Real Server ,假如說此時Director Server 根據調度算法的結果會將請求分攤到Real Server 2上去,那么Director Server 會將用戶的請求報文中的目標地址,從原來的VIP改為Real Server 2的IP,然后再轉發給Real Server 2

3,此時Real Server 1收到一個源地址為CIP目標地址為自己的請求,那么Real Server 1處理好請求后會將一個源地址為自己目標地址為CIP的數據包通過Director Server 發出去,

4.當Driector Server收到一個源地址為Real Server 1 的IP 目標地址為CIP的數據包,此時Driector Server 會將源地址修改為VIP,然后再將數據包發送給用戶,

N21沉舟17周作業

DR模型:

1.director必須與realserver位于同一個網絡。

2.director只負責處理入站請求。而響應報文則由realserver直接返回給client端。大大節省director的資源。

3.不能做端口映射

整個工作原理如下:

客戶端通過路由器將請求交給director的VIP。director接收請求,將通過相應的算法將請求轉發給相應的realserver。在轉發的過程中,會修改請求包的目的mac地址,目的ip地址不變。realserver接收請求,并直接響應客戶端。這時,便出現一個問題:director此時與realserver位于同一個網絡中,當director直接將請求轉發給realserver時,realserver檢測到該請求包的目的ip是vip而并非自己,便會丟棄,而不會響應。。為了解決這個問題,我們需要在所有realserver上都配上VIP。這時會出現第二個問題:director與realserver位于同一個網絡中,當出現多個vip時,通過arp廣播,整個網絡必然混亂,我們無法保證客戶端的請求一定會發往director。為保證當客戶端請求抵達網絡時,只有director來響應請求。我們需要realserver忽略對vip的arp請求,并且在arp通告時,不通告vip地址。我們需要配置如下兩個內核參數:

arp_ignore :當一臺主機某個接口接收到arp請求時,這臺機上的ip地址是否通過該接口響應給對應請求的限制級別。簡單來說,當這臺主機有多塊網卡,或者有多個ip地址時,是否通過該接口將所有ip地址響應給對應的請求。

0:不作任何限制。將所有本機的ip地址都響應給對應請求。

1:當請求的ip就配置在本接口上時,才予以響應。換句話說,就是只響應當前接口的ip地址。

arp_announce:當一臺主機加入到一個新的網絡。會發出ARP通告,向網絡中其他主機通告自己的ip地址及mac等信息。arp_anounce就用來限制通告的級別。當這臺主機有多塊網卡或者多個ip地址時,是否通過某一個接口將所有ip地址通告給該網絡中的主機。

0:不作任何限制。從任意接口通告所有ip地址。

1:盡可能避免通告非本接口上的ip。

2:只通知本接口的ip。非本接口的ip不予通告。

由此我們亦可知,在realserver上配置vip時顯然也不能配置的物理接口的虛接口上,而應該配置在loopback上。

1、當Director收到用戶的請求后根據預先設定的調度算法來確定將請求負載到某臺Real Server上去,假如說此時根據調度算法的結果,會將請求負載到Real Server 1上面去,此時Director會將數據幀中的目標MAC地址修改為Real Server1的MAC地址,然后再將數據幀發送出去。

2、當Real Server1 收到一個源地址為CIP目標地址為VIP的數據包時,Real Server1發現目標地址為VIP,而自己本地是有VIP的,于是接受數據包并給予處理,當Real Server1處理完請求后,會將一個源地址為VIP目標地址為CIP的數據包發出去,此時的響應請求就不會再經過Director Server了,而是直接響應給用戶。

2、搭建一套LVS-DR模型的高性能集群,并實現以下功能:
(1)、wordpress程序通過nfs共享給各個realserver;
(2)、后端realserver中的nginx和php分離

準備:

nod1:192.168.50.178 centos 6.8

nod2:192.168.50.206  centos 6.3

NFS & php-fpm:192.168.50.173 centos 7

directory: 192.168.50.176  centos 6.3

NFS存儲:

新建/data目錄,并輸出為共享:/etc/exports文件如下

N21沉舟17周作業

安裝php-fpm ,修改/etc/php-fpm.d/www.conf

確認監聽端口為9000

listen = 192.168.50.173:9000

將白名單注釋

;listen.allowed_clients =

分別在nod1和nod2上將共享目錄掛載至本地/data

mount -t nfs 192.168.50.173:/data /data

N21沉舟17周作業

分別在nod1和nod2上安裝nginx,修改/etc/nginx/conf.d/default.conf,
新建一個location, 將.php交指php-fpm服務器處理

location ~ \.php$ {
#root         /data;  
fastcgi_pass   192.168.50.173:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
include        /etc/nginx/fastcgi_params;
}

編輯/etc/nginx/fastcgi_params,將內容更改為

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

啟動nginx服務,并測試phpinfo正常。
在192.168.50.178上安裝mysql-server,并新建數據庫wp, 新用戶pa, 并進行相應授權
下載wordpress程序包,并解壓至/data/wp目錄下
編輯/data/wp/wp-config.php文件,內容如下

...........................................................................
define('DB_NAME', 'wp');
define('DB_USER', 'pa');
define('DB_PASSWORD', '45455654545');
define('DB_HOST', '192.168.50.178');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
...........................................................................
?>

#######嘗試通過http://192.168.50.178/wp/index.php訪問時,出現錯誤提示"PHP似乎沒有安裝運行WordPress所必需的MySQL擴展。"在php-fpm機器上安裝php-mysql就可以了。
確保兩個realserver都能正常訪問wordpress后,開始lvs配置,具體配置步驟如下:

nod1 & nod2:

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
ifconfig lo:0 192.168.50.222/32 broadcast 192.168.50.222 up
route add -host 192.168.50.222 dev lo:0

director

ifconfig eth0:0 192.168.50.222/32 broadcast 192.168.50.222 up
ipvsadm -A -t 192.168.50.222:80 -s rr
ipvsadm -a -t 192.168.50.222:80 -r 192.168.50.178 -g
ipvsadm -a -t 192.168.50.222:80 -r 192.168.50.206 -g

配置完成后,通過http://192.168.50.222/wp可以正常訪問,同時通過iptables -L -n可以看到請求被調度到不同的服務器進行響應

N21沉舟17周作業N21沉舟17周作業

3、基于heartbeat v2 crm實現HA LAMP組合;要求,部署wordpress,用于編輯的文章中的任何數據在節點切換后都能正常訪問;

1、實驗環境:nod1 192.168.50.206  centos6.8

                        nod2  192.168.50.178 centos6.3  

                       vip 192.168.50.244

                       NFS & Mysql   192.168.50.173

2、部署nfs,mysql

 編輯192.168.50.173上的/etc/export文件,內容如下

/data 192.168.50.206(rw,no_root_squash)

/data 192.168.50.178(rw,no_root_squash)

安裝mysql,新建wordpress數據庫,新建wp用戶名,并授權外網登錄

]# mysql
>CREATE DATABASE WP;
>GRANT ALL PRIVILEGES ON *.* TO 'pa'@'%'IDENTIFIED BY '454545' WITH GRANT OPTION;

3、兩臺nod機器

   掛載nfs至本地/data目錄

    mount -t nfs 192.168.50.173:/data /data

1、直接yum安裝httpd, 此處版本為httpd 2.2

編輯/etc/httpd/conf/httpd, 新建虛擬機,將/data設置為httpd工作目錄:

<VirtualHost *:80>
    ServerAdmin admin@mydome.com
    DocumentRoot /data
    ServerName localhost
    ErrorLog logs/mydome.com-error_log
    CustomLog logs/mydome.com-access_log common
</VirtualHost>

2、、安裝fastcgi模塊

下載

wget http://www.pccc.com/downloads/apache/current/mod_fastcgi-current.tar.gz


安裝

# tar zxvf mod_fastcgi-2.4.6.tar.gz

# cd mod_fastcgi-2.4.6

# cp Makefile.AP2 Makefile

# vim Makefile

修改top_dir目錄,64位系統的路徑為 /usr/lib64/httpd,32位系統的路徑為/usr/lib/httpd

top_dir      = /usr/lib64/httpd

#make

#make install

當出現錯誤:“Makefile:12: /usr/lib64/httpd/build/special.mk: No such file or directory”,執行:

yum install libtool httpd-devel apr-devel apr

加載模塊

# vim /etc/httpd/conf/httpd.conf

找到LoadModule部分,添加一行加載語句

LoadModule fastcgi_module modules/mod_fastcgi.so

3、安裝php-fpm

yum install php-fpm

service php-fpm start

chkconfig php-fpm on

netstat -anp |grep php

4、新建php-fpm配置文件

新建/etc/httpd/conf.d/fastcgi.conf,內容如下:

AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /var/www/cgi-bin/php5-fcgi
FastCgiExternalServer /var/www/cgi-bin/php5-fcgi -idle-timeout 60 -host 127.0.0.1:9000 -pass-header Authorization

編輯/etc/httpd/conf/httpd.conf,添加:

AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps
DirectoryIndex  index.php  index.html

5、解壓wordpress程序到/data/wp目錄,并安裝,安裝時數據庫路徑為192.168.50.173

     驗證通過192.168.50.178/wp和 192.168.50.206/wp可以正常訪問

N21沉舟17周作業N21沉舟17周作業



4、安裝heartbeat

  • 依賴關系

  • yum install net-snmp-libs libnet PyXML perl-Time-Date libtool-ltdl

  • 安裝hearheat包

  • rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm 

編輯/etc/ha.cfg文件:內容如下

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility local0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport 694

ucast eth0 192.168.50.178   #使用單播,為別一臺nod的ip地址

auto_failback on

node nod1

node nod2

ping 192.168.50.1

apiauth ipfail gid=root uid=root

編輯/etc/authkeys文件,內容如下:

auth 2 

#1 crc

2 sha1 Hi354fdafdgI!

#3 md5 Hello!

編輯/etc/haresources文件,內容如下

nod1 192.168.50.244 httpd


5、驗證heartbeat服務 

 在兩臺nod機器上啟動heartbeat服務:service heartbeat start 

在nod1上查看ip addr可以看到vip已經被配置,

N21沉舟17周作業

 

在nod1上使用usr/lib64/heartbeat/hb_standby ,將nod1下線為維擴模式,此時vip被取消配置,httpd服務被停止

N21沉舟17周作業

 在nod2上查看vip已經被自動配置,httpd服務自動啟動,監聽在80端口,heartbeat服務正常。

N21沉舟17周作業

使用 /usr/lib64/heartbeat/hb_takeover命令,將nod1重新上線

6、驗證數據庫是共享使用,發表的文章,兩個節點內容一致

確保vip被配置在nod1節點上,登錄后發,發表一篇文章,前臺訪問頁面如下:

45100975-0ebe-4850-b0b1-82dc84ae4670.jpg

 將nod1配置為standby, 確保vip位于nod2上,訪問wordpress首頁如下:

 45100975-0ebe-4850-b0b1-82dc84ae4670.png

 

原創文章,作者:N21-沉舟,如若轉載,請注明出處:http://www.www58058.com/58262

(0)
N21-沉舟N21-沉舟
上一篇 2016-11-14
下一篇 2016-11-14

相關推薦

  • Linux基礎之shell腳本編程(四)

    1、寫一個腳本   (1) 能接受四個參數:start, stop, restart, status    start: 輸出“starting 腳本名 finished.”   (2) 其它任意參數,均報錯退出;   1 #!/bin/bash   2 #a…

    Linux干貨 2016-11-28
  • 第六周作業

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;          cp/etc/rc.d/rc.sysinit /tmp/     &nbs…

    2017-09-04
  • Unlocking the Future of Digital Play

    In the rapidly evolving world of digital entertainment, the bc game stands out as a beacon of innovation and excitement. This app has managed to capture the essence of online gamin…

    Linux干貨 1天前
  • 二維碼的生成細節和原理

    二維碼又稱QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型:比如:字符,數字,日文,中文等等。這兩天學習了一下二維碼圖片生成的相關細節,覺得這個玩意就是一個密碼算法,在此寫一這篇文章 ,揭露一下。供好學的人一同學習之。 關于QR Code…

    Linux干貨 2016-08-15
  • cp和ln命令簡述

    cp和軟ln命令簡述 cp          備注: 1.       該命令可以自動判斷你所復制的是文件還是目錄 2.       當源是一個文件,目標(目的…

    2017-08-19
  • Linux發展歷史與基礎知識

    工具: 億圖 CRT 思維圖工具-Dream VPS-搬瓦工,亞馬遜云,阿里云 網站: 阿里云-help.aliyun.com 企業新聞-36kr.com lnmp.org-如何配置web服務 中關村在線-zol.com:看服務器設備 計算機組成: 硬件,軟件。 CPU類型 ·x86 ·x64 ·ARM ·m68k(moto) ·power ·Ultrasp…

    Linux干貨 2017-03-26

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-16 15:53

    寫的很棒,完全可以作為范例來展示

欧美性久久久久