第十七周作業

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

工作原理

LVS分為兩個組件:ipvs和ipvsadm

        ipvs:工作于內核空間,主要用于使用戶定義的策略生效;

        ipvsadm : 工作于用戶空間,主要用于用戶定義和管理集群服務的工具;

第十七周作業

上圖所示,ipvs工作于內核空間的INPUT鏈上,當收到用戶請求某集群服務時,經過PREROUTING鏈,經檢查本機路由表,送往INPUT鏈;在進入netfilter的INPUT鏈時,ipvs強行將請求報文通過ipvsadm定義的集群服務策略的路徑改為FORWORD鏈,將報文轉發至后端真實提供服務的主機。

幾種常用模型:

                                                                       LVS-DR

第十七周作業

1)client向目標vip發出請求,Director接收.此時IP包頭及數據幀頭信息如(1),(2);

2)LVS根據負載均衡算法選擇一臺active的RS,將此RIP所在網卡的mac地址作為目標mac地址,發送到局域網里.此時IP包頭及數據幀頭信息如(3);

3)RS在局域網中收到這個幀,拆開后發現目標IP(VIP)與本地匹配,于是處理這個報文.隨后重新封裝報文,發送到局域網.此時IP包頭及數據幀頭信息如(4);

LVS DR類型的特性:
 1)RS可以使用私有地址;但也可以使用公網地址,此時可以直接通過互聯網連入RS以實現配置、監控等;
 2)RS的網關一定不能指向DIP;
 3)RS跟DR要在同一物理網絡內(不能由路由器分隔);
 4)請求報文經過DR,但響應報文一定不經過DR
 5)不支持端口映射;
 6)RS可以使用大多數的操作系統;


                                                               LVS-NAT

第十七周作業

此模型中,DR只需要將VIP配置到DR上,它的工作機制是,將收到的集群服務請求報文目標地址轉換成經調度算法計算得出的后端主機IP地址,然后端主機將響應報文發送至DR,再由DR將源地址轉換成VIP的地址;此機制與iptables中我們學習的DNAT類似;

NAT的特性:

  1> RS應該使用私有地址;

  2> RS的網關的必須指向DIP;

  3> RIP和DIP必須在同一網段內;

  4> 請求和響應的報文都得經過Director;在高負載場景中,Director很可能成為系統性能瓶頸;

  5> 支持端口映射;

  6> RS可以使用任意支持集群服務的OS


                                                                      LVS-TUN

在數據包必須傳遞到另一個網絡或因特網上時,可以使用ip隧道,ip隧道能夠將數據包從一個子網或虛擬局域網(VLAN)轉發到另一個子網或虛擬局域網(VLAN),建立ip隧道是Linux內核功能的一部分,LVS-TUN轉發方法允許你將集群節點放在與Director不同的網絡上。

wKiom1PHUB-hMKfKAAErFLpoOdo937.jpg

請留意DR將數據包轉發給RS時的IP數據報文;由于DR,RS都不在同一局域網內,而DR要將client請求報文轉發給RS時,DR是直接在數據包中直接添加IP首部(源IP:DR和目標IP:RS),這樣就是隧道技術了。

同樣,該模型下RS都將配置VIP地址,且不能被外界所獲知VIP存在于RS上;

LVS TUN類型:IP隧道
 1)RIP、DIP、VIP都得是公網地址;
 2)RS的網關不會指向也不可能指向DIP;
 3)請求報文經過DR,但響應報文一定不經過DR;
 4)不支持端口映射;
 5)RS的OS必須得支持隧道功能;

                                                                          LVS-FullNat

LVS當前應用主要采用DR和NAT模式,但這2種模式要求RS和DR在同一個vlan中,導致部署成本過高;TUN模式雖然可以跨vlan,但RS上需要部署ipip模塊等,網絡拓撲上需要連通外網,較復雜,不易運維。為了解決上述問題,我們在DR上添加了一種新的轉發模式:FullNat,該模式和NAT模式的區別是:Packet IN時,除了做DNAT,還做SNAT(用戶ip->內網ip),從而實現DR-RS間可以跨vlan通訊,RS只需要連接到內網;

wKiom1PHT-qiq_nGAAEJ7XqVIUQ769.jpg

LVS FullNat:

 1)DR,RS可以不在同一網絡內,但它與TUN不同,所有IP報文頭部信息變更都在DR上進行,所以性能方面比LVS_NAT更差一些;

 2)需要注意配置路由,保證能正常通信;

