我是用vm虚拟机创建了三台虚拟服务机并建立了集群,在用java客户端去连zookeeper集群的时候报错:UnknowHostException,很明显,这是无法识别主机名,我的java客户端代码如下:
public class SimpleZkClient {
private ZooKeeper zk=null;
private final static String
****connectString="shizhan02:2181,shizhan03:2181,shizhan04:2181";****
private final static int sessionTimeout=2000 ;
/*
* zookeeper Connect
*/
@Before
public void initConnect() throws IOException{
zk = new ZooKeeper(connectString, sessionTimeout, new Watcher(){
@Override
public void process(WatchedEvent event) {
System.out.println("监听事件的类型:"+event.getType()+"--路径:"+event.getPath()+"--状态:" +
""+event.getState()+"--Wrapper:"+event.getWrapper());//wrapper:包装
//再获得下连接状态
States stat= zk.getState();
System.out.println("连接状态"+stat);
}});
}
可以看到我的connectString 连接地址是使用主机名的方式连接,我就思考可能出现问题的地方:
1.Linux服务器没有配置host,于是我输入命令:
cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.0.12 shizhan02
192.168.0.13 shizhan03
192.168.0.14 shizhan04
可以看到这里是没有问题的,我已经配置过主机名和ip之间的映射,三台服务器之间可以相互识别。
彼此之间也可以互相ping通。
既然Linux中没有问题,我就想,我的java客户端是在windowxp中运行的,是不是windows无法识别我Linux中的ip呢?
于是我打算在windows中配置下服务器的映射。
去到如下地址,找到hosts文件
C:\Windows\System32\drivers\etc
![我的etc目录](https://img-blog.csdn.net/20171231144105463?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwNjc4OTY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以看到,里面没有host文件,不用担心,自己新建一个日记文件,取名hosts就好了,同时将imhost.sam文件删除掉。在新建的hosts中配置映射内容:
192.168.0.12 shizhan02
192.168.0.13 shizhan03
192.168.0.14 shizhan04
保存并退出,即可。
好啦,再次运行,没问题啦。