针对多Master多Slave模式,同步双写这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ActiveMQ-MasterSlave、activemq基于jdbc的master/slave模式
针对多 Master 多 Slave 模式,同步双写这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ActiveMQ - MasterSlave、activemq基于jdbc的master/slave模式、domain-name-system – BIND slave在重启之前不与master同步、Jenkins 主备 master-slave 模式搭建等相关知识,希望可以帮助到你。
本文目录一览:- 多 Master 多 Slave 模式,同步双写
- ActiveMQ - MasterSlave
- activemq基于jdbc的master/slave模式
- domain-name-system – BIND slave在重启之前不与master同步
- Jenkins 主备 master-slave 模式搭建
多 Master 多 Slave 模式,同步双写
准备工作:
1.linux4台
192.168.247.130
192.168.247.131
192.168.247.132
192.168.247.133
2.同时修改四台机器的hosts的文件如下:
#vim /etc/hosts
192.168.247.130 rocketmq-nameServer1
192.168.247.130 rocketmq-master1
192.168.247.131 rocketmq-nameServer2
192.168.247.131 rocketmq-master2
192.168.247.132 rocketmq-nameServer3
192.168.247.132 rocketmq-master1-slave
192.168.247.133 rocketmq-nameServer4
192.168.147.133 rocketmq-master2-slave
192.168.247.130 zh130
192.168.247.131 zh131
192.168.247.132 zh132
192.168.247.133 zh133
3.同时解压四台机器上的tar包
tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local/
4.同时更改文件目录
mv alibaba-rocketmq alibaba-rocketmq-3.2.6
5.同时创建软连接地址(快捷方式)
ln -s alibaba-rocketmq-3.2.6 rocketmq
6.同时创建文件存储路径(用于mq持久化数据存储)
commitlog:发送的数据储存到commitlog
consumequeue:偏移量
index:索引
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index
开始修改配置文件
1.同时进入conf目录
cd /usr/local/rocketmq/conf
2.进入2m-2s-async配置文件(与双主的配置不同却别在于双主的配置在no-slave下)
# cd /usr/local/rocketmq/conf/2m-2s-async
3.修改四台机器的2m-2s-async下的配置文件:
broker-a.propertie
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
broker-a-s.propertie
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
broker-b.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
broker-b-s.propertie
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
4.同时修改日志配置文件路径
mkdir -p /usr/local/rocketmq/logs
cd /usr/local/rocketmq/conf && sed -i ''s#${user.home}#/usr/local/rocketmq#g'' *.xml
4.同时修改启动脚本jvm配置参数
# vim /usr/local/rocketmq/bin/runbroker.sh
server -Xms5g -Xmx4g -Xmn2g改为server -Xms1g -Xmx1g -Xmn512m
# 开发环境JVM Configuration
#============================================================
==================
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -
XX:PermSize=128m -XX:MaxPermSize=320m"
# vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -
XX:PermSize=128m -XX:MaxPermSize=320m"
5.同时启动NameServer
进入目录
cd /usr/local/rocketmq/bin
启动服务
nohup sh mqnamesrv &
6.启动BrokerServer A主节点
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &
7.启动BrokerServer A-s从节点
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &
8.启动BrokerServer B主节点
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &
启动BrokerServer B-s从节点
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &
ActiveMQ - MasterSlave
MasterSlave方式中,master提供服务,slave备份master的数据。当master挂掉后,slave会变成master继续工作。
Shared File System Master Slave
基于共享文件系统,第一个获取文件上的独占锁的broker,就是master,如果这个broker挂了,其他broker获取文件上的独占锁,就从slave变成master。
broker61616、broker61618、broker61619的persistenceAdapter配置如下:
<persistenceAdapter>
<kahaDB directory="H:\soft\developer\apache\apache-activemq-1\data\kahadb"/>
</persistenceAdapter>
启动
依次启动broker,61616由于先启动,此时是master,61618、61619的启动结果如下,由于没抢到文件的独占锁,变成slave:
此时结构图如下:
master关闭
关闭后,其中一个slave抢到文件的独占锁,变成master:
此时结构图如下:
重启原master
由于此时文件的独占锁已经被抢了,所以就算原master重启,也只能是slave了:
此时结构图如下:
JDBC Master Slave
基于JDBC作为数据源,配置参考JDBC的持久化,不同的是,jdbcPersistenceAdapter要加个locker标签和lockKeepAlivePeriod的值。
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" lockKeepAlivePeriod="5000">
<locker>
<lease-database-locker lockAcquireSleepInterval="10000"/>
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>
启动
依次启动broker,61616由于先启动,此时是master,61618、61619的启动结果如下,由于没抢到锁,在等待:
数据库值:
61618:
61619:
master关闭
此时61619变成master
重启原master
在等待中
activemq基于jdbc的master/slave模式
activemq的jdbc master/slave模式,基于mysql数据库
1、添加数据源,在apache-activemq-5.11.1-1和apache-activemq-5.11.1-2的activemq.xml文件</broker>标签之后添加如下内容
<!--mysql jdbc ms-->
<bean id="mysql-ds" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/amq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
2、修改持久化配置,找到persistenceAdapter修改如下内容(amq1和amq2的配置文件activemq.xml)
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false"/>
</persistenceAdapter>
createTablesOnStartup="false" 在启动前不要配置,等集群启动过了,再配置。createTablesOnStartup是启动时创建表,只创建一次就够了。
3、将mysql的驱动包mysql-connector-java-5.1.35.jar添加到amq各节点的lib目录下
4、小结
基于JDBC和基于共享文件系统的集群方案原理是一致的,只是把共享文件系统换成了共享数据库。
这种集群方式比共享文件系统方案更简单,更利于分布式部署,但是如果数据库失效,那么整个集群的节点随之全部失效。换言之,需要保证数据库的可靠性,比如采用数据库集群。
5、测试访问
http://localhost:8161/ 停止其中任何一台都可访问
domain-name-system – BIND slave在重启之前不与master同步
DNS区域传输已在主站和从站之间正常工作.我可以登录到从服务器并运行dig @dnsmaster myzone. AXFR并打印出区域的全部内容.为了实现这一目的,DNS主服务器配置了notify yes和also-notify {dnsslave}.同样,从站配置了allow-transfer {dnsmaster}.
当更新dnsmaster时,我运行rndc reload并告诉我正在发送通知.通过检查/ var / named / slavedata /中的zonefiles在slave上确认这一点.它们包含最新的数据,与主人知道的相匹配.
现在是奇怪的部分.
从服务器将继续提供旧的陈旧DNS记录,完全忽略了在主机通知后磁盘上有新数据这一事实.我正在使用dig来检查这个命令的结果:dig @slaveserver record.zone.tld.
我认为BIND可能会保留其权威区域的内存缓存,因此我将max-cache-size和max-cache-ttl设置为0,但这没有任何效果.
我尝试通过在从服务器上运行rndc flush和rndc reload之类的命令来刷新这个所谓的缓存的其他方法,但它仍然返回旧的陈旧记录.
最后,我注意到区域中的MINTTL设置为86400(24小时),因此我暂时将MINTTL更改为15秒,然后重新启动从属服务器.没有效果 – 从服务器只会在重新启动服务后提供更新的DNS结果.
这里发生了什么?接收区域更新通知时BIND9的预期行为是什么?它总是尊重TTL和MINTTL吗?我认为它总会使用最新的数据.
在我的智慧结束时,我正在考虑设置一个crontab来每小时重启BIND从属服务器,以避免提供过时的数据.有更好的吗?
解决方法
缓存大小设置和缓存ttl设置用于缓存的递归查询数据,并且(如您所怀疑的)不适用于权威数据.类似地,rndc flush在这里不适用.
建议的故障排除方法:
>验证主服务器是否按预期发送了通知消息.检查日志和/或嗅探主站和从站之间的流量.
>从日志中验证从站正在接收通知消息.
>如果您看不到从服务器收到通知,请作为通知问题进行故障排除,即仔细检查主服务器上named.conf中的通知选项,确保它们按预期定义,以后不会被覆盖,并且适当地确定范围.我建议使用“notify explicit;”使用“also-notify {slave-server;};”
>如果从服务器正在查看通知,则您的问题是找出区域文件未按预期更新的原因.应该发生的事情是收到通知后,奴隶应该进行SOA查询,与其当前的SOA进行比较,并执行AXFR(如果已启用它,则执行IXFR)以获取更新的区域副本(假设主服务器上的SOA)更高.)您应该能够使用嗅探器观察所有这些情况,并且您还应该在两台服务器的日志中看到它的证据.
>如果操作没有按预期发生,请首先手动比较两个服务器上的SOA序列号(挖掘@server $zonename SOA),以确保您不会意外地为从站提供高于预期的序列号过去的时间现在高于主人的序列号.
如果这不起作用,请考虑发布更多信息,包括主服务器和从服务器的named.conf部分以及两个服务器上的日志,这些服务器在主服务器上加载新编辑的区域后发生的情况.
Jenkins 主备 master-slave 模式搭建

