nacos-docker集群(nginx配合转发),seata-docker

一首先是nacos  

打开https://hub.docker.com/ 搜索nacos

拉取  docker pull   

拉取配置文件  git clone https://github.com/nacos-group/nacos-docker.git

上配置  修改上面拉取的配置文件中example 里面的 cluster-embedded.yaml 文件 我目前配置三台集群,需要添加的朋友直接后面添加修改(没试过行不行)

version: "3"
services:
  nacos1:
    hostname: nacos1
    container_name: nacos-8848-docker
    image: nacos/nacos-server:latest
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9555:9555"
    env_file:
      - ../env/nacos-embedded.env
    restart: always

  nacos2:
    hostname: nacos2
    image: nacos/nacos-server:latest
    container_name: nacos-8849-docker
    volumes:
      - ./cluster-logs/nacos2:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    env_file:
      - ../env/nacos-embedded.env
    restart: always
  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:latest
    container_name: nacos-8850-docker
    volumes:
      - ./cluster-logs/nacos3:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
    env_file:
      - ../env/nacos-embedded.env
    restart: always

其中env下面 nacos-embedded.env 文件的配置

PREFER_HOST_MODE=hostname
EMBEDDED_STORAGE=mysql
MYSQL_SERVICE_HOST=192.168.7.43
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root

注意  hostname  代表上面配置nacos1,nacos2,nacos3  如果是PREFER_HOST_MODE=ip  那么上面就要配置ip

文件编辑完成

启动走起

docker-compose -f cluster-embedded.yaml up -d   启动有点慢

另外 docker-compose 的安装

安装docker-compose
1 执行下面命令
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose 

有的朋友可能有问题,反正我是正常的  如果有问题,可以去度娘查询另一种安装方法,我就不说了

现在开始就配nginx 了

nginx-docker

一样的套路

docker pull 

docker run -p 80:80 --name nginx-docker --restart=always -e TZ="Asia/Shanghai" -v /home/nginx/1.19.1/www:/usr/share/nginx/html -v /home/nginx/1.19.1/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/1.19.1/logs:/var/log/nginx nginx:latest
如果映射失败,先别映射  

先运行起来 在  docker cp xxx-docker:/xxx/xxx/xxx

将配置文件拷贝的木操作系统  删除容器,在运行映射,应该就问题解决

 

nginx 配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on

    #keepalive_timeout  0;
    keepalive_timeout  65;

#gzip  on;

    upstream cluster{
        server 服务器内网ip:8848;
        server 服务器内网ip:8849;
        server 1服务器内网ip:8850;
        }


    server {
        listen       80;
        #server_name  localhost;    
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #error_page   500 502 503 504  /50x.html;
        
        location = /50x.html {
            root   html;
        }        

        location / {
           #root   /usr/share/nginx/html;
           #index  index.html index.htm;
          # proxy_pass http://www.baidu.com;
           proxy_pass   http://cluster;
        }
   }   

}

访问 公网ip+nacos

 

一切正常

至此 nacos的集群搞定

二  seata-docker

 

1 seata-docker配置 注 SEATA_IP 设置为局域网ip只能再局域网内使用,公网ip所有网络都可用
2 docker run --name seata-docker -p 8091:8091 -d  seataio/seata-server:latest
3 docker cp seata-docker:/seata-server  /home/seata-docker/seata
4 docker stop seata-docker
5 docker rm seata-docker
6 docker run -d --restart always  --name  seata-docker -p 8091:8091  -v /home/seata-docker/seata:/seata-server -e SEATA_IP=XXX.XXX.XXX.XXX -e SEATA_PORT=8091 seataio/seata-server:latest
7 cd /home/seata-docker/seata/resources

上面的步骤完伙以后

上配置resources 下面的 file.conf

## transaction log store, only used in seata-server
store {
  ## store mode: file、db、redis
  mode = "db"  ## 此处要修改

  ## file store property
  file {
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }

  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/seata"  ##此处要修改
    user = "root"  ##此处要修改
    password = "root"  此处要修改
    minConn = 5
    maxConn = 100
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }

  ## redis store property  
  redis {
    host = "127.0.0.1"
    port = "6379"
    password = ""
    database = "0"
    minConn = 1
    maxConn = 10
    queryLimit = 100
  }

 

