我正在创建一个Java应用程序,它需要JVM之间的主从通信,可能驻留在同一台物理机器上.将在Java EE应用程序服务器(即JBoss)内部运行一个"主"服务器,该服务器将"从"客户端连接到它并动态注册自己进行通信(即主服务器将不知道该服务器的IP地址/端口奴隶因此无法提前配置).主服务器充当控制器,它将向从站执行工作,并且从站将定期响应通知,因此将进行双向通信.
我最初想的是基于RPC的系统,其中每一方都是服务器,但它可能变得复杂,所以我更喜欢一种机制,其中有一个打开的套接字,它们来回交谈.
我正在寻找一种低延迟的通信机制,其中消息主要是原始类型,因此不需要严格的序列化.这是我看过的:
有没有我缺少的技术?
编辑:还看了看:
我正在尝试使用MongoDb创建副本集,服务器主机名是:
hostname hostname-1 hostname-2
其中每个都有/ etc/hosts文件中详细说明的所有相关主机名(它们都是运行Ubuntu 10.04 64位)
当我在一个节点上执行rs.initiate时,一切似乎都开始好了.运行rs.status(); 说明:
{
"set" : "vega",
"date" : ISODate("2012-01-22T19:15:55Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "hostname:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1327254848000,
"i" : 1
},
"optimeDate" : ISODate("2012-01-22T17:54:08Z"),
"self" : true
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将新成员添加到副本集时,问题就出现了.我使用命令rs.add(hostname-1); 我收到以下错误:
{
"assertion" : "need most members up to reconfigure, not ok : vega-1:27017",
"assertionCode" : 13144,
"errmsg" …
Run Code Online (Sandbox Code Playgroud) 我们使用Apache Solr(3.1.0)来索引为多个站点编写的大量文章.我们有一个主/从设置(底部的复制配置),其中服务器1索引文章,服务器2复制索引.奴隶应该每隔60秒轮询主人,但相反,我们/replication
几乎每次都能看到10到75个连续的呼叫.
每个Solr核心(${solr.core.name}
在从配置中)代表不同的站点./replication
我最看到的电话与最大的网站有关.其中一个核心每分钟只有1个呼叫,并且在调用update?commit=true
几次之后我已经能够在那里重现它,所以这让我认为它与主机执行的提交量有关.
所以我的问题是,如何阻止Solr奴隶复制索引几十次并迫使它每分钟复制一次?我尝试过使用commitReserveDuration
master配置中的参数,但我真的没有看到任何区别.
主复制配置:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<str name="replicateAfter">commit</str>
<str name="replicateAfter">startup</str>
</lst>
</requestHandler>
Run Code Online (Sandbox Code Playgroud)
slave replication config:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="slave">
<str name="masterUrl">http://${solr.master.server}/search/${solr.core.name}/replication</str>
<str name="pollInterval">00:00:60</str>
</lst>
</requestHandler>
Run Code Online (Sandbox Code Playgroud) 我已经彻底搜索了谷歌一个确定的解决方案或一组步骤来解决这个问题,但似乎没有很多高质量的结果,我没有发现堆栈溢出的问题.我们正在尝试使用一个slave来设置MySQL复制.从属似乎正在复制,然后发生以下错误:
无法解析中继日志事件条目.可能的原因是:主服务器的二进制日志已损坏(您可以通过在二进制日志上运行'mysqlbinlog'来检查),从服务器的中继日志已损坏(您可以通过在中继日志上运行'mysqlbinlog'来检查),网络问题,或者主服务器或从服务器的MySQL代码中的错误.如果要检查主站的二进制日志或从站的中继日志,您可以通过在此从站上发出"SHOW SLAVE STATUS"来了解其名称.
为了使大量的人从搜索中不可避免地偶然发现这个问题,如果有人回复提供了可能出错的概述以及采取了哪些步骤来解决这个问题,那将会很有帮助,但我会还提供了与我的特定情况相关的更多详细信息,希望有人可以帮我解决.
我们导入到从服务器以启动它的转储是在主服务器上使用以下命令创建的:
mysqldump --opt --allow-keywords -q -uroot -ppassword dbname > E:\Backups\dbname.sql
Run Code Online (Sandbox Code Playgroud)
执行此备份的脚本还会记录主服务器的当前二进制日志位置.然后,我们采取以下步骤在slave上启动复制:
1. STOP SLAVE;
2. DROP DATABASE dbname;
3. SOURCE dbname.sql;
(... waited a few hours for the 10gb dump to import)
4. RESET SLAVE;
5. CHANGE MASTER TO MASTER_HOST='[masterhostname]', MASTER_USER='[slaveusername]', MASTER_PASSWORD='[slaveuserpassword]', MASTER_PORT=[port], MASTER_LOG_FILE='[masterlogfile]', MASTER_LOG_POS=[masterlogposition];
6. START SLAVE;
Run Code Online (Sandbox Code Playgroud)
经过大约一天的复制工作正常,它在凌晨3:43再次失败.MySQL错误日志中出现的第一件事就是上面的错误.然后使用相同的时间戳出现另一个一般错误:
Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log '[masterlogfile]' position [masterlogpos] …
Run Code Online (Sandbox Code Playgroud) 我使用jenkins主从配置来捕获产品的性能指标.我们观察到jenkins-slave倾向于累积内存,从而影响捕获的性能指标.
为了确保捕获的度量标准的一致性,我们正在考虑每天从主服务器重新启动jenkins从服务器,此时服务器上没有运行任务.这可行吗?
我们怎样才能实现它?
注意:使用jenkins-slave作为服务不是一种选择,因为我们遇到了其他安全访问问题.
我下载最新的JMeter 4,
作为远程测试的一部分
要在远程节点中运行JMeter,请通过运行JMETER_HOME/bin/jmeter-server(unix)或JMETER_HOME/bin/jmeter-server.bat(windows)脚本在要运行的所有计算机上启动JMeter服务器组件.
我尝试在Windows 7中执行jmeter-server.bat并得到以下错误:
Server failed to start: java.rmi.server.ExportException: Listen failed on port:
0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (The system cannot find
the file specified)
An error occurred: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (The system cannot find
the file specified)
errorlevel=1
Run Code Online (Sandbox Code Playgroud)
似乎缺少文件rmi_keystore.jks.(我在JMeter文件夹中找不到它)
在JMeter 3.3中,jmeter-server.bat正在工作.
编辑1
在我执行create-rmi-keystore.bat
它之后创建了rmi_keystore.jks,但是我得到了其他错误:
Server failed to start: java.rmi.server.ExportException: Listen failed on port:
0; nested exception is:
java.io.IOException: java.security.UnrecoverableKeyException: Cannot rec
over key
An error occurred: …
Run Code Online (Sandbox Code Playgroud) 完整错误:
Warning: Unsafe statement written to the binary log using statement format
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an
auto-increment column after selecting from another table are unsafe because
the order in which rows are retrieved determines what (if any) rows will be
written. This order cannot be predicted and may differ on master and the
slave.
Run Code Online (Sandbox Code Playgroud)
尝试从Django运行原始SQL时,我似乎只是遇到此错误.如果我从MySQL CLI客户端运行SQL,我不会得到相同的错误.这是SQL:
UPDATE picture p
JOIN (
SELECT @inc := @inc + 1 AS new_weight, id
FROM (SELECT @inc …
Run Code Online (Sandbox Code Playgroud) 目前,我正在使用Vagrant 1.4.3与运行Unix(Centos)的VirtualBox一起用于我的开发服务器(使用MariaDB).
我自己没有设置盒子(因此我对设置它的知识有限)我基本上想做以下(如果可能的话)...
请注意,我可以理解,执行此操作的完整说明可能超出了StackOverflow的范围.
基本上我想:
例如,假设"数据库1"具有端口3306并且将是主设备,而"数据库2"具有端口4406将是从设备.我希望对数据库1所做的任何更改都自动"推送"到数据库2.
我以前从来没有这样做过.
关于此事的任何建议都会受到赞赏,我认为我不是唯一一个与mysql-replication斗争的人:)
如果它有帮助 - 我目前的流浪文件如下所示:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Config Github Settings
github_username = "ACMEINC"
github_repo = "vagrant"
github_tag = "0.11"
github_path = "https://raw.github.com/#{github_username}/#{github_repo}/#{github_tag}/"
# Server Configuration
# Set a local private network IP address.
# See http://en.wikipedia.org/wiki/Private_network for explanation
# You can use the following IP ranges:
# 10.0.0.1 - 10.255.255.254
# 172.16.0.1 - 172.31.255.254
# 192.168.0.1 - 192.168.255.254
server_ip = "192.168.30.10" …
Run Code Online (Sandbox Code Playgroud) database master-slave database-replication vagrant vagrantfile
我想在Erlang中编写一个主从应用程序.我正在考虑从架构中需要的以下内容:
当主设备停止时,从设备不应该死,而是在主设备停机时尝试重新连接
如果远程节点没有自动连接或者它们已经关闭(可能是OTP中的管理员行为),则master应自动启动远程节点
是否存在面向OTP的行为?我知道我可以启动远程节点,slave:start_link()
我可以监视节点erlang:monitor()
,但我不知道如何将其纳入gen_server
行为.
正如你所看到的,哈德逊网站上的链接已经死了.
因此,我希望能够一步一步地设置一个带有Linux主服务器的windows slave.
我设法在Windows机器上设置hudson,但是我如何链接从机报告回主机并从主机启动构建以在Windows从机上运行.
基本上主站/从站之间的数据流是如何实现的,我知道这可以完成,但是没有明确说明这样做的在线文档.
我很感激你能给出的答案.
谢谢,麻烦您了.
master-slave ×10
database ×2
java ×2
mysql ×2
erlang ×1
erlang-otp ×1
hudson ×1
jenkins ×1
jmeter ×1
jmeter-4.0 ×1
jms ×1
keystore ×1
mongodb ×1
mysqlbinlog ×1
replication ×1
rmi ×1
rpc ×1
solr ×1
vagrant ×1
vagrantfile ×1