Jenkins 学习(3)-Jenkins 的 Master/Slave 机制,及添加 Slave 节点操作
来源:
http://www.sohu.com/a/318426094_371153
https://www.cnblogs.com/my_captain/p/9301656.html
http://www.pianshen.com/article/3449275031/
一、Jenkins 的 Master/Slave 机制
Jenkins 采用 Master/Slave 架构。Master/Slave 相当于 Server 和 agent 的概念,Master 提供 web 接口让用户来管理 Job 和 Slave,Job 可以运行在 Master 本机或者被分配到 Slave 上运行。一个 Master 可以关联多个 Slave 用来为不同的 Job 或相同的 Job 的不同配置来服务。
Jenkins 的 Master/Slave 机制除了可以并发的执行构建任务,加速构建以外。还可以用于分布式自动化测试,当自动化测试代码非常多或者是需要在多个浏览器上并行的时候,可以把测试代码划分到不同节点上运行,从而加速自动化测试的执行。
Master:Jenkins 服务器。主要是处理调度构建作业,把构建分发到 Slave 节点实际执行,监视 Slave 节点的状态。当然,也并不是说 Master 节点不能跑任务。构建结果和构建产物最后还是传回到 Master 节点,比如说在 jenkins 工作目录下面的 workspace 内的内容,在 Master 节点照样是有一份的。
Slave:执行机 (奴隶机)。执行 Master 分配的任务,并返回任务的进度和结果。
Jenkins Master/Slave 的搭建需要至少两台机器,一台 Master 节点,一台 Slave 节点(实际生产中会有多个 Slave 节点)。Jenkins 分布式环境搭建步骤如下:
(1)前提:Master 和 Slave 都已经安装 JDK 1.8 或更高版本
(2)Master 节点上安装和配置 Jenkins
(3)Master 节点上新增 Slave 节点配置,生成 Master-Slave 通讯文件 SlaveAgent
(4)Slave 节点上运行 SlaveAgent,通过 SlaveAgent 实现和 Master 节点的通讯
(5)Master 节点上管理 Jenkins 项目,指定 Slave 调度策略,实现 Slave 节点的任务分配和结果搜集来源。
二、为 Jenkins 配置 Master 节点
Master 不需要主动去建立,安装 Jenkins、创建了 Jenkins 账户,在登录到主界面时,这台电脑就已经默认为 master。
选择 “Manage Jenkins”->“Manage Nodes and Clouds”,可以看到 Master 节点相关信息:
三、为 Jenkins 添加 Slave Node
在 Jenkins 界面选择 “Manage Jenkins”->“Manage Nodes and Clouds”->“New Node
(1)配置 Node Name
(2)配置 Agent 类型:选择永久模式(Permanent Agent)。更多 Agent 种类请安装类插件后可见。
(3)接下来配置 Agent 信息:
Name:Slave 机器的名字
Description:描述 ,不重要 随意填
of excutors:允许在这个节点上并发执行任务的数量,即同时可以下发多少个 Job 到 Slave 上执行,一般设置为 cpu 支持的线程数。[注:Master Node 也可以通过此参数配置 Master 是否也执行构建任务、还是仅作为 Jenkins 调度节点]
Remote root directory:用来放工程的文件夹,jenkins master 上设置的下载的代码会放到这个工作目录下。
Lables:标签,用于实现后续 Job 调度策略,根据 Jobs 配置的 Label 选择 Salve Node
Usage:支持两种模式 “Use this Node as much as possible”、“Only build Jobs with Label expressiong matching this Node”。选择 “Only build Jobs with Label expressiong matching this Node”,
Launch method:这里以选择 JNLP 连接方式为例,如下:(也可选择 Launch agent by connecting it to the master)
(1)对于老版本 Jenkins,选择为 TCP port for JNLP agents jenkins
(2)对于新版本 Jenkins,选择 jave web start
注意:使用 JNLP 方式,需要在 Manage Jenkins->Configure Gloabl Security 界面配置:勾选 “随机选取”、勾选 “Java Web Start Ageng Protocol/4”(有的版本是 “Inbound TCP Agent Protocol/4”)、Enable Agent 配置为 Enable
更多 Launch Method 种类请在 Manage Jenkins->Manage Plugins->Available 界面安装(图片)类插件后可见:
添加完毕后,在 Jenkins 主界面,可以看到新添加的 Slave Node,但是红叉表示此时的 Slave 并未与 Master 建立起联系。节点的 “of excutors” 通道数可以在此界面上看到:
接下来进一步做 Slave Node 配置。
1、Slave Node 节点为 Windows 系统
登录 Slave Node 主机,浏览器中通过 Jenkins master 节点的 URI 登录系统,在 Manage Jenkins->Manage Nodes and Clouds 页面点击刚新建的节点,进入如下界面:
方式一:点击上图中的 “Launch” 按钮,下载 Slave-agent.jnlp 文件到本地,以管理员的权限在命令行执行 Slave-agent.jnlp,最终会弹出一个小窗口,提示 Connect,表示 Slave Node 和 Master Node 连接成功。
如果希望把 Slave-agent .jnlp 安装成 Windows Service,以后 Slave Node 重新启动就能自动连接 master。在弹出一个小窗口的 File 菜单中点击 “Install as a service”,完成安装后上面的小程序会自动关闭,一个命令为 jenkinsagent 的 Windows 服务被创建。
方式二:采用命令行方式。下载 agent.jar 文件到本地,以管理员的权限在命令行执行截图中的命令。(其中 Localhost:8080 替换为 Jenkins 的 Master 的 URI)
如果希望本命令在 Slave Node 重启时自动运行,可以把如上命令保存为 bat 文件,在 Window 系统下设置开始时执行此 bat 文件。
2、Slave Node 节点为 Linux 系统
类同 Windows 系统的 Slave Node 节点。只是启动命令方式有差异。
把 agent.jar 保存到 /home/Jenkins,运行 sudo java -jar agent.jar....,注意 sudo 采用管理员方式运行(否则提示 Exception in thread "main" java.nio.file.AccessDeniedException:/opt/jenkins 错误)。
四、创建任务,为任务指定 Node 调度策略
(1)Jenkins 首页,New View 创建一个自己视图。
(2)选择刚创建的视图,进入 My View 页面,New Job 创建一个任务。
(3)创建 Job 的页面,“General” 下勾选 “Restric where this project can be run”,填写 Label Expression。
Jenkins 通过节点的 label 标签来执行 Jobs 的 Slave Node,一个标签可以关联多台不同命名的 slave 机器。
五、Jenkins 的 Master 和 Slave 通信方式
常用的 Master 和 Slave 节点连接的方式是 ssh 或 JNLP。
(1)ssh:对于 Slave Node 是 linux 系统,最方便的就是通过 ssh 启动 jenkins 节点,但这个的前提是 Master 和 Slave 之前能进行 ssh 连接。
(2)jnlp:jnlp 连接有个好处就是不需 Master 和 Slave 之间能够 ssh 连接,只需能 ping 即可。Slave Node 是 windows 的话,这个方式十分实用,因为有时候一些权限或者防火墙的原因,导致 Master 和 Slave 不能够 ssh 连接;还有一些未知的原因导致无法 ssh 到 Slave Node。
如章节三所言,也可以安装 Jenkins Plugins,支持更广泛的 Slave Agent 类型和连接。
关于多 Master 多 Slave 模式,同步双写的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于ActiveMQ - MasterSlave、activemq基于jdbc的master/slave模式、domain-name-system – BIND slave在重启之前不与master同步、Jenkins 主备 master-slave 模式搭建的相关信息,请在本站寻找。
本文标签: