1、概述javascript
Nginx 做負載均衡器的優勢許多,簡單歸納爲:php
①實現了可彈性化的架構,在壓力增大的時候能夠臨時添加Tomcat服務器添加到這個架構裏面去;css
②upstream具備負載均衡能力,能夠自動判斷下面的機器,而且自動踢出不能正常提供服務的機器;html
Keepalived 可實現 Nginx負載均衡器雙機互備,任意一臺機器發生故障,對方都可以將虛擬IP接管過去。java
Memcache能夠實現Tomcat服務器的Sission共享整個拓補以下:mysql
注意:linux
一、因爲服務器有限,IP相同的爲同一臺機。只是端口不同。nginx
二、mysql部分本文再也不描述,請看以前的文章MYSQL + MHA +keepalive + VIP安裝配置.c++
2、環境web
服務器:192.168.1.201 安裝軟件:Keepalived一、Memcache一、Nginx1(反向代理) 服務器:192.168.1.205 安裝軟件:Keepalived二、Memcache二、Nginx2(反向代理) 服務器:192.168.1.231 安裝軟件:Tomcat一、Nginx1(靜態處理) 服務器:192.168.1.232 安裝軟件:Tomcat二、Nginx2(靜態處理)
3、Nginx的安裝
一、下載最新有穩定包:
shell>wget http://nginx.org/download/nginx-1.4.7.tar.gz
二、安裝相關組件
#先安裝環境 shell>yum -y install gcc openssl-devel zlib-devel pcre-devel shell>yum -y install gcc gcc-c++ autoconf automake //安裝編譯gcc環境 shell>useradd -s /sbin/nologin -M nginx //添加nginx 用戶,沒有登陸shell,沒有家目錄. shell>wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.zip //下載依賴組件,固然還有其它組件。 shell>unzip pcre-8.35.zip shell>cd pcre-8.35 shell>./configure --prefix=/opt/pcre/ shell>make && make install
注意:可能還有其它組件要安裝,請看:Linux Nginx 安裝配置
三、安裝Nginx
shell>tar -zxvf nginx-1.4.7.tar.gz shell>#./configure \ --prefix=/opt/nginx \ //安裝路徑 --sbin-path=/usr/sbin/nginx \ //可執行文件路徑 --conf-path=/etc/nginx/nginx.conf \ //默認爲<prefix>/conf/nginx.conf 最好定義到/etc下 --pid-path=/var/run/nginx/nginx.pid \ //pid文件存放位置,後面將會用到 --error-log-path=/var/log/nginx/error.log \ //錯誤日誌文件,默認爲<prefix>/logs/error.log --http-log-path=/var/log/nginx/access.log \ //訪問日誌,默認爲<prefix>/logs/access.log --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ //以取得一些nginx的運行狀態 --with-http_ssl_module \ //支持https加密鏈接 --with-http_gzip_static_module \ //靜態緩存模塊 --with-http_realip_module \ //讓Nginx透明獲取客戶端IP --http-client-body-temp-path=/var/tmp/nginx/client/ \ //指定http客戶端請求緩存文件存放目錄 --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ //指定http反向代理緩存文件存放目錄 --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ //指定FastCGI緩存文件存放目錄 --with-pcre=/opt/pcre/ shell>make shell>make install
注意:./configure 中不少註解,執行時多注意。
四、讓Nginx以服務形式啓動
vim /etc/init.d/nginx
#!/bin/bash # nginx Startup script for the Nginx HTTP Server # it is v.0.0.2 version. # chkconfig: - 85 15 # description: Nginx is a high-performance web and proxy server. # It has a lot of features, but it's not for everyone. # processname: nginx # pidfile: /var/run/nginx.pid # config: /usr/local/nginx/conf/nginx.conf nginxd=/usr/sbin/nginx nginx_config=/etc/nginx/nginx.conf nginx_pid=/var/run/nginx/nginx.pid RETVAL=0 prog="nginx" # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x $nginxd ] || exit 0 # Start nginx daemons functions. start() { if [ -e $nginx_pid ];then echo "nginx already running...." exit 1 fi echo -n $"Starting $prog: " daemon $nginxd -c ${nginx_config} RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx return $RETVAL } # Stop nginx daemons functions. stop() { echo -n $"Stopping $prog: " killproc $nginxd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid } # reload nginx service functions. reload() { echo -n $"Reloading $prog: " #kill -HUP `cat ${nginx_pid}` killproc $nginxd -HUP RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|reload|status|help}" exit 1 esac exit $RETVAL
注意:nginx各文件的安裝路徑要與實際安裝的一致。
保存nginxd腳本,賦予執行權限,添加服務和開機啓動 #chmod +x /etc/init.d/nginx #chkconfig --add nginx
五、啓動
shell>service nginx start shell>service nginx restart shell>service nginx stop
訪問:http://127.0.0.1/
注意:iptables 是否開放80端口
六、Nginx 負載均衡的配置
vim /etc/nginx/nginx.conf
(1)、在http{}中增長:
gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain text/css application/x-javascript image/bmp application/javascript; upstream tomcat_server{ #tomcat負載均衡配置 server 192.168.1.231:8080 weight=1; server 192.168.1.232:8080 weight=1; } upstream nginx_server { #nginx負載均衡配置 server 192.168.1.231 weight=1; server 192.168.1.232 weight=1; }
(2)、在http中的server以下:
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; <span style="color: #ff0000;">location ~ .*\. (htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 30d; proxy_pass http://nginx_server; #反向代理,靜態的由nginx來處理。 }</span> <span style="color: #ff0000;"> location ~ .*\.(js|css)?$ { expires 1h; proxy_pass http://nginx_server; #反向代理,靜態的由nginx來處理。 } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://tomcat_server; #反向代理,其它的由tomcat來處理。 }</span> #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 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 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$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; #} }
七、反射代理兩臺(192.168.1.201\205)Nginx 配製如上。
八、靜態處理兩臺(192.168.1.231\232)Nginx 不用配置第6步:Nginx 負載均衡的配置就能夠了。
4、Keepalived安裝
一、Keepalived安裝部分參考:MYSQL + MHA +keepalive + VIP安裝配置(三)-----keepalived安裝配置
注意:只安裝在192.168.1.201\205兩臺服務器上。
二、Keepalived配置,這裏實現兩臺互爲熱備。爲了避免浪費資源,提供了兩個VIP(207\208)能夠同時執行兩個項目。
(1)、服務器:192.168.1.201的配製以下:
! Configuration File for keepalived global_defs { notification_email { licm@hyxt.com } notification_email_from sunney888@qq.com smtp_server smtp.qq.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script check_nginx { script "/root/check_nginx.sh" interval 2 weight 2 } vrrp_sync_group VG1 { group { VI_1 } } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 61 mcast_src_ip 192.168.1.201 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.208 } track_script { check_nginx } } vrrp_instance VI_2 { state SLAVE interface eth1 virtual_router_id 60 mcast_src_ip 192.168.1.201 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.207 } track_script { check_nginx } }
(2)、服務器:192.168.1.205的配製以下:
! Configuration File for keepalived global_defs { notification_email { licm@hyxt.com } notification_email_from sunney888@qq.com smtp_server smtp.qq.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script check_nginx { script "/root/check_nginx.sh" interval 2 weight 2 } vrrp_sync_group VG1 { group { VI_1 } } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 60 mcast_src_ip 192.168.1.205 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.207 } track_script { check_nginx } } vrrp_instance VI_2 { state SLAVE interface eth0 virtual_router_id 61 mcast_src_ip 192.168.1.205 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.208 } track_script { check_nginx } }
注意:這不說明每一個參數的意義,請查看: MYSQL + MHA +keepalive + VIP安裝配置(三)-----keepalived安裝配置 只是配置不同。
5、Tomcat安裝
一、Tomcat下載,下載最新的吧。
shell>http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.53/bin/apache-tomcat-7.0.53.tar.gz shell>tar -zxvf apache-tomcat-7.0.53.tar.gz
注意:這裏解壓就能夠不用安裝。
二、啓動與中止
shell>/usr/local/apache-tomcat-7.0.53/bin/startup.sh
shell>/usr/local/apache-tomcat-7.0.53/bin/shutdown.sh
注意:tomcat默認端口是8080,確保 iptable是否開通端口。
固然你也能夠配置成以服務的形式來啓動/中止。這不在處理。
6、Memcache安裝與配置
一、memcache安裝,詳細安裝請看這:linux MemCache安裝手冊 這不在說明。
服務器(192.168.1.201/205)安裝方法同樣。
注意:memcache默認端口是11211,確保 iptable是否開通端口。
二、memcache的啓動
/usr/local/bin/memcached -d -m 50 -u root -l 192.168.1.201 -p 11211 -c 2048 -P /tmp/memcached.pid 沒錯誤提示的話,證實安裝成功而且啓動了Memcached服務了。 Memcached基本說明: 啓動參數: -d選項是啓動一個守護進程, -m是分配給Memcache使用的內存數量,單位是MB -u是運行Memcache的用戶 -l是監聽的服務器IP地址 -p是設置Memcache監聽的端口 -c選項是最大運行的併發鏈接數,默認是1024 -P是設置保存Memcache的pid文件 結束Memcached進程使用以下語句: kill `cat /tmp/memcached.pid`
三、memcache測試鏈接
telnet 192.168.1.201 11211 鏈接成功後
7、配置session共享
一、tomcat的context.xml
vim /usr/local/apache-tomcat-7.0.53/conf/context.xml
增長以下內容:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.201:11211,n2:192.168.1.205:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="1800000" copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>
注意:memcachedNodes是memcached的節點。能夠有多點。
二、增長jar包
(1)、下載包,地址:http://repo1.maven.org/maven2/de/javakaffee/msm/
memcached-session-manager-1.8.1.jar memcached-session-manager-tc7-1.8.1.jar msm-flexjson-serializer-1.8.1.jar msm-javolution-serializer-1.8.1.jar msm-kryo-serializer-1.8.1.jar msm-serializer-benchmark-1.8.1.jar msm-xstream-serializer-1.8.1.jar
(2)、javolution-5.4.3.1.jar、spymemcached-2.8.4.jar這兩個包要另外下載。
(3)、把下載的這9個包放到兩臺tomcat服務器上的lib目錄下。
9、測試
把馬有安裝的服務都啓動。把一個要測試的項目同時放到。兩個tomcat服務器上及兩個Nginx靜態處理服務器上。訪問VIP:http://192.168.1.207/項目名稱。
注意:
一、測試方法先確證兩臺tomcat的項目能用他本身的IP能正常訪問。
二、再訪問VIP:http://192.168.1.207/項目名稱。測試一下圖片、JS及JSP是從哪一個服務器上調用的。
三、時間有限這不把測試有具體內容放出來。
10、完成
寫的比較急。若有不正確之處請指出。讓咱們一塊兒學習。謝謝。