linux部署nacos-单机/集群

1.下载nacos

这个我就不赘述了,下载nacos地址 https://nacos.io/zh-cn/

2.上传并解压nacos

先切换到/usr/local目录

cd /usr/local

新建nacos目录

mkdir nacos

将nacos包通过xftp或其它扔进/usr/local/nacos, 并解压

tar -zxvf nacos-server-1.4.1.tar.gz

目录展示

[root@hecs-406672 nacos]# tar -zxvf nacos-server-1.4.1.tar.gz
nacos/LICENSE
nacos/NOTICE
nacos/target/nacos-server.jar
nacos/conf/
nacos/conf/1.4.0-ipv6_support-update.sql
nacos/conf/schema.sql
nacos/conf/nacos-mysql.sql
nacos/conf/application.properties.example
nacos/conf/nacos-logback.xml
nacos/conf/cluster.conf.example
nacos/conf/application.properties
nacos/bin/startup.sh
nacos/bin/startup.cmd
nacos/bin/shutdown.sh
nacos/bin/shutdown.cmd
[root@hecs-406672 nacos]# ls
nacos nacos-server-1.4.1.tar.gz
[root@hecs-406672 nacos]#

3. 进入bin目录, 启动nacos

cd nacos/bin/

nacos单机模式启动命令

sh startup.sh -m standalone

启动成功日志

[root@hecs-406672 bin]# sh startup.sh -m standlone
/usr/local/jdk1.8/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Djava.ext.dirs=/usr/local/jdk1.8/jre/lib/ext:/usr/local/jdk1.8/lib/ext -Xloggc:/usr/local/nacos/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos/nacos/plugins/health,/usr/local/nacos/nacos/plugins/cmdb -Dnacos.home=/usr/local/nacos/nacos -jar /usr/local/nacos/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/usr/local/nacos/nacos/conf/ --logging.config=/usr/local/nacos/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /usr/local/nacos/nacos/logs/start.out
[root@hecs-406672 bin]# 

出现报错

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalStoragePersistServiceImpl': Invocation of init method failed; nested exception is java.lang.RuntimeException: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:139)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:413)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1761)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319)

 


    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1276)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1196)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:595)
    ... 146 common frames omitted
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
    at com.alibaba.nacos.config.server.service.datasource.DynamicDataSource.getDataSource(DynamicDataSource.java:60)
    at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.init(ExternalStoragePersistServiceImpl.java:133)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
    ... 158 common frames omitted
Caused by: java.lang.RuntimeException: [db-load-error]load jdbc.properties error
    at com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceServiceImpl.init(ExternalDataSourceServiceImpl.java:109)
    at com.alibaba.nacos.config.server.service.datasource.DynamicDataSource.getDataSource(DynamicDataSource.java:55)
    ... 166 common frames omitted

看到这个报jdbc的错误我们可以尝试将nacos的内置数据库改成公共的mysql数据库

4. 配置mysql连接

先在nacos的conf文件里找到nacos-mysql.sql并导入到自己的数据库

[root@hecs-102947 nacos1]# cd conf/
[root@hecs-102947 conf]# ls
1.4.0-ipv6_support-update.sql  application.properties  application.properties.example  cluster.conf  nacos-logback.xml  nacos-mysql.sql  schema.sql
[root@hecs-102947 conf]# 

 

进入nacos/conf文件夹找到application.properties

编辑application.properties

vim application.properties

这是放开的mysql配置,ip换成数据库的ip

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=你的用户
db.password=你的密码

再切换到bin目录进行单机模式启动

[root@hecs-406672 bin]# ./startup.sh -m standalone
/usr/local/jdk1.8/bin/java  -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/local/jdk1.8/jre/lib/ext:/usr/local/jdk1.8/lib/ext -Xloggc:/usr/local/nacos/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos/nacos/plugins/health,/usr/local/nacos/nacos/plugins/cmdb -Dnacos.home=/usr/local/nacos/nacos -jar /usr/local/nacos/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/usr/local/nacos/nacos/conf/ --logging.config=/usr/local/nacos/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /usr/local/nacos/nacos/logs/start.out

查看端口是否正常启动

