2.3 安装Docker服务

        1. 关闭SELINUX服务。路径 /etc/sysconfig/selinux。

        2. reboot 重启Linux系统。

        3. yum install docker -y

        4. service docker start

        5. docker images 「查看镜像」

        6. service docker stop

2.4 部署MySQL集群(四个节点)

        1. 导入MySQL镜像:docker load < MySQL.tar.gz 「自己下载压缩包」

        2. 设置虚拟机端口转发:docker容器 -> Linux -> windows

        3. 创建Docker内网的网段:docker network create --subnet=172.18.0.0/18(容量) mynet(网段名)

        4. 创建容器

docker run -it -d --name mysql_1 -p 12001:3306 \

--net mynet --ip 172.18.0.2 \

//映射目录,容器内数据外部不可见。

-m 400m -v /root/mysql_1/data:/var/lib/mysql \

-v /root/mysql_1/config:/etc/mysql/conf.d \

-e MYSQL_ROOT_PASSWORD=abc123456 \

-e TZ=Asia/Shanghai --privileged=true \

mysql:8.0.23 --lower_case_table_names=1

//删除容器

docker rm 容器名字

//停止容器

docker stop 容器名字

//查看容器运行状态

docker ps -a

        5. 用中间件来实现MySQL集群,也就是路由器作用

            ShardingSphere 5.0版本

            映射端口:容器3307 -> Linux 3307 -> windows 3307

            导入JDK镜像:docker load < jdk.tar.gz

        6. 创建容器

docker run -it -d --name ss -p 3307:3307 \

--net mynet --ip 172.18.0.7 \

//目录下放置ShardingSphere

-m 400m -v /root/ss:/root/ss \

-e TZ=Asia/Shanghai --privileged=true \

//防止容器退出

jdk bash

        7. 接着

yum install unzip -y

unzip ShardingSphere.zip

cd ShardingSphere/bin

