nacos+seata+springcloud

1、linux下nacos安装

1-1、下载安装包

官网(https://nacos.io/zh-cn/docs/quick-start.html

下载地址(https://github.com/alibaba/nacos/releases/

下载示例

1-2、解压安装包

将压缩包放到相应的目录下进行解压,解压:

tar -zxvf nacos-server-2.0.0.tar.gz

解压完成后的nacos文件

1-3、编辑相应配置

vim /nacos/conf/application.properties


1-4、初始化数据库

我是用Navicat客户端连接数据库,执行/nacos/conf目录下nacos-mysql.sql文件,进行数据库初始化

进入bin目录,cd /nacos/bin

启动nacos命令(-m standalone 指定启动模式为单机版):          

sh startup.sh -m standalone


查看日志 

tail -500f /nacos/logs/start.out



默认端口为8848,在application.aproperties中可以配置。

centos7给防火墙开发8848端口:

firewall-cmd --zone=public --add-port=8848/tcp --permanent 

重新载入防火墙:

firewall-cmd --reload

访问nacos控制台,http://192.168.232.128:8848/nacos ( http://ip:8848/nacos),用户名密码均为:nacos


关闭nacos命令,bin目录下执行

./shutdown.sh



2、seata安装

2-1、软件下载

下载地址 https://github.com/seata/seata/releases

tar -xvf seata-server-1.4.1.tar.gz

2-2、修改目录下 conf/registry.conf 配置

vim conf/registry.conf


registry {

  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa

  type = "nacos"    // 这里修改成nacos

  loadBalance = "RandomLoadBalance"

  loadBalanceVirtualNodes = 10

  nacos {

    application = "seata-server"    // nacos注册时的服务名

    serverAddr = "192.168.232.128"    // nacos地址

    group = "SEATA_GROUP"

    namespace = ""    // 默认public

    cluster = "default"

    username = "nacos"

    password = "nacos"

  }

}

config {

  # file、nacos 、apollo、zk、consul、etcd3

  type = "nacos"

  nacos {

    serverAddr = "192.168.232.128"

    namespace = ""

    group = "SEATA_GROUP"

    username = "nacos"

    password = "nacos"

  }

}

2-3、修改conf目录下file.conf配置

vim conf/file.conf

2-4、修改conf目录下registry.conf配置

vim conf/registry.conf

2-5、初始化表

创建seata数据库

-- -------------------------------- The script used when storeMode is 'db' --------------------------------

-- the table to store GlobalSession data

CREATE TABLE IF NOT EXISTS `global_table`

(

    `xid`                      VARCHAR(128) NOT NULL,

    `transaction_id`            BIGINT,

    `status`                    TINYINT      NOT NULL,

    `application_id`            VARCHAR(32),

    `transaction_service_group` VARCHAR(32),

    `transaction_name`          VARCHAR(128),

    `timeout`                  INT,

    `begin_time`                BIGINT,

    `application_data`          VARCHAR(2000),

    `gmt_create`                DATETIME,

    `gmt_modified`              DATETIME,

    PRIMARY KEY (`xid`),

    KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),

    KEY `idx_transaction_id` (`transaction_id`)

) ENGINE = InnoDB

  DEFAULT CHARSET = utf8;

-- the table to store BranchSession data

CREATE TABLE IF NOT EXISTS `branch_table`

(

    `branch_id`        BIGINT      NOT NULL,

    `xid`              VARCHAR(128) NOT NULL,

    `transaction_id`    BIGINT,

    `resource_group_id` VARCHAR(32),

    `resource_id`      VARCHAR(256),

    `branch_type`      VARCHAR(8),

    `status`            TINYINT,

    `client_id`        VARCHAR(64),

    `application_data`  VARCHAR(2000),

    `gmt_create`        DATETIME(6),

    `gmt_modified`      DATETIME(6),

    PRIMARY KEY (`branch_id`),

    KEY `idx_xid` (`xid`)

) ENGINE = InnoDB

  DEFAULT CHARSET = utf8;

-- the table to store lock data

CREATE TABLE IF NOT EXISTS `lock_table`

(

    `row_key`        VARCHAR(128) NOT NULL,

    `xid`            VARCHAR(96),

    `transaction_id` BIGINT,

    `branch_id`      BIGINT      NOT NULL,

    `resource_id`    VARCHAR(256),

    `table_name`    VARCHAR(32),

    `pk`            VARCHAR(36),

    `gmt_create`    DATETIME,

    `gmt_modified`  DATETIME,

    PRIMARY KEY (`row_key`),

    KEY `idx_branch_id` (`branch_id`)

) ENGINE = InnoDB

  DEFAULT CHARSET = utf8;

CREATE TABLE `undo_log` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `branch_id` bigint(20) NOT NULL,

  `xid` varchar(100) NOT NULL,

  `context` varchar(128) NOT NULL,

  `rollback_info` longblob NOT NULL,

  `log_status` int(11) NOT NULL,

  `log_created` datetime NOT NULL,

  `log_modified` datetime NOT NULL,

  `ext` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`id`) USING BTREE,

  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

