nginx+haproxy做負(fù)載均衡到后端2臺tomcat服務(wù)器

1臺nginx(haproxy)+2臺tomcat主機做負(fù)載均衡
步驟1:拓?fù)鋱D

tomcat A 主機的配置
安裝必要的軟件:
yum -y install java-1.8.0-openjdk-devel tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp

創(chuàng)建tomcat存放數(shù)據(jù)目錄
mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF}
具體目錄的說明:

WEB-INF/:當(dāng)前webapp的私有資源路徑;通常用于存儲當(dāng)前webapp的web.xml和context.xml配置文件粟矿;
META-INF/:類似于WEB-INF/商蕴;
classes/:類文件第岖,當(dāng)前webapp所提供的類焰情;
lib/:類文件渐夸,當(dāng)前webapp所提供的類撕彤,被打包為jar格式贤姆;
配置tomcat的文件server.xml

配置主配置文件
vim /etc/tomcat/server.xml 中的<host>標(biāo)簽中添加如下配置榆苞,該配置主要是配置tomcat主機的路徑、主機名以及日志格式

  <Host name="www.ilinux.io" appBase="/data/webapps" unpackWARs="true" autoDeploy="true" >
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="ilinux_access_log." suffix=".log"
               pattern="%h %l %u %t "%r" %s %b" />
        </Host>

添加tomcatA的測試文件
vim /data/webapps/ROOT/index.jsp

 <%@ page language="java" %>
<html>
      <head><title>TomcatA</title></head>
            <body>
                  <h1><font color="red">TomcatA.magedu.com</font></h1>
                <table align="centre" border="1">
              <tr>
              <td>Session ID</td>
                <% session.setAttribute("magedu.com","magedu.com"); %>
            <td><%= session.getId() %></td>
        </tr>
        <tr>
            <td>Created on</td>
          <td><%= session.getCreationTime() %></td>
        </tr>
        </table>
    </body>
</html>

為了測試方便庐氮,把默認(rèn)的測試目錄修改下路徑
cp -r /data/webapps/ROOT/ /usr/share/tomcat/webapps/test
重啟tomcat服務(wù)
systemctl start tomcat
查看下端口是否開啟
ss -tnl

tomcatB 主機的配置和comcatA一樣语稠,此處省略

測試主頁
輸入ip地址為:192.168.100.205/test

到此,兩臺tomcat主機已經(jīng)配置完成弄砍!

使用haproxy做負(fù)載均衡

安裝haproxy
yum -y install haproxy
配置haproxy.cfg
vim /etc/haproxy/haproxy.cfg 添加如下內(nèi)容仙畦,即可!

frontend http-in
    bind *:80
    default_backend appsrvs # 定義默認(rèn)后端服務(wù)
backend appsrvs
    balance roundrobin    #輪詢
        server  app1 192.168.100.203:8080 check  #開啟健康檢查
        server  app2 192.168.100.204:8080 check  #開啟健康檢查

listen stats   #開啟狀態(tài)管理接口
    bind *:9009
    stats enable

啟動haproxy服務(wù)
systemctl start haproxy
查看端口
ss -tnl
80和9009端口啟動證明服務(wù)正常音婶。

測試慨畸,輸入如下ip地址:192.168.100.205/test
查看狀態(tài)頁輸入地址:192.168.100.205:9009/haproxy?stats 即可

使用nginx做負(fù)載均衡

安裝nginx服務(wù)
yum install nginx
配置配置文件
vim /etc/nginx/conf/nginx.conf 增加一組webapps即可

    upstream appsrvs {
        server 192.168.100.203:8080;
        server 192.168.100.204:8080;
 }

啟動服務(wù)
systemctl start nginx
查看端口
ss -tnl

http負(fù)載均衡實驗(有兩種方式:http模式和ajp模式 )

首先使用httpd做負(fù)載均衡

安裝httpd服務(wù)
yum install httpd -y
配置httpd服務(wù) ,新建一個虛擬主機

vim /etc/httpd/con.d/comcat-httpd.conf 添加如下配置

            <proxy balancer://appsrvs>
                BalancerMember http://192.168.100.203:8080
                BalancerMember http://192.168.100.204:8080
                ProxySet lbmethod=byrequests
            </Proxy>

            <VirtualHost *:80>
                ServerName  www.ilinux.io
                ProxyRequests Off
                ProxyVia        On
                ProxyPreserveHost On
                <Proxy *>
                    Require all granted
                </Proxy>
                ProxyPass / balancer://appsrvs/
                ProxyPassReverse / balancer://appsrvs/
                <Location />
                    Require all granted
                </Location>
            </VirtualHost>

啟動httpd服務(wù)
systemctl start httpd
測試:輸入ip地址:192.168.100.205/test

ajp模式的負(fù)載均衡

修改配置文件

vim /etc/httpd/http.d/tomcat.ajp.conf
            <proxy balancer://appsrvs>
                BalancerMember ajp://192.168.100.203:8009
                BalancerMember ajp://192.168.100.204:8009
                ProxySet lbmethod=byrequests
            </Proxy>

            <VirtualHost *:80>
                ServerName  www.ilinux.io
                ProxyRequests Off
                ProxyVia        On
                ProxyPreserveHost On
                <Proxy *>
                    Require all granted
                </Proxy>
                ProxyPass / balancer://appsrvs/
                ProxyPassReverse / balancer://appsrvs/
                <Location />
                    Require all granted
                </Location>
            </VirtualHost>
