寫在前面的文章
- SpringCloudAlibaba快速入門(1)基於Nacos實現服務註冊與發現
- SpringCloudAlibaba快速入門(2)基於Nacos構建分佈式配置中心
- SpringCloudAlibaba快速入門(3)Nacos配置多環境管理
在之前的文章中,我們已經學習了 Nacos 作爲服務註冊中心及配置中心,與 Spring Cloud 體系結合的基礎使用方法,其中 Nacos 都是以單機模式運行,數據默認保存在本地的內嵌數據庫中,用於學習這沒有問題,但是生產環境中基於高可用原則則需要對 Nacos 進行集羣部署,那麼數據保存本地則會出現一致性問題。爲了解決這個問題,Nacos 採用了集中式存儲的方式來支持集羣化部署,目前只支持 MySQL 存儲。
實戰
第一步:安裝 Mysql 數據庫,版本要求:5.6.5+
目前不支持 8.0 以上版本,可以通過修改源碼解決
拉取鏡像
docker pull mysql:5.7
創建 my.cnf,用於設置字符集以及 sql_mode
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
sql-mode="ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
啓動鏡像
docker run --name mysql57 -p 3306:3306 \
-v /data/mysql/my.cnf:/etc/my.cnf \
-v /data/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
進入容器
docker exec -it mysql57 bash
使用 root 帳號登錄
mysql -u root -p
創建用戶並分配權限
CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
flush privileges;
第二步:初始化數據庫
初始化腳本在 Nacos 程序包下的 conf
目錄下的 nacos-mysql.sql
文件
第三步:配置 Nacos
修改 Nacos 程序包下 conf/application.properties
文件,添加 MySQL 數據源配置
文件中有示例,只需要打開註釋並修改即可
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3316/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=test
db.password=123456
打完收工。重新訪問 http://localhost:8848/nacos/
,並根據之前學習的 基於Nacos構建分佈式配置中心
中的步驟可以再重新操作一篇,
同時可以登錄數據庫查看,驗證數據是否成功入庫。
擴展
Nacos 數據持久化支持 mysql8.0
Nacos 默認使用的 mysql 驅動版本爲 5.1.34
,因爲版本太低,所以導致不支持 mysql8.0 版本,只能通過修改源碼重新打包的方式進行處理。