文章目錄
1.下載
- 下載地址[.tar.gz] https://github.com/alibaba/nacos/releases
解壓並移動
tar -zxvf nacos-server-1.1.4.tar.gz
mv nacos /usr/local
單機模式啓動
cd /usr/local/nacos/bin
sh startup.sh -m standalone
或啓動
bash startup.sh -m standalone
啓動時出現報錯
錯誤一
/usr/java/jdk1.8.0_181/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Djava.ext.dirs=/usr/java/jdk1.8.0_181/jre/lib/ext:/usr/java/jdk1.8.0_181/lib/ext:/usr/local/nacos/plugins/cmdb:/usr/local/nacos/plugins/mysql -Xloggc:/usr/local/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -Dnacos.home=/usr/local/nacos -Dloader.path=/usr/local/nacos/plugins/health -jar /usr/local/nacos/target/nacos-server.jar --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/usr/local/nacos/conf/ --logging.config=/usr/local/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/logs/start.out
查看/usr/local/nacos/logs/start.out,看文件中提示具體什麼錯誤
如報下面錯誤:
java.io.FileNotFoundException: /usr/local/nacos/conf/cluster.conf (沒有那個文件或目錄)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at com.alibaba.nacos.core.utils.SystemUtils.readClusterConf(SystemUtils.java:124)
at com.alibaba.nacos.core.listener.StartingSpringApplicationRunListener.logClusterConf(StartingSpringApplicationRunListener.java:141)
at com.alibaba.nacos.core.listener.StartingSpringApplicationRunListener.contextPrepared(StartingSpringApplicationRunListener.java:91)
at org.springframework.boot.SpringApplicationRunListeners.contextPrepared(SpringApplicationRunListeners.java:60)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:374)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.alibaba.nacos.Nacos.main(Nacos.java:33)
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.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593)
解決方案
- 由於啓動的默認由cluster改成了standalone單機啓動模式,但是啓動仍然是集羣模式啓動,並且拋出上述找不到cluster.conf文件
bash startup.sh -m standalone
錯誤二
systemctl start nacos.service
報如下錯誤:
nacos.service
Loaded: loaded (/usr/lib/systemd/system/nacos.service; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since 一 2019-10-28 22:31:25 CST; 19s ago
Process: 2847 ExecStart=/usr/local/nacos/bin/startup.sh -m standalone (code=exited, status=1/FAILURE)
10月 28 22:31:25 localhost.localdomainP1 startup.sh[2847]: which: no javac in (/usr/...
10月 28 22:31:25 localhost.localdomainP1 startup.sh[2847]: readlink: 缺少操作數
10月 28 22:31:25 localhost.localdomainP1 startup.sh[2847]: Try 'readlink --help' for...
10月 28 22:31:25 localhost.localdomainP1 systemd[1]: nacos.service: control process...1
10月 28 22:31:25 localhost.localdomainP1 startup.sh[2847]: dirname: 缺少操作數
10月 28 22:31:25 localhost.localdomainP1 startup.sh[2847]: Try 'dirname --help' for ...
10月 28 22:31:25 localhost.localdomainP1 systemd[1]: Failed to start nacos.service.
10月 28 22:31:25 localhost.localdomainP1 startup.sh[2847]: ERROR: Please set the JAV...
10月 28 22:31:25 localhost.localdomainP1 systemd[1]: Unit nacos.service entered fai....
10月 28 22:31:25 localhost.localdomainP1 systemd[1]: nacos.service failed.
解決方案
需要更改相應啓動文件的JDK配置
將如下三行註釋掉,並將第一行的配置修改爲JDK的位置。
如何找到JDK位置
whereis java
找到JDK的位置爲: /usr/java/jdk1.8.0_181
vim startup.sh
原文爲:
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
修改後
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java/jdk1.8.0_181
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
#[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
訪問web地址
curl http://127.0.0.1:8848/nacos/index.html
http://127.0.0.1:8848/nacos/index.html
登錄的用戶名和密碼默認的都是nacos
注意防火牆的端口8848
集羣
本例的安裝目錄爲/usr/local/nacos
參考鏈接: https://www.cnblogs.com/lhlucky/p/nacoscluster.html
1.配置 cluster.conf文件
- 在文件裏添加相關服務器IP,三臺機器都做相同的配置
cd /usr/local/nacos/conf
cp cluster.conf.example cluster.conf
vim cluster.conf
cluster.conf文件內容爲:
#it is ip
#example
#10.10.109.214
#11.16.128.34
#11.16.128.36
192.168.47.128:8848
192.168.47.129:8848
192.168.47.130:8848
2.創建數據庫
- 腳本位置 /usr/local/nacos/conf/nacos-mysql.sql
- 將腳本里的SQL語句直接導入既可
3.配置application.properties
cd /usr/local/nacos/conf
vim application.properties
增加內容爲:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.47.128:5186/nacos_config?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=cici
db.password=123123
4.分別啓動三臺服務器
cd /usr/local/nacos/bin
sh startup.sh
觀察日誌,看是否有異常打印【cat或者tailf命令】
- /usr/local/nacos/logs/nacos.log
- /usr/local/nacos/logs/naming-raft.log
- /usr/local/nacos/logs/start.out
啓動成功後訪問,觀察集羣
-
http://192.168.47.128:8848/nacos/index.html
-
http://192.168.47.129:8848/nacos/index.html
-
http://192.168.47.130:8848/nacos/index.html
5.遇到的問題一
5.1 mysql8問題
直接下載的穩定版本nacos編譯後的文件,不支持mysql8及其以上版本,本例中使用的爲1.1.4版本
-參考鏈接
https://www.cnblogs.com/gyli20170901/p/11245270.html
解決方案
- 下載nacos的源碼並更改mysql驅動的版本
5.1.1 下載地址
https://github.com/alibaba/nacos
5.1.2 修改
修改最外層pom.xml 中 mysql驅動版本,我這邊使用的是8.0.16
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
5.1.3 修改naming這個項目 com.alibaba.nacos.naming.healthcheck 包下的 MysqlHealthCheckProcessor 類的第24行導包爲
import com.mysql.cj.jdbc.MysqlDataSource;
5.1.4修改console項目下的配置文件
-由於mysql8及其以上版本需要帶時區,所以還需要修改 console這項目 resources/META-INF下 nacos-default.properties這個文件中的db.url
db.url.0=jdbc:mysql://11.162.196.161:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://11.163.152.91:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
5.1.5 打包
cmd命令窗口進入項目根目錄執行
mvn -Prelease-nacos clean install -U
5.1.6 打包完成後,再次安裝nacos,步驟按照上面安裝的說明
- 包的地址[根目錄\distribution\target]
5.1.7 再次修改application.properties配置文件
cd /usr/local/nacos/conf
vim application.properties
修改爲
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.47.128:5186/nacos_config?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=cici
db.password=123123
5.2 unable to find local peer: 192.168.47.128:8848
- 參考鏈接 https://www.wandouip.com/t5i278697/
java.lang.IllegalStateException: unable to find local peer: 172.16.26.250:8848, all peers: [120.79.167.88:8848, 119.23.104.130:8848, 47.101.47.127:8848]
at com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet.local(RaftPeerSet.java:224)
at com.alibaba.nacos.naming.monitor.PerformanceLoggerThread.collectMetrics(PerformanceLoggerThread.java:100)
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.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
2019-10-18 14:06:45,000 ERROR Unexpected error occurred in scheduled task.
因爲我部署的三臺服務器是虛擬機上的,屬於內網,都是在一個網段的。
解決方案
編輯啓動文件 /usr/local/nacos/bin/startup.sh
vim /usr/local/nacos/bin/startup.sh
依次修改三臺服務器的啓動文件
# 單機模式對應的啓動參數
if [[ "${MODE}" == "standalone" ]]; then
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
# 集羣模式對應的啓動參數
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"
# *新增以下參數設置本機ip地址*
JAVA_OPT="${JAVA_OPT} -Dnacos.server.ip=192.168.47.128"
fi
if [[ "${FUNCTION_MODE}" == "config" ]]; then
JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config"
elif [[ "${FUNCTION_MODE}" == "naming" ]]; then
JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming"
fi
修改之後再次啓動即可
#關閉服務
cd /usr/local/nacos/bin
./shutdown.sh
#啓動服務
sh startup.sh