Linux 下tomcat集群+mysql +redies

该博客主要介绍了在Linux系统下多种程序的安装与配置,包括Tomcat、Nginx、Redis、RabbitMQ、Kafka、ActiveMq等。还涉及缓存和session同步配置、消息队列使用配置、nginx负载均衡配置以及ID产生机制配置等内容,为集群搭建提供了详细指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

既然要做集群肯定会有几个我们需要注意的问题:缓存问题;主键冲突;session共享;消息队列

下面是网上找的一张图

通过这张图我们可以清楚的知道  Nginx 提供对外服务---> Tomcat 应用服务器 ---> redis缓存--->消息队列 (ACTIVEMQ 或者 RabbitMq)---> 数据库 (Mysql)

程序的安装:

1.tomcat 安装以及应用部署 一下内容摘自 https://www.cnblogs.com/locahost/articles/7684857.html

将文件上传到Linux下的root用户文件夹下并解压(采用上传工具:如File Zilla

将tomcat软件解压到/usr/local路径下

1.现在/usr/local路径下创建两个文件夹

2.安装tomcat

将tomcat软件分别解压到两个tomcat1、tomcat2文件夹下

将准备的test.war文件拷贝到/usr/local/tomcat2/apache-tomcat-7.0.57/webapps/下

1 cp /root/test.war /usr/local/tomcat2/apache-tomcat-7.0.57/webapps/
2 cp /root/test.war /usr/local/tomcat1/apache-tomcat-7.0.57/webapps/

修改第二tomcat2中的server.xml(需要修改三个地方,与之前的端口不同即可)

修改/usr/local/tomcat2/apache-tomcat-7.0.57/webapps/test/index.jsp

开启两个tomcat的服务

在浏览器测试访问

 

 

至此tomcat 安装部署完成。

 

 

 

 

 

 

 

 

 

 

安装部署Nginx

下载

下载版本 nginx-1.13.4.tar.gz

安装

1.解压

tar -zxvf nginx-1.13.4.tar.gz

2.配置安装目录

./configure  —prefix=/usr/local/nginx 

3.执行 

make

make install

进行安装,如果安装失败,可能是缺少了一些系统文件,安装上就是了。

配置负载均衡

在 http 节点下添加

 

upstream linuxidc {
server localhost:8080;
server localhost:8081;
}

指向后端的 8080,8081 服务

在server 节点下添加

location / {
root html;
index index.html index.htm;
proxy_pass http://linuxidc;
}

这样负载均衡 就配置好了。

nginx 操作:

启动 :

./sbin/nginx -c conf/nginx.conf

重启

./sbin/nginx -s reload

强制 停止

ps -ef | grep nginx

kill -9 1422

kill -9 2509

redis 安装配置

1.下载 

下载redis-5.0.3.tar.gz 版本

2.安装

tar -zxvf redis-5.0.3.tar.gz  -C /usr/local

cd /usr/local

//创建连接 将 redis-5.0.3 目录映射到 redis。

ln -sv redis-5.0.3/ redis  

cd redis 

执行 make 命令进行编译

make

编译完成后,进入src目录 执行 make install 目录进行安装

make install

 部署

编译好后会在src下生成可执行文件,我们将这些执行文件,进行整理,方便使用。

在 redis 目录创建 bin 和etc 文件夹

mkdir -p /usr/local/redis/bin

mkdir -p /usr/local/redis/etc

redis目录下执行

mv redis.conf etc/

cd src

mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin

切换到etc目录

编辑 redis.conf 文件

修改 

bind 127.0.0.1 192.168.1.88

daemonize yes

修改上述两项,就可以启动 redis了

./bin/redis-server etc/redis.conf 

启动redis

可以看到redis已经启动了。

我们可以使用 redis-cli 命令操作redis

RabbitMQ安装

安装Erlang环境

安装依赖

      yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel

安装ncurses

      yum -y install ncurses-devel

安装erlang环境

     下载地址     https://pan.baidu.com/s/1ILmMOKH5ddDYNf3pGzxJng   提取码:2g2o  【建议使用这个】

      在线下载    wget http://erlang.org/download/otp_src_18.2.1.tar.gz

     执行如下命令:

      tar xvfz otp_src_18.2.1.tar.gz

      ./configure

      make && make install

检查是否安装成功:  执行  erl

 

下载rabbitmq-server-3.6.9.tar.xz

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz

对于下载xz包进行解压,首先先下载xz压缩工具:

yum install xz

对rabbitmq包进行解压:

xz -d xz -d rabbitmq-server-generic-unix-3.6.9.tar.xz

tar -xvf rabbitmq-server-generic-unix-3.6.9.tar

随后移动至/usr/local/下 改名rabbitmq:

cp -r rabbitmq_server-3.6.9 /usr/local/rabbitmq

这种下载的方式解压后直接可以使用,无需再编译安装;

进入到rabbit文件内,其命令文件存在于sbin文件夹下,因此需要将sbin文件夹的路径添加到PATH中:修改/etc/profile

export PATH=/usr/local/rabbitmq/sbin:$PATH

执行

source /etc/profile

使得PATH路径更新,rabbitMQ安装成功。

随后启用MQ管理方式:

rabbitmq-plugins enable rabbitmq_management #启动后台管理 rabbitmq-server -detached #后台运行rabbitmq

chkconfig rabbitmq-server on # 开机启动

设置端口号,可供外部访问:

iptables -I INPUT -p tcp --dport 15672 -j ACCEPT

添加用户和权限

默认网页guest用户是不允许访问的,需要增加一个用户修改一下权限,代码如下:

添加用户:

rabbitmqctl add_user admin admin

修改用户角色:

rabbitmqctl set_user_tags admin administrator

创建和服角色后查看确认

rabbitmqctl list_users  

添加权限:

 rabbitmqctl add_vhost admin

rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"

然后就可以远程访问了,然后可直接配置用户权限等信息。

RabbitMQ的简单指令

启动服务:rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server -detached 】

重启服务:rabbitmq-server restart

关闭服务:rabbitmqctl stop

查看状态:rabbitmqctl status

列出角色:rabbitmqctl list_users

开启某个插件:rabbitmq-pluginsenable xxx

关闭某个插件:rabbitmq-pluginsdisablexxx

注意:重启服务器后生效。

卸载RabbitMQ:

一、卸载rabbitmq相关的

1、卸载前先停掉rabbitmq服务,执行命令

         service rabbitmq-server stop

2、查看rabbitmq安装的相关列表

        yum list | grep rabbitmq

3、卸载rabbitmq已安装的相关内容

        yum -y remove rabbitmq-server.noarch

二、卸载erlang

1、查看erlang安装的相关列表

      yum list | grep erlang

2、卸载erlang已安装的相关内容

      yum -y remove erlang-*

      yum remove erlang.x86_64 

然后你就可以重新安装了 

linux搭建rabbitmq集群

准备俩台以上的Centos7的机器 为了方便管理 ip+hostname分别为

             192.168.128.140  A

             192.168.128.142  B

             192.168.128.143  C    

修改hosts文件如下   通过 vi /etc/hosts 命令进入,每台的配置都一样 然后重新启动所有机器 

 

1、安装RabbitMQ

1)下载和安装erlang

