分布式环境
分布式环境
zk
服务器1: 172.18.8.40 端口:2181 2881 3881
服务器1: 172.18.8.41 端口:2182 2882 3882
服务器1: 172.18.8.42 端口:2183 2883 3883
Ubuntu
- 修改/etc/hosts 文件,添加ip与主机映射
172.18.8.40 dev-imp840-v-o
172.18.8.41 dev-imp841-v-o
172.18.8.42 dev-imp842-v-o
- 下载
cd /usr/local/src
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
mv zookeeper-3.4.8 ../zookeeper
- 配置
cd /usr/local/zookeeper
mkdir data
mkdir logs
cd conf
cp zoo_sample.cfg zoo.cfg
172.18.8.40:
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
# 端口 2181
clientPort=2181
server.1=172.18.8.40:2881:3881
server.2=172.18.8.41:2882:3882
server.3=172.18.8.42:2883:3883
172.18.8.41:
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
# 端口 2182
clientPort=2182
server.1=172.18.8.40:2881:3881
server.2=172.18.8.41:2882:3882
server.3=172.18.8.42:2883:3883
172.18.8.42:
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
# 端口 2183
clientPort=2183
server.1=172.18.8.40:2881:3881
server.2=172.18.8.41:2882:3882
server.3=172.18.8.42:2883:3883
- myid文件
172.18.8.40:
echo 1 > /usr/local/zookeeper/data/myid
172.18.8.41:
echo 2 > /usr/local/zookeeper/data/myid
172.18.8.42:
echo 3 > /usr/local/zookeeper/data/myid
- 启动
/usr/local/zookeeper/bin/zkServer.sh start
- 检查:
/usr/local/zookeeper/bin/zkServer.sh status
- 作为启动服务
在/etc/init.d/ 下建zk文件
vi zk
#/bin/sh
/usr/local/zookeeper/bin/zkServer.sh start
修改属性
chmod +x zk
activeMQ
规划
服务器1: 172.18.8.40 集群端口 62621 消息端口 51511 控制台端口8161
服务器1: 172.18.8.41 集群端口 62622 消息端口 51512 控制台端口8162
服务器1: 172.18.8.42 集群端口 62623 消息端口 51513 控制台端口8163
安装目录
/usr/local/activemq
- 下载 wget http://apache.fayea.com/activemq/5.14.0/
- 解压:
tar zxvf apache-activemq-5.14.0-bin.tar.gz
mv apache-activemq-5.14.0 /usr/local/activemq
- 配置
cd /usr/local/activemq/conf
控制台端口配置
vi jetty.xml
找到 8161 相应修改成 8161 8162 8163
172.18.8.40 不变,为 8161
172.18.8.41 修改成 8162
172.18.8.42 修改成 8163
集群配置:
修改activemq.xml中的持久化适配器,修改bind, zkaddress, hostname和zkPath, 每个activemq中BrokerName必须相同,否则不能加入集群
修改持久化:
40:
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:62621"
zkAddress="172.18.8.40:2181,172.18.8.41:2182,172.18.8.42:2183"
hostname="dev-imp840-v-o"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
41:
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:62622"
zkAddress="172.18.8.40:2181,172.18.8.41:2182,172.18.8.42:2183"
hostname="dev-imp841-v-o"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
42:
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:62623"
zkAddress="172.18.8.40:2181,172.18.8.41:2182,172.18.8.42:2183"
hostname="dev-imp842-v-o"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
修改消息端口
40:
<transportConnector name="openwire" uri="tcp://0.0.0.0:51511?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
41:
<transportConnector name="openwire" uri="tcp://0.0.0.0:51512?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
42:
<transportConnector name="openwire" uri="tcp://0.0.0.0:51513?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
启动:
/usr/local/activemq/bin/activemq start
查看日志:tail -f /usr/local/activemq/data/activemq.log
访问主节点控制台:(slave控制台不能访问)
http://172.18.8.40:8161/admin/ 默信密码 admin/admin
测试:
设置开机启动:
在/etc/init.d/ 下建activemq文件
vi activemq
#/bin/sh
/usr/local/activemq/bin/activemq start
修改属性
chmod +x activemq
测试,任意停掉一个节点,都可以继续工作。
broke cluster
activemq安全
连接ActiveMQ默认情况下,没有任何安全机制,也就是说任何人只要知道brokerURL都能连接,这显然不安全,可以在activemq.xml里,找到<broker>节点,紧贴它的地方添加下面这段:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
...
</broker>
那么问题来了,这个
activemq.username及
activemq.username及{activemq.password}的值是在哪里定义的呢?仍然在activemq.xml里找答案,在最开始的地方有一段:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:${activemq.conf}/credentials.properties</value>
</property>
</bean>
换句话说,conf/credentials.properties这里保存的就是连接activemq的用户名和密码,启用连接的安全机制后,spring的配置文件要做如下调整:
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<!--broker服务的地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<!--默认值为1000,如果不需要这么大,可以调小-->
<property name="maxThreadPoolSize" value="100"/>
<property name="userName" value="system"/>
<property name="password" value="manager"/>
</bean>
</property>
</bean>