2-6、在seata目录下创建config.txt文件

touch config.txt

注意 service.vgroup_mapping.${your-service-gruop}=default,中间的 ${your-service-gruop} 为自己定义的服务组名称,SpringBlade默认为service-name-group的格式。

若服务名为blade-demo,则这里配置的 ${your-service-gruop} 为blade-demo-group

比如截图中的两个服务,分别是gateway-fescar-service和api-admin-fescar-service,他们对应的配置如下

config.txt内容根据seata版本获取,地址:https://github.com/seata/seata/tree/1.4.1/script/config-center

2-7、创建导入脚本nacos-config.sh

在seata目录下创建script文件夹

mkdir script

创建导入脚本nacos-config.sh

cd script

vim nacos-config.sh

nacos-config.sh脚本内容,根据seata版本自行下载,地址: https://github.com/seata/seata/tree/1.4.1/script/config-center/nacos

给脚本赋予执行权

chmod +x /nacos-config.sh

执行脚本

sh nacos-config.sh

执行成功可以看到配置列表

注意:
  执行.sh脚本时出现$’\r’: 未找到命令,

原因

  是因为命令直接从windows 复制过来导致的

解决

  yum install dos2unix

  dos2unix **.sh 进行转换

  再次执行即可

2-8、启动seata

cd /seata/bin

sh seata-server.sh -h 192.168.232.128 -p 8091 &

注:ip地址为127.0.0.1时默认在nacos注入内网ip,导致外网无法访问

启动成功如图所示



3、springcloud配置nacos+seata

3-1、创建项目

pom.xml加入以赖

<properties>

    <java.version>1.8</java.version>

    <nacos.version>2.1.3.RELEASE</nacos.version>

    <spring.cloud.seata.version>2.1.0.RELEASE</spring.cloud.seata.version>

    <seata-all.version>1.4.1</seata-all.version>

    <druid.version>1.1.10</druid.version>

</properties>

</dependencyManagement>

    </dependencies>

         <dependency>

            <groupId>com.alibaba.cloud</groupId>

            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

            <version>${nacos.version}</version>

        </dependency>

        <dependency>

            <groupId>com.alibaba.cloud</groupId>

            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

            <version>${nacos.version}</version>

        </dependency>

        <dependency>

            <groupId>com.alibaba.cloud</groupId>

            <artifactId>spring-cloud-alibaba-seata</artifactId>

            <version>${spring.cloud.seata.version}</version>

        </dependency>

        <dependency>

            <groupId>io.seata</groupId>

            <artifactId>seata-all</artifactId>

            <version>${seata-all.version}</version>

        </dependency>

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid-spring-boot-starter</artifactId>

            <version>${druid.version}</version>

        </dependency>

    </dependencies>

</dependencyManagement>

配置项目application.yml

spring:

  cloud:

    alibaba: 

        seata: 

            tx-service-group: apiadmin-service-group 

    nacos:

      discovery:

        server-addr: 192.168.232.128:8848

        group: SEATA_GROUP

        ip: 192.168.232.128

nacos:

  group: SEATA_GROUP

  namespace: public

  # 配置中心地址

  server-addr: 127.0.0.1:8848

  seata:

    application: seata-server

    tx-service-group: my_test_tx_group

seata:

  enabled: true

  application-id: ${spring.application.name}    // 当前应用模块名称

  tx-service-group: ${nacos.seata.tx-service-group}

  enable-auto-data-source-proxy: true

  config:

    # 指明类型

    type: nacos

    nacos:

      server-addr: ${nacos.server-addr}

      namespace: ${nacos.namespace}

      group: ${nacos.group}

      username: "nacos"

      password: "nacos"

  registry:

    type: nacos

    nacos:

      application: ${nacos.seata.application}

      server-addr: ${nacos.server-addr}

      namespace: ${nacos.namespace}

      group: ${nacos.group}

      username: "nacos"

      password: "nacos"



4、docker-compose运行springcloud

4-1、docker-compose安装

Linux

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases

运行以下命令以下载 Docker Compose 的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。

将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

docker-compose --version

cker-compose version 1.24.1, build 4667896b

4-2、Dockerfile定义

FROM java:8

RUNmkdir/microservice

WORKDIR /microservice

ADD /register-center-1.0.jar /microservice/

EXPOSE8761

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/microservice/register-center-1.0.jar"]

