既然要做集群肯定会有几个我们需要注意的问题:缓存问题;主键冲突;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.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 |
|
这样配置后,系统的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 |
|
如果独立安装,上面的就需要注释掉。
如果我们不使用内置的消息队列,我们可以单独部署ACTIVEMQ服务。
这种情况下我们修改配置文件app.properties 就好了
jms.ip=127.0.0.1
jms.port=62222
这里改成实际的ACTIVEMQ 的端口。
nginx 配置
看部署架构图比如我们的配置如下
地址 | 用途 |
---|---|
192.168.1.100:80 | nginx服务器 |
192.168.1.101:8080 | tomcat 1 |
192.168.1.102:8080 | tomcat 2 |
nginx 配置文件如下:
|
这样通过nginx 就可以将请求转发到后端的服务器,实现负载均衡。
ID产生机制配置
平台中我们的ID是使用代码产生的,每台服务器都会有一个ID前缀,可以参考表
mi_db_id.
我们在 app.properties 文件中配置
machine.name=mansanpc
如果这个配置留空,那么我们会获取当前的机器名称来产生前缀,因此我们需要保证每台服务器的机器名不同。
好多内容摘自别的 博客,主要是为了以后自己看的时候能够方便点,能帮到别人那是最好了!
修改机器名可以参考:
https://jingyan.baidu.com/article/574c52192a1d8d6c8d9dc1ce.html