如果已经能看到这边文章了,就证明你已经在linux环境部署好了nacos集群以及nginx已经代理nacos的8848端口了处理方案,只是java程序启动服务注册到服务中心nacos集群报错,启动时报错Connection is unregistered.或Client not connected,current status:STARTING。 本篇文章不在讲解如果搭建nacos集群了。
1. 在Nacos 2.x开发版本为了提高服务注册与发现管理,采用了gRPC协议。
因为Nginx对于gRPC不适合长连接的操作,如果使用Nginx实现gRPC代理,最终是无法完成所有微服务注册的。
采用Haproxy代理逐渐来实现Nacos集群管理。Haproxy是一个高可用组件,可以有效的实现集群服务节点的负载均衡以及基于TCP(第四层,类似LVS和Nginx) 和 HTTP(第七层,类似Nginx)应用的代理软件
重点:haproxy代理nacos集群的9848 grpc端口,需要用tcp协议
2.解决方案:
简单来说就是用nginx来带来nacos的8848端口,用haproxy来代理9848的grpc端口。
3.下载安装方式:
第一种:官方下载解压安装
https://www.haproxy.org
https://www.newbe.pro/Mirrors/Mirrors-HAProxy/
3.1解压haproxy源代码压缩包
tar -zxvf /tmp/haproxy-2.4.15.tar.gz -C /usr/local/src/
cd /usr/local/src/haproxy-2.4.15
3.2进行编译前缀配置,编译Haproxy源代码
make TARGET=custom ARCH=x86_64 PREFIX=/usr/local/haproxy
3.3 组件安装
make install PREFIX=/usr/local/haproxy
3.4 创建haproxy.cfg配置文件 (文件种的chroot 和pidfile路径是自己主机安装haproxy文件的位置)
vi /usr/local/haproxy/haproxy.cfg
文件内容类似下面
global #全局配置
log 127.0.0.1 local2 #启用日志
nbproc 1 #监控进程个数
maxconnrate 300 #进程每秒所能创建的最大连接数
maxcomprate 300 #压缩速率
maxsessrate 500 #进程每秒能创建的会话数量
chroot /var/lib/haproxy #Haproxy部署路径
pidfile /var/run/haproxy.pid #pid文件存储位置
maxconn 4000 #进程接收最大并发连接数
user haproxy #启动用户名
group haproxy #启动用户组
daemon # 后台模式运行
stats socket /var/lib/haproxy/stats # 开启统计socket
defaults
mode tcp #默认配置
log global #http处理模式
option dontlognull #不记录健康日志信息
option redispatch #允许重新分配session
option logasap #传输大文件时他日前记录日志
option tcplog #全局日志配置
option http-server-close
option forwardfor except 127.0.0.0/8
retries 3 #失败重试次数
timeout http-request 10s #http请求超时时间
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_stats
stats enable #启用管理控制台
bind 0.0.0.0:9999 #监控端口设置
mode http #管理控制台模式
log global #日志配置
maxconn 10
stats uri /admin #登录监控子路径配置
stats realm welcome \Haproxy #登录提示信息
stats auth admin:admin #登录账号密码
stats admin if TRUE #启动管理员模式
option httplog #http日志记录
stats refresh 30s #监控刷新时间
stats hide-version #隐藏统计页面上HAProxy的版本信息
frontend nacos_cluster
bind *:9848
mode tcp
log global
option tcplog
option dontlognull
option nolinger
maxconn 8000
timeout client 30s
default_backend nacos_cluster_nodes
backend nacos_cluster_nodes
mode tcp
server localhost.localdomain 192.168.0.120:19848 check
server localhost.localdomain 192.168.0.120:29848 check
server localhost.localdomain 192.168.0.120:39848 check
上面的localhost.localdomain是自己的主机名称
vi /etc/hostname 可以查看自己的主机名称
更改主机名称命令
vi /etc/hostname
#可以查看自己的主机名称
因为我这个域名是假的,所以需要在本机的hosts文件加一下
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.120 mycentos
reboot #重启
上面文件的注意点是:
- frontend 前端的mode、backend的mode 都是 是tcp协议。
- defaults的mode改成tcp, option 原本httplog 改成tcplog
3.6添加用户
useradd haproxy
3.7修改防火墙规则(如果是本机测试的话,可以直接关闭防火墙)
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --zone=public --add-port=9848/tcp --permanent
filewall-cmd reload
3.7启动
/usr/local/haproxy -f /usr/local/haproxy/haproxy.cfg
3.8 关闭
killall haproxy
3.9 查看haproxy代理的三个naocs的grpc端口的情况的控制台
192.168.0.120 是haproxy所在的linux虚拟机的ip地址
http://192.168.0.120:9999/admin
第二种 yum安装
安装教程 https://blog.csdn.net/qq_39009944/article/details/123633624?spm=1001.2014.3001.5501
至于yum安装不知道haproxy的运行和配置文件在哪里的话,可以用whereis haproxy来查看
[root@localhost usr]# whereis haproxy
haproxy: /usr/sbin/haproxy /etc/haproxy /usr/share/haproxy /usr/share/man/man1/haproxy.1.gz
/usr/sbin/haproxy 是运行命令,类似一个 .exe运行文件
启动命令为 systemctl start haproxy 或者 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg
配置文件内容为:(亲自测试过yum下载haproxy,来代理nacos2.x集群的grpc端口,文件内容可以放心使用)
global
log 127.0.0.1 local2 #全局配置
chroot /var/lib/haproxy #HAproxy部署路径
pidfile /var/run/haproxy.pid #pid文件存储位置
maxconn 4000 #进程接收最大并发连接数
user haproxy #启动用户名
group haproxy #启动用户组
daemon # 后台模式运行
stats socket /var/lib/haproxy/stats # 开启统计socket
# utilize system-wide crypto-policies
ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_stats
stats enable #启用管理控制台
bind 0.0.0.0:9999 #监控端口设置
mode http #管理控制台模式
log global #日志配置
maxconn 10
stats uri /admin #登录监控子路径配置
stats realm welcome \Haproxy #登录提示信息
stats auth admin:admin #登录账号密码
stats admin if TRUE #启动管理员模式
option httplog #http日志记录
stats refresh 30s #监控刷新时间
stats hide-version #隐藏统计页面上HAProxy的版本信息
frontend nacos_cluster
bind *:9848
mode tcp
default_backend nacos_cluster_nodes
backend nacos_cluster_nodes
balance roundrobin
mode tcp
server mycentos 192.168.0.120:19848 check
server mycentos 192.168.0.120:29848 check
server mycentos 192.168.0.120:39848 check
以下是java程序成功把服务注册进nacos集群中效果图
springboot 以及springcloud 以及springcloud alibaba版本选型
版本选型参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E