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单机,集群模式搭建告一段落