Linux下集群Tomcat+MySql部署

在集群部署时需要考虑以下几个问题:

1.session同步问题

2.分布式缓存问题

3.ID 主键冲突问题

4.消息队列问题

1.部署拓仆结构图

 

1.nginx 提供对外服务

2.部署多台应用服务器

3.redis可以一台或多台集群

3.消息队列可以使用 ACTIVEMQ 或者 KAFKA.

2. 软件准备

1.NGINX

2.TOMCAT 

3.ACTIVEMQ 或 KAFKA

4.REDIS

3.部署过程

3.1 程序的安装

1.部署tomcat和应用

 安装好tomcat 并将应用放到 webapp目录。

2.部署nginx

https://www.cnblogs.com/yg_zhang/p/10197954.html

3.部署redis

https://www.cnblogs.com/yg_zhang/p/10196397.html

4.部署 KAFKA 或 ACTIVEMQ

https://www.cnblogs.com/yg_zhang/p/10184185.html

 

3.2.缓存和session同步的配置

3.2.1 J2cache 配置

在平台中如果使用分布式部署,需要配置缓存为J2Cache。

J2Cache属性文件配置

编辑config/j2cache.properties文件

比如 我们redis 安装为哨兵模式

则配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#########################################
redis.mode = sentinel
#redis storage mode (generic|hash)
redis.storage = generic
## redis pub/sub channel name
redis.channel = j2cache
## redis pub/sub server (using redis.hosts when empty)
redis.channel.host =
#cluster name just for sharded
redis.cluster_name = mymaster
## redis cache namespace optional, default[empty]
redis.namespace =
## connection
# Separate multiple redis nodes with commas, such as 192.168.0.10:6379,192.168.0.11:6379,192.168.0.12:6379
redis.hosts = 202.10.79.170:16001,202.10.79.170:16002,202.10.79.170:16003
redis.timeout = 10000
redis.password =
redis.database = 0
## redis pool properties
redis.maxTotal = 100
redis.maxIdle = 10
redis.maxWaitMillis = 5000
redis.minEvictableIdleTimeMillis = 60000
redis.minIdle = 1
redis.numTestsPerEvictionRun = 10
redis.lifo = false
redis.softMinEvictableIdleTimeMillis = 10
redis.testOnBorrow = true
redis.testOnReturn = false
redis.testWhileIdle = true
redis.timeBetweenEvictionRunsMillis = 300000
主要修改 :
redis.hosts:redis主机
redis.cluster_name:redis集群名称
redis.maxTotal :连接池最大数
redis.maxIdle:最大空闲redis连接数

3.2.2 缓存配置

编辑配置文件 spring-base.xml

 

<!--
<bean id="iCache" class="com.redxun.core.cache.EhCache">
<property name="cacheName" value="tokenCache"></property>
</bean>
-->
<bean id="iCache" class="com.redxun.core.cache.J2CacheImpl" init-method="init" destroy-method="destroy"></bean>

将默认的ehcache 缓存实现改成 J2Cache 的实现。

 

3.2.3 session同步配置

编辑 web.xml

将下面的配置注释去掉,让其生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<filter>
<filter-name>j2cache-session-filter</filter-name>
<filter-class>com.redxun.saweb.filter.J2CacheSessionFilter</filter-class>
<init-param>
<param-name>session.maxSizeInMemory</param-name>
<param-value>2000</param-value>
</init-param>
<init-param>
<param-name>session.maxAge</param-name>
<param-value>1800</param-value>
</init-param>
 
<init-param>
<param-name>cookie.name</param-name>
<param-value>J2CACHE_SESSION_ID</param-value>
</init-param>
<init-param>
<param-name>cookie.path</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>cookie.domain</param-name>
<param-value></param-value>
</init-param>
</filter>
 
 
<filter-mapping>
<filter-name>j2cache-session-filter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>


这样配置后,系统的session管理将使用 j2cache 进行管理。

 

3.3 使用KAFKA作为消息队列

3.3.1 修改spring-all.xml

将下面的配置注释掉

<import resource="spring-jms.xml"/>

打开下面的注释

<import resource="spring-kafka-producer.xml"/>
<import resource="spring-kafka-consumer.xml"/>

3.3.2 修改 spring-bean.xml 

将下面配置注释

<bean id="messageProducer" class="com.redxun.core.jms.producer.ActiveMqProducer"/>

打开下面的注释
<bean id="messageProducer" class="com.redxun.core.jms.producer.KafkaProducer"/>

3.3.3 修改 app.properties

修改 kafka.brokerurl=202.10.79.170:9001,202.10.79.170:9002 为实际的kafka实例地址,这样平台的消息队列就改成了kafka。

 

3.4 使用ACTIVEMQ作为独立消息队列服务器

 在默认情况下平台使用了内置的消息队列服务器,这种情况下队列不需要安装。我们可以参考 spring-jms.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<amq:broker useJmx="false" persistent="true" dataDirectory="${jms.dir}/jms">
<amq:managementContext>
 
<amq:managementContext createConnector="false" />
</amq:managementContext>
<amq:persistenceAdapter>
<amq:kahaDB directory="${jms.dir}" >
</amq:kahaDB>
</amq:persistenceAdapter>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://${jms.ip}:${jms.port}" />
</amq:transportConnectors>
</amq:broker>

 

如果独立安装,上面的就需要注释掉。

如果我们不使用内置的消息队列,我们可以单独部署ACTIVEMQ服务。

这种情况下我们修改配置文件app.properties 就好了

jms.ip=127.0.0.1
jms.port=62222

这里改成实际的ACTIVEMQ 的端口。

 

3.5 nginx 配置

看部署架构图比如我们的配置如下

地址
用途
192.168.1.100:80 nginx服务器
192.168.1.101:8080 tomcat 1
192.168.1.102:8080 tomcat 2

nginx 配置文件如下:

upstream linuxidc {
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
 
 
location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://linuxidc;
}

这样通过nginx 就可以将请求转发到后端的服务器,实现负载均衡。

 

3.6 ID产生机制配置

平台中我们的ID是使用代码产生的,每台服务器都会有一个ID前缀,可以参考表

mi_db_id.

 

我们在 app.properties 文件中配置

machine.name=mansanpc

 如果这个配置留空,那么我们会获取当前的机器名称来产生前缀,因此我们需要保证每台服务器的机器名不同。

修改机器名可以参考:

https://jingyan.baidu.com/article/574c52192a1d8d6c8d9dc1ce.html

 

posted @ 2020-06-02 18:08  DarJeely  阅读(403)  评论(0编辑  收藏  举报