1. 程式人生 > >使用外網訪問阿里雲伺服器ZooKeeper

使用外網訪問阿里雲伺服器ZooKeeper

1.阿里雲ECS安裝ZooKeeper

由於參加了阿里雲推薦有禮活動,買了一臺阿里云云伺服器ECS。

JDK安裝完成後首先安裝的是ZooKeeper3.4.10,由於是一臺機器,使用的是偽分散式安裝,參見ZooKeeper偽分散式環境搭建及命令列使用

但是ZooKeeper安裝配置完成後,啟動卻報錯,報錯日誌如下,其中*.*.*.*表示外網IP地址,solang

表示設定的外網IP和主機名的對映

2018-04-09 14:11:56,122 [myid:1] - INFO  [solang/*.*.*.*:3887:QuorumCnxManager$Listener@739] - My election bind port: solang/*.*.*.*:3887
2018-04-09 14:11:56,123 [myid:1] - ERROR [solang/*.*.*.*:3887:QuorumCnxManager$Listener@763] - Exception while listening
java.net.BindException: Cannot assign requested address (Bind failed)
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind
(AbstractPlainSocketImpl.java:387) at java.net.ServerSocket.bind(ServerSocket.java:375) at java.net.ServerSocket.bind(ServerSocket.java:329) at org.apache.zookeeper.server.quorum.QuorumCnxManager$Listener.run(QuorumCnxManager.java:742) 2018-04-09 14:11:57,123 [myid:1] - INFO [solang/*.*.*.*:
3887:QuorumCnxManager$Listener@776] - Leaving listener 2018-04-09 14:11:57,124 [myid:1] - ERROR [solang/*.*.*.*:3887:QuorumCnxManager$Listener@778] - As I'm leaving the listener thread, I won't be able to participate in leader election any longer: solang/*.*.*.*:3887 2018-04-09 14:11:59,140 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@588] - Cannot open channel to 2 at election address solang/*.*.*.*:3888 java.net.SocketTimeoutException: connect timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562) at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:538) at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452) at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433) at java.lang.Thread.run(Thread.java:748)

將雲伺服器的/etc/hosts檔案外網IP地址修改為內網IP地址,或者ZooKeeper配置檔案的地址修改為localhost,重新啟動ZooKeeper,這樣ZooKeeper能正常啟動。

[[email protected] ~]$ vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.19.83.240 solang

但是外部機器使用ECS外網IP就不能連線操作ZooKeeper了,解決方案見下

2.阿里雲ECS外網不能連線訪問ZooKeeper解決

1.進入阿里雲ECS例項控制檯
進入ECS控制檯
2.選擇更多-安全組配置
選擇更多-安全組配置
3.選擇配置規則
選擇配置規則
4.選擇新增安全組規則
選擇新增安全組規則
5.新增安全組規則

可根據需要選擇協議型別及設定對應埠範圍,為了省事,我選擇協議型別為全部。點選確定,安全組規則設定完成。
新增安全組規則

這樣Windows或MAC機器就能使用ECS提供的外網IP訪問到ZooKeeper了。

3.解決使用外網IP和主機名的對映ZooKeeper啟動報錯

使用外網IP和主機名對映的配置會報最開始的錯誤,解決方案如下:

1.ZooKeeper的配置檔案zoo.cfg要加引數quorumListenOnAllIPs=true

2.需要進入ECS控制檯配置安全組規則,偽分散式ZooKeeper使用到的埠都需要在規則內

設定完成後啟動ZooKeeper,發現啟動成功,而且Windows或MAC機器也能使用ECS提供的外網IP訪問到ZooKeeper了。

本文參考:
解決阿里雲伺服器只能內網訪問,外網訪問不了
zookeeper叢集無法正確啟動