1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/javashop-rabbitmq-on-kubernetes

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 11:43 50ca43f

RabbitMQ в Kubernetes: постоянное развёртывание кластера

Введение

Javashop — это система электронной коммерции, которая использует RabbitMQ для своей шины сообщений. RabbitMQ используется в таких бизнес-процессах, как создание заказов, генерация статических страниц и индексов. Для обеспечения высокой доступности RabbitMQ необходимо учитывать следующие факторы:

  1. Кластеризация.
  2. Масштабируемость.
  3. Отказоустойчивость.

Отказоустойчивость требует постоянного хранения данных RabbitMQ. Необходимо предусмотреть случай сбоя RabbitMQ, чтобы сообщения, которые не были обработаны, могли быть восстановлены после восстановления работы RabbitMQ и обработаны повторно.

Развёртывание

Создание PV (постоянного тома)

Сначала необходимо создать сервер NFS. Структура постоянного тома будет следующей:

/nfs/data/mqdata

Для создания сервера NFS выполните следующие шаги:

  1. Установите пакет nfs-utils на главном узле:
    
    

yum -y install nfs-utils

2. Создайте каталог NFS:

mkdir -p /nfs/data/{mqdata,esmaster,esdata}

3. Измените права доступа к каталогу:

chmod -R 777 /nfs/data/

4. Отредактируйте файл экспорта:

vim /etc/exports

5. Добавьте следующую строку:

/nfs/data/mqdata *(rw,no_root_squash,sync)

6. Активируйте изменения:

exportfs -r

7. Проверьте изменения:

exportfs

8. Запустите службы rpcbind и nfs:

systemctl restart rpcbind && systemctl enable rpcbind systemctl restart nfs && systemctl enable nfs

9. Проверьте состояние RPC-сервисов:

rpcinfo -p localhost

10. Выполните команду showmount для проверки доступности каталога:

showmount -e

Если всё выполнено успешно, вы увидите доступный каталог:

showmount -e 172.17.14.73

Export list for 172.17.14.73: /nfs/data/mqdata *

Теперь необходимо установить службу NFS на каждом узле, чтобы Kubernetes мог монтировать каталог NFS.

11. На всех узлах установите клиент NFS:

yum -y install nfs-utils systemctl start nfs && systemctl enable nfs

Это подготовительные шаги для постоянного тома в Kubernetes.

## **Создание постоянного тома**

После подготовки NFS можно создать постоянный том в Kubernetes. Сначала клонируйте подготовленный файл YAML с нашего сервера:

https://gitee.com/enation/rabbitmq-on-kubernetes.git

Затем отредактируйте файл pv.yaml в корневом каталоге и измените конфигурацию сервера на IP-адрес сервера NFS:

nfs: server: 192.168.1.100 #здесь укажите IP-адрес вашего сервера NFS

Создайте постоянный том с помощью команды:

kubectl create -f pv.yaml

Проверьте, был ли создан постоянный том:

kubectl get pv

## **Развёртывание RabbitMQ**

На главном узле Kubernetes выполните следующую команду для создания пространства имён:

kubectl create namespace ns-rabbitmq

Выполните следующую команду для развёртывания кластера RabbitMQ (используйте все файлы конфигурации в каталоге rabbitmq):

kubectl create -f rabbitmq/

Эти шаги создадут пространство имён ns-rabbitmq и соответствующие PVC, роли, реплики и сервисы.

### **Образ**

Используется образ, основанный на RabbitMQ версии 3.8, созданный компанией Javashop, с добавлением плагина для отложенных сообщений. В остальном изменений нет.

### **Сервисы**

По умолчанию открыты внешние порты nodeport, соответствующие следующим портам:

31672->15672
30672->5672

Внутри Kubernetes доступ можно получить через следующие имена сервисов:

rabbitmq.ns-rabbitmq:15672 
rabbitmq.ns-rabbitmq:5672 

Дождитесь запуска всех контейнеров и проверьте их работоспособность.

## **Проверка**

Используйте прилагаемую программу для проверки:

1. Отправьте сообщение (отключите приём сообщений).
2. Убедитесь, что в очереди RabbitMQ есть сообщения.
3. Удалите реплику кластера.
4. Восстановите реплику кластера.
5. Получите сообщения.

## **Ключевые технические моменты**

1. Обнаружение кластера: используйте плагин обнаружения peer для RabbitMQ в Kubernetes (rabbitmq_peer_discovery_k8s).

2. Сопоставление постоянного тома: сопоставьте его с каталогом /var/lib/rabbitmq/mnesia.

3. Пользовательский каталог данных:

    ```
    - name: RABBITMQ_MNESIA_BASE
      value: /var/lib/rabbitmq/mnesia/$(MY_POD_NAME)
    ```

Здесь MY_POD_NAME — это имя контейнера, которое обеспечивается уникальным связыванием через набор состояний:


    ```
    - name: MY_POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace    
    ```

## **Прилагаемая программа проверки**

private static CachingConnectionFactory connectionFactory; private static void initConnectionFactory() { connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost("localhost"); connectionFactory.setPort(5672); connectionFactory.setUsername("guest"); connectionFactory.setPassword("guest"); } public static void main(String[] args) { initConnectionFactory(); //отправляем сообщение send(); //получаем сообщение receive(); } private static void receive() { AmqpTemplate template = new RabbitTemplate(connectionFactory); String foo = (String) template.receiveAndConvert("myqueue"); System.out.println("get message : "+ foo); } private static void send() { AmqpAdmin admin = new RabbitAdmin(connectionFactory); admin.declareQueue(new Queue("myqueue",true)); AmqpTemplate template = new RabbitTemplate(connectionFactory); template.convertAndSend("myqueue", "foo"); }


Подписывайтесь на технический блог Javashop и смотрите больше обучающих видео:
![img](http://www.javamall.com.cn/images/weixin.jpg)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/javashop-rabbitmq-on-kubernetes.git
git@api.gitlife.ru:oschina-mirror/javashop-rabbitmq-on-kubernetes.git
oschina-mirror
javashop-rabbitmq-on-kubernetes
javashop-rabbitmq-on-kubernetes
master