Opennet

Содержание:

Введение

Существует задача увеличению доступности и отказоустойчивости MySQL и у нее есть много разных решений. Это кластеризация, master реплкация, Master-Slave репликация. В этой статье хочу рассказать об одном из таких решений это Multi-Master репликация на основе Galera.

К плюсам Galera относятся:

  • отсутствие единой точки отказа;
  • возможность развернуть решение в разных датацентрах для большей отказоустойчивости включая географически удаленные друг от друга;
  • синхронизация, отсутствие потери данных при репликации;
  • настоящая Мастер репликация;

Ограничения:

  • работает только на innoDB;
  • при работе с транзацкиями нельзя лочить таблицу.

Мы будем использовать MariaDB и Ubuntu 12.04 LTS.

Описание

Веб-портал предоставляет пользователям ежедневные новости в области свободного программного обеспечения, Linux, BSD и UNIX-подобных операционных систем, а также в сфере компьютерных технологий.

Вся информация предоставленная на сайте рассчитана для широкого круга пользователей — как для высококвалифицированных специалистов, так и для любителей свободного программного обеспечения с открытым исходным кодом.

Также на сайте доступны готовые статьи и советы написанные специалистами в области IT, OpenWiki — база знаний OpenNET, интерактивная система просмотра системных руководств, популярные дистрибутивы свободных операционных систем/программ и прочая документация. Веб-портал поддерживает удобный поиск и RSS-ленты.

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

Установка

Будет считать что у нас уже установлена Ubuntu. Если установлена MariaDB или MySQL удалите их.
На каждой ноде делаем следующие действия.

Вначале поставим ряд библиотек.
libaio1 — для асинхронных системных вызовов важных для высокой производительности
libssl — ssl
libdbd-mysql-perl, libdbi-perl — интерфейс для mysql

apt-get install libaio1 libssl0.9.8 mysql-client libdbd-mysql-perl libdbi-perl 

Скачиваем и ставим Galera provider:

для amd64

Скачиваем и ставим патч

для amd64

Будем ловить ошибки здесь /var/log/mysql

mkdir -pv /var/log/mysql && chown mysql:mysql -R /var/log/mysql

Запускаем MySQL и делаем полный доступ для пользователя galera под которым будет осуществляться репликация

service mysql start
mysql -p
grant all privileges on *.* to galera@'%' identified by 'pwd';
flush privileges;

Теперь на разных нодах делаем чуть разные вещи

Очень важно, что на первой ноде wsrep_cluster_address=»gcomm://» — на момент запуска эта нода будет главной и то, что будет на ней, в итоге будет на всем кластере. Эта опция пригодится в трех случаях:

  • когда вы хотите сделать galera кластер на основе текущего сервера;
  • если по какой-то причине ваш текущий galera кластер развалился на несколько частей, то вы берете наиболее полную часть и делаете ее главной;
  • при первом запуске кластера.

Редактируем файл /etc/mysql/conf.d/wsrep.cnf

Нода 1

wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera"
wsrep_cluster_address="gcomm://"
wsrep_node_address="gcomm://192.168.1.1"
wsrep_sst_method=mysqldump
wsrep_sst_auth=galera:pwd

Нода 2

wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
wsrep_node_address="gcomm://192.168.1.2"
wsrep_sst_method=mysqldump
wsrep_sst_auth=galera:pwd

Нода 3

wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
wsrep_node_address="gcomm://192.168.1.3"
wsrep_sst_method=mysqldump
wsrep_sst_auth=galera:pwd

Теперь о очереди перезапускаем все ноды

Начиная с первого, это важно, т.к. нода 1 у нас будет примари, а остальные будут брать данные с нее.

service mysql restart

Смотрим логи. Если ошибок нет, то в ноде 1 указываем

wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3" 

и перезапускаем mysql.
смотрим логи, в кототрых будет что-то вроде этого:

 WSREP: Quorum results:
       version    = 2,
       component  = PRIMARY,
       conf_id    = 22,
       members    = 3/3 (joined/total),

