1. 程式人生 > >tomcat部署高可用eureka-server

tomcat部署高可用eureka-server

使用外部tomcat部署eureka-server時,為排除springboot內建的tomcat,修改pom.xml檔案,增加
<dependency>  
 <groupId>org.springframework.boot</groupId>  
      <artifactId>spring-boot-starter-web</artifactId>  
      <!-- 排除內建容器,排除內建容器匯出成war包可以讓外部容器執行spring-boot專案-->  
      <exclusions>  
       <exclusion>  
             <groupId>org.springframework.boot</groupId>  
                  <artifactId>spring-boot-starter-tomcat</artifactId>  
            </exclusion>  
      </exclusions>     
</dependency>
        
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-tomcat</artifactId>
 <scope>provided</scope>
</dependency>


修改啟動類Application.java,繼承SpringBootServletInitializer,改寫configure方法,修改啟動方式
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication extends SpringBootServletInitializer{

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(EurekaServerApplication.class);
	}

	public static void main(String[] args) {
		//SpringApplication.run(EurekaServerApplication.class, args);
		new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);
	}
}

(如果在一個tomcat部署多個eureka-server時)修改配置檔案application.yml,配置spring.jmx.default-domain,確保其唯一性,避免tomcat在部署時發生衝突。如下:

eureka-server-peer1

spring:
  application:
    name: eureka-server
  jmx:
    default-domain: eureka-server-peer1
server:
  port: 1111
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:1112/eureka-server-peer2/eureka/
eureka-server-peer2
spring:
  application:
    name: eureka-server
  jmx:
    default-domain: eureka-server-peer2
server:
  port: 1112
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:1111/eureka-server-peer1/eureka/

配置host檔案,增加127.0.0.1 peer1和127.0.0.1 peer2

配置tomcat,使其在對應的埠號執行相應的eureka-server,修改conf/server.xml,增加兩個service節點

<Service name="peer1">
    <Connector port="1111" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />


    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
 
    <Engine name="peer1" defaultHost="localhost">
 
      <Realm className="org.apache.catalina.realm.LockOutRealm">
 
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>




      <Host name="localhost"  appBase="peer1"
            unpackWARs="true" autoDeploy="true">
 
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
        <Context path="/eureka-server-peer1" docBase="C:/Program Files/Apache Software Foundation/Tomcat 9.0/peer1/eureka-server-peer1" reloadable="true" />
      </Host>
    </Engine>
  </Service>
  <Service name="peer2">
 
    <Connector port="1112" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8445" />
     
    <Connector port="8011" protocol="AJP/1.3" redirectPort="8445" />
 
    <Engine name="peer2" defaultHost="localhost">
 
      <Realm className="org.apache.catalina.realm.LockOutRealm">
 
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>




      <Host name="localhost"  appBase="peer2"
            unpackWARs="true" autoDeploy="true">
 
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
        <Context path="/eureka-server-peer2" docBase="C:/Program Files/Apache Software Foundation/Tomcat 9.0/peer2/eureka-server-peer2" reloadable="true" />
      </Host>
    </Engine>
  </Service>

建立兩個資料夾peer1,peer2,將對應的eureka-server的war置入,執行,訪問http://localhost:1111/eureka-server-peer1/和eureka-server-peer2。