2、搭建一套LVS-DR模型的高性能集群,并實現以下功能:

(1)、wordpress程序通過nfs共享給各個realserver;

(2)、后端realserver中的nginx和php分離

LVS-VIP   192.168.31.100

LVS- DIP  192.168.31.10

nginx1    192.168.31.11

nginx2     192.168.31.12

PHP/NFS  192.168.31.13

MySQL     192.168.31.14

                                                                            架構圖

第十七周作業

1、在兩臺nginx上安裝nginx服務,我這里選擇源碼編譯安裝

[root@server ~]# tar -zxvf nginx-1.10.3.tar.gz

[root@server ~]# ./configure –prefix=/usr/local/nginx –sbin-path=/usr/local/nginx/sbin/nginx –conf-path=/etc/nginx/nginx.conf  –error-log-path=/var/log/nginx/error.log  –http-log-path=/var/log/nginx/access.log  –pid-path=/var/run/nginx/nginx.pid  –lock-path=/var/lock/nginx.lock  –user=nginx –group=nginx   –with-http_ssl_module –with-http_flv_module –with-http_stub_status_module –with-http_gzip_static_module  –http-client-body-temp-path=/var/tmp/nginx/client/  –http-proxy-temp-path=/var/tmp/nginx/proxy/ –http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ –http-uwsgi-temp-path=/var/tmp/nginx/uwsgi –http-scgi-temp-path=/var/tmp/nginx/scgi –with-pcre

[root@server ~]#make && make install

2、建立nginx用戶,保證和php服務器上的nginx用戶id號,組id號一致

groupadd -r -g 409 nginx

useradd -r -u 409 -g 409 nginx

3、在PHP/NFS服務起上安裝php及nfs

yum install php-mysql php-mbstring php-gd php-xml nfs-utils -y

[root@php ~]#tar -zxvf php-5.5.15.tar.gz

[root@php ~]#./configure –prefix=/usr/local/php –with-mysql  –with-pdo-mysql  –with-mysqli  –with-openssl  –enable-fpm  –enable-sockets   –enable-sysvshm –enable-mbstring  –with-freetype-dir  –with-jpeg-dir  –with-png-dir  –with-zlib-dir –with-libxml-dir=/usr  –enable-xml  –with-mhash  –with-mcrypt  –with-config-file-path=/etc  –with-config-file-scan-dir=/etc/php.d  –with-bz2 –with-curl

[root@php ~]#make && make install

提供配置文件

[root@php php-5.5.15]# cp php.ini-production /etc/php.ini

為php-fpm提供腳本

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 

chmod +x /etc/init.d/php-fpm 

chkconfig –add php-fpm 

chkconfig php-fpm on

4、在PHP服務器上,建立nginx用戶,要保證和nginx服務器上的nginx用戶id號、組id號一致:

groupadd -r -g 409 nginx

useradd -r -u 409 -g 409 nginx

5、修改php-fpm配置文件,并重啟:

vim /usr/local/php/etc/php-fpm.conf

listen = 192.168.31.13:9000
user = nginx
group = nginx
service php-fpm restart
6.在PHP服務器上創建/www目錄,并開啟nfs服務
mkdir /www
chown nginx.nginx /www -R

vim /etc/exports
/www    192.168.31.0/24(rw,no_root_squash)
service nfs start

7.整合nginx與php

nginx服務器建立網頁文件存放目錄/www,并修改其權限

mkdir /www

chown -R nginx:nginx /www

vim /etc/nginx/nginx.conf

location / {
            root   /www;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
            root           /www;
            fastcgi_pass   192.168.31.13:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
8、nginx服務器掛載nfs,并測試php

mount -t nfs 192.168.31.13:/www  /www

vim /www/index.php

<?php

phpinfo();

?>

9、整合PHP與mysql,安裝mysql

9.1添加用戶

useradd -r mysql

mkdir -pv /mydata/data

chown -R mysql.mysql /mydata/data

9.2解壓并初始化mysql

tar xf mariadb-10.0.20-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.20-linux-x86_64 mysql
cd mysql/
chown -R root:mysql .
scripts/mysql_install_db –user=mysql –datadir=/mydata/data/

9.3修改配置文件

cp support-files/my-large.cnf /etc/my.cnf 

vim /etc/my.cnf

添加以下幾行

datadir = /mydata/data

innodb_file_per_table = ON

skip_name_resolve = ON

9.4提供腳本文件

cp support-files/mysql.server /etc/init.d/mysqld
chkconfig –add mysqld
chkconfig mysqld on
service mysqld start

10.測試php與Mariadb聯動

MariaDB [(none)]> grant all on *.* to 'root'@'192.168.31.%' identified by 'mysql';       #在mysql中創建遠程連接賬號用于聯動測試
MariaDB [(none)]> flush privileges;

]# vim /data/www/index.php              #在php服務器上創建測試頁面
<?php
        $conn = mysql_connect('192.168.31.14','root','mysql');
        if ($conn)
                echo "OK";
        else
                echo "Failure";