chmod -R 777 ./*

docker exec -it ss bash

cd /root/ss/ShardingSphere/bin

./start.sh

2.6 安装NoSQL数据库

        1. 导入镜像:docker load < MongoDB.tar.gz

        2. 创建 /root/mongo/mongod.conf 文件

net:

port: 27017

bindIp: "0.0.0.0"

storage:

dbPath: "/data/db"

security:

authorization: enabled

        3. 创建MongoDB容器

docker run -it -d --name mongo \

-p 27017:27017 --net mynet --ip 172.18.0.8 \

-v /root/mongo:/etc/mongo \

-v /root/mongo/data/db:/data/db \

-m 400m --privileged=true \

-e MONGO_INITDB_ROOT_USERNAME=admin \

-e MONGO_INITDB_ROOT_PASSWORD=abc123456 \

-e TZ=Asia/Shanghai \

docker.io/mongo --config /etc/mongo/mongod.conf

        4. 导入镜像:docker load < Redis.tar.gz

        5. 创建 /root/redis/conf/redis.conf 文件

bind 0.0.0.0

protected-mode yes

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 0

loglevel notice

logfile ""

databases 12

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

require pass abc123456

        6. 创建Redis容器

docker run -it -d --name Redis -m 200m \

-p 6379:6379 --privileged=true \

--net mynet --ip 172.18.0.9 \

-v /root/redis/conf:/usr/local/etc/redis \

-e TZ:Asia/Shanghai redis:6.0.10 \

redis-server /usr/local/etc/redis/redis.conf

            redis客户端:RDM dev

2.7 安装Minio私有云存储

        1. 导入镜像:docker load < Minio.tar.gz

        2. 创建 /root/minio/data 文件夹,并设置权限

chmod -R 777 /root/minio/data

        3. 创建容器

docker run -it -d --name minio -m 400m \

//java用 控制台用

-p 9000:9000 -p 9001:9001 \

--net mynet --ip 172.18.0.10 \

-v /root/minio/data:/data \

-e TZ:Asia/Shanghai --privileged=true \

--env MINIO_ROOT_USER="root" \

--env MINIO_ROOT_PASSWORD="abc123456" \

bitnami/minio:latest

        4. 映射端口

2.8 安装其余中间件

安装RabbitMQ

        1. 略胜 Kafka

        2. 导入镜像:docker load < RabbitMQ.tar.gz

        3. 创建容器

docker run -it -d --name mq \

--net mynet --ip 172.18.0.11 \

-p 5672:5672 -m 200m \

-e TZ:Asia/Shanghai --privileged=true \

rabbitmq

        4. 开放端口

安装Nacos

        1. 作为注册中心,类似于ZooKeeper。微服务更依赖于Nacos服务。

        2. 导入镜像:docker load < Nacos.tar.gz

        3. 创建容器

docker run -it -d -p 8848:8848 --env MODE:standalone \

--net synet --ip 172.18.0.12 -e TZ:Asia/Shanghai \

--name nacos nacos/nacos-server

        4. 开放端口

安装Sentinel

        1. 做限流,会监控应用的QPS或并发线程数等

        2. 导入镜像:docker load < Sentinel.tar.gz

        3. 创建容器

docker run -it -d --name sentinel \

-p 8719:8719 -p 8858:8858 \

--net mynet --ip 172.18.0.13 \

-e TZ:Asia/Shanghai -m 200m \

bladex/sentinel-dashboard

        4. 开放端口

2.9 什么是微服务架构(一)

        为什么本课程微服务之间用 Feign 调用(HTTP 协议),而不用 dubbo 呢?从全局上考虑,HTTP通用性更好,如果用了 dubbo,那么所有的服务就都得用 Java 实现了。作为一个大项目,混合多种语言开发是很常见的,没必要把项目绑定到 Java 一种语言上面。

        SpringCloud 的很多中间件产品停止维护了,微服务 SpringCloud 不是最佳选择,国内推荐使用 Alibaba SpringCloud。

        最核心的功能:服务之间的调用。

2.10 什么是微服务架构(二)

        在Alibaba SpringCloud架构中,服务之间调用可以采用 Feign 技术。Feign 是 Netflix 开发的声明式、模版化的 HTTP 客户端。它可以帮助我们快捷地调用 http api 接口。

//注解:

@EnableDiscoveryClient //注册到 Nacos

@EnableFeignClients

//动态代理。代理接口实现。

//B服务中

@FeignClient(value = "Service-A")

public interface ServiceA {

......

}

//调用A服务的 路径/方法

//resources/application.yml 文件:

spring:

application:

name: Service-A

cloud:

inetutils:

preferred-networks: 192.168.99.106

nacos:

discovery:

namespace: hxds

username: nacos

password: nacos

server-addr: 192.168.99.106:8848

heart-beat-interval: 1000

heart-beat-timeout: 1000

group: DEFAULT_GROUP

 2.11 分布式事务

        TX-LCN 分布式事务可以完美兼容我们的数据库集群,支持 TCC 和 LCN 两种模式。教程:https://zhuanlan.zhihu.com/p/258001485

        LCN 模式下,需 TM(TX-Manager)程序来协助 XA 事务,所以我们要创建一个 Java 项目来充当 TM 节点。并且还要在 MySQL 节点中创 tx-manager 逻辑库导入数据表。

        TM节点的启动类必须加上如下注解。

@EnableTransactionManagerServer

//使用 TM 的类:

@Service

public class StudentService {

@Resource

private StudentDao studentDao;

@Transactional

@LcnTransaction

public void insert( Map map ) {

studentDao.insert(map)

}

}

2.12 微服务项目的鉴权

        单体后端项目权限验证:Shiro、Spring Security、JWT。

        BFF鉴权(Backends For Frontends)为不同设备提供不同的API接口。

        BFF层也只是个普通的 SpringBoot项目。也是通过 Feign 远程调用其他服务的。在 BFF 层的 Service 代码中,该用分布式事务的地方也要加上相关的注释。

        SaToken认证与授权。shiro 和 Spring Security 整合 JWT 非常麻烦。

        官网:https://sa-token.dev33.cn

 

 

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: