1、环境准备
要将RocketMQ部署到K8S上,首先你需要提前准备一个K8S集群环境,如图我已经准备好了一个版本为 v1.28.13 的 K8S 集群(其他版本也没问题):
角色 | IP |
---|---|
Master | 192.168.6.220 |
Node-1 | 192.168.6.221 |
Node-2 | 192.168.6.222 |
2、RocketMQ的部署方式
- 2m-noslave: 多Master模式,无Slave [双主模式]
- 2m-2s-sync: 多Master多Slave模式,同步双写 [双主双从+同步模式]
- 2m-2s-async:多Master多Slave模式,异步复制 [双主双从+异步模式]
3、RocketMQ发送消息方式
- 同步发送: 指消息发送方发出数据后会在收到接收方发回响应之后才发下一个数据包
- 异步发送: 指发送方发出数据后,不等接收方发回响应,接着发送下个数据包, 异步方式也需要Broker返回确认信息
- 单向发送: 指只负责发送消息而不等待服务器回应且没有回调函数触发
4、RocketMQ三种消息发送模式使用场景
具体使用哪种模式,这主要是看应用场景
- 同步发送:主要运用在比较重要一点消息传递/通知等业务
- 异步发送:通常用于对发送消息响应时间要求更高/更快的场景
- 单向发送:适用于某些耗时非常短,但对可靠性要求并不高的场景,例如日志收集,只发送消息不等待服务器响应,只发送请求不等待应答。此方式发送消息的过程耗时非常短,一般在微秒级别
5、RocketMQ端口
- rocketmq 默认端口:9876(即nameserver端口)
- 非vip通道端口:10911
- vip通道端口:10909
- 10909是VIP通道对应的端口,在JAVA中的消费者对象或者是生产者对象中关闭VIP通道即可无需开放10909端口
本文部署的是RocketMQ的双主双从+同步模式
- broker-a-master 主1
- broker-b-master 主2
- broker-a-slave 从1
- broker-a-slave 从2
- NameServer(注册中心)
- rocketmq-console(可视化web界面)
6、安装NFS
因为系统当中的rocketmq、mysql、nacos、redis和file文件模块需要持久化的文件存储,所以我们要为这些持久化的文件存储创建目录。这次我打算使用nfs,需要准备一台nfs服务器,为了方便我就直接使用k8s的主节点来充当nfs服务器了。先来安装 nfs-utils 软件包(注意所有k8s节点都要安装)
6.1 更新软件包列表:
在终端中运行以下命令,更新你的软件包列表,以确保你可以获得最新的软件包版本。
sudo apt update
6.2 安装NFS相关软件包:
在Ubuntu中,nfs-utils
实际上是nfs-common
和nfs-kernel-server
这两个软件包的组合。你可以使用以下命令来安装这些软件包,3台机器上都要执行:
sudo apt install nfs-common nfs-kernel-server
nfs-common
包含客户端和服务器共用的工具和文件。nfs-kernel-server
包含NFS服务器的相关工具和服务。
6.3启动并启用NFS服务:
安装完成后,启动NFS服务器,并将其设置为开机自启动:
sudo systemctl start nfs-server
sudo systemctl enable --now nfs-server
6.4验证安装:
你可以使用以下命令来验证NFS服务是否已经正常启动:
sudo systemctl status nfs-server
完成这些步骤后,nfs-utils
(即nfs-common
和nfs-kernel-server
)应该已经在你的Ubuntu系统上成功安装并启动。
6.5创建共享目录
在k8s-master节点上,创建文件共享目录。
#HDD机械硬盘上的挂载目录
sudo mkdir -p /mnt/renpho/nfs/data/share
#SSD固态硬盘上的挂载目录
sudo mkdir -p /home/ec2-user/k8s/nfs/data/share/nacos
接下来我们需要将这些目录暴露给内网访问,先执行下面这行命令修改nfs的配置文件:
sudo cat >> /etc/exports << EOF
/mnt/renpho/k8s/nfs/data/share *(rw,sync,no_subtree_check,no_root_squash)
/home/ec2-user/k8s/nfs/data/share *(rw,sync,no_subtree_check,no_root_squash)
EOF
然后可以使用下面这行命令查看目录的暴露是否成功(注意修改nfs服务器地址):
showmount -e 192.168.6.220