?>

11、在php服務器上部署wordpress

cd  /www

tar -zxvf wordpress-4.7.4-zh_CN.tar.gz

12、使用瀏覽器完成后續的圖形化安裝步驟。。。。省略

13、lvs服務器上安裝lvs

yum -y install  ipvsadm

在lvs物理網卡上配置vip,并添加路由

ifconfig eth0:0 192.168.31.100 netmask 255.255.255.255 broadcast 192.168.31.100

route add -host 192.168.31.100 dev eth0:0

14、在兩臺rs上配置VIP,添加路由,并修改內核參數,禁止lo對VIP的廣播做響應

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce 
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.31.100 netmask 255.255.255.255 broadcast 192.168.31.100

route add -host 192.168.31.100 dev lo:0

15、在lvs上配置ipvsadm規則

ipvsadm -A -t 192.168.31.100:80 -s rr
ipvsadm -a -t 192.168.31.100:80 -r 192.168.31.11 -g -w 1
ipvsadm -a -t 192.168.31.100:80 -r 192.168.31.12 -g -w 1
ipvsadm -L -n

16、在瀏覽器中訪問lvs的vip,測試是否成功
第十七周作業



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

Apache1/PHP     VIP:192.168.31.100     RIP:192.168.31.11

Apache2/PHP     VIP:192.168.31.100     RIP:192.168.31.12

NFS                   RIP:192.168.31.13

MYSQL              RIP:192.168.31.14

                                                        架構圖

第十七周作業

1. 在兩臺rs節點上分別安裝httpd,php并配置

yum install httpd php php-mysql php-mbstring php-gd php-xml nfs-utils -y 

vim /etc/httpd/conf/httpd.conf

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

AddType application/x-httpd-php .php

service httpd start


2.配置nfs服務器

mkdir -pv /data/www

vim /etc/exports

/data/www  192.168.0.0/24(rw,no_root_squash)

service nfs start

3.安裝并配置mariadb服務器

vim /etc/my.cnf
[mysqld]

datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON

mkdir -p /mydata/data
mysql_install_db –user=mysql –datadir=/mydata/data
service mysqld start
mysql
MariaDB [(none)]> create database wpdb;                                                  
MariaDB [(none)]> grant all on wpdb.* to root@’192.168.0.%’ identified by ‘mysql’;   
MariaDB [(none)]> flush privileges;

4.在兩個rs上分別掛在nfs目錄

mount -t nfs 192.168.0.24:/data/www  /var/www/html/

5.使用瀏覽器完成后續的圖形化安裝步驟,確保通過每個rs節點都能正常訪問wordpress <同上>

6.配置heartbeat v2 crm的準備工作

1)各節點hosts中添加自己和對端節點的名稱解析

2)各節點之間建立ssh互信關系

3)各節點之間時間同步

7.在各rs節點安裝heartbeat

yum install net-snmp-libs libnet PyXML libtool-ltdl gnutls gettext -y
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
8.在兩個rs節點上分別配置heartbeat

cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys} /etc/ha.d/

cd /etc/ha.d/

chmod 600 authkeys

vim authkeys
auth2
#1 crc
2 sha1 1q2w3e4R
#3 md5 Hello!

vim /etc/ha.d/ha.cf
logfile /var/log/ha-log                 #只用heartbeat日志
#logfacility    local0                  #禁用rsyslog的local0
mcast eth0 225.23.190.1 694 1 0         #設定組播地址
keepalive 2                             #監聽頻率為2秒
deadtime 30                             #死亡判定時間為30秒
warntime 10                             #異常警告時間為10秒
auto_failback on                        #修復后自動上線
node node1.magede.com                   #設置節點1
node node2.magedu.com                   #設置節點2
ping 192.168.0.1                        #設定第三方仲裁設備
crm on                                  #開啟crm,同時也會禁用haresources

