一首先是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的提示了
我完结
留着以后当资料查看!!!