[root@hecs-406672 bin]# netstat -tunlp | grep 8848
tcp6       0      0 :::8848                 :::*                    LISTEN      42515/java          
[root@hecs-406672 bin]# 

可以看到我们的nacos 8848端口已经启动, 然后我们在浏览器访问

默认用户名/密码是nacos/nacos

 

登录进来并写入一个测试配置, 右上角+号可以新增配置

 nacos集群搭建

这是nacos官网推荐的集群搭建架构

这里slb我们可以用nginx做负载转发, 因服务器有限,准备做一个伪nacos集群

1.配置nacos基本文件

先在/usr/local上创建nacos目录并上传包解压

[root@hecs-406672 nacos]# ls
nacos  nacos-server-1.4.1.tar.gz
[root@hecs-406672 nacos]# pwd
/usr/local/nacos
[root@hecs-406672 nacos]# 

找到application.properties文件并配置好,这里配置mysql为统一的存放地址

server.servlet.contextPath=/nacos
### Default web server port:
server.port=8849

#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false

### Specify local server's IP:
# nacos.inetutils.ip-address=


#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
 spring.datasource.platform=mysql

### Count of DB:
 db.num=1

### Connect URL of DB:
 db.url.0=jdbc:mysql://1.117.219.170:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
 db.user.0=root
 db.password.0=12345678

然后这里的port端口设为8849,后面两个集群nacos准备设为8850,8851

2. 配置nacos集群配置

里面有个cluster.conf.example需改成cluster.conf

将cluster.conf配置修改

#it is ip
#example
192.168.16.101:8847
192.168.16.102
192.168.16.103

换成自己的集群配置

#it is ip
#example
123.60.81.50:8849
123.60.81.50:8850
123.60.81.50:8851

配置好了以后将nacos复制成三份将application.properties里的server.port端口改成对应的

[root@hecs-406672 nacos]# ls
nacos1  nacos2  nacos3  nacos-server-1.4.1.tar.gz
[root@hecs-406672 nacos]# 

切换到bin目录并执行./startup.sh命令启动nacos

[root@hecs-406672 bin]# ls
logs  shutdown.cmd  shutdown.sh  startup.cmd  startup.sh  work
[root@hecs-406672 bin]# pwd
/usr/local/nacos/nacos1/bin
[root@hecs-406672 bin]# ./startup.sh 

集群启动日志

[root@hecs-406672 bin]# ./startup.sh 
/usr/local/jdk1.8/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos/nacos1/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Djava.ext.dirs=/usr/local/jdk1.8/jre/lib/ext:/usr/local/jdk1.8/lib/ext -Xloggc:/usr/local/nacos/nacos1/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos/nacos1/plugins/health,/usr/local/nacos/nacos1/plugins/cmdb -Dnacos.home=/usr/local/nacos/nacos1 -jar /usr/local/nacos/nacos1/target/nacos-server.jar  --spring.config.additional-location=file:/usr/local/nacos/nacos1/conf/ --logging.config=/usr/local/nacos/nacos1/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /usr/local/nacos/nacos1/logs/start.out

我启动的是8849这个端口,然后看下集群节点状态

可以看到8849的节点状态是正常的,然后另外两个节点是我没有启动的原因

 

若出现内存不足的问题,可适当将-server后的jvm内存分配参数调小,系统默认的是:

-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m

这个可以编辑startup.sh

#===========================================================================================
# JVM Configuration
#===========================================================================================
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"

可以看到单机启动内存为512,集群启动内存所需为2g,因为我这是测试服务器将其调小

全部启动类似这样,所有节点都是正常的

 集群虽然搭建好了但如果通过访问其中一个服务ip+端口那集群就显的有些多余了,所以我们还需要一个nginx

我用的是已经搭建好的nginx,所以直接看nacos的集群转发配置

upstream cluster {
     server 123.60.85.50:8849;
     server 123.60.85.50:8850;
     server 123.60.85.50:8851;
 }

server {
     listen       8840;
     server_name  localhost;
    
     location / {
         proxy_pass http://cluster;
     }
}

启动nginx

./nginx
重载命令
./nginx -s reload

在浏览器访问nacos集群界面

 

 

至此nacos单机,集群模式搭建告一段落

posted @ 2022-12-06 20:11  马革皮  阅读(170)  评论(0编辑  收藏  举报