Nacos高可用集羣搭建+MySQL持久化
之前講述了Nacos單機版的簡單安裝,詳情請參閱 Nacos之單機版安裝 或者參考 官網,本文將進一步搭建一個生產可用級別的Nacos高可用集羣,並使用MySQL數據庫實現數據的持久化。
架構圖
下面使官方推薦的搭建模式:
本文使用Nginx來承擔VIP的責任,複製負載均衡。
環境要求
- 64 bit JDK1.8+;
- 64 bit OS(本文CentOS 7.4);
- Maven 3.2+(不打包可不需要);
- 3個或以上的Nacos節點,3個以上才能構成集羣;
下載安裝包
請參閱Nacos之安裝,下載對應的安裝包,上傳至 /usr/local/src
,本文使用的1.1.4版本:
解壓後複製到/usr/local/nacos_cluster
,分別命名爲nacos1
,nacos2
,nacos3
:
[root@localhost src]# unzip nacos-server-1.1.4.zip
[root@localhost src]# cp nacos /usr/local/nacos_cluster/nacos1 -R
[root@localhost src]# cp nacos /usr/local/nacos_cluster/nacos2 -R
[root@localhost src]# cp nacos /usr/local/nacos_cluster/nacos3 -R
數據庫配置
真正生產環境建議至少主備模式,或採用高可用數據庫。具體可以參考這篇文章:MySQL高可用方案選型參考。本文主角是Nacos,這裏使用單機版MySQL。
新建數據庫nacos_config
,然後執行nacos/conf
目錄下的nacos-mysql.sql
,創建以下幾張表:
集羣配置
進入/usr/local/nacos_cluster1/nacos
,複製cluster.conf.example
爲cluster.conf
:
cp cluster.conf.example cluster.conf
修改cluster.conf
內容如下:
#it is ip
#example
192.168.0.14:8847
192.168.0.14:8848
192.168.0.14:8849
這裏特別注意下:這個IP不能寫127.0.0.1,要寫你的真實IP或者說要保證
hostname -i
命令後打印的結果是192.xxx.xxx.xxx
,如果不是請修改hosts,否則你服務註冊的時候會失敗,報錯如下:
java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([192.168.0.14:8800]) tried: failed to req API:192.168.0.14:8800/nacos/v1/ns/instance. code:503 msg: server is STARTING now, please try again later!
然後複製cluster.conf到nacos2和nacos3的conf下,當然你也可以分別去修改:
[root@localhost conf]# cp cluster.conf /usr/local/nacos_cluster/nacos2/conf/cluster.conf
[root@localhost conf]# cp cluster.conf /usr/local/nacos_cluster/nacos3/conf/cluster.conf
我們這裏在一臺機器上部署3個不同端口的Nacos節點。生產環境,建議多個主機。
修改nacos/conf
目錄下的application.properties
文件:
server.port=8847 # 這裏nacos1、naocs2、nacos3分別修改爲8847、8848、8849,不要重複了。
# 尾部追加以下內容
spring.datasource.platform=mysql # 使用MySQL方式持久化
db.num=1 # 這裏寶石几個數據庫實例,多個的話,下邊依次是`db.url.0`, `db.url.1` etc
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root # 用戶名
db.password=root # 密碼
如果啓動失敗,可能是內存不夠用的,比如我的虛擬機就只設置了1g,啓動的時候就報內存不夠分配的異常。可以進入
nacos1/bin
下,修改startup.sh
,調整爲合適的大小:
依次啓動3個Nacos節點:
[root@localhost nacos_cluster]# ./nacos1/bin/startup.sh
[root@localhost nacos_cluster]# ./nacos1/bin/startup.sh
[root@localhost nacos_cluster]# ./nacos1/bin/startup.sh
Output:
nacos is starting with cluster
nacos is starting,you can check the /usr/local/nacos_cluster/nacos1/logs/start.out
查看一下nacos節點個數:
[root@localhost nacos_cluster]# ps -ef|grep nacos|grep -v grep|wc -l
3
Nginx代理
安裝nginx這裏不再贅述,請自行Google搜索。
修改nginx的配置conf,添加一下內容:
upstream cluster{
server 127.0.0.1:8847;
server 127.0.0.1:8848;
server 127.0.0.1:8849;
}
server {
listen 8800;
server_name localhost;
location / {
proxy_pass http://cluster;
}
}
然後啓動或者刷新Nginx:
[root@localhost nginx]# ./sbin/nginx -s reload
ngx_http_fastdfs_set pid=11240
訪問測試
打開瀏覽器訪問:http://192.168.0.14:8800/nacos/ :
登錄(賬號密碼都是nacos),創建一個測試配置:
我們去數據庫查詢一下我們新添加的測試配置信息:
OK. 至此,Nacos集羣+MySQL持久化的搭建就完成了。
服務註冊發現測試
yml配置:
Nacos服務地址這裏配置Nginx負載均衡的地址,不用寫多個IP,這樣的好處是如果以後更換IP,只要Nginx那邊修改就好了,也可以配置成域名。這裏的Nginx就是充當了官方架構圖中的VIP角色,這樣也是官方推薦的模式。
server:
port: 8809
spring:
application:
name: cloud-alibaba-provider
cloud:
nacos:
server-addr: 192.168.0.14:8800 # 這裏配置Nginx負載均衡的地址,不用寫多個IP,這樣的好處是如果以後更換IP,只要Nginx那邊修改就好了,也可以配置成域名。這裏的Nginx就是充當了官方架構圖中的VIP角色,這樣也是官方推薦的模式。
啓動服務,訪問Nacos控制檯:
OK,已經註冊到nacos集羣了。
因個人能力有限,如果不足或錯誤之處,歡迎指正 ~