Главная страница
Навигация по странице:

  • 1.3.2 Установка Java Далее необходимо установить OpenJDK 8 версии:sudo apt-get install openjdk-8-jdk 1.3.3 Создание отдельной учетной записи для запуска Hadoop

  • 1.3.4 Настройка статического IP адреса

  • 1.3.5 Настройка доменного имени узла

  • 1.3.8 Установка Apache Hadoop

  • 1.3.9 Обновление $HOME/.bashrc

  • 1.3.10 Настройка Apache Hadoop

  • 1.3.11 Создание на главном узле файл подкачки

  • 1.3.12 Дополнительные команды

  • 1.4 Контрольные вопросы

  • ЛАБОРАТОРНАЯ РАБОТА № 2. НАСТРОЙКА РЕПЛИКАЦИИ НА СУБД MYSQL Цель работы 2.1

  • Общие сведение 2.2 2.2.1 Репликация данных

  • 2.2.2 Master-slave репликация

  • 2.2.3 Master-slave репликация на несколько slave серверов

  • 2.2.4 Задержка репликации

  • Дик-ДИ_2018_МУ. Технология построения защищенных распределенных приложений


    Скачать 0.74 Mb.
    НазваниеТехнология построения защищенных распределенных приложений
    Дата27.03.2022
    Размер0.74 Mb.
    Формат файлаpdf
    Имя файлаДик-ДИ_2018_МУ.pdf
    ТипМетодические указания
    #419638
    страница2 из 5
    1   2   3   4   5
    1.3 Порядок выполнения работы
    1.3.1 Установка операционной системы
    В качестве операционной системы для нашего кластера будем использовать Ubuntu Server 16.04.3 LTS.
    Все узлы будут работать на VirtualBox. Выставим следующие системные настройки для виртуальной машины: 10 GB пространства для жёсткого диска, два ядра и 1024 Мб памяти. Виртуальную машину можно оснастить двумя сетевыми адаптерами: один NAT, а другой для внутренней сети.
    После того, как была скачена и установлена операционная система, необходимо обновиться и установить ssh и rsync: sudo apt-get update && sudo apt-get upgrade sudo apt-get install ssh sudo apt-get install rsync
    Для редактирования файлов с консоли будем использовать редактор nano.
    Для его установки введем команду: sudo apt-get install nano
    Для запуска: nano файл или если нужно редактировать системные файлы (с root правами), то sudo nano файл
    Для удобства также можно поставит оболочку Midnight Commander sudo apt-get install mc для ее запуска mc или если хотите редактировать системные файлы (с root правами), то

    12 sudo mc
    Изменим имя узла на master в файле /etc/hostname.
    1.3.2 Установка Java
    Далее необходимо установить
    OpenJDK 8 версии:
    sudo apt-get install openjdk-8-jdk
    1.3.3 Создание отдельной учетной записи для запуска Hadoop
    Мы будем использовать выделенную учетную запись для запуска Hadoop.
    Это не обязательно, но рекомендуется. Также предоставим новому пользователю права sudo, чтобы облегчить себе жизнь в будущем. sudo addgroup hadoop sudo adduser --ingroup hadoop hduser sudo usermod -aG sudo hduser
    Во время создания нового пользователя, необходимо будет ввести ему пароль.
    1.3.4 Настройка статического IP адреса
    Для дальнейшей работы нам потребуются IP-адреса серверов. Для того чтобы узнать IP-адрес, можно воспользоваться командой ifconfig
    Вместо использования динамически выделенных адресов более удобным может оказаться использование статических адресов. Для настройки статического IP-адреса замените в файле /etc/network/interfaces для соответствующего интерфейса «dhcp» на «static» и укажите значения адреса, маски сети, шлюза и адрес DNS сервера для соответствия требованиям вашей сети: auto enp0s3 iface enp0s3 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254 dns-nameservers 192.168.0.254
    В приведенных далее примерах для серверов используются адреса вида
    192.168.0.X.
    1.3.5 Настройка доменного имени узла
    Нам необходимо, чтобы все узлы могли легко обращаться друг к другу. В большом кластере желательно использовать dns сервер, но для нашей маленькой конфигурации подойдет файл /etc/hosts. В нем мы будем описывать соответствие ip-адреса узла к его имени в сети. Для одного узла ваш файл должен выглядеть примерно так:

    13 127.0.0.1 localhost
    # The following lines are desirable for IPv6 capable hosts
    ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
    192.168.0.1 master
    1.3.6 Настройка SSH
    Для управления узлами кластера hadoop необходим доступ по ssh. Для созданного пользователя hduser предоставить доступ к master.
    Для начала необходимо сгенерировать новый ssh ключ: ssh-keygen -t rsa -P ""
    Следующим шагом необходимо добавить созданный ключ в список авторизованных: cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
    Проверяем работоспособность, подключившись к себе: ssh master
    Чтобы вернуться в локальную сессию, просто наберите: exit
    1.3.7 Отключение IPv6
    Если не отключить IPv6, то в последствии можно получить много проблем.
    Для отключения IPv6 в Ubuntu 12.04 / 12.10 / 13.04 нужно отредактировать файл sysctl.conf: sudo nano /etc/sysctl.conf
    Добавляем следующие параметры:
    # IPv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
    Сохраняем и перезагружаем операционную систему командой sudo reboot
    1.3.8 Установка Apache Hadoop
    Скачаем необходимые файлы. Актуальные версии фреймворка располагаются по адресу: http://www.apache.org/dyn/closer.cgi/hadoop/common.
    Воспользуемся стабильной версией 2.7.4.

    14
    Создадим папку downloads в корневом каталоге и скачаем последнюю версию: sudo mkdir /downloads cd /downloads sudo wget http://apache-mirror.rbc.ru/pub/apache/hadoop/common/stable/hadoop-
    2.7.4.tar.gz
    Распакуем содержимое пакета в /usr/local/, переименуем папку и выдадим пользователю hduser права создателя: sudo mv /downloads/hadoop-2.7.4.tar.gz /usr/local/ cd /usr/local/ sudo tar xzf hadoop-2.7.4.tar.gz sudo mv hadoop-2.7.4 hadoop sudo chown -R hduser:hadoop hadoop
    1.3.9 Обновление $HOME/.bashrc
    Для удобства, добавим в .bashrc список переменных:
    #Hadoop variables export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 export HADOOP_INSTALL=/usr/local/hadoop export PATH=$PATH:$HADOOP_INSTALL/bin export PATH=$PATH:$HADOOP_INSTALL/sbin export HADOOP_MAPRED_HOME=$HADOOP_INSTALL export HADOOP_COMMON_HOME=$HADOOP_INSTALL export HADOOP_HDFS_HOME=$HADOOP_INSTALL export YARN_HOME=$HADOOP_INSTALL
    На этом шаге заканчиваются предварительные подготовки.
    1.3.10 Настройка Apache Hadoop
    Все последующая работа будет вестись из папки /usr/local/hadoop.
    Откроем etc/hadoop/hadoop-env.sh и зададим JAVA_HOME. export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    Опишем, какие у нас будут узлы в кластере в файле etc/hadoop/slaves master
    Этот файл может располагаться только на главном узле. Все новые узлы необходимо описывать здесь.
    Основные настройки системы располагаются в etc/hadoop/core-site.xml:


    fs.defaultFS
    hdfs://master:9000


    Настройки HDFS лежат в etc/hadoop/hdfs-site.xml:



    15
    dfs.replication
    1


    dfs.namenode.name.dir
    file:/usr/local/hadoop/tmp/hdfs/namenode


    dfs.datanode.data.dir
    file:/usr/local/hadoop/tmp/hdfs/datanode


    Здесь параметр dfs.replication задает количество реплик, которые будут хранится на файловой системе. По умолчанию его значение равно 3. Оно не может быть больше, чем количество узлов в кластере.
    Параметры dfs.namenode.name.dir и dfs.datanode.data.dir задают пути, где будут физически располагаться данные и информация в HDFS. Необходимо заранее создать папку tmp.
    Сообщим нашему кластеру, что мы желаем использовать YARN. Для этого изменим etc/hadoop/mapred-site.xml:


    mapreduce.framework.name
    yarn


    mapreduce.job.reduces
    1


    mapreduce.task.io.sort.mb
    16


    mapreduce.map.memory.mb
    256


    mapreduce.map.cpu.vcores
    1


    mapreduce.reduce.memory.mb
    256


    mapreduce.reduce.cpu.vcores
    1


    mapreduce.job.heap.memory-mb.ratio
    0.8


    16

    mapreduce.map.java.opts
    -Djava.net.preferIPv4Stack=true
    -Xmx52428800



    mapreduce.reduce.java.opts
    -Djava.net.preferIPv4Stack=true
    -Xmx52428800



    Все настройки по работе YARN описываются в файле etc/hadoop/yarn- site.xml:


    yarn.nodemanager.aux-services
    mapreduce_shuffle


    yarn.nodemanager.aux-services.mapreduce.shuffle.class
    org.apache.hadoop.mapred.ShuffleHandler


    yarn.resourcemanager.scheduler.address
    master:8030


    yarn.resourcemanager.address
    master:8032


    yarn.resourcemanager.webapp.address
    master:8088


    yarn.resourcemanager.resource-tracker.address
    master:8031


    yarn.resourcemanager.admin.address
    master:8033


    yarn.nodemanager.resource.cpu-vcores
    1


    yarn.scheduler.minimum-allocation-vcores
    1


    yarn.scheduler.increment-allocation-vcores
    1


    yarn.scheduler.maximum-allocation-vcores
    2

    17


    yarn.nodemanager.resource.memory-mb
    2060


    yarn.scheduler.minimum-allocation-mb
    1


    yarn.scheduler.increment-allocation-mb
    512


    yarn.scheduler.maximum-allocation-mb
    2316


    yarn.nodemanager.vmem-check-enabled
    false


    Настройки resourcemanager нужны для того, чтобы все узлы кластера можно было видеть в панели управления.
    Сменим пользователя на hduser: su hduser
    Отформатируем HDFS:
    /usr/local/hadoop/bin/hdfs namenode –format
    Запустим hadoop службы:
    /usr/local/hadoop/sbin/start-dfs.sh
    /usr/local/hadoop/sbin/start-yarn.sh
    Необходимо убедиться, что запущены следующие java-процессы: hduser@master:/usr/local/hadoop$ jps
    4868 SecondaryNameNode
    5243 NodeManager
    5035 ResourceManager
    4409 NameNode
    4622 DataNode
    5517 Jps
    Теперь у нас есть готовый образ, который послужит основой для создания кластера.
    Далее можно создать требуемое количество копий нашего образа.
    На копиях необходимо настроить сеть, сгенерировать новые MAC-адреса для сетевых интерфейсов, выдать им необходимые IP-адреса и поправить файл
    /etc/hosts на всех узлах кластера так, чтобы в нем были прописаны все соответствия. Например:
    127.0.0.1 localhost

    18 192.168.0.1 master
    192.168.0.2 slave1
    Заменим имя нового узла на slave1, для этого внесем изменения в файл
    /etc/hostname.
    Сгенерируем на узле новые SSH-ключи и добавим их все в список авторизованных на узле master.
    На каждом узле кластера изменим значения параметра dfs.replication в
    /usr/local/hadoop/etc/hadoop/hdfs-site.xml. Например, выставим везде значение 2.


    dfs.replication
    2


    Добавим на узле master новый узел в файл
    /usr/local/hadoop/etc/hadoop/slaves: master slave1
    1.3.11 Создание на главном узле файл подкачки
    Создадим на главном узле папку, в которую попозже мы подмонтируем файл подкачки: sudo mkdir /media/swap
    Создаем файл подкачки sudo dd if=/dev/zero of=/media/swap/swapfile.img bs=2048 count=1M
    Выставляем нужные права на файл: sudo chmod 600 /media/swap/swapfile.img
    Создаем swap sudo mkswap /media/swap/swapfile.img
    Добавляем swap в fstab. Это нужно сделать чтобы каждый раз при старте
    ОС, автоматически монтировался файл подкачки, который мы создали, для этого открываем файл /etc/fstab в редакторе: sudo nano /etc/fstab и добавляем в файл:
    # mount swap image
    /media/swap/swapfile.img swap swap sw 0 0
    Активируем (включаем) наш swap sudo swapon /media/swap/swapfile.img
    Убедимся, что swap нормально работает. Для этого выполним: cat /proc/swaps

    19
    1.3.12 Запуск Hadoop
    Когда все настройки прописаны, то на главном узле можно запустить наш кластер.
    /usr/local/hadoop/sbin/start-dfs.sh
    /usr/local/hadoop/sbin/start-yarn.sh
    На slave-узле должны запуститься следующие процессы: hduser@slave1:/usr/local/hadoop$ jps
    1748 Jps
    1664 NodeManager
    1448 DataNode
    Теперь у нас есть свой мини-кластер. Посмотреть состояние нод кластера можно по адресу http://master:8088/cluster/nodes.
    Давайте запустим задачу Word Count. Для этого нам потребуется загрузить в HDFS несколько текстовых файлов. Для примера, возьмём книги в формате txt с сайта Free ebooks — Project Gutenberg. cd /home/hduser mkdir books cd books wget http://www.gutenberg.org/files/20417/20417.txt wget http://www.gutenberg.org/files/5000/5000-8.txt wget http://www.gutenberg.org/files/4300/4300-0.txt wget http://www.gutenberg.org/files/972/972.txt
    Перенесем наши файлы в HDFS: cd /usr/local/hadoop bin/hdfs dfs -mkdir /in bin/hdfs dfs -copyFromLocal /home/hduser/books/* /in bin/hdfs dfs -ls /in
    Запустим Word Count:
    /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoo p-mapreduce-examples-2.7.4.jar wordcount /in /out
    Отслеживать работу можно через консоль, а можно через веб-интерфейс
    ResourceManager'а по адресу http://master:8088/cluster/apps/.
    По завершению работы, результат будет располагаться в папке /out в
    HDFS.
    Для того, чтобы скачать его на локальную файловую систему выполним:
    /usr/local/hadoop/bin/hdfs dfs -copyToLocal /out /home/hduser/
    Теперь в директории /home/hduser/out можно увидеть результаты выполнения задачи.
    1.3.12 Дополнительные команды
    Удаление директории из HDFS:
    /usr/local/hadoop/bin/hdfs dfs –rm -r /out

    20
    Отмена режима HDFS только для чтения, возникшего из-за сбоя:
    /usr/local/hadoop/bin/hdfs dfsadmin -safemode leave
    Остановка Yarn:
    /usr/local/hadoop/sbin/stop-yarn.sh
    Остановка DFS:
    /usr/local/hadoop/sbin/stop-dfs.sh
    1.4 Контрольные вопросы
    1
    Для чего предназначен Hadoop?
    2
    Из каких компонентов состоит Hadoop?
    3
    В чем заключается парадигма MapReduce?
    4
    В чем заключается фаза map?
    5
    В чем заключается фаза reduce?
    6
    Какие преимущества дает использование парадигмы MapReduce при обработке «больших данных» (big data)?

    21
    ЛАБОРАТОРНАЯ РАБОТА № 2.
    НАСТРОЙКА РЕПЛИКАЦИИ НА СУБД MYSQL
    Цель работы
    2.1
    Цель лабораторной работы заключается в закреплении теоретических основ курса
    «Технологии построения распределенных защищенных приложений» и получении первоначальных навыков настройки репликации на СУБД MySQL.
    Общие сведение
    2.2
    2.2.1 Репликация данных
    Репликация (англ. replication) — механизм синхронизации содержимого нескольких копий объекта (например, содержимого базы данных). Под репликацией также понимают процесс копирования данных из одного источника на другой (или на множество других).
    Репликация является одной из техник масштабирования данных в распределенных системах. Репликация делятся на синхронные и асинхронные.
    В случае синхронной репликации, если одна реплика (копия) обновляется, все другие реплики того же фрагмента данных также должны быть обновлены в одной и той же транзакции. Это означает, что все реплики остаются непротиворечивыми. Недостатком данного метода являются высокие накладные расходы на синхронизацию реплик.
    В случае асинхронной репликации обновление одной реплики распространяется на другие спустя некоторое время, а не в той же транзакции.
    Таким образом, при асинхронной репликации вводится задержка, или время ожидания, в течение которого отдельные реплики могут быть фактически неидентичными. В тоже время накладные расходы на репликацию существенно уменьшаются.
    Существует два основных подхода при работе с репликацией данных в
    MySQL:
     репликация master-slave (ведущий – ведомый, главный – подчиненный, мастер – слейв);
     репликация master-master (мастер – мастер) или в более общем виде multimaster (мультимастер).
    2.2.2 Master-slave репликация
    В этом подходе выделяется один основной сервер базы данных, который называется ведущим. На нем происходят все изменения в данных (любые запросы MySQL INSERT/UPDATE/DELETE). Ведомый сервер постоянно копирует все изменения с Мастера. С приложения на ведомый сервер отправляются запросы чтения данных (запросы SELECT). Таким образом,

    22 ведущий сервер отвечает за изменения данных, а ведомый за чтение
    (рисунок 3).
    Рисунок 3 — Master-slave репликация
    В приложении нужно использовать два соединения — одно для ведущего сервера, второе для ведомого.
    $master = mysql_connect('10.10.0.1', 'root', 'pwd');
    $slave = mysql_connect('10.10.0.2', 'root', 'pwd');
    # ... mysql_query('INSERT INTO users ...', $master);
    # ...
    $q = mysql_query('SELECT * FROM photos ...', $slave);
    # Используем два соединения для записи и чтения соответственно
    2.2.3 Master-slave репликация на несколько slave серверов
    Преимущество этого типа репликации в том, что можно использовать более одного ведомого сервера. Обычно следует использовать не более 20 ведомых серверов при работе с одним ведущим (рисунок 4).
    Рисунок 4 — Master-slave репликация на несколько slave серверов
    запись
    PHP ведомый
    MySQL
    чтение ведомый
    MySQL ведомый
    MySQL
    чтение чтение ведущий
    MySQL чтение ведущий
    MySQL
    PHP ведомый
    MySQL
    чтение чтение запись
    10.10.0.1 10.10.0.2

    23
    Тогда в приложении один из ведомых серверов выбирается для обработки запросов случайным образом:
    $master = mysql_connect('10.10.0.1', 'root', 'pwd');
    $slaves = [
    '10.10.0.2',
    '10.10.0.3',
    '10.10.0.4',
    ];
    $slave = mysql_connect($slaves[array_rand($slaves)], 'root', 'pwd');
    # ... mysql_query('INSERT INTO users ...', $master);
    # ...
    $q = mysql_query('SELECT * FROM photos ...', $slave);
    2.2.4 Задержка репликации
    MySQL реализует асинхронную репликацию. Это означает, что данные на ведомом сервере могут появиться с небольшой задержкой. Поэтому, в последовательных операциях необходимо использовать чтение с ведущего сервера, чтобы получить актуальные данные:
    $master = mysql_connect('10.10.0.1', 'root', 'pwd');
    $slave = mysql_connect('10.10.0.2', 'root', 'pwd');
    # ... mysql_query('UPDATE users SET age = 25 WHERE id = 7', $master);
    $q = mysql_query ('SELECT * FROM users WHERE id = 7', $master);
    # При обращении к изменяемым данным, необходимо использовать
    # соединение с ведущим сервером
    # ...
    $q = mysql_query('SELECT * FROM photos ...', $slave);
    1   2   3   4   5


    написать администратору сайта