我们有一个独立的火花,有2个主人。我们正在使用领事来发现我们所有的服务。因此,而不是写入工作程序配置,如:
fun callIt(name: String) {
val member = this::class.members.first { it.name == name }
member.callBy(mapOf(member.instanceParameter!! to this))
}
spark://172.40.101.1:7077,172.40.102.2:7077
问题是,如果例如172.40.101.1处于待机状态且172.40.102.2处于活动状态,并且在第一次工作人员将获得101.1,那么它将不会再次尝试。好像它是静态的。
现在我可以使用dig和linux解析,但我的问题是:
答案 0 :(得分:1)
这个问题有两个部分。首先是如何识别活动(或待机)火花?第二个是如何使用该信息连接到正确的信息?
如果你可以通过web url get或者一个处于活动状态的进程操作,以及哪个处于备用状态,你可以根据它来创建服务/运行状况检查。谷歌搜索了一下,我看到火花领事服务,这是健康检查:
{
"service": {
"name": "spark-master",
"port": 7077,
"checks": [
{
"script": "ps aux | grep -v grep | grep org.apache.spark.deploy.master.Master",
"interval": "10s"
}
]
}
}
此运行状况检查通过脚本查找java进程。如果找到该进程,则运行状况检查成功。此特定运行状况检查无论是活动还是待机,都不关心。您需要在具有不同名称的服务下进行运行状况检查,以确定spark节点是否处于活动状态。我对火花一无所知,但在网上看到我发现了这个spark-submit命令。如果这个命令按我想象的那样工作,那么这可能就是诀窍:
{
"service": {
"name":"spark-active"
,"port":7077
,"checks":[{"script": "curl --silent http://127.0.0.1:8080/ | grep '<li><strong>Status:</strong> ALIVE</li>'| wc -l | awk '{exit (\$0 - 1) }'"
}
}
然后你将使用:
进行连接spark://spark-active.service:7077
您的健康检查也可以通过http连接。这里记录了领事服务检查:https://www.consul.io/docs/agent/checks.html
-g