SpringCloud Alibaba微服務實戰九 - Seata 容器化

file

前言

經過前兩篇文章咱們使用了Seata做爲分佈式事務組件,並使用Nacos做爲Seata的註冊配置中心,本篇文章咱們將Seata部署在容器Docker上。固然了若是你們對Docker不是很熟悉的話或者僅對Docker感興趣能夠翻看我以前爲你們準備的兩篇文章。html

Seata容器化

在使用Docker部署服務的時候咱們應該將配置文件外部化,這樣方便後續修改,在修改完成後經過 -v 指令將文件掛載進容器。接下來咱們一步一步來實現容器化過程。java

  • 啓動一個Seata的臨時容器。
    docker run --rm --name seata-server -d -p 8091:8091 seataio/seata-server:latest
    帶了--rm參數,這樣在中止容器後容器會自動刪除,節省很多時間。
  • 將配置文件導出到宿主機上
    容器的配置文件位於/seata-server/resources下,咱們將其導出在宿主機指定目錄上
    docker cp a67c272193c4:/seata-server/resources /app/cloud/seata/conf
  • 修改配置文件registry.conf
    根據上篇文章說的使用Nacos做爲註冊配置中心只須要修改registry.conf文件,修改完成後的結果以下
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd三、sofa
  type = "nacos"
  nacos {
    serverAddr = "10.0.10.48:8848"
    namespace = ""
    cluster = "default"
  }
}
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  nacos {
    serverAddr = "10.0.10.48:8848"
    namespace = ""
  }
}複製代碼

  • Seata配置推送到Nacos
    Seata容器中並無將Nacos的配置文件放進去,還須要你們先下載Seata-Server安裝包,而後將其推送到Nacos。具體操做請參照上篇文章,此處再也不贅述。
  • 中止容器
    docker stop a67c272193c4
    因爲以前帶了--rm參數,因此容器會被自動刪除。
  • 從新啓動容器
docker run --name  seata-server  \
        -d -p 8091:8091 \
        -e SEATA_CONFIG_NAME=file:/root/seata-config/registry  \
                 -e SEATA_IP=172.31.0.207 \
        -v /app/cloud/seata/conf:/root/seata-config  \
        -v /app/cloud/seata/logs:/root/logs \
        seataio/seata-server複製代碼

指定容器註冊IP,將宿主機中修改後的配置文件掛載到容器中。mysql

  • 客戶端改造
    只須要將registry.conf文件放在微服務的resources下便可,上篇文章已經改造完成。
  • 測試
    依次啓動服務account-service,product-service,order-service,觀察Seata日誌
    file

三個服務都已連上Seata。執行業務測試觀察是否正常提交與回滾。git

Seata db模式

file模式爲單機模式,全局事務會話信息內存中讀寫並持久化本地文件root.data,性能較高;db模式爲高可用模式,全局事務會話信息經過db共享,相應性能差些。考慮到Seata的擴展和高可用,咱們這節來修改相關配置讓Seata支持 db模式github

  • 創建數據庫
    創建數據庫seata_config,並從https://github.com/seata/seata/blob/develop/script/server/db/mysql.sql下載建表語句,導入數據庫。
    file
  • 修改store.mode調整爲db
    在nacos配置文件中將store.mode這一DATA ID調整爲db
    file
    這個也能夠經過環境變量 STORE_MODE=db指定
  • 修改數據庫鏈接
    nacos中修改store.db的相關配置
store.db.url=jdbc:mysql://xxxxxx:3306/seata_config?useUnicode=true
store.db.user=root
store.db.password=xxxxxx複製代碼

  • 重啓容器
docker run  --name  seata-server \
    -d -p 8091:8091 \
    -e SEATA_CONFIG_NAME=file:/root/seata-config/registry  \
    -e SEATA_IP=172.31.0.207 \
    -v /app/cloud/seata/conf/resources:/root/seata-config  \
    -v /app/cloud/seata/logs:/root/logs/seata \
    seataio/seata-server複製代碼

啓動容器後重啓微服務,查看是否正常註冊,並執行業務測試觀察是否正常提交與回滾。fileredis

Docker-Compose 部署

關注這個系列文章的同窗應該知道咱們第一篇文章用了docker-compose部署了mysql、nacos、sentinel三個組件,這節咱們完善以前的nacos-base.yml,將seata也集成進去。有了前2節的基礎這個操做應該很簡單,編寫完成後完成的yml文件以下:sql

version: "3"
services:
  mysql:
    container_name: mysql
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - /app/cloud/mysql/data:/var/lib/mysql
    ports:
      - "3306:3306"
    restart: always

  nacos:
    image: nacos/nacos-server:1.1.4
    container_name: nacos
    environment:
      - PREFER_HOST_MODE=hostname
      - MODE=standalone
      - MYSQL_DATABASE_NUM=1
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_MASTER_SERVICE_HOST=mysql
      - MYSQL_MASTER_SERVICE_DB_NAME=nacos_config
      - MYSQL_MASTER_SERVICE_PORT=3306
      - MYSQL_MASTER_SERVICE_USER=root
      - MYSQL_MASTER_SERVICE_PASSWORD=123456
    volumes:
      - /app/cloud/nacos/logs:/home/nacos/logs
    ports:
      - "8848:8848"
    depends_on:
      - mysql
    restart: always


  sentinel:
    image: bladex/sentinel-dashboard:latest
    container_name: sentinel
    ports:
      - "8858:8858"
    restart: always

  seata:
    image: seataio/seata-server:latest
    container_name: seata
    ports:
      - "8091:8091"
    environment:
      - SEATA_CONFIG_NAME=file:/root/seata-config/registry
      - SEATA_IP=10.0.10.48
    volumes:
      - /app/cloud/seata/conf:/root/seata-config
      - /app/cloud/seata/logs:/root/logs
    restart: always複製代碼

咱們將此yml文件上傳至服務器,啓動docker-compose docker-compose -f nacos-base.yml up,啓動客戶端服務並執行業務測試觀察結果。docker

Seata環境變量

seata-server 支持如下環境變量:數據庫

  • SEATA_IP

可選, 指定seata-server啓動的IP, 該IP用於向註冊中心註冊時使用, 如eureka等服務器

  • SEATA_PORT

可選, 指定seata-server啓動的端口, 默認爲 8091

  • STORE_MODE

可選, 指定seata-server的事務日誌存儲方式, 支持db 和 file, 默認是 file

  • SERVER_NODE

可選, 用於指定seata-server節點ID, 如 1,2,3..., 默認爲 1

  • SEATA_ENV

可選, 指定 seata-server 運行環境, 如 dev, test 等, 服務啓動時會使用 registry-dev.conf 這樣的配置

  • SEATACONFIGNAME

可選, 指定配置文件位置, 如 file:/root/registry, 將會加載 /root/registry.conf 做爲配置文件

好了,各位朋友們,本期的內容到此就所有結束啦,若是這篇文章對你有所幫助的話請掃描下面二維碼加個關注。"轉發" 加 "在看",養成好習慣!
image.png

系列文章

歡迎掃碼關注微信公衆號或 我的博客

相關文章
相關標籤/搜索