CentOS 7环境下nacos集群的安装、部署及负载均衡

前置条件

nacos安装部署非常的简单,下面一起学习一下nacos的安装。初步了解一下nacos的安装过程。

上面基础环境奠定了以后开始做nacos集群的安装和部署工作。

下载nacos

根据官方推荐,目前推荐使用2.0.3稳定版本。下载地址:nacos在github上的下载地址

特别提醒:

这里有个坑需要规避,进入这个下载地址后,不要直接点击后面的zip或者tar.gz下载,需要点击对应版本号,进入详情页面,拉到底部下载,下载的包名是nacos-server-2.0.3.tar.gz。如果直接点击后面的zip或者tar.gz下载,下载的包是nacos-2.0.2.tar.gz,这个不是编译好的安装包。

上传nacos安装包到服务器上

  • 可以通过scp命令将nacos安装包上传到服务器上,命令如下:
scp D:\\nacos-server-2.0.3.tar.gz root@192.168.75.130:/usr/local
  • 解压nacos安装包:
tar -xvf nacos-server-2.0.3.tar.gz
  • 将名称改为nacos-8840
mv nacos nacos-8840

持久化数据库配置

  • 进入nacos-8840/cnof目录下,将Connect URL of DB修改为如下内容:
spring.datasource.platform=mysql
jdbc.DriverClassName=com.mysql.cj.jdbc.Driver ## 如果使用数据库是MySQL8,需要加上此驱动名,否则不用加
db.num=1
db.url.0=jdbc:mysql://192.168.75.128:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=123456
  • nacos-8840/conf目录下的nacos-mysql.sql文件复制到数据库所在的服务器内,创建名为nacos_config数据库,并在数据库内执行sql脚本文件;
## 复制文件到数据库所在服务器
scp nacos-mysql.sql root@192.168.75.128:/usr/local
## 创建数据库并执行脚本
mysql -uroot -p123456
create datasource nacos_config
use nacos_config
source /usr/local/nacos-mysql.sql

修改集群配置

  • nacos-8840/conf目录下的cluster.conf.example文件复制一份并重命名为cluster.conf,修改其内容如下:
## 复制并重命名
cp cluster.conf.example cluster.conf
## 修改内容,将文件内最后三行换成现有的集群ip和端口,如果超过3台依次向后加即可
vim cluster.conf
## 修改后如下:
192.168.75.130:8840
192.168.75.130:8850
192.168.75.130:8860
  • 修改application.properties文件,将server-port修改为8840
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8840

配置优化点

这个优化点在你的服务器性能较好的情况下,可以不做,我是在单台虚拟机里面部署三个nacos服务,资源紧张,修改一下此配置更放心,进入nacos-8840/bin目录,找到startup.sh文件,将文件中java堆栈的配置修改小一点,这里修改成128m,修改内容JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m",具体修改如下:

## 修改前的内容
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
## 修改后的内容
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi

复制集群节点

  • 上面已经完成端口为8840节点的配置,接下来将nacos-8840复制两份出来,并重命名:
cp -R nacos-8840 nacos-8850
cp -R nacos-8840 nacos-8860
  • 修改88508860节点的配置,很简单,将application.properties文件中的server-port做对应的修改即可。

启动集群服务

  • 分别执行三个节点的startup.sh命令:
# 在/usr/local目录下执行
./nacos-8840/bin/startup.sh
./nacos-8850/bin/startup.sh
./nacos-8860/bin/startup.sh
  • 检查节点是否已经启动成功:
netstat -ano | grep 8840
netstat -ano | grep 8850
netstat -ano | grep 8860

配置nginx负载均衡

  • 主要配置负载和监听,配置内容如下:
## 在http下配置负载
upstream nacoscluster {        
    server 127.0.0.1:8840;
    server 127.0.0.1:8850;
    server 127.0.0.1:8860;
}
http{
	## 在server内配置监听
	server {
		listen       8848;     ## 监听8848端口                 
		server_name  localhost;                                        
		#charset koi8-r;                                                        
		#access_log  logs/host.access.log  main;                                      
		location / {                            
		    #root   html;                       
		    #index  index.html index.htm;       
		    proxy_pass http://nacoscluster;   ## 代理到负载上      
		}
	}
}
stream {
	upstream nacosgrpc {
		server 127.0.0.1:9840;
    	server 127.0.0.1:9850;
    	server 127.0.0.1:9860;
	}
	server {
		listen 9848; # 这里监听的端口是和http内监听的端口对应+1000得到的(8848+1000)
		proxy_pass nacosgrpc;
	}
}
  • 配置完成后启动或者重启nginx即可。

访问nacos页面

在浏览器中输入:http://192.168.75.130:8848/nacos,会弹出登录页面,默认用户名和密码都是nacos,到此集群部署大功告成。

存在的坑点

官方解释

nacos2.0版本相比1.x新增了gRPC的通信方式,因此需要增加两个端口,新增端口在配置的主端口(server.port)基础上,进行一定的偏移量自动生成。偏移规则:

端口与主端口偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端服务发起连接和请求
98491001客户端gRPC请求服务端端口,用于服务间同步等

改动引起的变化说明

因为这个改动,在一台机器上部署nacos集群时,不能将运行端口设置为连续端口,比如:884088418842,否则会发生端口冲突。

运行在8840端口nacos服务实际上会占用884089408941三个端口;

运行在8841端口nacos服务实际上会占用884189418942三个端口;

运行在8842端口nacos服务实际上会占用884289428943三个端口。

另一个问题

在官方文档中,还有一个很重要的说明,是加粗的内容:
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。
正常Nacos都是使用集群的模式,需要使用nginx做转发,这里就需要在nginx配置文件中增加一些配置,如果继续使用nacos 1.x的配置,在启动项目的时候会出现报错。详细说明如下。

代码中nacos的配置信息
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.75.130:8848

这个配置是在nacos 1.x的时候是没有问题的,但是如果你nacos更新到了2.x,也没有修改nginx配置文件中grpc的转发,这里就会出现启动项目报错问题。报错信息:Request nacos server failed。这里提到,但是这里没有需要修改的,需要修改的在nginx内。

nginx需要做的修改

首先是要求你的nginx中包含stream模块,如何检查你的nginx是否安装了stream模块呢,用下面的命令:

/usr/local/nginx/sbin/ningx -V

打印出来的信息如下:

nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

看下面的config arguments信息,如果包含--with-stream,那么就没有问题,stream模块已经包含在内。我这里就是没有这个模块,需要安装。采用我这种模式安装,首先注意一定要把nginx内的配置文件备份一下。

# 第一步,注意这里的--prefix=/usr/local/nginx根据你的实际情形来
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
# 第二步
make && make install

知道为啥让你备份了吧,这两步执行相当于重新装了一下。安装好以后,执行/usr/local/nginx/sbin/ningx -V命令,输出的结果就有--with-stream啦。
到现在就可以修改nginx的配置啦,其实在上面的安装过程已经体现了,在这里重点再提一下。配置内容如下。需要注意的是stream需要在http外,和http同级。

stream {
	upstream nacosgrpc {
		server 127.0.0.1:9840;
    	server 127.0.0.1:9850;
    	server 127.0.0.1:9860;
	}
	server {
		listen 9848; # 这里监听的端口是和http内监听的端口对应+1000得到的(8848+1000)
		proxy_pass nacosgrpc;
	}
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值