Пробуем создать таблицу на одной из нод, такая же таблица должны появиться на двух других. Тоже самое будет если вы создаете базы данных, тригеры, пользователей и т.д..
Galera cluster настроен.

Клиент

Итак, затем я настроил клиента на моем ноутбук. К сожалению, ebuild’а для gnunet-qt я не нашел (я использую KDE), а написать по-быстрому его не удалось. Поэтому я оставил это до лучших времен и установил gnunet-gtk.
После выполнения gnunet-setup я смог подключиться к серверу и успешно запустить несколько поисков и закачек.

Итак, вот несколько скриншотов:

Недостатки

К сожалению не все так безоблачно в GNUnet как хотелось бы.

Основная проблема — это очень высокая задержка, низкая скорость работы и достаточно высокое потребление ресурсов. Это — цена, которую приходится платить за децентрализованность и шифрование.
Так, поиск редкого контента может длиться часами, а прежде чем начнется его скачивание может пройти еще много часов, да и скорость скачивания будет не на высоте. Однако, это пробоема всех децентрализованных сетей, и чем более децентрализованна она, тем более усугубляется эта пробоема (так, eDonkey показывает чуть лучшие результаты, а не децентрализованный torrent намного более лучшие). Остается надеяться что в будущем, с увеличением пропускной способности сетей и производительности компьютеров эта проблема будет становится все менее актуальной.

Вторая проблема — малая популярность сети, и, как следствие, недостаточное количества контента. Отчасти в этом виновата малая раскручености протокола, отчасти — нетривиальность использование, да и проблема высокой задержки тоже играет немаловажную роль.
Эту проблему можно решить, и я надеюсь что данная статья приведет новых пользователей в сеть GNUnet.

Интересные факты

  • На сайте продолжает предоставляться возможность публикации анонимных комментариев, несмотря на попытки добиться запрета анонимных участников. Нарушения со стороны анонимных посетителей пресекаются достаточно жёстким модерированием, а также системой фильтров.
  • На OpenNET популярны теории заговора «корпораций против свободного ПО»: в частности, на OpenNETWiki есть статья, в которой рассказывается о попытках компании Microsoft «очернить free software при помощи неокрепших студенческих умов», якобы предлагающей студентам специальные «методички» для клеветы и троллинга в адрес свободного ПО, его разработчиков и идеологов, а в качестве платы — «бонусные лицензии на ПО и путёвки на конференции».

Тестирование

Теперь можно заняться тестированием. При создании таблиц/пользователей/триггеров на одной ноде они будут появляться на двух других. Если этого не происходит, то смотрим логи.

Теперь пробуем отключить например ноду два и после этого на ноду 1 записать данные.
В логах вы увидите что-то проде этого

 WSREP: Quorum results:
       version    = 2,
       component  = PRIMARY,
       conf_id    = 19,
       members    = 2/2 (joined/total),

После этого включаем ноду 2 и в логах должно через некоторое время появится следующее:

WSREP: Shifting JOINED -> SYNCED
WSREP: Synchronized with group, ready for connections

Проверяем, что в таблицах на ноде 2 появились ранее записанные данные.

В следующий раз более подробно о тестировании под большими нагрузками и с какими проблемами при этом приходится сталкиваться.

Сервер

Итак, сначала я установил gnunet на сервер. После установки portage подсказала мне что для настойки нужно запустить gnunet-setup -d с правами пользователя root, что я и сделал. gnunet-setup в диалоговом режиме спросил меня о настройках, после чего создал конфигурационный файл /etc/gnunet.conf для демона. Все опции достаточно понятны, и обладают подробной стправкой.
Однако оказалось что диалоговый режим генерирует не совсем корректный конфигурационный файл, поэтом я собрал на ноутбуке GNUnet с поддержкой gtk, вместо диалогового увидел вот такое окно конфигурации:

