티스토리 뷰

728x90
반응형

 포스팅에서는 WildFly와 외부캐시서버와의 연동을 통한 세션클러스터링테스트를 진행합니다.


WildFly에서는 Infinispan과 Jgroups 오픈소스를 하위 모듈로 활용하여, 세션 클러스터링 기능을 지원합니다. 이번 포스팅에서는 8Grid라는 외부캐시 솔루션과 WildFly를 연동해보고, 직접 세션 클러스터링 테스트를 해보도록 하겠습니다.


구성은 아래와 같습니다. 


-8grid

-Apache http server 

-WildFly standalone1

-WildFly standalone2


(*standalone1과 standalone2는 물리적으로 다른 서버에 위치합니다. )


1.8grid 바이너리를 설치합니다.

(사전에 컴파일, 빌드가 필요할 수 있습니다.)


2.8grid내의 session.xml 수정(서버IP, 연동하고자하는 WAS 서버IP)이 필요합니다.

 [wildfly@k8s-worker~/score-8grid-server-2.0.0-bin/config$]pwd

/home/wildfly/score-8grid-server-2.0.0-bin/config

[wildfly@k8s-worker~/score-8grid-server-2.0.0-bin/config$]cat session.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://www.springframework.org/schema/beans

                            http://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean id="session.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">

        <property name="userAttributes">

        <map>

            <entry key="NODE_ALIAS" value="8Grid1"/>

        </map>

</property>

                <property name="igniteInstanceName" value="session-grid"/>

                <property name="connectorConfiguration" >

                    <bean class="org.apache.ignite.configuration.ConnectorConfiguration">

                        <property name="jettyPath" value="config/rest-jetty-sso.xml" />

                    </bean>

                </property>

                <property name="cacheConfiguration">

                        <list>

                                <bean class="org.apache.ignite.configuration.CacheConfiguration">

                                    <!-- Cache name. -->

                                    <property name="name" value="session-cache"/>

                                    <property name="cacheMode" value="PARTITIONED"/>

                                    <property name="onheapCacheEnabled" value="true"/>

                                    <property name="backups" value="1"/>

                                    <property name="evictionPolicy">

                                        <bean class="org.apache.ignite.cache.eviction.lru.LruEvictionPolicy">

                                                <property name="maxSize" value="10000"/>

                                        </bean>

                                    </property>

                                </bean>

                        </list>

                </property>


                <property name="discoverySpi">

                        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">

                                <property name="localAddress" value="서버IP"/>

                                <property name="localPort" value="47500" />

                                <property name="localPortRange" value="10" />

                                <property name="ipFinder">

                                        <bean

                                                class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">

                                                <property name="addresses">

                                                        <list>

                                                                <value>WAS IP:47500..47509</value>

                                                                <value>WAS IP:47500..47509</value>

                                                        </list>

                                                </property>

                                        </bean>

                                </property>

                        </bean>

                </property>

        </bean>

</beans>



3.아래와 같이 실행합니다. 

[wildfly@k8s-worker~/score-8grid-server-2.0.0-bin$]./imdc.sh start -conf config/session.xml 


*shutdown은 아래와 같이 실행합니다. 

[wildfly@k8s-worker~/score-8grid-server-2.0.0-bin$]./imdc.sh stop


4.WildFly에는 세션테스트를 위한 Application 준비,deploy가 필요하며, 그 이외에 구성할 내용은 없습니다. 

세션클러스터링 구성을 위해서는 아래 포스팅을 참고하세요. 

[WAS] WildFly Clustering in Standalone Mode

http://waspro.tistory.com/admin/entry/post/?id=203&type=post&returnURL=/manage/posts/


Application 내부에는 아래와 같이 설정합니다. 

web.xml

<listener>

    <listener-class>org.apache.ignite.startup.servlet.ServletContextListenerStartup</listener-class>

</listener>

<filter>

    <filter-name>IgniteWebSessionsFilter</filter-name>

        <filter-class>org.apache.ignite.cache.websession.WebSessionFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>IgniteWebSessionsFilter</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

<context-param>

    <param-name>IgniteConfigurationFilePath</param-name>

        <param-value>session.xml</param-value>

</context-param>

<context-param>

        <param-name>IgniteWebSessionsGridName</param-name>

        <param-value>session-grid</param-value>

</context-param>

<context-param>

    <param-name>IgniteWebSessionsCacheName</param-name>

        <param-value>session-cache</param-value>

</context-param>


lib dependency


<dependency>

    <groupId>org.apache.ignite</groupId>

        <artifactId>ignite-core</artifactId>

        <version>2.3.0</version>

</dependency>

<dependency>

    <groupId>org.apache.ignite</groupId>

        <artifactId>ignite-web</artifactId>

        <version>2.3.0</version>

</dependency>

<dependency>

        <groupId>org.apache.ignite</groupId>

        <artifactId>ignite-log4j</artifactId>

        <version>2.3.0</version>

</dependency>

<dependency>

        <groupId>org.apache.ignite</groupId>

        <artifactId>ignite-spring</artifactId>

        <version>2.3.0</version>

</dependency>



clustering 설정 (META-INF/session.xml)

<property name="cacheConfiguration">

    <list>

        <bean class="org.apache.ignite.configuration.CacheConfiguration">

        <!-- Cache name. -->

            <property name="name" value="session-cache"/>

            <property name="cacheMode" value="PARTITIONED"/>

            <property name="onheapCacheEnabled" value="true"/>

            <property name="backups" value="1"/>

            <property name="evictionPolicy">

                <bean class="org.apache.ignite.cache.eviction.lru.LruEvictionPolicy">

                    <property name="maxSize" value="10000"/>

                </bean>

            </property>

        </bean>

    </list>

</property>

<property name="discoverySpi">

    <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">

        <property name="localPort" value="47500" />

        <property name="localPortRange" value="10" />

        <property name="ipFinder">

            <bean

                class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">

                <property name="addresses">

                    <list>

                        <value>WAS IP:47500..47509</value>

                        <value>WAS IP:47500..47509</value>

                    </list>

                </property>

            </bean>

        </property>

    </bean>

</property>



일반적으로 infinispan을 이용한 세션 클러스터링을 위해서는 standalone-ha.xml 이 필요하나, 이번 외부캐시서버를 이용한 경우에는, standalone.xml을사용해도 무방합니다. 


5.WildFly standalone1,2를 기동합니다.
기동시 server.log에 아래와 같은 로그가 확인되는것을 확인할 수 있습니다. 

2018-10-24 11:07:39,528 INFO  [org.apache.ignite.internal.IgniteKernal%session-grid] (ServerService Thread Pool -- 67)


>>>    __________  ________________

>>>   /  _/ ___/ |/ /  _/_  __/ __/

>>>  _/ // (7 7    // /  / / / _/

>>> /___/\___/_/|_/___/ /_/ /___/

>>>

>>> ver. 2.3.0#20171028-sha1:8add7fd5

>>> 2017 Copyright(C) Apache Software Foundation

>>>

>>> Ignite documentation: http://ignite.apache.org

....

 


6.두 WildFly서버간 세션 Failover가 되는지 확인해보겠습니다.

 




외부 캐시서버를 사용하면 WAS 서버와 독립적인 메모리 클러스터를 구축하여 상호 영향없이 서비스 운영할수 있으며, WAS 성능 및 가용성이 향상되는 효과를 가져올 수 있습니다. 


고맙습니다.





728x90
반응형