1. 程式人生 > >lvs-dr類型搭建WordPress

lvs-dr類型搭建WordPress

橋接 entos 調度 限制 tcp -s sts 0.11 參數

一、實驗環境:
1.各軟件版本:
系統版本:CentOS Linux release 7.4.1708 (Core)
php版本:PHP 7.2
nginx版本:nginx-1.12.2
數據庫版本:MariaDB 10
WordPress版本:4.9.4
關閉防火墻與selinux
2.實驗架構及IP分配(為模擬現實場景,所有虛擬機網卡類型均為橋接):
架構圖:上傳不了...過幾天再試
lvs-dr負載均衡模型相對於lvs-nat類型的優點是大大減少了調度器的負載,大幅提高了集群的並發等級,但配置步驟會稍微繁瑣一點,原理也較nat類型會復雜一些
實現原理:
①:client端向目標IP(VIP)發送請求,經由路由器和交換機設備和後,此時的請求數據包頭文件的目標MAC值為調度器的MAC,源MAC值為client的MAC,目標IP為VIP,源IP為CIP。
②:調度器經調度算法會選擇一臺RS,並將客戶端請求頭文件重新封裝,重新封裝後,目標MAC變為經調度算法選擇後的RS的MAC值,源MAC為調度器的MAC值
③:RS收到調度器發來的請求並拆包處理,拆包後包頭文件目標IP依然為VIP,源IP依然為CIP,因為在RS上也配置了VIP,所以RS會將請求包處理並直接響應給client,不會再經由調度器。
疑問:
為什麽調度器和RS都配置VIP,client的請求只會到達調度器,而不會產生IP沖突?
client在向VIP發送請求時,會經過路由器交換機,交換機會將請求在局域網內廣播出去(調度器和RS在同一局域網),此時只要配置了VIP的主機都會響應,造成IP沖突,
要解決這個問題,就需要阻斷交換機的廣播送達RS,讓client的請求只到達調度器,有三種辦法可以實現:
①:在路由器上做ARP綁定(此方法不推薦)
②:arptables
③:修改RS內核參數(推薦此方法)
Linux默認的內核轉發規則是當請求發送來時,只要是同一設備上的所有IP都會被通知並響應,所以在內核將默認規則修改即可解決上訴問題。配置過程會在後面詳細介紹。
lvs負載均衡一臺:
安裝ipvsadm
VIP:192.168.0.99(模擬公網IP,域名www.ready.cn) DIP:192.168.0.103
realserver兩臺:
兩臺都安裝nginx+PHP,且保持配置一致
RIP1:192.168.0..11 RS2:192.168.0.22
數據庫服務器一臺:
安裝MariaDB
IP:192.168.0.33

二、所需軟件安裝配置,並測試PHP是否正常解析(此步驟與lvs-nat搭建相同)
1.RS1和RS2安裝nginx+PHP:
a>安裝epel源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
b>yum安裝nginx
yum install -y nginx
c>yum安裝PHP
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install -y yum install php72w-common php72w-fpm php72w-opcache php72w-gd php72w-mysqlnd php72w-mbstring php72w-pecl-redis php72w-pecl-memcached php72w-devel
d>測試兩臺RS是否可以正常接收並響應web請求,添加nginx server,創建網站目錄,將用戶請求結尾為.php的URL交給php-fpm解析,並創建phpinfo做頁面測試
vim /etc/nginx/conf.d/php.conf
######
server {
listen 80;
server_name www.ready.org; #因為是做試驗,所以將hosts中添加本地域名解析
location / {
root html/php; #nginx配置中網站的默認根路徑為/usr/share/nginx/,這裏指定的是相對路徑
index index.html index.htm;
}
location ~ .*.(php|php5)?$ { #以任意開頭以.php結尾的URI用此location做匹配
root html/php;
fastcgi_pass 127.0.0.1:9000; #將請求交由fastcgi(php-fpm)處理
fastcgi_index index.php;
include fastcgi.conf;
}
}
######
mkdir -p /usr/share/nginx/html/php/ #創建網站目錄(不是必須步驟,也可使用默認目錄)
vim /usr/share/nginx/html/php/index.php
######
<?php phpinfo(); ?>
######
e>將nginx啟動並設置開機啟動
systemctl start nginx
systemctl enable nginx
f>開啟php-fpm並設置為開機啟動
g>瀏覽器訪問www.ready.org與www.ready.org/index.php,顯示以下界面便表示nginx與PHP已安裝成功。
然後刪除index.php文件,安全因素。
以上步驟不涉及負載均衡的使用,下面進行加入負載均衡服務器的配置測試,先刪除之前配置好的nginx測試server,或將其註釋掉
mv /etc/nginx/conf.d/php.conf /etc/nginx/conf.d/php.conf.backup
若是要將RS1、RS2並入負載均衡集群,則需將RS1、RS2設置為監聽本機80端口且將結尾為.php的URI交php-fpm解析
即修改/etc/nginx/nginx.conf將匹配PHP解析的location加入默認配置即可,修改如下:
vim /etc/nginx/nginx.conf
######
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request"

‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;

access_log  /var/log/nginx/access.log  main;

sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;
keepalive_timeout   65;
types_hash_max_size 2048;

server {
    listen       80;
    #server_name _; #我理解的是此負載均衡集群中沒有涉及域名解析,所以server_name可以省略

    location / {
        root   /usr/share/nginx/html/php; #我覺得root路徑盡量要用絕對路徑,最好是寫在location中,這樣便於管理,方便查閱
        index  index.php index.html index.htm; #不要忘了加index.php,不加會導致只輸入域名時返回403錯誤
    }
    location ~ .*\.(php|php5)?$ {
        root   /usr/share/nginx/html/php;
    index index.php;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
            }
    }

}
######
2.在192.168.0.103主機上安裝ipvsadm並配置
a>安裝ipvsadm
yum install -y ipvsadm
b>在網卡上添加VIP
ifconfig ens33:0 192.168.0.99 netmask 255.255.255.255 broadcast 192.168.0.99 up #掩碼最好全是255
(此處是將VIP與DIP配置在同一網卡上,後續實驗是否能將它們配置在不同網卡上)
c>添加ipvsadm負載均衡規則
ipvsadm -A -t 192.168.0.99:80 -s rr
ipvsadm -a -t 192.168.0.99:80 -r 192.168.0.11 -g
ipvsadm -a -t 192.168.0.99:80 -r 192.168.0.22 -g

3.在RS1,RS2上添加VIP並限制報文通告與相應規則
a>在lo(回環接口)上配置VIP
ifconfig lo:0 192.168.0.99 netmask 255.255.255.255 broadcast 192.168.0.99 up
b>添加路由表,將192.168.0.99的請求都必須經由lo:0處理,防止RS拆包後將請求響應給調度器
route add -host 192.168.0.99 dev lo:0
c>修改RS內核參數,限制報文通告與相應規則
創建腳本,批量修改內核參數,腳本如下:
#!/bin/bash
#
case $1 in
start)
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
echo "The RS Server is Ready!"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "The RS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac

此步驟主要是修改arp_ignore,arp_announce兩參數,所有RS步驟相同
******
對linux主機來講,默認情況下地址是屬於內核而不是網卡的,所以默認狀態下同一主機的各網卡默認都是知道其他網卡的地址數據的,
當請求到達主機某一網卡時,此主機的其他網卡也能收到通知,若地址與自己相符,也會發出響應。通過修改內核arp_ignore,arp_announce兩參數可以配置通告響應限制等級
arp_ignore:限制響應級別
    0:默認值,使同一主機任意網卡配置的任意地址進行響應
    1:僅在請求的目的IP配置在本地主機網卡地址相同時,才給予響應
arp_announce:限制通告級別
    0:默認值,把本機上的所有網卡的所有信息向本機所有接口進行通告
    1:盡量避免默認情況
    2:必須避免默認情況

4.安裝並配置MariaDB
a>在192.168.0.33上yum安裝MariaDB
vim /etc/yum.repos.d/mariadb.repo
######
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
######
yum install -y MariaDB-server
b>配置數據庫
mysql_secure_installation #初始化數據庫,設置root密碼,匿名用戶權限等
mysql -uroot -p123456 #登入數據庫進行用戶及庫的創建與配置

GRANT ALL PRIVILEGES ON . TO ‘mysql‘@‘%‘IDENTIFIED BY ‘123456‘ WITH GRANT OPTION; #創建賬戶mysql,密碼為123456,並允許任意IP訪問此賬戶數據庫,權限為ALL
CREATE DATABASE wordpress; #創建名為wordpress的庫,安裝完WordPress後會要求在數據庫創建庫,這裏事先創建好
quit

5.安裝WordPress
a>將下載好的WordPress包解壓至已創建好的/usr/share/nginx/html/php目錄下
b>為模擬互聯網環境,將‘www.ready.cn 192.168.1.99‘hosts文件加入本地解析規則
c>瀏覽器輸入www.ready.cn,按提示步驟進行操作便可安裝完成

lvs-dr類型搭建WordPress