一、源碼編譯安裝LNMP架構環境;php
安裝編譯工具和庫文件css
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers make cmake libtool* git tree
編譯安裝nginxhtml
[root@localhost opt]# wget http://nginx.org/download/nginx-1.8.1.tar.gz #下載nginx安裝包 [root@localhost opt]# tar xzvf nginx-1.8.1.tar.gz #解壓安裝包 [root@localhost nginx-1.8.1]# ./configure \ > --prefix=/usr/local/nginx \ > --with-http_realip_module \ > --with-http_sub_module \ > --with-http_ssl_module \ > --with-http_gzip_static_module \ > --with-pcre [root@localhost nginx-1.8.1]# make && make install [root@localhost nginx-1.8.1]# vim /usr/local/nginx/conf/nginx.conf #修改php相關配置 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } [root@localhost nginx-1.8.1]# /usr/local/nginx/sbin/nginx #啓動nginx
編譯安裝mysql前端
[root@localhost opt]# groupadd mysql #添加mysql組 [root@localhost opt]# useradd -r -g mysql mysql #添加mysql用戶 [root@localhost opt]# tar xzvf mysql-5.6.24.tar.gz [root@localhost opt]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio #安裝編譯代碼所須要的包 [root@localhost opt]# cd /opt/mysql-5.6.24 [root@localhost mysql-5.6.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ [MySQL安裝的根目錄] -DMYSQL_DATADIR=/mydata/mysql/data \ [MySQL數據庫文件存放目錄] -DSYSCONFDIR=/etc \ [MySQL配置文件所在目錄] -DMYSQL_USER=mysql \ [MySQL用戶名] -DWITH_MYISAM_STORAGE_ENGINE=1 \ [MySQL的數據庫引擎] -DWITH_INNOBASE_STORAGE_ENGINE=1 \ [MySQL的數據庫引擎] -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ [MySQL的數據庫引擎] -DWITH_MEMORY_STORAGE_ENGINE=1 \ [MySQL的數據庫引擎] -DWITH_READLINE=1 \ [MySQL的readline library] -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \ [MySQL的通信目錄] -DMYSQL_TCP_PORT=3306 \ [MySQL的監聽端口] -DENABLED_LOCAL_INFILE=1 \ [啓用加載本地數據] -DENABLE_DOWNLOADS=1 \ [編譯時容許自主下載相關文件] -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all \ [使MySQL支持全部的擴展字符] -DDEFAULT_CHARSET=utf8 \ [設置默認字符集爲utf8] -DDEFAULT_COLLATION=utf8_general_ci \ [設置默認字符校對] -DWITH_DEBUG=0 \ [禁用調試模式] -DMYSQL_MAINTAINER_MODE=0 -DWITH_SSL:STRING=bundled \ [通信時支持ssl協議] -DWITH_ZLIB:STRING=bundled [容許使用zlib library] [root@localhost mysql-5.6.24]# make && make install [root@localhost local]# chown -R mysql:mysql /usr/local/mysql/ #修改mysql文件夾屬組和屬主 [root@localhost local]# chown -R mysql:mysql /mydata/mysql/data [root@localhost etc]# vim /etc/my.cnf #修改my.conf配置文件 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # These are commonly set, remove the # and set as required. basedir=/usr/local/mysql datadir=/mydata/mysql/data socket=/var/lib/mysql/mysql.sock character-set-server=utf8 user= mysql # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [root@localhost local]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/mysql/data #初始化mysql數據庫
編譯安裝phpmysql
[root@localhost opt]# tar xzvf php-5.6.5.tar.gz [root@localhost php-5.6.5]# ./configure --enable-opcache --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring=all --with-pdo-mysql --enable-sockets --enable-mbstring --enable-fpm --with-curl --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --enable-xml --with-gd --with-libxml-dir=/usr --enable-xml --with-openssl --with-iconv [root@localhost php-5.6.5]# make && make install [root@localhost etc]# cp /opt/php-5.6.5/php.ini-development /usr/local/php/etc/php.ini [root@localhost etc]# cd /usr/local/php/etc/ [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf [root@localhost etc]# /usr/local/php/sbin/php-fpm #啓動php [root@localhost html]# vim /usr/local/nginx/html/index.php #建立一個php頁面 <?php phpinfo(); ?>
二、編寫一個腳本完成如下功能:
(1)、一鍵搭建LNMP源碼編譯環境;
(2)、可經過在腳本後面跟上一些參數來自定義安裝目錄等其餘選項。
nginx
[root@localhost shell]# cat /shell/LNMP.conf #參數較多放在一個配置文件中 nginx_dir=/usr/local/nginx mysql_dir=/user/local/mysql mysqldata_dir=/mysqldata php_dir=/usr/local/php [root@localhost shell]# cat /shell/LNMP.sh #!/bin/bash #加載配置文件 source $1 #nginx安裝函數 nginx() { groupadd -r nginx useradd -s /sbin/nologin -g nginx -r nginx cd /opt echo "------------開始安裝nginx-1.8.1------------" wget http://nginx.org/download/nginx-1.8.1.tar.gz tar xzvf nginx-1.8.1.tar.gz cd nginx-1.8.1 ./configure --prefix=${nginx_dir} --with-http_realip_module --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre make && make install } #mysql安裝模塊 mysql() { groupadd mysql useradd -r -g mysql mysql cd /opt echo "------------開始安裝libmcrypt-2.5.7------------" wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.24.tar.gz tar mysql-5.6.24.tar.gz cd mysql-5.6.24 cmake . -DCMAKE_INSTALL_PREFIX=${mysql_dir} \ -DMYSQL_DATADIR=${mysqldata_dir} \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_USER=mysql \ -DMYSQL_GROUP=mysql make && make install cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf chown -R root:mysql ${mysql_dir} chown -R root:mysql ${mysqldata_dir} } #php安裝模塊 php() { cd /opt echo "------------開始安裝libmcrypt-2.5.7------------" wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz tar xvf libmcrypt-2.5.7.tar.gz cd /opt/libmcrypt-2.5.7 ./configure --prefix=/usr/local/libmcrypt && make && make instal l echo "------------開始安裝php-5.6.5------------" wget http://cn2.php.net/distributions/php-5.6.5.tar.gz tar xzvf php-5.6.5.tar.gz cd php-5.6.5 ./configure --enable-opcache --prefix=${php_dir} --with-config-file-path=${php_dir}/etc --with-mysql=${mysql_dir} --with-mysqli=${mysql_dir}/bin/mysql_config --enable-mbstring=all --with-pdo-mysql --enable-sockets --enable-mbstring --enable-fpm --with-curl --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --enable-xml --with-gd --with-libxml-dir=/usr --enable-xml --with-openssl --with-iconv && make && make install cp ${php_dir}/etc/php-fpm.conf.default ${php_dir}/etc/php-fpm.conf cp /opt/php-5.6.5/php.ini-development ${php_dir}/etc/php.ini } yum -y install gcc gcc-c++ make pcre-* zlib-* cmake ncurses-devel libjpeg* libpng* freetype* libcurl-devel libvpx-devel libxml2 libxml2-devel libXpm libXpm-devel libXpm.i686 libXpm.i686-devel openldap-devel #安裝nginx軟件 nginx if [ $? -eq 0 ];then echo "nginx安裝成功!!!" else echo "nginx安裝異常!!!" exit fi #安裝mysql數據庫 mysql if [ $? -eq 0 ];then echo "mysql安裝成功!!!" else echo "mysql安裝異常!!!" exit fi #安裝php php if [ $? -eq 0 ];then echo "php安裝成功!!!" exit else echo "php安裝異常!!!" exit fi
三、結合圖形描述LVS的工做原理;c++
lvs介紹
LVS的英文全名爲「Linux Virtual Server」,即Linux虛擬服務器,是一個虛擬的四層交換器集羣系統,根據目標地址和目標端口實現用戶請求轉發,自己不產生流量,只作用戶請求轉發,目前是負載均衡性能最好的集羣系統。git
Lvs原理介紹web
圖示以下:
1.首先用戶向負載均衡器調度器(Director Server)發起請求,負載均衡器將請求發往至內核空間,交給內核模塊進行檢測。
2.內核模塊中的PREROUTING鏈首先會收到用戶請求,判斷目標地址是不是負載均衡器的IP地址,若是是,則將數據包發往INPUT鏈。
3.IPVS模塊是工做在INPUT鏈上的,當用戶請求到達INPUT鏈上時,IPVS會將用戶請求和本身已定義好的集羣服務做對比,若是用戶請求的就是定義的集羣服務,那麼IPVA會強行修改數據包裏的目標IP地址和目標端口,並將新的數據包發往POSTROUTING鏈。
4.POSTROUTING連接收到數據包發現目標IP地址恰好是本身的後端的服務器,那麼經過選路,將數據包最終發送給後端的服務器。sql
lvs的類型
根據架構有3種不一樣的模型
一、lvs-nat (Network Address Translation)(建議小規模使用)
二、lvs-dr (Direct Routing 直接路由)(建議大規模使用,也是如今較多使用場景的方法)
三、lvs-tun (Tunneling 隧道)(lvs-tun模型比較少用,由於它不能實現全局負載均衡,不能根據用戶區域的距離來挑選最近的機房。這個最多爲了實現異地容災來實現的。)
lvs-nat模型
主要是修改目標IP地址爲挑選出新的RS的IP地址。即請求進入負載均衡器時作DNAT,響應出負載均衡器時作SNAT。
圖示以下:
1.當用戶請求到達Director Server,此時請求的數據報文會先到達內核的PREROUTING鏈,此時報文的源IP是CIP,目標IP是VIP。
2.PREROUTING鏈檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
3.IPVS內核模塊比對數據包請求的服務是否爲集羣服務,若是是,則修改數據包的目標IP爲後端服務器的IP,而後將數據包發至POSTROUTING鏈,作DNAT轉換。此時報文的源IP是CIP,目標IP是RIP
4.POSTROUTING鏈經過選路,將數據包發送到Real Server。
5.Real Server比對發現目標IP是本身的IP,開始創建響應報文發回給Director Server,此時報文的源IP是RIP,目標IP是CIP.
6.Director Server在響應客戶端以前,此時會將源IP地址修改成本身的IP地址,而後響應給客戶端,作SNAT轉換。此時報文的源IP是VIP。目標IP是CIP。
特性:
1.RS必須使用私有地址,將RS的網關指向DIP。
2.DIP和RIP必須是同一網段內。
3.請求和響應報文都要通過Director Server,高負載場景中,Director Server會出現性能瓶頸。
4.支持端口映射
5.RS可使用任意操做系統
lvs-dr模型
將請求報文的目標MAC地址設定爲天選出來的RS的MAC地址。即作MAC地址轉換。
圖示以下:
1.當用戶請求到達Director Server,此時請求的數據報文huixiandao內核空間的PREROUTING鏈,此時報文的IP是CIP,目標IP是VIP。
2.PREROUTING鏈檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈,
3.IPVS內核模塊比對數據包請求的服務是否爲集羣服務,若是是,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改成RIP的MAC地址,而後將數據包發至POETROUTING鏈中,此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址。
4.因爲DS和RS實在同一網絡中,因此二者之間的通訊時經過二層協議來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
5.RS發現請求報文的MAC地址是本身的MAC地址,就接受此報文,處理完成之後,將響應報文經過IO接口傳送給eth0網卡,而後向外發出,不通過負載均衡器。此時源IP地址爲VIP,目標IP是CIP。
6.響應報文最終送至客戶端。
特性:
1.保證前端路由將目標地址爲VIP的報文所有發送給DS,而不是RS。
解決方案:
(1).在前端路由作靜態地址路由綁定,將對於VIP的地址僅路由到DS上。
存在問題:用戶未必有權限操做路由,
(2).arptables:在arp層次上實現arp解析時作防火牆規則,過濾RS響應arp請求,由iptables提供。
(3).修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制不能響應對VIP地址的解析請求。
2.RS可使用私有地址,也可使用公網地址,若是使用公網地址,能夠直接對RIP進行直接訪問。
3.RS和DS必須在同一物理網絡中(即必須是同一物理網絡)。
4.全部的請求報文經由DS,但響應報文必須不能通過DS。
5.不支持地址轉換,即整個過程和不轉換IP地址,只轉換MAC地址。也不支持端口映射。
6.RS可使大多數操做系統
7.RS的網關絕對不容許指向DIP,由於不容許響應報文通過DS。
8.RS的lo接口配置VIP的地址。
lvs-tun模型
在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址爲CIP,目標地址爲VIP)外部IP地址首部(源地址爲DIP,目標地址爲RIP)
圖示以下:
1.當用戶請求報文到達DS,此時請求的數據報文會先到內核的PREROUTING鏈。此時源IP是CIP,目標IP是VIP。
2.PREROUTING鏈檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
3.IPVS比對數據包請求的服務是否爲集羣服務,若是是,在請求報文的首部再次封裝一層IP報文,封裝源IP爲DIP,目標IP是RIP,而後發至POSTROUTING鏈。此時源IP是爲DIP,目標IP是RIP。
4.POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(由於外層封裝多了一層IP首部,因此能夠理解爲此時經過隧道傳輸)。此時源IP是DIP,目標IP是RIP。
5.RS收到報文後發現是本身的IP地址,就會將報文接受下來,拆除最外層的IP後,會發現裏面還有一層IP首部,並且目標地址是本身的lo接口VIP,那麼此時RS開始處理此請求,處理完成滯後,經過lo接口送給eth0網卡,而後向外傳遞。此時的源IP地址爲VIP,目標IP爲CIP。
6.響應報文送達至客戶端。
特性:
1.RIP、VIP、DIP全爲公網地址。
2.RS的網關不會也不可能指向DIP。
3.全部的請求報文經由DS,但響應報文必須不能通過DS。
4.不支持端口映射。
5.RS的系統必須支持隧道模型。
四、闡述varnish的功能及其應用場景,並經過實際的應用案例來描述配置、測試、調試過程。
常見緩存工具
nginx , cache (disk)
squid 在負載較重時使用效果好,逐步被varnish替代
varnish(disk,memory) 輕量級環境中,年輕態的產品,
推薦使用varnish做爲專用的緩存
使用
varnish 爲開源的緩存服務器解決方案;
是DSL的編程語言;
對CPU性能要求不夠但對I/O要求高;
緩存請求頁面的可緩存頁面,並依據頁面的新鮮度來肯定時候向後端服務器取數據;
常佈置在後端服務器與前端服務器主機做爲緩存服務器,來加快用戶的請求訪問速度;
可以根據不一樣的請求方法採用不一樣的策略來決定請求的流向;
配置
安裝LNMP服務,並安裝VARNISH服務
vim /etc/varnish/default.vcl
配置服務器
配置的選項
ACL的配置,用來容許一部分用戶來進行管理的操做
配置須要緩存的服務的相關參數
配置接收到的ACL的處理,如只容許標準化組織定義的操做,而拒絕其餘操做
配置須要分類處理的,如動靜分離,而採用不一樣的緩存。或者不需緩存的數據
配置可進行purge的管理IP,防止其餘人誤操做使緩存清空
acl purge { "localhost"; "127.0.0.1"; "192.168.188.0"/24; } 後端服務器 backend web1 { .host = "192.168.188.100"; .port = "80"; .connect_timeout = 1s; #鏈接超時時間 .first_byte_timeout = 8s; .between_bytes_timeout = 5s; .probe = { .url = "/test1.html"; } } backend web2 { .host = "192.168.188.101"; .port = "80"; .connect_timeout = 1s; #鏈接超時時間 .first_byte_timeout = 8s; .between_bytes_timeout = 5s; .probe = { .url = "/test1.html"; } } 定義集羣 director realserver random { { .backend = web1; .weight = 5; } { .backend = web2; .weight = 6; } } 緩存服務器接收到請求後的處理 sub vcl_recv { 若是請求爲PURGE則只容許受權的訪問 if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } return(lookup); } if (req.request == "REPURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } ban("req.http.host == " + req.http.host + " && req.url ~ " + req.url); error 200 "Ban OK"; } if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } if (req.request != "GET" && req.request != "HEAD") { /* We only deal with GET and HEAD by default */ return (pass); } if (req.http.Authorization) { /* Not cacheable by default */ return (pass); } # set req.grace = 4h; if (req.request != "GET" && req.request != "HEAD") { return(pipe); } elseif (req.url ~ ".(php|cgi)($|?)") #動態頁面直接經過,不緩存 { return(pass); } return(lookup); } 命中後的處理 sub vcl_hit { if (req.request == "PURGE") { set obj.ttl = 0s; error 200 "Purged."; } } 沒有命中的處理 sub vcl_miss { return (fetch); } 取數據 sub vcl_fetch { ##對訪問中get有包含jpg,png等格式的文件進行緩存,緩存時間爲7天,s爲秒 if (req.request == "GET" && req.url ~ ".(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$") { set beresp.ttl = 7d; } ##對訪問get中包含htm等靜態頁面,緩存300秒 if (req.request == "GET" && req.url ~ "/[0-9].htm$") { set beresp.ttl = 300s; } return (deliver); } 添加在頁面head頭信息中查看緩存命中狀況 sub vcl_deliver { set resp.http.x-hits = obj.hits ; if (obj.hits > 0) { set resp.http.X-Cache = "HIT cqtel-bbs"; } else { set resp.http.X-Cache = "MISS cqtel-bbs"; } }
登陸瀏覽器打開網頁查看是否緩存,根據配置的obj
若是緩存可使用F5強制刷新不使用緩存
五、搭建一套LVS-DR模型的高性能集羣,並用Keepalived實現nginx與lvs的高可用集羣,同時實現如下功能:
(1)、wordpress程序經過nfs共享給各個realserver;
(2)、後端realserver中的nginx和php分離
1、配置前的說明: 1.1用到的設備 前端兩臺服務用來調度, 後端兩臺RS用來提供服務, 因爲NGING和PHP分離故提供另外的一臺主機安裝PHP 因爲PHP須要數據庫因此安裝MySQL, 爲了共享安裝NFS文件共享服務 workpress也安裝在這臺服務器上 2、配置說明 2.1集羣配置前的準備 一、同步時間(全部機器的時間向一臺服務器同步),也能夠配置NTP服務器來同步時間 ntpdate 210.72.145.44 二、配置集羣服務的主機名 hostname dr1.magedu.com hostname dr2.magedu.com hostname rs1.mangedu.com hostname rs2.magedu.com hostname backen.magedu.com 三、配置/etc/hosts文件,加快域名的解析速度 192.168.10.131 dr1.magedu.com 192.168.10.132 dr1.magedu.com 192.168.10.133 rs1.mangedu.com 192.168.10.135 rs2.magedu.com 192.168.10.136 backen.magedu.com 2.三、共享用戶的配置(在RS 和 BACKEN 服務器上配置, 配置的內容要相同以方便共享訪問) groupadd -r -g 498 nginx useradd -r -g 498 -u 498 nginx 2.四、在後端服務器上安裝NFS ,PHP , MYSQL , 如要加快PHP的訪問能夠安裝xcache 安裝nfs服務(在backed的服務器上安裝) 建立共享的目錄並配置用戶和組爲nginx mkdir -pv /data/wordpress chown nginx:ngxin /data/wordpress vim /etc/exports /data/wordpress (rw,no_root_squash) service nfs start 安裝MYSQL服務 僅爲配置PHP服務通常安裝便可 安裝php 服務 配置服務經過fastcgi接口與遠端的NGINX服務聯繫 vim /usr/local/php/etc/php-fpm.conf listen = 192.168.10.136:9000 #監聽物理網卡地址,供其它機器調用 user = nginx ##php-fpm以nginx用戶運行 group = nginx 在共享目錄下放置wordpress 修改wordpress配置 cp -a workpress /data/wordpress cp wp-config-sample.php wp-config.php vim wp-config.php define name wpdb define user wpuser define db passwd wppasswd 登陸數據庫MYSQL建立用戶並容許遠端訪問 mysql GRADN ALL ON wpdb.* TO ‘‘wpuser‘@‘localhost‘ IDENTIFIED BY ‘wppasswd‘; GRADN ALL ON wpdb.* TO ‘‘wpuser‘@‘192.168.%.%‘ IDENTIFIED BY ‘wppasswd‘; CREATE DATABASE wpdb; FLUSH PRIVILEGES EXIT 2.五、安裝nginx服務器(兩臺RS服務器上安裝) 掛在後端服務器共享的目錄(兩臺RS都要掛載) mkdir -pv /www/wordpress mount -t nfs 210.72.145.44:/data/wordpress /www/wordpress 編譯安裝nginx必定要啓用fastcgi能於遠端的PHP配合 並修改主配置文件 用戶爲nginx 組爲nginx 並啓用php, 配置監聽的服務地址爲php服務器的地址 location / { root /www; index index.php index.html index.htm; } location ~ \.php$ { root /www; fastcgi_pass 192.168.10.136:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } 修改兩臺服務器的內核參數來配置LVS-dr模型 推薦使用腳本修改 DR類型RS腳本示例: #!/bin/bash # vip=192.168.10.100 interface="lo:0" 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 ifconfig $interface $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev $interface ;; stop) 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 ifconfig $interface down ;; status) if ifconfig lo:0 |grep $vip &> /dev/null; then echo "ipvs is running." else echo "ipvs is stopped." fi ;; *) echo "Usage: `basename $0` {start|stop|status}" exit 1 esac 須要時啓用腳本不須要時,恢復內核參數 2.六、安裝sorry server和 keepalive LVS-DR(在兩臺調度器上安裝,一臺爲主一臺爲從) 兩臺DR提供SORRY server 直接安裝HTTPD服務便可,提供一個SORRY SERVER頁面 echo "this is for sorry server" > /var/www/html/index.html 安裝keepalive (兩臺前端調度服務都須要安裝) yum install keepalive 配置示例: (rs1.magedu.com和rs2.magedu.com的配置基本相同相同 配置一臺另外一臺直接拷貝配置,以減小出錯 但要注意一臺實例配置爲主,另外一臺配置爲從 ) ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from kaadmin@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_mcast_group 224.0.1.100 } vrrp_script chk_mt { script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 84ae57f7f4f6 } virtual_ipaddress { 192.168.80.100/16 dev eth0 label eth0:1 } track_script { chk_mt } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } virtual_server 192.168.10.100 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.0.0 protocol TCP sorry_server 127.0.0.1 80 real_server 192.168.10.133 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.10.135 80 { weight 2 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } 啓動服務 service keepalived start 提供keepalive服務轉換的腳本 通知腳本:(編寫的腳本保存到/etc/keepalived/notify.sh) #!/bin/bash vip=192.168.10.100 contact=‘root@localhost‘ notify() { mailsubject="`hostname` to be $1: $vip floating" mailbody="`date ‘+%F %H:%M:%S‘`: vrrp transition, `hostname` changed to be $1" echo $mailbody | mail -s "$mailsubject" $contact } case "$1" in master) notify master exit 0 ;; backup) notify backup exit 0 ;; fault) notify fault exit 0 ;; *) echo ‘Usage: `basename $0` {master|backup|fault}‘ exit 1 ;; esac chmod +x /etc/keepalived/notify.sh