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) и обрабатываются модулем с соответствующем названием.