А получившийся gnunetd.conf скопировал на сервер.

Дополнительные опции.

wsrep_sst_method
SST — State Snapshot Transfer. Это полная копия данных от одной ноды к другой. Это используется, когда новая нода подключается к кластеру и синхронизируется с данными всего кластера.

Есть два разных пути синхронизиции в galera, через mysqldump и путем копирования фалов. Копирование файлов хороший способ, если сервера являющиеся нодами являются похожими, это делается копированием через rsync или xtrabackup, другой способ основан на mysqldump. Какой выбрать способ решать вам в каждом конкретном случае, лучше начать с mysqldump, т.к. этот способ работает стабильнее.

Данная опция особенно актуальна, если вы используете большие объемы данных.

Остается добавить, что с MariaDB изначально не идет xtrabackup. Нужно его поставить отдельно. На Ubuntu xtrabackup ставим так:

Другие сервисы

Существует также чат (очень простой, с минимумом функций), планируется еще несколько сервисов (например, анонимная p2p почта).

Установка и Настройка

Я пользуюсь дистрибутивом на основе Gentoo, и в моем случае ebuild для gnunet 0.8.0 уже был в официальном дереве портов (в ветке ~). Для работы gnunet требует sql-бд. В настоящий момент поддерживаются mysql и sqlite. Поскольку я не использую mysql, я выбрал sqlite (USE=»sqlite» emerge -v1 gnunet), после чего все собралось без каких-либо проблем.

Также, без проблем нашлись rpm для RHEL/CentOS 5 (в репозитории rpmforge), пакеты для Debian, Ubuntu и Arch Linux. Думаю, готовый пакет легко найдется и для других дистрибутивов.

GNUnet работает в клиент-серверном режиме. Т.е. основной рабочий процесс — gnunetd работает в качестве демона, работает без какого-либо интерфейса и управляется фронтендами gnunet (которые не обязательно должны быть запущены на той же машине).
Это отлично вписывается в мою домашнюю сеть: у меня есть headless сервер, подключеный к интернету, который я использую в качестве интернет-шлюза, NAS, proxy, dns и svn сервера, а моим основным рабочим компьютером является ноутбук.

История

Сайт создан осенью 1996 года как домашняя страница, на которой была опубликована подборка накопившихся ссылок и материалов по Linux, Unix и открытым технологиям, собранная в результате чтения fido-конференций, таких как RU.LINUX и RU.UNIX. В 1998 году проект переехал на отдельный домен opennet.ru и был дополнен разделом новостей и форумом. В 1999 году на сайте появился рубрикатор по ключевым словам, который стал одной из первых в рунете реализаций методов категоризации информации по тегам.

В 2001 году сайт стал победителем конкурса Золотой сайт в номинации «Справочно-информационный сайт» (Уральский Федеральный округ). Последние 10 лет работа сайта OpenNET.ru сосредоточена на освещении новостей, связанных со свободным ПО и открытыми технологиями, а также на координации работы сформировавшегося сообщества.

File Sharing и ECRS

Самый популярным и наиболее стабильным сервисом является File Sharing (fs), и, как следует из названия, он предназначен для анонимного децентрализованного обмена файлами. Он позволяет искать, выкладывать (publish) и скачивать (download) как отдельные файлы, так и целые директории. С точки зрения пользователя, все это осуществляется аналогично тому, как это происходит например в dc++, однако, благодаря сложному механизму роутинга запросов и ответов, вы понятия не имеете от кого вы на самом деле принимаете или кому передаете файл.

Интересный момент — можно настраивать степень анонимности: от 0 (не анонимно) до бесконечности. По умолчанию используется 1 и этого в большинстве случаев достаточно (вы же не собираетесь передавать таким образом сверхсекретные данные). Передаваемые файлы закодированы с помощью ECRS (An Encoding for Censorship-Resistant Sharing) и обрабатываются модулем с соответствующем названием.

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

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