linux下nacos安裝

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章