Конфигурация из 3-ёх узлов Cassandra, каждый из них в кластере будет доступен через порт 9042 и будет знать о других узлах в качестве сидов. Каждый узел доступен по своему IP-адресу в локальной сети.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bb19714a5da cassandra:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes cassandra-1
5518052233f1 cassandra:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes cassandra-2
148a49537151 cassandra:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes cassandra-3
- В 'services' определяем сервисы (контейнеры) для развертывания. cassandra-1, cassandra-2, cassandra-3 - имена сервисов, каждый из которых соответствует одному из узлов кластера Cassandra.
- 'image: cassandra:latest' определяет образ Docker, который будет использоваться для создания контейнеров Cassandra. В данном случае последняя доступная версия
- 'container_name' определяет имена контейнеров
- 'ports: - "9042:9042"' порт 9042, используемый Cassandra для внешнего доступа, пробрасывается с хостовой машины на каждый контейнер.
- 'environment' и 'env_file' устанавливают переменное окружение 'CASSANDRA_SEEDS', в 'env_file' вынесены общие переменные, CASSANDRA_SEEDS=192.168.1.200 Указывает контейнер cassandra-1 в качестве сида для связи и обмена данными между узлами кластера.
- Сеть, к которой принадлежат контейнеры 'networks: - cassandra_macvlan'. Каждый контейнер Cassandra автоматически присоединяется к общей сети секции networks. Docker назначает IP-адреса для каждого контейнера в этой сети автоматически.
- 'expose' определяет порты, которые будут открыты внутри контейнера.
Успешное подключение к узлам cassandra-1, cassandra-2, cassandra-3, он доступен по ip-адресу
Этот проект демонстрирует настройку кластера Cassandra из трех узлов с использованием Docker Compose.
• Docker • Docker Compose • Cassandra Tools для подключения
docker network create \
--driver=macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=ens256 \
cassandra_macvlan
Создание дополнительного интерфейса macvlan на сервере.
ip link add macvlan0 link ens256 type macvlan mode bridge
ip addr add 192.168.1.199/24 dev macvlan0
ip link set macvlan0 up
Включение маршрутизации между хостом и контейнерами.
ip route add 192.168.1.200/30 dev macvlan0
Добавление SNAT (Source NAT) на сервере А (192.168.1.197) для перенаправления трафика между ens256 и macvlan0.
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o macvlan0 -j MASQUERADE
Добавление разрешеня для трафика
sudo iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT
Настройка маршрута на сервере Б (192.168.1.198).
sudo ip route add 192.168.1.200/30 via 192.168.1.197 dev ens256
sudo docker compose up -d
Проверить, что все контейнеры работаю:
sudo docker ps -a
Установка cassandra-tools для подключение к кластеру
sudo snap install cqlsh
Подключение к первому узлу
cqlsh 192.168.1.200
Подключение ко второму узлу
cqlsh 192.168.1.201
Подключение к третьему узлу
cqlsh 192.168.1.202