注意:端口一定要寫出8009,否則方向代理不到后端服務(wù)器

使用cookie實現(xiàn)sessions綁定

在tomcat-apj-conf 中添加一些配置即可

vim /etc/httpd/conf.d/tomcat-ajp.conf



Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED  新增加的信息   
                        <proxy balancer://appsrvs>
                                BalancerMember ajp://192.168.100.203:8009 route=TomcatA  新增加的信息
                                BalancerMember ajp://192.168.100.204:8009 route=TomcatB 新增加的信息
                                ProxySet lbmethod=byrequests
                                ProxySet stickysession=ROUTEID  新增加的信息
                        </Proxy>

                        <VirtualHost *:80>
                                ServerName  www.ilinux.io
                                ProxyRequests Off
                                ProxyVia        On
                                ProxyPreserveHost On
                                <Proxy *>
                                        Require all granted
                                </Proxy>
                                ProxyPass / balancer://appsrvs/
                                ProxyPassReverse / balancer://appsrvs/
                                <Location />
                                        Require all granted
                                </Location>
                        </VirtualHost>

如果需要啟動管理接口功能衣式,在以上配置下添加如下配置寸士。

                <Location /balancer-manager>
                    SetHandler balancer-manager
                    ProxyPass !
                    Require all granted
                </Location> 

以下為:管理接口的圖形界面

使用session culster 做會話綁定

在原有的tomcatA的server.xml 配置中,把配置放置在host標(biāo)簽中

<Engine name="Catalina" defaultHost="localhost" "> 中添加如下信息jvmRoute="tcA"
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tcA">

vim /etc/tomcat/server.xml
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"  廣播地址碴卧,
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.100.203"  atuo改成本地對外的通訊地址 
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">
        </Cluster>

為了安全弱卡,需要把web.xml 文件放在下如下目錄,
cp /etc/tomcat/web.xml /usr/share/tomcat/webapps/test/WEN-INF目錄中住册,WEN-INF目錄私有目錄婶博,在web.xml中添加如下一行配置,是為了能夠兩個后端的兩臺tomcat可以同步數(shù)據(jù)荧飞。
編輯該文件

vim web.xml  
在<server>標(biāo)簽外添加一行信息凡人;        <distributable/>即可

在tomcatB 中配置也需要添加<distributable/>信息名党。
在瀏覽器中輸入:http://192.168.100.205/test 做測試,結(jié)果如下:

負(fù)載均衡兩個節(jié)點都可以保持session一致挠轴。

使用memcache做session服務(wù)器

拓?fù)鋱D如下:


下載如下jar文件至各tomcat節(jié)點的tomcat安裝目錄下的/usr/share/java/tomcat/
目錄中传睹,其中的${version}要換成你所需要的版本號,tc${6,7,8}要換成與tomcat版本相同的版本號岸晦。
這里我使用的是tomcat7.0 欧啤,其他沒有版本對應(yīng)要求,需要的軟件包如下


memcached-session-manager-${version}.jar
    memcached-session-manager-tc7-${version}.jar
    spymemcached-${version}.jar
    msm-javolution-serializer-${version}.jar
    javolution-${version}.jar

分別在兩個tomcat上的某host上定義一個用于測試的context容器委煤,并在其中創(chuàng)建一個會話管理器

        <Context path="/test" docBase="test" reloadable="true">
              <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:192.168.100.203:11211,n2:192.168.100.204:11211"
                failoverNodes="n1"
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
              />
        </Context>

配置完成堂油,啟動memcached服務(wù)
systemctl start memcached
在瀏覽器中輸入測試地址:http://192.168.100.205/test
測試結(jié)果:nginx(haproxy)調(diào)度,都可以保持session碧绞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吱窝,隨后出現(xiàn)的幾起案子讥邻,更是在濱河造成了極大的恐慌,老刑警劉巖院峡,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兴使,死亡現(xiàn)場離奇詭異,居然都是意外死亡照激,警方通過查閱死者的電腦和手機发魄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俩垃,“玉大人励幼,你說我怎么就攤上這事】诹” “怎么了苹粟?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跃闹。 經(jīng)常有香客問我嵌削,道長,這世上最難降的妖魔是什么望艺? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任苛秕,我火速辦了婚禮,結(jié)果婚禮上找默,老公的妹妹穿的比我還像新娘艇劫。我一直安慰自己,他們只是感情好啡莉,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布港准。 她就那樣靜靜地躺著旨剥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浅缸。 梳的紋絲不亂的頭發(fā)上轨帜,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音衩椒,去河邊找鬼蚌父。 笑死,一個胖子當(dāng)著我的面吹牛毛萌,可吹牛的內(nèi)容都是我干的苟弛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼阁将,長吁一口氣:“原來是場噩夢啊……” “哼膏秫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起做盅,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤缤削,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吹榴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亭敢,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年图筹,在試婚紗的時候發(fā)現(xiàn)自己被綠了帅刀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡远剩,死狀恐怖扣溺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情民宿,我是刑警寧澤娇妓,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站活鹰,受9級特大地震影響哈恰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜志群,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一着绷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锌云,春花似錦荠医、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兼贡。三九已至,卻和暖如春娃胆,著一層夾襖步出監(jiān)牢的瞬間遍希,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工里烦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凿蒜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓胁黑,卻偏偏與公主長得像废封,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丧蘸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容