搭建Consul報錯Failed to start RPC layer: listen tcp XX.XXX.XXX.XXX:XXXX:: bind: cannot assign requested

搭建步驟

1、解壓

unzip -o -d /usr/springcloud/consul consul_1.6.0_linux_amd64.zip

2、在consul目錄下創建conf、data/consulData文件夾

3、把basic.json文件放到conf目錄。

此處貼上basic.json文件內容

{
 
    "ports": {
 
		    "http": 8900,
		 
		    "dns": 8601,
		 
		    "grpc": 8401,
		 
		    "serf_lan": 8311,
		    
		    "serf_wan": 8312,
		 
		    "server": 8310
 
    }
}

4、開啓端口:及其它相關端口

firewall-cmd --zone=public --add-port=8900/tcp --permanent

報錯過程

在這步的時候遇到問題
FirewallD is not running

對於此問題的解決方法:

 1)查看防火牆狀態
 指令:systemctl status firewalld
 執行結果:
 ?.firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
 Active: inactive (dead)
 Docs: man:firewalld(1)
 由此可見,防火牆當前是dead狀態,即防火牆未開啓
 2)通過systemctl start firewalld開啓防火牆,沒有任何提示即開啓成功。
 3)再次通過systemctl status firewalld查看firewalld狀態
 執行結果:
 ?.firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
 Active: active (running) since Fri 2019-11-22 09:51:57 CST; 8s ago
 Docs: man:firewalld(1)
 Main PID: 3779 (firewalld)
CGroup: /system.slice/firewalld.service
?..3779 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Nov 22 09:51:56 VM_0_8_centos systemd[1]: Starting firewalld - dynamic firewall daemon…
Nov 22 09:51:57 VM_0_8_centos systemd[1]: Started firewalld - dynamic firewall daemon.
顯示防火牆已開啓
 4)再次執行當前指令,顯示success表示執行成功。

5、重載防火牆:firewall-cmd --reload

6、啓動consul:

./consul agent -dev -ui -node=node1 -client 0.0.0.0 -bind=XXX.XX.XX.XXX -config-dir /usr/springcloud/consul/conf/ -data-dir /usr/springcloud/consul/data/consulData/

報錯過程

在執行第6步的時候出現如下問題:

Error starting agent: Failed to start Consul server: Failed to start RPC layer: listen tcp XX.XXX.XXX.XXX:XXXX: bind: cannot assign requested address
2019/11/21 11:43:16 [INFO] agent: Exit code: 1

爲解決此問題作出的嘗試

1、查看端口狀態

#ssh XX.XXX.XXX.XXX -p XXXX
返回如下:
ssh: connect to host XX.XXX.XXX.XXX port XXXX: No route to host

2、通過搜索No route to host問題,去/etc/hosts配置了一下hosts文件並重啓了網絡(然而沒卵用)

#vim /etc/hosts
#service network restart
Restarting net work (via systemctl): [ OK ]

3、通過搜索下一個回答,進行如下嘗試

答案告訴我,
出現No route to host 的時候,有如下幾種可能:
1、對方的域名確實不通(然而我發現直接ping域名能通)
2、本機自己開了防火牆
3、本機的etc/hosts 裏面沒有配置本機的機器名和ip (可能性最大)

於是關閉防火牆

我配置了本機的機器名和ip,同樣沒卵用
我想起來了,本機的網絡ip不是靜態的,
使用ifconfig查看ip地址確實不是我配的那個本機ip
那麼
我要不要配一個靜態ip呢?
嘗試配了一個靜態ip,然後雲服務器就。。連。不。上。了。。。
重裝了系統,接着搞
這次進行第6步的時候綁定了內網地址(就是ifcfg的時候看到的地址)
在這裏插入圖片描述
這一次運行成功了,輸出如上

但是呢,發生了一個問題:由於是直接跑的指令,所以我要執行下一條指令時Ctrl+c退出時,consul就停了。
如上問題的解決方法是:在運行consul的指令後面加上&符,將指令轉爲後臺執行

7、瀏覽器登陸:http://XXX.XX.XX.XXX:8900,即安裝成功

當我配置成內網的時候,我輸入內網ip和外網ip訪問發現並不能訪問
向上級彙報之後,上級登陸管理員賬號,將雲服務器的相應端口號的訪問權限打開了就好了

8、配置系統變量

指令:vim /etc/profile
編輯系統變量文件,配置如下內容
export CONSUL_HOME=consul目錄
export PATH=$PATH:CONSUL_HOME
配置完成之後使用環境變量配置生效指令
指令:source /etc/profile

待配置文件生效之後,可以查看安裝的consul版本號等信息
指令:consul --version
輸出:
Consul v1.6.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

9、配置開機自啓動

1)編輯start.sh
vim /consul目錄地址/start.sh

添加如下:

#!/bin/bash
/usr/springcloud/consul/consul agent -dev -ui -node=node1 -client 0.0.0.0 -bind=內網ip -config-dir /consul目錄地址/conf/ -data-dir /consul目錄地址/data/consulData/
2)給start.sh 授權

chmod -R 777 /consul目錄地址/start.sh

3)編輯文件/lib/systemd/system/consul.service
vim /lib/systemd/system/consul.service
添加如下:
[Unit]
Description=consul
After=network.target

[Service]
ExecStart=/consul目錄地址/start.sh
KillSignal=SIGTERM

[Install]
WantedBy=multi-user.target

10、執行命令重新加載/運行

重新加載
systemctl daemon-reload

開機運行
systemctl enable consul

運行
systemctl start consul

11、如果重新加載配置文件,則直接運行consul reload即可,consul leave同理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章