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
精彩链接
发表评论