Кворум кроликов или RabbitMQ Quorum

от автора

Заводим кворум без фундаментальщины и теории ?‍♂️ (думаю, что по этому поводу статей хватает). Разбираем helm bitnami/rabbitmq-cluster-operator (чуть-чуть).

Кворум кроликов

Кворум кроликов

Поскольку Classic Queue Mirroring приказывает долго не жить, до версии 4.0 и Depricated со своим «Error while waiting for Mnesia tables», при этом нам настоятельно сватают Quorum Queues, значит, пора женить ????!

При создании не напоритесь на «безобидное» ограничение символов в названии со странным сообщением: «INSTALLATION FAILED: «rabbitmq-cluster-operator-rabbitmq-messaging-topology-operator» already exists

Но простого:

helm upgrade --install rmqco bitnami/rabbitmq-cluster-operator

нам будет мало. Развернётся только:

  • Cluster Operator — автоматизирует подготовку, управление и эксплуатацию кластеров RabbitMQ

  • Messaging Topology Operator — управляет топологиями обмена сообщениями RabbitMQ в кластере RabbitMQ

Необходимо добавить сам сервер RabbitMQ (с логами в json формате конечно же) через helm values из файла rabbitmqCluster.yaml:

extraDeploy:   - apiVersion: rabbitmq.com/v1beta1     kind: RabbitmqCluster     metadata:       name: rabbitmq     spec:       replicas: 1       persistence:         storage: 8Gi       rabbitmq:         additionalConfig: |           log.console.formatter = json
helm upgrade --install rmqco bitnami/rabbitmq-cluster-operator -f rabbitmqCluster.yaml

Если необходимо задать пользователя по умолчанию самим, несмотря на то, что при создании автоматически генерируется пользователь с административными правами, то требуется создать секрет с нашим именем <RabbitmqCluster>-default-user, но обязательно перед созданием RabbitMQ кластера:

apiVersion: v1 kind: Secret metadata:   name: rabbitmq-default-user stringData:   default_user.conf: |     default_user = <USERNAME-HERE>     default_pass = <PASSWORD-HERE>   password: <PASSWORD-HERE>   username: <USERNAME-HERE>

Можно создать дополнительных пользователей с назначением прав и с использованием секрета:

--- apiVersion: v1 kind: Secret metadata:   name: rabbitmquser-cred type: Opaque stringData:   username: rabbitmquser   password: verysecurepw --- apiVersion: rabbitmq.com/v1beta1 kind: User metadata:   name: rabbitmquser spec:   rabbitmqClusterReference:     name: rabbitmq   importCredentialsSecret:     name: rabbitmquser-cred --- apiVersion: rabbitmq.com/v1beta1 kind: Permission metadata:   name: rabbitmquser spec:   vhost: "/"   user: "rabbitmquser"   permissions:     write: ".*"     configure: ".*"     read: ".*"   rabbitmqClusterReference:     name: rabbitmq 

Остался мониторинг самого RabbitMQ и оператора. Пример для ServiceMonitor:

apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata:   name: rabbitmq spec:   endpoints:   - port: prometheus     scheme: http     interval: 15s     scrapeTimeout: 14s   - port: prometheus     scheme: http     path: /metrics/detailed     params:       family:         - queue_coarse_metrics         - queue_metrics     interval: 15s     scrapeTimeout: 14s   selector:     matchLabels:       app.kubernetes.io/component: rabbitmq

Ну и конечно же это всё можно использовать в extraDeploy:

rabbitmqCluster.yaml
extraDeploy:   - apiVersion: rabbitmq.com/v1beta1     kind: RabbitmqCluster     metadata:       name: rabbitmq     spec:       replicas: 1       persistence:         storage: 8Gi       rabbitmq:         additionalConfig: |           prometheus.return_per_object_metrics = true           log.console.formatter = json   - apiVersion: rabbitmq.com/v1beta1     kind: User     metadata:       name: rabbitmquser     spec:       rabbitmqClusterReference:         name: rabbitmq       importCredentialsSecret:         name: rabbitmquser-cred   - apiVersion: rabbitmq.com/v1beta1     kind: Permission     metadata:       name: rabbitmquser     spec:       vhost: "/"       user: "rabbitmquser"       permissions:         write: ".*"         configure: ".*"         read: ".*"       rabbitmqClusterReference:         name: rabbitmq   - apiVersion: monitoring.coreos.com/v1     kind: ServiceMonitor     metadata:       name: rabbitmq     spec:       endpoints:       - port: prometheus         scheme: http         interval: 15s         scrapeTimeout: 14s       - port: prometheus         scheme: http         path: /metrics/detailed         params:           family:             - queue_coarse_metrics             - queue_metrics         interval: 15s         scrapeTimeout: 14s       selector:         matchLabels:           app.kubernetes.io/component: rabbitmq 

также добавим запуск оператора с отслеживанием одного namespace nsqrmq с мониторингом и шлюпками и тремя репликами (не забудьте создать секреты):

helm -n nsrmq upgrade --install rmqco bitnami/rabbitmq-cluster-operator -f rabbitmqCluster.yaml \  --set clusterOperator.watchAllNamespaces=false \  --set clusterOperator.watchNamespaces={nsrmq} \  --set msgTopologyOperator.watchAllNamespaces=false \  --set msgTopologyOperator.watchNamespaces={nsrmq} \  --set extraDeploy[0].spec.replicas=3 \  --set clusterOperator.metrics.service.enabled=true \  --set clusterOperator.metrics.serviceMonitor.enabled=true \  --timeout 2m0s

З.ы. Уже запущенные реплики просто так не уменьшить.
Ещё немного примеров для cluster operator и messaging topology operator.


ссылка на оригинал статьи https://habr.com/ru/articles/830442/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *