K8S下RabbitMQ队列重启消失问题解决
最近突然玩起来RabbitMQ,做了个小爬虫,但K8S的node经常会出现不稳定的情况,然后我的K8S的node2挂了,为了快速恢复,我按照我之前文章的方式,快速生成了一个node3,马上给 用上了,紧接着发现原来部署在node2上的RabbitMQ也挂掉了,不得已scale到0,再scale到1,自动重新部署到node3上。结果就出问题了。。。启动一看,RabbitMQ的队列都没了。。。。于是一
最近突然玩起来RabbitMQ,做了个小爬虫,但K8S的node经常会出现不稳定的情况,然后我的K8S的node2挂了,为了快速恢复,我按照我之前文章的方式,快速生成了一个node3,马上给 用上了,紧接着发现原来部署在node2上的RabbitMQ也挂掉了,不得已scale到0,再scale到1,自动重新部署到node3上。
结果就出问题了。。。启动一看,RabbitMQ的队列都没了。。。。
于是一顿查,说要durable参数为true,才能队列持久化,写数据的时候要properties.DeliveryMode = 2;,才能数据持久化,立刻修改程序,一顿操作猛如虎:
categoryChannel.QueueDeclare(queue: "category", true, false, false, null);
var properties = categoryChannel.CreateBasicProperties();
properties.DeliveryMode = 2;
立刻发布代码看看,结果发现原来还是二百五。。。
重启RabbitMQ,队列还是消失!
没办法,继续百度,这把加上K8S的关键字,结果百度大神给关注点永远放在了RabbitMQ队列消失上,K8S完全被忽略了。
还是没办法,换吧,换必应大神,国内版,搜索,结果跟百度一模一样。再换必应国际版,还是一样。
继续,发挥百折不挠的精神,必应大神国际版上搜索英文:
kubernetes rabbitmq queue disappeared after reboot
这把出结果了,第二篇点进去看,一模一样的问题:
下面的各个都是大神,马上有一个大神说了,最快的方法:
两篇的重点都是说RabbitMQ重启后hostname变了,要保持同样的hostname的名字才行,否则就要不得不部署cluster环境了。
于是按照第二个,固定hostname,测试,立马好用,马上成猛虎!
顺便贴出来我的yaml文件,超级简单,全家桶
##创建PV
# 注意更换存储方式
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-project-pv
labels:
pv: rabbitmq-project-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /nfs/data/rabbitmq/pv
server: 192.168.137.201
##创建pvc
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: rabbitmq-project-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
selector:
matchLabels:
pv: rabbitmq-project-pv
## 部署rabbitmq
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq-project
labels:
name: rabbitmq-project
spec:
replicas: 1
selector:
matchLabels:
name: rabbitmq-project
template:
metadata:
labels:
name: rabbitmq-project
spec:
containers:
- name: rabbitmq-project
image: rabbitmq:3.8-management
volumeMounts:
- mountPath: /var/lib/rabbitmq
name: rabbitmq-project
ports:
- containerPort: 4369
- containerPort: 5671
- containerPort: 5672
- containerPort: 15672
- containerPort: 25672
volumes:
- name: rabbitmq-project
persistentVolumeClaim:
claimName: rabbitmq-project-pvc
hostname: rabbitmq
##创建Service
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-project
labels:
name: rabbitmq-project
spec:
type: NodePort
ports:
- port: 5672
protocol: TCP
targetPort: 5672
name: rabbitmq-project-5672
nodePort: 30010
- port: 15672
protocol: TCP
targetPort: 15672
name: rabbitmq-project-15672
nodePort: 30009
selector:
name: rabbitmq-project
参考:
更多推荐
所有评论(0)