Добра всем читающим!
Этот хау-ту размещаю по горячим следам с целью, во-первых, не забыть как делать, а во-вторых, с целью помочь кому-либо создавать инстансы в облаке Google.
Решаемые задачи:
- три инстанса в разных регионах зоны Европа
- общий диск для двух инстансов
- балансировщик нагрузки по http
- облачная база MySQL
- из третьего инстанса выкладывать файлы в Bucket Google
Вопрос: «А почему cloud.google?» оставим на совести заказчика. Мопед был не мой, я только разбирался с новой для себя системой управления VPS. А предлагается там следующее (излагаю тезисно):
- App Engine — Сервис для приложений и совместной работы с кодом. Кому интересно документация
- Compute Engine — собственно VPS, диски к ним, файрволл(ы), баласировщики (про них дальше, до сих пор в недоумении почему их два), управление снапшотами и квотами
- Networking — Cloud DNS от Google и VPN
- Storage — облачное хранилищие, хранилище данных и облачный SQL (MySQL)
- BigData — нечто сверхпростое и мне совершенно неясное
Воспользовался разделом Compute Engine, Storage, Networking, Storage.

На скриншоте открыты области, в которых можно создать диск. Нас интересует Европа. Обращаю внимание, указано что датацентр «a» в Европе будет закрыт. Пытливый читатель может поискать расположение центров b,c и d фактически, меня вопрос физического расположения волнует мало.
В моем аккаунте можно создать «Standard Persistent Disk» максимальным размером до 240 Gb. Примитивный тест скорости чтения/записи диска ниже:
sync; dd if=/dev/zero of=/tempfile bs=1M count=4096; sync && dd if=/tempfile of=/dev/null bs=1M count=4096 && /sbin/sysctl -w vm.drop_caches=3 && dd if=/tempfile of=/dev/null bs=1M count=4096 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 112.806 s, 38.1 MB/s 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 52.036 s, 82.5 MB/s vm.drop_caches = 3 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 52.7394 s, 81.4 MB/s
Тип исходника для диска (Source Type): Image, Snapshot, Blank соответственно предустановленный образ ОС, из снапшота системы или пустой диск.

Лично меня интересовал Debian, кроме него Google предлагает развернуть CentOS, CoreOS, OpenSUSE, Ubuntu, RHEL, Sles и Windows Server 2008.
Создал диск на 10 Гб с Debian Wheezy в области «B» и «C» Europe. Потом в области «C» удалил. Задача состоит в том, чтобы развернуть рабочий сервер и сделать его зеркало. А раз так, то диск в области «C» будем разворачивать из снапшота диска в области «B».
Теперь создаем сам инстанс:

Список возможных (доступных мне) вариантов VPS, правда он прикрывает выбор вариантов файрволла дефолтных у google: HTTP Traffic и HTTPS Traffic

Отмечаем оба варианта, идем дальше — выбираем Exiting Disk и говорим какой из дисков подключить к машине. Надо сказать, что второй диск когда я цеплял к инстансу, то все было сделано «на горячую» — появился /dev/sdb, который я успешно разбил и примонтировал не перезагружая инстанс.
Кстати диск во время удаления инстанса можно удалить: необходимо выделить соответствующий пункт ниже выбора типа диска.
Раздел Networking при создании доступен только IP адрес — внутренняя сеть или прилепим белый IP.
Кстати, ISPanel до сих пор не понимает, что есть Amazon, Google и прочие сервисы, у которых не прописывается IP адрес в настройки сети. Установка и лицензирование панели усложняются ожиданием техподдержки или созданием виртуального интерфейса с нужным ISPanel адресом. Ну неудобно же!
Когда инстанс создан можно зайти в его настройки и увидеть:

И озадачится вопросом: «а как получить доступ по SSH?». Вот собственно я изучал предмет минут 30, вышло следующее:

В блоке управления SSH ключами вводится ключ, сгенерированый, например, PuttyGen.
а) Запускаем
б) нажимаем Generate
в) болтаем мышью
г)получаем ключ
д)меняем Key Comment на имя пользователя
е) Save public key
ж) Save private key — не защищаем паролем файл
з) Copy/Paste из окна в SSH Keys строку вида ssh-rsa ABRAKADABRA dmitry

Если мы прилепили белый IP, то можно идти авторизовываться именем пользователя в созданном инстансе (в Putty файл ключа указывается в настройках: Connection->SSH->Auth). А можно зайти в консоль через веб-интерфейс из гугла (вверху кнопка SSH). А еще наверное можно настроить VPN из соответствующего раздела для доступа к закрытому серверу, не пробовал.
- Compute Engine — New Snapshot
- обзываем снапшот и выбираем нужный диск
- Create
В дисках создаем новый диск из снапшота в нужном регионе и прикручиваем его к инстансу. На этом клонирование завершено. Заняло 10 минут.
При настройке файрволла руководствуемся здравым смыслом. Синтаксис простой.

Надо сказать, что Google Chrome чудил и минут 30 заводил и не завел ни одно правило. Спас Mozilla, однако заводить правило для файрволла реально долго, около 3 минут у меня заняло.
Более ничего не добавлю, все просто как киянка.
Получить доступ к базам данных можно из PHP, Phyton, JAVA, console и тп. Приведу пример для PHP:
// Using PDO_MySQL (connecting from App Engine) $db = new pdo('mysql:unix_socket=/cloudsql/<тут был ID>:<а тут имя Cloud SQL>'), 'root', // username '' // password ); // Using mysqli (connecting from App Engine) $sql = new mysqli( null, // host 'root', // username '', // password '', // database name null, '/cloudsql/<тут был ID>:<а тут имя Cloud SQL>' ); // Using MySQL API (connecting from APp Engine) $conn = mysql_connect(':/cloudsql/<тут был ID>:<а тут имя Cloud SQL>, 'root', // username '' // password );
И понаделать пользователей через спец.консоль.
И дать доступы с выбранных инстансов или IP адресов.

В консоли управления Cloud SQL через кнопку EDIT можно найти привычные настройки для my.cnf.
gsutil Usage: gsutil [-D] [-DD] [-h header]... [-m] [-o] [-q] [command [opts...] args...]
Сначала нужно обновится:
gcloud components update
Авторизоваться:
root@host:~# gcloud auth login You are running on a GCE VM. It is recommended that you use service accounts for authentication. You can run: $ gcloud config set account ``ACCOUNT'' to switch accounts if necessary. Your credentials may be visible to others with access to this virtual machine. Are you sure you want to authenticate with your personal account? Do you want to continue (Y/n)? y Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth? Enter verification code:
Ссылка была на 10 строк, я ее немного сократил. По этой ссылке мы даем доступ от пользователя Google, получаем ID, который вбиваем в verification code:
Имеем доступ, в моем случае, к Bucket. Ну или можем создать:
:~# gsutil ls gs://storage/ ИЛИ ниже создает Bucket gsutil mb CommandException: The mb command requires at least 1 argument. Usage: gsutil mb [-c class] [-l location] [-p proj_id] uri.. Смотрим что вышло :~# gsutil ls gs://storage/ gs://storage/gcsfs_0.15-1_amd64.deb
Это я туда файлик закинул.
Можем синхронизировать Bucket и каталог системы:
gsutil rsync -d -r gs://zp-storage/ /usr/src
Ну и так далее и тому подобное.
Для того, чтобы примонтировать Bucket gs://zp-storage/ как каталог, необходимо воспользоваться парой сторонних утилит:
s3fuse — утилита, которая используется для аналогичных целей, например, для монтирования Amazon S3. Пишут, что с ее помощью можно монтировать Cloud Storage (google), но что-то я не нашел вразумительного конфига хотя бы с комментарием сего действа.
gcsfs — утилита, которая работает с Cloud Storage (google).
Из пакетов по зависимостям s3fuse не встала, собирал из исходников. Сборка идет ./configure && make && make install, а вот перечень зависимостей:
aptitude install mpi-default-bin mpi-default-dev libboost-all-dev povray libxml++2.6-2 libxml++2.6-dev libfuse-dev libfuse
А вот gcsfs встал из пакета deb.
Необходимые изменения в conf-файлах для подключения Google Cloud Storage:
nano /etc/gcsfs.conf bucket_name=<имя bucket-а> service=google-storage gs_token_file=/etc/gs.token touch /etc/gs.token gcsfs_gs_get_token /etc/gs.token
Последняя комманда запускает авторизацию через WEB по ссылке вида
accounts.google.com/o/oauth2/auth?client_idbLaBlABBBBLLLLAAAA
С получением authorization code, который необходимо ввести в строку для создания токена подключения к Storage.
:/etc# /usr/bin/gcsfs Usage: gcsfs [options] <mountpoint> Options: -f stay in the foreground (i.e., do not daemonize) -h, --help print this help message and exit -o OPT... pass OPT (comma-separated) to FUSE, such as: allow_other allow other users to access the mounted file system allow_root allow root to access the mounted file system default_permissions enforce permissions (useful in multiuser scenarios) gid=<id> force group ID for all files to <id> config=<file> use <file> rather than the default configuration file uid=<id> force user ID for all files to <id> -v, --verbose enable logging to stderr (can be repeated for more verbosity) -vN, --verbose=N set verbosity to N -V, --version print version and exit
монтирую так:
/usr/bin/gcsfs -o allow_other /<каталог>
Тут хаутушечке конец, кто открыл хоть один спойлер — молодец.
Большая просьба. Опираясь на предыдущий опыт написания на Habrahabre статей, прошу минусовать обоснованно. Иначе рискую никогда не понять в чем мои недочеты: в стиле изложения, в конкретике, в восприятии и изложении мной информации. За каждый коммент буду слать позитивные лучи.
ссылка на оригинал статьи http://habrahabr.ru/post/252799/

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