Zookeeper环境准备
主机ip | 消息端口 | 通信端口 | 节点目录 |
---|---|---|---|
192.168.11.211 | 2181 | 2888:3888 | zookeeper |
192.168.11.212 | 2181 | 2888:3888 | zookeeper |
192.168.11.213 | 2181 | 2888:3888 | zookeeper |
ActiveMQ环境准备:
activemq可部
主机IP | 集群通信端口 | 消息端口 | 控制台端口 | 节点目录 |
---|---|---|---|---|
192.168.11.211 | 62621 | 61616,61613,5672,61614 | 8161 | activemq-cluster/node1 |
192.168.11.212 | 62621 | 61616,61613,5672,61614 | 8161 | activemq-cluster/node2 |
192.168.11.213 | 62621 | 61616,61613,5672,61614 | 8161 | activemq-cluster/node3 |
部置zookeeper集群
# 节点
mkdir -p /data/zookeeper/{data,conf,log}
# 根据不用的节点,设置不同的myid。例如:192.168.11.211为211,192.168.11.212为212,192.168.11.213为213
echo '211' > /data/zookeeper/data/myid
#zookeeper配置文件
cat > /data/zookeeper/conf/zoo.cfg << 'EOF'
4lw.commands.whitelist=stat,ruok,conf,isro
clientPort=2181
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
#以下三个参数要修改
server.211=192.168.11.211:2888:3888
server.212=192.168.11.212:2888:3888
server.213=192.168.11.213:2888:3888
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
quorum.auth.enableSasl=true
quorum.auth.learnerRequireSasl=true
quorum.auth.serverRequireSasl=true
quorum.auth.learner.loginContext=QuorumLearner
quorum.auth.server.loginContext=QuorumServer
quorum.cnxn.threads.size=6
EOF
#zookeeper的sasl配置
cat > /data/zookeeper/conf/zk_server_jaas.conf << 'EOF'
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="Zookeeper@2021"
user_activemq="Activemq@2021"
user_kafka="Kafka@2021";
};
QuorumServer {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_zookeeper="zookeeper@password";
};
QuorumLearner {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="zookeeper"
password="zookeeper@password";
};
EOF
cat > /data/zookeeper/startup.sh << 'EOF'
docker run -d \
--network host \
--restart=always \
-e "SERVER_JVMFLAGS=-Djava.security.auth.login.config=/conf/zk_server_jaas.conf" \
-v /data/zookeeper/data:/data/zookeeper/data \
-v /data/zookeeper/conf:/conf \
-v /etc/localtime:/etc/localtime \
--name zookeeper \
zookeeper:3.6.3
EOF
bash /data/zookeeper/startup.sh
#查询zookeeper状态
docker exec -i zookeeper zkServer.sh status
zkui管理工具
mkdir -p /data/zkui
cat > /data/zkui/startup.sh << 'EOF'
docker run -d \
--name zkui \
--restart=always \
-e ZK_SERVER=192.168.11.211:2181,192.168.11.212:2181,192.168.11.213:2181 \
-v /etc/localtime:/etc/localtime \
-p 9090:9090 \
juris/zkui
EOF
bash /data/zkui/startup.sh
http://192.168.11.211:9090
用户名:admin/manager
https://github.com/disaster37/activemq部署activemq节点
mkdir /data/activemq/{data,log,conf} -p
cat > /data/activemq/conf/activemq.xml << 'EOF'
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:${activemq.conf}/credentials.properties</value>
</property>
</bean>
<bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
lazy-init="false" scope="singleton"
init-method="start" destroy-method="stop">
</bean>
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" >
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<!--
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="system" password="manager" groups="users,admins"/>
<authenticationUser username="admin" password="admin" groups="admins,publishers,consumers"/>
<authenticationUser username="publisher" password="publisher" groups="publishers,consumers"/>
<authenticationUser username="consumer" password="consumer" groups="consumers"/>
<authenticationUser username="guest" password="guest" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
-->
<!--修改以下三项-->
<persistenceAdapter>
<replicatedLevelDB directory="${activemq.data}/leveldb"
bind="tcp://0.0.0.0:62621"
zkPath="/activemq/leveldb-stores"
replicas="3"
zkAddress="192.168.11.211:2181,192.168.11.212:2181,192.168.11.213:2181"
hostname="192.168.11.211"/>
</persistenceAdapter>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<shutdownHooks>
<bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
</shutdownHooks>
</broker>
<import resource="jetty.xml"/>
</beans>
EOF
cat > /data/activemq/start.sh << 'EOF'
docker run --name='activemq' -d \
-e 'ACTIVEMQ_NAME=activemq-cluster' \
-e 'ACTIVEMQ_REMOVE_DEFAULT_ACCOUNT=true' \
-e 'ACTIVEMQ_ADMIN_LOGIN=admin' \
-e 'ACTIVEMQ_ADMIN_PASSWORD=Activemq@2021' \
-e 'ACTIVEMQ_WRITE_LOGIN=producer_login' \
-e 'ACTIVEMQ_WRITE_PASSWORD=producer_password' \
-e 'ACTIVEMQ_READ_LOGIN=consumer_login' \
-e 'ACTIVEMQ_READ_PASSWORD=consumer_password' \
-e 'ACTIVEMQ_JMX_LOGIN=jmx_login' \
-e 'ACTIVEMQ_JMX_PASSWORD=jmx_password' \
-e 'ACTIVEMQ_STATIC_TOPICS=topic1;topic2;topic3' \
-e 'ACTIVEMQ_STATIC_QUEUES=queue1;queue2;queue3' \
-e 'ACTIVEMQ_MIN_MEMORY=1024' \
-e 'ACTIVEMQ_MAX_MEMORY=4096' \
-e 'ACTIVEMQ_ENABLED_SCHEDULER=true' \
-e 'ACTIVEMQ_ENABLED_AUTH=true' \
-v /data/activemq/data:/data \
-v /data/activemq/log:/var/log/activemq \
-v /data/activemq/conf/activemq.xml:/opt/activemq/conf/activemq.xml \
-p 8161:8161 \
-p 61616:61616 \
-p 61613:61613 \
-p 61614:61614 \
-p 5672:5672 \
-p 62621:62621 \
webcenter/activemq:5.14.3
EOF
http://192.168.11.211:8161
帐号/密码: admin Activemq@2021
ActiveMQ的安全机制使用及其源代码分析http://www.uml.org.cn/j2ee/201305033.asp