在我的环境中,以独立模式运行 mesos-slave、mesos-master marathon 和 mesos-dns。 我将 mysql 应用程序部署到 marathon 以作为 docker 容器运行。
MySql 应用配置如下。
{
"id": "mysql",
"cpus": 0.5,
"mem": 512,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "mysql:5.6.27",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 3306,
"hostPort": 32000,
"protocol": "tcp"
}
]
}
},
"constraints": [
[
"hostname",
"UNIQUE"
]],
"env": {
"MYSQL_ROOT_PASSWORD": "password"
},
"minimumHealthCapacity" :0,
"maximumOverCapacity" : 0.0
}
然后我部署名为 mysql 客户端的应用程序。 Mysql 客户端应用程序需要连接到 mysql 应用程序。
mysql 应用程序配置如下。
{
"id": "mysqlclient",
"cpus": 0.3,
"mem": 512.0,
"cmd": "/scripts/create_mysql_dbs.sh",
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "mysqlclient:latest",
"network": "BRIDGE",
"portMappings": [{
"containerPort": 3306,
"hostPort": 0,
"protocol": "tcp"
}]
}
},
"env": {
"MYSQL_ENV_MYSQL_ROOT_PASSWORD": "password",
"MYSQL_PORT_3306_TCP_ADDR": "mysql.marathon.slave.mesos.",
"MYSQL_PORT_3306_TCP_PORT": "32000"
},
"minimumHealthCapacity" :0,
"maximumOverCapacity" : 0.0
}
我的 mesos-dns config.json。如下
{
"zk": "zk://127.0.0.1:2181/mesos",
"masters": ["127.0.0.1:5050"],
"refreshSeconds": 60,
"ttl": 60,
"domain": "mesos",
"port": 53,
"resolvers": ["127.0.0.1"],
"timeout": 5,
"httpon": true,
"dnson": true,
"httpport": 8123,
"externalon": true,
"listener": "127.0.0.1",
"SOAMname": "ns1.mesos",
"SOARname": "root.ns1.mesos",
"SOARefresh": 60,
"SOARetry": 600,
"SOAExpire": 86400,
"SOAMinttl": 60,
"IPSources": ["mesos", "host"]
}
I can ping with service name mysql.marathon.slave.mesos. from host machine. But when I try to ping from mysql docker container I get host unreachable. Why docker container cannot resolve hsot name?
我尝试将 dns 参数设置为应用程序。但它不起作用。
编辑:
我可以 ping mysql.marathon.slave.mesos。来自主/从主机。但是我无法从 mysqlclient docker 容器 ping 通。它说无法访问。我该如何解决这个问题?
最佳答案
不确定您的实际问题是什么,通过猜测我认为您想知道如何将 Mesos DNS 服务名称解析为 MySQL 客户端的实际端点。
如果是这样,你可以使用我的 mesosdns-resolver从 Mesos DNS 获取端点的 bash 脚本:
mesosdns-resolver.sh -sn mysql.marathon.mesos -s <IP_ADDRESS_OF_MESOS_DNS_SERVER>
您可以在您的 create_mysql_dbs.sh
脚本(无论它做什么)中使用它来获取运行您的 mysql
应用程序的实际 IP 地址和端口。
你可以传入一个环境变量,比如
"MYSQL_ENV_SERVICE_NAME": "mysql.marathon.mesos"
然后在图像/脚本中像这样使用它
mesosdns-resolver.sh -sn $MYSQL_ENV_SERVICE_NAME -s <IP_ADDRESS_OF_MESOS_DNS_SERVER>
另外,请注意 Marathon 不一定是运行一次性操作的正确工具(我假设您使用第二个应用程序初始化您的数据库)。 Chronos 将是更好的选择。
关于mysql - Apache Mesos、MESOS-DNS、MARATHON 和 Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35693417/