说明:

FROM java:8

        FROM 指定基于的基础镜像。必须在第一行,本例中是基于Java 8作为基础镜像的。

RUN mkdir /microservice

        RUN 执行shell命令。本例中是用于创建microservice目录。

WORKDIR /microservice

       WORKDIR 为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。

ADD /register-center-1.0.jar /microservice/

       ADD 复制指定位置的程序包到容器的指定位置。本例中是将位于该Dockerfile同一目录下的springCloudEureka-1.0.jar复制到容器的/microservice/目录下。

EXPOSE 8761

       EXPOSE 暴露容器的端口,供外部使用。本例中是只注册中心服务springCloudEureka的端口,并确保对外能够访问。

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", ……]

        ENTRYPOINT 配置容器启动后只需的命令。本例中是启动Java程序。

4-3、docker-compose.yml定义

这个脚本中定义了一次性启停上述三个服务,并实现服务间的通信,脚本内容如下:

version: '3'

services:

   #注册中心

   #自定义的服务名称

   register-center: 

    #镜像名称

    image: register-center:v1

    #容器名称

    container_name: register-center

    #容器down掉后,会自动重启

    restart: always

    #挂载一个目录或者一个已存在的数据卷容器。格式为宿主机目录:容器内目录   

    volumes:

      - $PWD/register-center/register-center-1.0.jar:/microservice/

    #映射端口。格式为宿主机端口:容器端口

    ports:

      - "8761:8761"

    #容器启动后,执行的命令

    command: java -Djava.security.egd=file:/dev/./urandom -jar /microservice/register-center-1.0.jar


   #配置中心

   config-center: 

    image: config-center:v1

    container_name: config-center

    restart: always

    volumes:

      - $PWD/config-center/config-center-1.0.jar:/microservice/

    ports:

      - "8888:8888"

    command: java -Djava.security.egd=file:/dev/./urandom -jar /microservice/config-center-1.0.jar

    depends_on:

      - register-center 

    links:

      - register-center:register-center


   #网关服务

   gateway: 

    image: gateway:v1

    container_name: gateway

    restart: always

    volumes:

      - $PWD/gateway/gateway-1.0.jar:/microservice/

    ports:

      - "8111:8111"

    command: java -Djava.security.egd=file:/dev/./urandom -jar /microservice/gateway-1.0.jar

    depends_on:

      - register-center

      - config-center

    links:

      - register-center:register-center

      - config-center:config-center

4-4、编译、运行

将各个打包好的服务jar包 、Dockerfile脚本、 docker-compose.yml上传至docker服务器上,我是存放在如下结构的目录下,具体依个人习惯而定。


编译镜像

[docker@docker register-center]$ docker build -t gateway:v1 .      // 注意最后的 . 一定要加上

Sending build context to Docker daemon 44.31MB

Step 1/6 : FROM java:8

 ---> d23bdf5b1b1b

Step 2/6 : RUN mkdir /microservice

 ---> Running in fcf4af033ac5

 ---> c0cf16047e86

Removing intermediate container fcf4af033ac5

Step 3/6 : WORKDIR /microservice

 ---> cc1fae4f23dc

Removing intermediate container d6fd78d760a9

Step 4/6 : ADD /register-center-1.0.jar /microservice/

 ---> ee8d0db56843

Removing intermediate container dd5b20c5e72c

Step 5/6 : EXPOSE 8761

 ---> Running in 46ae28623bd1

 ---> d02692f9c49c

Removing intermediate container 46ae28623bd1

Step 6/6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /microservice/register-center-1.0.jar

 ---> Running in cf63f2ca01af

 ---> 51431eb470e5

Removing intermediate container cf63f2ca01af

Successfully built 51431eb470e5

Successfully tagged register-center:v1


运行

 在docker-compose.yml目录下,执行docker-compose up -d命令后台启动。

[root@localhost server-bomeiyi]# ll

总用量 4

-rw-r--r--. 1 root root 749 4月  16 17:41 docker-compose.yml

drwxrwxrwx. 4 root root  57 4月  16 17:59 images

[root@localhost server-bomeiyi]# docker-compose up -d

docker-compose 命令

启停命令

docker-compose up -d 全部后台启动

docker-compose stop xxx 停止某一个服务

docker-compose stop 停止所有服务

docker-compose start xxx启动某一个服务

docker-compose restart xxx 重启某一个服务

docker-compose stop xxx && docker-compose up -d --build xxx   // 停止某个服务并重新打包某个镜像重新启动某个服务

其他命令

docker-compose config 查看当前yml文件中的所有配置

docker-compose rm xxx 删除某一个服务(容器)

docker-compose rm 删除所有服务(容器)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容