日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)

發布時間:2025/3/15 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、docker啟動seata

  • 拉取鏡像
  • docker pull seataio/seata-server:latest
  • 第一次啟動seata,復制出其配置的相關文件
  • docker run --name seata-server -p 8091:8091 -d seataio/seata-server:latest

    復制出容器中的文件到容器外的目錄,我的是/mnt/seata

    docker cp seata-server:/seata-server/resources /mnt/seata
  • 到github的seata源碼庫弄來兩個文件,config.txt 、nacos/nacos-config.sh,這兩個文件,主要用于將seata
  • config.txt放在/mnt目錄下,內容如下:

    //該項修改為相應客戶端中spring.cloud.alibaba.seata.tx-service-group的值,有多個客戶端就添加多個 //例如在官方示例springcloud-nacos-seata中order-service和storage-service中spring.cloud.alibaba.seata.tx-service-group的值 //分別為order-service-group、storage-service-group,則需要將該項配置為service.vgroupMapping.order-service-group=default //和service.vgroupMapping.storage-service-group=default service.vgroupMapping.my_test_tx_group=default //事務日志存儲模式 store.mode=db //數據庫配置項 store.db.datasource=druid store.db.dbType=mysql //這里如果使用的mysql8以上的版本的話,那么配置com.mysql.cj.jdbc.Driver store.db.driverClassName=com.mysql.cj.jdbc.Driver //配置自己相應的url,user,password,注意,這里很重要,因為我的數據庫是在主服務上運行,而seata是跑在容器里面的,所以,ip地址要寫準確,寫localhost是訪問不了的,必須通過ifconfig的命令來查看主機的具體ip store.db.url=jdbc:mysql://172.17.0.16:3306/seata?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true store.db.user=root store.db.password=root

    關于docker連接容器外部的mysql的參考文章

    nacos-config.sh放在 /mnt/seata目錄下

    這兩個文件的作用:
    config.txt就是seata各種詳細的配置,執行 nacos-config.sh 即可將這些配置導入到nacos,這樣就不需要將file.conf和registry.conf放到我們的項目中了,需要什么配置就直接從nacos中讀取。
    更加詳細的配置參考官方文檔

    在nacos-config.sh所在的路徑下,輸入:

    sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 8464601b-24e6-4f02-ba7e-a2f43a698861 -u nacos -w nacos

    注:命令解析:-h -p 指定nacos的端口地址;-g 指定配置的分組,注意,是配置的分組;-t 指定命名空間id; -u -w指定nacos的用戶名和密碼,同樣,這里開啟了nacos注冊和配置認證的才需要指定。

    配置成功如下:

    nacos頁面:

    修改seata-sever/resources/下的file.conf和registry.conf文件

    因為我們要使用數據庫進行持久化,所以將file.conf修改如下

    修改registry.conf

    這里仍然要注意,如果nacos是用docker跑起來的,那么仍然要使用分配的虛擬網卡地址,而不是localhost
    使用下面命令查看

    iptables -t nat -nL --line-number

    然后刪除之前創建的seata的docker服務,重新使用自己配置好的掛載文件啟動seata

    docker run -d --restart always --name seata-server -p 8091:8091 -e SEATA_IP=服務器公網ip(不然回報以下錯誤) -v /mnt/seata/seata-server:/seata-server seataio/seata-server:latest


    而nacos集群里顯示的ip是遠程服務器里的ip,遠程服務自然無法訪問到


    必須讓運行seata的容器,綁定公網ip

    可以看到,nacos的服務列表里,已經有seata-server這個服務

    二、創建事務日志數據庫

    使用Seata的db模式需要創建相應的數據庫seata以及對應的表

    //全局事務表 global_table //分支子事務表 branch_table //全局鎖表 lock_table


    官方腳本地址

    三、客戶端配置注意點

  • 在客戶端配置中要注意的是,需要將registry.config文件放到resource目錄下,并與服務端保持一致。
  • spring.cloud.alibaba.seata.tx-service-group配置的值與服務端保持一致。
  • 客戶端數據庫配置:每個服務都需要有相應的業務表和undo_log表,腳本可以查看鏈接下的readme。
  • 四、容易踩到的坑及解決方法

  • Seata不同版本依賴關系,可以查詢官方文檔了解。
  • server端的配置service.vgroupMapping.my_test_tx_group=default,需要注意兩點:
    • 在1.1.0版本前后的命名方式不同,之前為service.vgroup_mapping.my_test_tx_group=default
    • my_test_tx_group為spring.cloud.alibaba.seata.tx-service-group的值,不然會報“no available service ‘null’ found, please make sure registry config”。
  • 使用容器部署時,配置nacos等注冊中心和配置中心地址時,不要默認使用容器IP。
  • 鏡像版本與客戶端版本保持一致。
  • 參考文章1
    參考文章2
    參考文章3

    總結

    以上是生活随笔為你收集整理的Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。