下载erlang

wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm

安装erlang,root用户使用rpm安装

rpm -ihv erlang-18.1-1.el6.x86_64.rpm

2)下载和安装RabbitMQ

下载RabbitMQ

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_12/rabbitmq-server-3.6.12-1.el6.noarch.rpm

安装RabbitMQ,root用户使用rpm安装

yum install -y socat --需要先安装socat

rpm -ihv rabbitmq-server-3.6.12-1.el6.noarch.rpm

当安装完成之后,可以启动一下,如果打印如下,那么安装就成功了。

 

2、配置RabbitMQ

1)创建RabbitMQ账号

rabbitmqctl add_user admin bigdata123

[root@A ~]# rabbitmqctl add_user admin admin Creating user "admin"

 2)将admin账号赋予管理员权限

rabbitmqctl set_user_tags admin administrator

[root@A ~]# rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator]

 3)设置权限

rabbitmqctl  set_permissions  -p  '/'  admin '.' '.' '.'

[root@A ~]# rabbitmqctl set_permissions -p '/' admin '.' '.' '.' Setting permissions for user "admin" in vhost "/"

3、配置RabbitMQ集群

我们这里会展示如何配置一个RabbitMQ集群,要保证三台服务器的IP能通。

 1)安装好RabbitMQ

安装方法同上文。

2)保证相同的Erlang Cookie

 我这里是把A上的.erlang.cookie以scp的方式拷贝到另外两台机器。(如果mq没有启动过是没有erlang.cookie的)

[root@A ~]# scp /var/lib/rabbitmq/.erlang.cookie root@B:/var/lib/rabbitmq [root@A ~]# scp /var/lib/rabbitmq/.erlang.cookie root@C:/var/lib/rabbitmq

3)运行各个RabbitMQ节点

rabbitmqctl stop

rabbitmq-server -detached

运行成功后可以查看一下节点当前的集群状态,当然这个时候还没有组成集群。

[root@A ~]# rabbitmqctl cluster_status

[root@B ~]# rabbitmqctl cluster_status

[root@C ~]# rabbitmqctl cluster_status

4)将节点连接成集群

B:加入到集群rabbit@A

[root@B ~]#rabbitmqctl stop_app

[root@B ~]#rabbitmqctl join_cluster rabbit@A

[root@B ~]#rabbitmqctl start_app

