Сетевые настройки Ceph¶
5.8 Функционал scale up (добавление дисков в незаполненные слоты действующих узлов хранения), scale out (добавление новых узлов хранения), а также расширение емкости кластера путем замены дисков малой емкости на новые работают без прерывания сервисов¶
Тщательно продуманная сетевая инфраструктура и конфигурация имеют решающее значение для создания отказоустойчивого и высокопроизводительного кластера хранения Ceph и облака AccenOS. Кластер хранения Ceph не выполняет маршрутизацию или распределение запросов от имени клиента Ceph . Вместо этого клиенты Ceph отправляют запросы непосредственно демонам Ceph OSD. Демоны Ceph OSD выполняют репликацию данных от имени клиентов Ceph, что создает дополнительную нагрузку на сети Ceph. Конфигурации быстрой установки Ceph предоставляют минимальный конфигурационный файл, включающий IP-адреса монитора и имена хостов демонов. Те же действия выполняются и при установке через FirstBoot/Kolla Ansible. Если кластерная сеть не будет указана, Ceph будет использовать одну Public сеть. Во многих развертываниях Ceph прекрасно работает в штатном режиме только с общедоступной сетью, особенно с сетевыми каналами 25GE или быстрее. В случае создания систем высокой доступности, даже в моменты отказов, расширения системы хранения, добавления узлов, ребаланса и Deep scrubing, кластеры Ceph с высокой интенсивностью клиентского трафика могут значительно повысить отказоустойчивость и производительность, благодаря создав Cluster сети. Можно запустить кластер хранения Ceph с двумя сетями: Public (клиентской, фронтальной) и Cluster (частной, репликационной). Хотя такой подход усложняет настройку сети, увеличивает затраты и управление, он может обеспечиить требуемую производительность в высоконагруженных системах и стсемах реального врмени. Для обеспечения отказоустойчивости и пропускной способности мы рекомендуем объединять сетевые интерфейсы и подключать их к резервным коммутаторам. Объединение должно быть активным/активным или использовать стратегию многопутевого доступа уровня 3 с FRR или LACP. Если, несмотря на сложность, все же необходимо создать выделенную сеть репликации для кластера Ceph, каждому узлу Ceph потребуется более одного сетевого интерфейса или VLAN. Дополнительные сведения см. в разделе «Рекомендации по оборудованию — Сети» .
IP-tables¶
По умолчанию демоны привязываются к портам в указанном 6800:7568диапазоне. Вы можете настроить этот диапазон по своему усмотрению. Перед настройкой таблиц IP-адресов проверьте iptablesконфигурацию по умолчанию.
sudo iptables -L
В некоторых дистрибутивах Linux есть правила, которые отклоняют все входящие запросы, кроме SSH, со всех сетевых интерфейсов. Например:
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
На начальном этапе вам потребуется удалить эти правила как в общедоступной сети, так и в кластерной сети, а затем заменить их соответствующими правилами, когда вы будете готовы усилить безопасность портов на ваших узлах Ceph.
Примечание
При изменении или перезагрузке правил в контейнерах Docker и Podman могут возникать сбои. Рекомендуется обновлять правила на узлах кластера, последовательно переключаясь в режим обслуживания, останавливая службы контейнеров, применяя изменения правил, а затем запуская службы контейнеров и выходя из режима обслуживания.
Мониторинг IP-таблиц¶
По умолчанию мониторы Ceph прослушивают порты 3300и 6789. Кроме того, мониторы Ceph всегда работают в общедоступной сети. При добавлении правила, используя приведенный ниже пример, убедитесь, что вы заменили {iface}на сетевой интерфейс общедоступной сети (например, eth0, eth1, и т. д.), {ip-address}на IP-адрес общедоступной сети и {netmask}на маску подсети для общедоступной сети. :
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
IP-Tables CephFS MDS и Ceph Mgr¶
Сервер метаданных Ceph или менеджер Ceph прослушивает первый доступный порт в общедоступной сети, начиная с порта 6800. Обратите внимание, что это поведение не является детерминированным, поэтому, если на одном хосте запущено более одного OSD или MDS, или если демоны перезапускаются в течение короткого промежутка времени, демоны будут привязываться к более высоким портам. По умолчанию следует открыть весь диапазон 6800-7568. При добавлении правила, используя приведенный ниже пример, убедитесь, что вы заменили {iface}на интерфейс общедоступной сети (например, eth0, eth1, и т. д.), {ip-address}на IP-адрес общедоступной сети и {netmask}на маску подсети общедоступной сети. Например:
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7568 -j ACCEPT
IP-tables OSD¶
По умолчанию демоны Ceph OSD привязываются к первым доступным портам на узле Ceph, начиная с порта 6800. Обратите внимание, что это поведение не является детерминированным, поэтому, если на одном хосте запущено более одного OSD или MDS, или если вы перезапустите демоны в течение короткого промежутка времени, демоны будут привязываться к портам более высокого уровня. Каждый демон Ceph OSD на узле Ceph может использовать до четырех портов: 1. Один из вариантов — для общения с клиентами и мониторами. 2. Один из них предназначен для отправки данных другим OSD-устройствам. 3. Два сигнала для проверки работоспособности на каждом интерфейсе.
Если демон выходит из строя и перезапускается, не освобождая порт, перезапущенный демон будет привязан к новому порту. Для обработки такой возможности следует открыть весь диапазон портов 6800-7568. Если вы настроили отдельные публичную и кластерную сети, необходимо добавить правила как для публичной, так и для кластерной сети, поскольку клиенты будут подключаться через публичную сеть, а другие демоны Ceph OSD — через кластерную сеть. При добавлении правила, используя приведенный ниже пример, убедитесь, что вы заменили {iface}на сетевой интерфейс (например, eth0, eth1, и т. д.), {ip-address}на IP-адрес и {netmask}на маску подсети публичной или кластерной сети. Например:
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7568 -j ACCEPT
Сети Ceph¶
Для настройки сетей Ceph необходимо добавить конфигурацию сети в [global]раздел файла конфигурации. Наше краткое руководство (5 минут) предоставляет простой файл конфигурации Ceph, который предполагает наличие одной общедоступной сети, где клиент и сервер находятся в одной сети и подсети. Ceph прекрасно работает и только с общедоступной сетью. Однако Ceph позволяет устанавливать гораздо более специфические критерии, включая несколько IP-адресов и масок подсети для вашей общедоступной сети. Вы также можете создать отдельную кластерную сеть для обработки сигналов OSD, репликации объектов и трафика восстановления. Не путайте IP-адреса, которые вы устанавливаете в конфигурации, с общедоступными IP-адресами, которые могут использовать сетевые клиенты для доступа к вашей службе. Типичные внутренние IP-сети часто имеют вид 192.168.0.0или 10.0.0.0.
Примечание
Если вы указываете более одного IP-адреса и маски подсети для общедоступной или кластерной сети, подсети внутри сети должны иметь возможность маршрутизации друг к другу. Кроме того, убедитесь, что вы включили каждый IP-адрес/подсеть в ваши таблицы IP-адресов и открыли для них порты по мере необходимости.
Примечание
Ceph использует обозначение CIDR для подсетей (например, 10.0.0.0/24).
После настройки сетей вы можете перезапустить кластер или перезапустить каждый демон отдельно. Демоны Ceph привязываются динамически, поэтому вам не нужно перезапускать весь кластер сразу, если вы измените конфигурацию сети.
Public сеть¶
Для настройки общедоступной сети добавьте следующий параметр в соответствующий [global] раздел файла конфигурации Ceph.
[global]
# ... elided configuration
public_network = {public-network/netmask}
Cluster сеть¶
Если вы объявите кластерную сеть, OSD будут направлять трафик heartbeat, репликации объектов и восстановления через кластерную сеть. Это может повысить производительность по сравнению с использованием одной сети. Для настройки кластерной сети добавьте следующий параметр в раздел [global]вашего конфигурационного файла Ceph.
[global]
# ... elided configuration
cluster_network = {cluster-network/netmask}
Для повышения безопасности мы предпочитаем, чтобы кластерная сеть была недоступна из общедоступных сетей или Интернета.
Демоны Ceph Mon¶
Каждый демон монитора настроен на привязку к определенному IP-адресу. Эти адреса обычно настраиваются инструментом развертывания. Другие компоненты кластера Ceph обнаруживают мониторы через параметр конфигурации, обычно указываемый в разделе файла .mon host[global]ceph.conf
[global]
mon_host = 10.0.0.2, 10.0.0.3, 10.0.0.4
В качестве значения mon_hostможет выступать список IP-адресов или имя, которое ищется через DNS. В случае DNS-имени с несколькими записями A или AAAA, проверяются все записи для обнаружения монитора. Как только достигается один монитор, обнаруживаются все остальные текущие мониторы, поэтому параметр конфигурации должен быть достаточно актуальным, чтобы клиент мог связаться только с одним монитором, который в данный момент находится в сети.mon host Демоны Ceph MGR, OSD и MDS будут привязываться к любому доступному адресу и не требуют специальной настройки. Однако можно указать конкретный IP-адрес для привязки с помощью параметра конфигурации (и/или, в случае демонов OSD, параметра ). Например,public addrcluster addr
[osd.0]
public_addr = {host-public-ip-address}
cluster_addr = {host-cluster-ip-address}
Один сетевой адаптер OSD в кластере из двух сетей¶
Как правило, мы не рекомендуем развертывать хост OSD с одним сетевым интерфейсом в кластере с двумя сетями. Однако этого можно добиться, принудительно заставив хост OSD работать в общедоступной сети, добавив запись public_addrв [osd.n]раздел конфигурационного файла Ceph, где n обозначает идентификатор хоста OSD с одним сетевым интерфейсом. Кроме того, общедоступная сеть и сеть кластера должны иметь возможность маршрутизировать трафик друг к другу, чего мы не рекомендуем по соображениям безопасности.
Настройки сетевой конфигурации¶
Настройка параметров сети не требуется. Ceph предполагает использование общедоступной сети, в которой работают все хосты, если вы специально не настроите кластерную сеть.
Public сеть¶
Конфигурация общедоступной сети позволяет явно задавать IP-адреса и подсети для этой сети. Вы можете назначать статические IP-адреса или переопределять public_networkнастройки с помощью public_addr параметра для конкретного демона. Public_сетевой_интерфейс Необходимо также указать имя(имена) интерфейса, из которого(их) следует выбрать адрес для public_networkпривязки .public_network тип: str см. также: public_network Public_сеть IP-адрес и маска подсети общедоступной (фронтальной) сети (например, 192.168.0.0/24). Задается в файле [global]. Можно указать подсети, разделенные запятыми. Формат выглядит следующим образом:{ip- address}/{netmask} [, {ip-address}/{netmask}] тип: str public_addr IP-адрес публичной (фронтальной) сети. Устанавливается для каждого демона. тип: addr
Cluster сеть¶
Конфигурация кластерной сети позволяет объявить кластерную сеть и конкретно определить IP-адреса и подсети для этой сети. Вы можете назначить статические IP-адреса или переопределить cluster_network настройки с помощью cluster_addrпараметра для конкретных демонов OSD. кластерный_сетевой_интерфейс Необходимо также указать имя(имена) интерфейса, из которого(их) следует выбрать адрес для cluster_networkпривязки .cluster_network тип: str кластерная_сеть IP-адрес и маска подсети кластерной (внутренней) сети (например, 10.0.0.0/24). Задаются в [global]. Можно указать подсети, разделенные запятыми. Формат выглядит следующим образом:{ip- address}/{netmask} [, {ip-address}/{netmask}] тип: str cluster_addr IP-адрес кластерной (внутренней) сети. Устанавливается для каждого демона. тип: addr
Bind¶
В настройках привязки задаются диапазоны портов по умолчанию, используемые демонами Ceph OSD и MDS. Диапазон по умолчанию — 6800:7568. Убедитесь, что ваша конфигурация IP Tables позволяет использовать указанный диапазон портов. Вы также можете разрешить демонам Ceph привязываться к адресам IPv6 вместо адресов IPv4. ms_bind_port_min Минимальный номер порта, к которому будет подключаться демон OSD или MDS. тип: int по умолчанию: 6800 ms_bind_port_max Максимальный номер порта, к которому будет подключаться демон OSD или MDS. тип: int по умолчанию: 7568 ms_bind_ipv4 Позволяет демонам Ceph привязываться к адресам IPv4. тип: bool по умолчанию: true
ms_bind_ipv6 ms_bind_ipv6 Позволяет демонам Ceph привязываться к адресам IPv6. тип: bool по умолчанию: false public_bind_addr В некоторых динамических развертываниях демон Ceph MON может локально привязываться к IP-адресу, отличному от того, который public_addrобъявляется другим узлам в сети. Необходимо обеспечить правильную настройку правил маршрутизации. Если public_bind_addrэто установлено, демон Ceph Monitor будет локально привязываться к этому адресу и использовать его public_addrв monmaps для объявления своего адреса узлам. Такое поведение характерно только для демона Monitor. тип: addr
TCP¶
Ceph по умолчанию отключает буферизацию TCP. ms_tcp_nodelay В Ceph это включено ms_tcp_nodelay, чтобы каждый запрос отправлялся немедленно (без буферизации). Отключение алгоритма Нейгла увеличивает сетевой трафик, что может привести к задержкам. Если вы наблюдаете большое количество небольших пакетов, попробуйте отключить его ms_tcp_nodelay. тип: bool по умолчанию: true ms_tcp_rcvbuf Размер буфера сокета на принимающей стороне сетевого соединения. По умолчанию отключено. тип: size по умолчанию: 0B
Общие настройки¶
ms_type Тип транспорта, используемый Async Messenger. Может быть async+posix, async+dpdk, async+rdma, или async+smc. Posix использует стандартный сетевой протокол TCP/IP и является типом транспорта по умолчанию. Другие типы транспорта могут быть экспериментальными, и их поддержка может быть ограничена. тип: str по умолчанию: async+posix ms_async_op_threads Начальное количество рабочих потоков, используемых каждым экземпляром Async Messenger. Оно должно быть как минимум равно максимальному количеству реплик, но его можно уменьшить, если у вас мало ядер ЦП и/или вы размещаете много OSD на одном сервере. тип: uint по умолчанию: 3 допустимый диапазон: [1, 24] ms_initial_backoff Начальное время ожидания перед повторным подключением при возникновении неисправности. тип: float по умолчанию: 0.2 ms_max_backoff Максимальное время ожидания перед повторным подключением при возникновении неисправности. тип: float по умолчанию: 15.0
ms_die_on_bad_msg Параметр отладки; не настраивать. тип: bool по умолчанию: false ms_dispatch_throttle_bytes Ограничивает общий размер сообщений, ожидающих отправки. тип: size по умолчанию: 100Mi ms_inject_socket_failures Параметр отладки; не настраивать. тип: uint по умолчанию: 0