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

搭建SprinfCloud-Consul报错解决方案

      • 搭建步骤
        • 1、解压
        • 2、在consul目录下创建conf、data/consulData文件夹
        • 3、把basic.json文件放到conf目录。
        • 4、开启端口:及其它相关端口
          • 报错过程
        • 5、重载防火墙:firewall-cmd --reload
        • 6、启动consul:
          • 报错过程
            • 为解决此问题作出的尝试
        • 7、浏览器登陆:http://XXX.XX.XX.XXX:8900,即安装成功
        • 8、配置系统变量
        • 9、配置开机自启动
        • 10、执行命令重新加载/运行
        • 11、如果重新加载配置文件,则直接运行consul reload即可,consul leave同理

搭建步骤

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的时候看到的地址)
搭建Consul报错Failed to start RPC layer: listen tcp XX.XXX.XXX.XXX:XXXX:: bind: cannot assign requested_第1张图片
这一次运行成功了,输出如上

但是呢,发生了一个问题:由于是直接跑的指令,所以我要执行下一条指令时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同理

你可能感兴趣的:(Java,Consul配置及报错处理)