C:加入到集群rabbit@A

[root@C ~]#rabbitmqctl stop_app

[root@C ~]#rabbitmqctl join_cluster rabbit@A

[root@C ~]#rabbitmqctl start_app

A:不用加入自己

查看集群状态,我们可以在任意一台机器上查看,我们选择在client09上看。

可以看到,3个实例已经组成了集群。

 5)启用web管理插件

rabbitmq-plugins enable rabbitmq_management

 

这样你可以通过web页面观察rabbitmq的status,端口号是15672,例如http://ip:15672 

 

安装kafka

 

1.下载

http://mirror.bit.edu.cn/apache/kafka/2.1.0/kafka_2.11-2.1.0.tgz

2.解压 

tar -zxvf kafka_2.11-2.1.0.tgz

3.创建两份配置文件

cd conf

cp server.properties  server1.properties

cp server.properties  server2.properties

4.创建两个log目录

cd logs

mkdir log1 log2

5.编辑配置文件

编辑 server1.properties,server2.properties

主要修改点

#broker id 在集群中必须唯一

broker.id=1

#监听端口

#listeners=PLAINTEXT://:9001

host.name=192.168.1.1

port=9001

#topic 分区数量

num.partitions=5

# 数据存储目录

log.dirs=/home/kafka/kafka_2.12-2.1.0/logs/log1

# zookpeer 配置

zookeeper.connect=localhost:2181,localhost:2182,localhost:2183

两个文件不同的地方

broker.id,log.dirs ,host.name(kafka所在的IP),port:kafka的端口

6.启动kafka集群

./bin/kafka-server-start.sh -daemon config/server1.properties 

./bin/kafka-server-start.sh -daemon config/server2.properties 

7.验证集群

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 5 --topic my-topic

创建一个my-topic 的 topic 

副本为1

分区数为5

实例1

 

实例2

 可以看到两个实例,一个实例上有3个分区,一个为两个分区。

 显示kafka 主题数量

./kafka-topics.sh --zookeeper localhost:2181 --describe

 

kafka 内存调整

如果使用的CMS GC算法,建议JVM Heap不要太大,在4GB以内就可以。JVM太大,导致Major GC或者Full GC产生的“stop the world”时间过长,导致broker和zk之间的session超时,比如重新选举controller节点和提升follow replica为leader replica。

JVM也不能过小,否则会导致频繁地触发gc操作,也影响Kafka的吞吐量。另外,需要避免CMS GC过程中的发生promotion failure和concurrent failure问题。CMSInitiatingOccupancyFraction=70可以预防concurrent failure问题,提前出发Major GC。

Kafka JVM参数可以直接修改启动脚本bin/kafka-server-start.sh 中的变量值。下面是一些基本参数,也可以根据实际的gc状况和调试GC需要增加一些相关的参数。

export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G -Xmn2G -XX:PermSize=64m -XX:MaxPermSize=128m  -XX:SurvivorRatio=6  -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly"

安装ActiveMq

一. 官网下载activemq的压缩包

官网路径: http://activemq.apache.org/download.html

注: activemq安装需要安装jdk, 可以参考linux下安装jdk进行安装。

二. 安装步骤

上传安装包

创建/usr/local/activemq,然后将安装包传到服务器

解压

tar -zxvf apache-activemq-5.15.9-bin.tar.gz

 

配置环境变量

#activemq环境变量
export ACTIVEMQ_HOME=/usr/local/activemq/apache-activemq-5.15.9
export ACTIVEMQ_BIN=$ACTIVEMQ_HOME/bin
export PATH=${PATH}:${ACTIVEMQ_BIN}

 

注: 如果需要搭建集群,一台机器上装多台mq,就不要再配置环境变量了,会串的。

重启配置文件source /etc/profile

测试

启动命令activemq start

查看控制台主页http://ip:8161/admin

用户名密码默认都是admin

关闭命令activemq stop

在这里插入图片描述

 

缓存和session同步的配置

 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连接数

 缓存配置

编辑配置文件 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 进行管理。

 使用KAFKA作为消息队列

 修改spring-all.xml

将下面的配置注释掉

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

打开下面的注释

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

 修改 spring-bean.xml 

将下面配置注释

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

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

 修改 app.properties

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

 

 使用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 的端口。

 

nginx 配置

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

地址

用途

192.168.1.100:80nginx服务器
192.168.1.101:8080tomcat 1
192.168.1.102:8080tomcat 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 就可以将请求转发到后端的服务器,实现负载均衡。

 

 ID产生机制配置

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

mi_db_id.

 

我们在 app.properties 文件中配置

machine.name=mansanpc

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

好多内容摘自别的 博客,主要是为了以后自己看的时候能够方便点,能帮到别人那是最好了!

修改机器名可以参考:

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值