配好以后 继续 registry.conf 文件的配置

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"  ##此处要修改

  nacos {
    application = "seata-server"
    serverAddr = "XXX.XXX.XXX.XXX:8848"  ##注册中心的地址 
    group = "SEATA_GROUP"  ##这个自己定一般是默认
    namespace = "ba7e2617-50f6-467d-965d-ce6c605d3a62"  这个看自己
    cluster = "my-seata"  这个也看自己
    username = "nacos"
    password = "nacos"
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = 0
    password = ""
    cluster = "default"
    timeout = 0
  }
  zk {
    cluster = "default"
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    cluster = "default"
    serverAddr = "127.0.0.1:8500"
  }
  etcd3 {
    cluster = "default"
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    application = "default"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    cluster = "default"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"  ##此处要修改

  nacos {
    serverAddr = "XXX.XXX.XXX.XXX:8848"   配置中心地址
    namespace = "ba7e2617-50f6-467d-965d-ce6c605d3a62"  看自己
    group = "SEATA_GROUP"  看自己
    username = "nacos"   
    password = "nacos"
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    appId = "seata-server"
    apolloMeta = "http://192.168.1.204:8801"
    namespace = "application"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

好了 重启seata-docker

一切正常

现在就是项目来测试了

写个demo  我是自己项目直接上

 

项目配置

server:
  port: 8080

seata:
  enable-auto-data-source-proxy: true
  application-id: ${spring.application.name}
  tx-service-group: xxx-group
  registry:
    type: nacos
    nacos:
      application: seata-server
#      server-addr: localhost:8848
      server-addr: XXX.XXX.XXX.XXX:80   #我这里用的是公网的地址所以本地可以连接
      cluster: my-seata
      username: nacos
      password: nacos
      namespace: ba7e2617-50f6-467d-965d-ce6c605d3a62
  config:
    type: nacos
    nacos:
#      server-addr: localhost:8848
      server-addr: XXX.XXX.XXX.XXX:80
      group: SEATA_GROUP
      username: nacos
      password: nacos
      namespace: ba7e2617-50f6-467d-965d-ce6c605d3a62
  service:
    grouplist:
      default: XXX.XXX.XXX.XXX:8091  这里这个default是tx-service-group: xxx-group  这个自定的值
#      default: 127.0.0.1:8091   
    vgroupMapping:
      default: my-seata  这里的default 是 xxx-group 的值  
spring:
  application:
    name: xxx
  main:
    allow-bean-definition-overriding: true
  cloud:
    alibaba:
      seata:
        tx-service-group: xxx-group
    nacos:
      discovery:
        server-addr: XXX.XXX.XXX.XXX:8848
      #        server-addr: 127.0.0.1:8848
      config:
        server-addr: XXX.XXX.XXX.XXX:8848
#        server-addr: 127.0.0.1:8848
        file-extension: yml
        name: application

management:
  endpoints:
    web:
      exposure:
        exclude: '*'

凡是 XXX的都自己的东西,我就不把我的服务器给出来了

我这个项目的配置中心也是用nacosd的   没用的可以忽略

好了  运行起来看看

eb - 2020-07-30 19:24:18,622 [main] INFO  com.alibaba.nacos.client.naming [] [] [] [] [] - [LISTENER] adding SEATA_GROUP@@seata-server with my-seata to listener map
web - 2020-07-30 19:24:18,624 [main] INFO  i.s.c.r.n.NettyClientChannelManager [] [] [] [] [] - will connect to XXX.XXX.XXX.XXX:8091
web - 2020-07-30 19:24:18,624 [main] INFO  i.s.c.r.netty.RmNettyRemotingClient [] [] [] [] [] - RM will register :jdbc:mysql://127.0.0.1:3306/BasicdataDevTest
web - 2020-07-30 19:24:18,630 [main] INFO  i.s.c.rpc.netty.NettyPoolableFactory [] [] [] [] [] - NettyPool create channel to transactionRole:RMROLE,address:XXX.XXX.XXX.XXX:8091,msg:< RegisterRMRequest{resourceIds='jdbc:mysql://127.0.0.1:3306/BasicdataDevTest', applicationId='basic-data-service', transactionServiceGroup='basic-data-service-group'} >
web - 2020-07-30 19:24:20,775 [main] INFO  i.s.c.r.netty.RmNettyRemotingClient [] [] [] [] [] - register RM success. client version:1.3.0, server version

一切正常  

注意的是  seata版本一定对应好  我目前用最新的  1.3  包一定要1.3的  我用1.2 的  就是no servers XXXX的提示了

我完结  

留着以后当资料查看!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值