我是傀儡的新手,但很快就把它捡起来.今天,我在尝试运行以下内容时遇到了一个问题:
$ puppet agent --no-daemonize --verbose --onetime
**err: Could not request certificate: getaddrinfo: Name or service not known
Exiting; failed to retrieve certificate and waitforcert is disabled**
Run Code Online (Sandbox Code Playgroud)
似乎代理不知道连接到哪个服务器.我可以指定--server在命令行上,但是这将是对我没有用的,当这个运行在生产一个守护进程,所以相反,我在/etc/puppet/puppet.conf像这样指定服务器名称:
[main]
server = puppet.<my domain>
Run Code Online (Sandbox Code Playgroud)
我这样做有一个DNS条目puppet.<my domain>,如果我dig puppet.<my domain>,我看到了正确的名称解析.
我已阅读所有的傀儡文档指出代理尝试在连接到一个木偶大师puppet在默认情况下,你的选择是主机文件弄虚作假或做正确的事情,在DNS中创建一个CNAME,并相应修改puppet.conf,我有完成.
那我错过了什么?任何帮助是极大的赞赏!
在 TCP 连接的客户端,我尝试尽可能地重用已建立的连接,以避免每次需要连接时进行拨号的开销。从根本上来说,它是连接池,尽管从技术上讲,我的池大小恰好是一。
我遇到的问题是,如果连接空闲足够长的时间,另一端就会断开连接。我尝试使用类似以下内容来保持连接处于活动状态:
err = conn.(*net.TCPConn).SetKeepAlive(true)
if err != nil {
fmt.Println(err)
return
}
err = conn.(*net.TCPConn).SetKeepAlivePeriod(30*time.Second)
if err != nil {
fmt.Println(err)
return
}
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。事实上,它导致我的连接更快关闭。我很确定这是因为(在 Mac 上)这意味着在 30 秒后开始探测连接运行状况,然后以 30 秒的间隔探测 8 次。 服务器端一定不支持 keepalive,所以在 4 分 30 秒后,客户端断开连接。
我可能无法做任何事情来无限期地保持空闲连接,如果有某种方法让我至少检测到连接已关闭,以便我可以无缝地用新连接替换它,那绝对没问题。唉,即使阅读了所有文档并在博客圈寻求帮助后,我在 go 中也找不到任何方法来查询 TCP 连接的状态。
一定有办法的。有谁知道如何实现这一点?非常感谢任何这样做的人!
编辑:
理想情况下,我想学习如何用纯 go 来处理这个低级问题,而不使用第三方库来完成这个任务。当然,如果有一些图书馆可以做到这一点,我不介意被指出它的方向,这样我就可以看到他们是如何做到这一点的。