10.打開hb_gui圖形界面

]# echo "magedu"|passwd --stdin hacluster                           #為hacluster設定密碼,用于后面圖形化登錄時身份驗證
]# service heartbeat start;ssh node2 service heartbeat start
]# hb_gui &

 輸入hacluster密碼后進入hb_gui主界面

第十七周作業

創建資源組ha_wordpress

第十七周作業

創建資源webip,用于啟停VIP

第十七周作業

創建資源nfs,用于掛載nfs共享磁盤

第十七周作業

創建資源webserver,用于啟停httpd服務

第十七周作業

創建colocation約束,用于將不同資源綁定在一起

第十七周作業

創建約束nfs_with_webip,即nfs服務必須與webip在同一個節點上

第十七周作業

創建約束webserver_with_nfs,即webserver必須與nfs在同一個節點上

第十七周作業

創建順序約束,用來指定資源服務的啟停順序

第十七周作業

創建約束nfs_after_webip,即nfs必須在webip啟動之后才能啟動

第十七周作業

創建約束webserver_after_nfs,即webserver服務必須在nfs服務啟動之后才能啟動

第十七周作業

啟動資源ha_wordpress之后,可以發現所有節點均啟動在節點2上,此時訪問http://192.168.0.20/wordpress正常。

第十七周作業

將節點2置為standby

第十七周作業

可以發現所有的資源均已漂移到節點1上,再次訪問http://192.168.0.20/wordpress,依然正常,說明高可用實現成功。

第十七周作業

嗯,差不多了!

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

(0)
N27_VicentN27_Vicent
上一篇 2017-06-26
下一篇 2017-06-27

相關推薦

  • N26-第二周

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示;   1)alias:命令別名;     # alias ;獲取所有可用別名的定義;     # alias NAME=‘COMMAND’:定義別名;    &nbs…

    Linux干貨 2017-02-11
  • sed工具 vim編輯器

    sed工具:    用法:           sed [option]… 'script' inputfile…      常用選項:           &nbs…

    Linux干貨 2016-08-12
  • Linux之bash shell腳本編程入門篇(一)

    什么是bash shell腳本編程? 答:Linux里面有多種shell,而CentOS和redhat的默認shell是bash shell。至于shell腳本,這個跟windows操作系統里面的批處理文件有點像(.bat的文件)。不知道大家還是否記得Linux的哲學思想嗎?其中有那么兩點點:由眾多目的的單一應用程序組成:一個程序只做一件事,且做好;組合目的…

    Linux干貨 2016-08-15
  • grep &&正則表達式&&通配,元字,轉義符

    grep 基于正則表達式的查詢 1正則表達式: 正則表達式是通過使用特殊的字符所編寫的模式,一些字符不表示字符的表面意思,具有控制和通配的功能. 使用正則表達式進行匹配具有兩種方法:一是通過使用特殊的元字符進行字符匹配;二是使用次數匹配。 一, 正則表達式的特殊字符(元字符) :  #建議再溫習一下之前所學的統通配符,對比一下,防止混淆。 (1)元…

    Linux干貨 2016-08-05
  • 03硬鏈接和軟鏈接的區別和聯系

    首先我們需要了解linux下硬鏈接以及軟連接的基本概念. 硬鏈接:新建的文件是已經存在的文件的一個別名,當原文件刪除時,新建的文件仍然可以使用. 軟鏈接:也稱為符號鏈接,新建的文件以“路徑”的形式來表示另一個文件,和Windows的快捷方式十分相似,新建的軟鏈接可以指向不存在的文件. 硬鏈接和軟連接之間的區別: 1.硬鏈接和原來的文件沒有什么區別,而且共享一…

    Linux干貨 2016-10-20
  • Linux基礎 文件權限

    概述 從接觸linux第一天開始,Linux一切皆文件的哲學思想就深植于每個linuxer的心中,因此,實現Linux的系統安全必然繞不開文件權限。文件的權限是建立在用戶的基礎上的,脫離了用戶,文件權限也就變得毫無意義了。用戶、組和文件權限一起鑄就了linux的系統安全模型。本文主要從文件權限方面了解Linux的安全模型。 文中主要講解了: 1. 文件權限r…

    Linux干貨 2016-08-05
欧美性久久久久