
Esta guía te permitirá montar un servidor web económico pero potente usando un ODROID-HC1 (familia XU4, incluido el ODROID-HC2) equipado con un SSD SATA.
Preparar el soporte de arranque
Antes de continuar, graba la última imagen oficial de Hardkernel Ubuntu Minimal en tu soporte de arranque: tarjeta microSD de 8GB + Clase 10. También puedes utilizar un módulo eMMC de Hardkernel, junto con un lector de tarjetas microSD USB3.
Visita al enlace http://bit.ly/2xaucO8 y descárgate la última imagen de Ubuntu Minimal. Además, accede al enlace https://etcher.io/ y descarga la versión de Etcher correspondiente a tu sistema operativo. Inserta la tarjeta microSD en tu ordenador y ejecuta Etcher, luego graba la imagen en tu microSD.
Configurar tu ODROID
Instala el SSD usando el puerto SATA en su ODROID-HC1. Asegúrate de utilizar la fuente de alimentación oficial 5V 4A+ de Hardkernel para garantizar que el SSD disponga de suficiente potencia. Una vez hecho esto, inserta el soporte de arranque ya preparado en tu ODROID y enciende el ODROID-HC1.
El primer arranque suele tardar unos 5 minutos en iniciar el sistema operativo. Si no se enciende tras aproximadamente 5 minutos, puedes probar a reiniciarlo, desconectando/conectando de nuevo el cable de alimentación y volviéndolo a encender.
Ten en cuenta que si utilizas un ODROID-XU4, puedes llegar a montar un NAS de alto rendimiento usando un hub USB con alimentación, un SSD/eMMC para el sistema operativo y uno o más discos duros para el NAS. Los hubs alimentados por bus pueden que no funcionen correctamente debido a una alimentación insuficiente.
Acceso SSH y actualización del sistema
Conéctate a tu ODROID-HC1 a través de SSH y empieza a darle forma a tu servidor web. Se recomienda encarecidamente actualizar la imagen de la tarjeta microSD. Eso te permitirá beneficiarte de las últimas correcciones y del posible soporte para funciones adicionales. Tras acceder por SSH, actualiza Ubuntu y el kernel con los siguientes comandos:
$ sudo apt-get update && sudo apt-get dist-upgrade $ sudo apt-get install linux-image-xu3 $ reboot
Convertir tu SSD en una partición root
Los soportes de arranque, como las tarjetas microSD, constituyen un sistema ineficiente porque las tarjetas microSD son lenta (para el sistema operativo y las aplicaciones que se ejecuten en ellas, como un servidor web) y están sujeta a fallos tras sucesivas escrituras. Aunque un módulo eMMC es una opción viable para un ODROID-XU4, éste no está disponible para el ODROID-HC1. Por todo ello, la instalación y uso de un SSD es muy recomendable para alojar sitios web que utilicen bases de datos. Para utilizar eficientemente un SSD para el arranque y las aplicaciones, sigue la guía paso a paso que se presenta a continuación, la cual te ayudará a preparar tu SSD con una partición root. Puedes consultar el post del foro en http://bit.ly/2gpT9OR para más detalles.
Re-particionar tu SSD
En primer lugar, debes particionar tu SSD para poder usarlo con dos particiones: una como partición root para el sistema operativo y la otra para los datos. Puedes obtener información sobre tu SSD usando la herramienta fdisk:
$ sudo fdisk -l # results ... Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 33553920 bytes Disklabel type: gpt Disk identifier: 0412F7EC-4E8C-4610-ABFF-D6293387ADB6Para particionar el SSD, utiliza la herramienta fdisk con el nombre correcto del dispositivo (/dev/sda tal y como aparece en el resultado del comando anterior):
$ sudo fdisk /dev/sdaLas opciones fdisk más útiles se detallan a continuación:
- p : Mostrar la tabla de particiones
- n : Añadir una nueva partición
- d : Eliminar una partición
- w : Escribir la tabla en el disco y salir
- q : Salir sin guardar los cambios
- g : Crear una nueva tabla de particiones GPT vacía
- m : Ayuda (menú)
Al mismo tiempo que consultas el menú anterior, elimina las particiones actuales, si las hay, y crea una nueva tabla de particiones GPT. Después crea una nueva partición para la partición root y otra para los datos. En nuestro caso, la partición root tendrá una capacidad de 16G y el resto de espacio irá para la partición de datos. Puedes especificar un tamaño de la partición especifico escribiendo una capacidad, por ejemplo, "+16G".
Revisa el resultado de tus acciones obteniendo información de las particiones con el parámetro "p". Si esta información coincide con tus preferencias, presiona "w" para guardar y salir.
# In fdisk Command (m for help): p Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 33553920 bytes Disklabel type: gpt Disk identifier: 0412F7EC-4E8C-4610-ABFF-D6293387ADB6 Device Start End Sectors Size Type /dev/sda1 2048 33556479 33554432 16G Linux filesystem /dev/sda2 33556480 234441614 200885135 95.8G Linux filesystem
Formatear y montar una partición EXT4
Los modernos sistemas Linux generalmente utilizan el sistema de archivos EXT4, de modo que es muy aconsejable crear particiones de tipo ext4:
$ sudo mkfs.ext4 /dev/sda1 $ sudo mkfs.ext4 /dev/sda2Una vez hecho esto, debes montar las particiones en directorios específicos para poder usar tu SSD. Crea los nuevos directorios para tu SSD:
$ sudo mkdir -p /media/systemdrive $ sudo mkdir -p /media/dataUsaremos /media/systemdrive como partición root y /media/data como partición de datos:
$ sudo mount /dev/sda1 /media/systemdrive $ sudo mount /dev/sda2 /media/dataLuego, verifica que estén montadas correctamente:
$ df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 16G 44M 15G 1% /media/systemdrive /dev/sda2 95G 60M 90G 1% /media/dataEl siguiente paso es modificar los archivos relacionados con el sistema para arrancar desde tu SSD.
Modificando boot.ini
Primero, consulta el UUID de root:
$ sudo lsblk -f # results NAME FSTYPE LABEL UUID MOUNTPOINT mmcblk1 |-mmcblk1p1 vfat boot 52AA-6867 /media/boot `-mmcblk1p2 ext4 rootfs e139ce78-9841-40fe-8823-96a304a09859 / sda |-sda2 ext4 6553d8f1-6224-450f-aec1-3b6f5fc09bd0 /media/data `-sda1 ext4 f00945e6-46ea-47db-893a-6a74548c3af7 /media/systemdriveToma nota del UUID para /media/systemdrive, luego cambia el UUID del sistema de archivos root en boot.ini para que tu gestor de arranque reconozca la partición del SSD como partición root:
$ sudo cp /media/boot/boot.ini /media/boot/boot.ini.bak $ sudo vi /media/boot/boot.iniBusca la expresión "Basic Ubuntu Setup" en el archivo:
... # Basic Ubuntu Setup. Don't touch unless you know what you are doing. # -------------------------------- setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0" …Cambia el UUID de root para que coincida con el valor anterior. Ten en cuenta que tus valores UUID pueden ser diferentes a los que se aparecen aquí.
Actualizando fstab
Para montar tus particiones automáticamente, añade las entradas necesarias en el archivo /etc/fstab.
$ sudo vi /etc/fstab UUID=e139ce78-9841-40fe-8823-96a304a09859 / ext4 errors=remount-ro,noatime 0 1 LABEL=boot /media/boot vfat defaults 0 1Comenta la primera línea y agrega nuevas líneas, tal y como se muestra a continuación:
#UUID=e139ce78-9841-40fe-8823-96a304a09859 / ext4 errors=remount-ro,noatime 0 1 LABEL=boot /media/boot vfat defaults 0 1 /dev/sda1 / ext4 defaults,noatime 0 1 /dev/sda2 /media/data ext4 defaults 0 2
Copiar un partición root
Copia la partición root de microSD al SSD usando la utilidad rsync:
$ sudo apt-get install rsync $ sudo rsync -axv / /media/systemdriveUna vez finalizado el proceso de copia, estarás listo para pasar al siguiente paso.
Verificar las particiones
Reinicia tu ODROID-HC1 y comprueba si la partición root montada es visible en tu SSD:
$ lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT mmcblk1 |-mmcblk1p1 vfat boot 52AA-6867 /media/boot `-mmcblk1p2 ext4 rootfs e139ce78-9841-40fe-8823-96a304a09859 sda |-sda2 ext4 daff1faa-3895-46cb-896f-bfe67f78535e /media/data `-sda1 ext4 07ac0233-7d4a-49ac-baf0-4a4ebd07741c /Tal y como aparece arriba, el MOUNTPOINT del sda1 es "/", lo que significa que el sistema arrancó correctamente desde el SSD.
Servidor LEMP (Linux, NGINX, MariaDB, PHP)
Hemos optado por utilizar nginx como servidor web. Éste utiliza una técnica asincrónica y orientada a eventos para manejar las conexiones, es rápido y tiene capacidad para atender solicitudes de muchos usuarios, además de ofrecer un rendimiento bastante fiable. Ha sido diseñado para ser un software liviano, el cual ofrece muchas características. Si deseas contar con la ventaja de poder usar funciones como es la instalación de módulos adicionales, decantarse por Apache sería una mejor opción.
PHP
Para instalar PHP, debes añadir un repositorio para PHP de antemano. Puedes instalar el último PHP para ARM, versión 7.1 o superior.
$ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update && sudo apt-get install php7.1-fpmUna vez finalizada la instalación, debes cambiar la zona horaria especificada en un archivo de configuración de PHP.
$ sudo vi /etc/php/7.1/fpm/php.iniBusca "date.timezone" y cámbiala de acuerdo a tu ubicación, inicialmente puede estar comentada por defecto.
MariaDB
No hay disponible un PPA oficial para MariaDB (http://bit.ly/2zktcMs) basado en la arquitectura ARM. Simplemente debes instalarlo desde el repositorio que se proporciona en Ubuntu. Además, debes instalar el paquete php-mysql para enlazar MariaDB con PHP. La instalación de los paquetes necesarios podría demorarse un poco.
$ sudo apt-get update && sudo apt-get install mariadb-server mariadb-client php-mysqlDeberías configurar el conjunto de idiomas que MariaDB usa para UTF-8.
$ sudo vi /etc/mysql/conf.d/mysql.cnfElimina todo el contenido existente y copia-pega el nuevo contenido que aparece a continuación.
# MariaDB-specific config file. # Read by /etc/mysql/my.cnf [client] # Default is Latin1, if you need UTF-8 set this # (also in server section) default-character-set = utf8mb4 [mysqld] # # * Character sets # # Default is Latin1, if you need UTF-8 set all this # (also in client section) # character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ciFinalmente, reinicia el servicio MariaDB.
$ sudo service mysql restart
Instalar nginx
Para instalar nginx, debes añadir un repositorio para nginx de antemano. Puedes instalar la última versión para ARM (versión 1.12+):
$ sudo add-apt-repository ppa:nginx/stable $ sudo apt-get update && sudo apt-get install nginxSi quieres usarlo con PHP, tienes que modificar la configuración del servidor:
$ sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak $ sudo vi /etc/nginx/sites-available/defaultColoca lo que aparece a continuación dentro del nuevo archivo de servidor por defecto.
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.php; server_name _; location / { try_files $uri $uri/ =404; } # This option is important for using PHP. location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; } }Reinicia el servicio nginx:
$ sudo service nginx reload
Comprobaciones
Puedes probar si funciona correctamente o no, creando una simple página de información PHP:
$ echo "?php phpinfo();" | sudo tee /var/www/html/index.phpCuando accedas a http://{DIRECCION IP ODROID}/, te mostrará información relacionada con PHP.
El entorno y las condiciones para las pruebas incluye:
-
Servidor LEMP
-
- Ubuntu Minimal 16.04.3 LTS con Kernel 4.9.51-64
- Nginx 1.12.1
- PHP 7.1.9
- MariaDB 10.0.31
- Herramientas para pruebas de rendimiento
- Apache JMeter 3.2 r1790748
- sysbench 0.4.12
- IOzone 3.471
Para probar su rendimiento, llevamos a cabo las pruebas que se muestran a continuación, con las condiciones que hemos enumerado anteriormente.
Sysbench
En primer lugar, crea una base de datos de "prueba" y después ejecuta las pruebas de rendimiento.
$ sudo sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root prepare $ sudo sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run $ sudo sysbench --test=oltp --mysql-db=test --mysql-user=root cleanupPara probar la E/S de archivos, ejecuta la siguiente prueba:
$ sudo sysbench --test=fileio --file-total-size=4G prepare $ sudo sysbench --test=fileio --file-total-size=4G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 --num-threads=8 run $ sudo sysbench --test=fileio --file-total-size=4G cleanup $ sudo iozone -e -I -a -s 100M -r 4k -r 16384k -i 0 -i 1 -i 2
Resultados
- Ten en cuenta que las pruebas del módulo eMMC se ejecutaron sobre un ODROID-XU4 y el resto de las de llevaron a cabo en el ODROID-HC1.
- Todos los resultados tienen sus propios márgenes de error
- Puesto que WordPress se ejecuta con PHP, MariaDB (MySQL) y Nginx (Apache), instalamos WordPress en cada sistema para crear unas condiciones de prueba nativas. Las pruebas de JMeter se ejecutaron accediendo a la página principal de WordPress por defecto.
- Observamos fallos en la respuesta si teníamos más de 140 usuarios accediendo de forma simultánea a la simple página web de WordPress.
- TPS es la abreviatura de Transacción por segundo, así que ésta es la prueba más cercana a un posible entorno de usuario.
HDD 2TB |
SSD 120G |
eMMC 64G |
eMMC 16G |
MicroSD
8G |
|
Apache JMeter |
|||||
TPS medio con 100 usuarios simultáneos | 51.1 | 53.1 | 54.5 | 53.4 | 52.3 |
Tiempo de Respuesta medio con 100 usuarios simultáneos | 1578 | 1519 | 1477 | 1510 | 1540 |
sysbench |
|||||
TPS medio OLTP(MySQL) | 361.81 | 401.59 | 396.43 | 395.14 | 340.05 |
Velocidad de transferencia media E/S Ficheros (Mbps) | 1.9359 | 17.982 | 24.593 | 16.738 | 0.094831 |
IOzone (Kbps) |
|||||
Velocidad de lectura aleatoria (4K) | 1580 | 20937 | 15466 | 15203 | 9139 |
Velocidad de escritura aleatoria (4K) | 1275 | 21078 | 15803 | 17939 | 827 |
Velocidad de lectura secuencial (16M) | 115209 | 363269 | 142535 | 147790 | 42885 |
Velocidad de escritura secuencial (16M) | 108979 | 278223 | 88529 | 33709 | 13022 |
Como puedes ver en la tabla anterior, un HDD es ligeramente más rápido que una tarjeta MicroSD en cuanto a la velocidad de acceso aleatorio. El resultado del TPS OLTP y la velocidad de acceso secuencial son bastante buenos, pero la velocidad de acceso aleatorio no es aceptable. El TPS medio que se muestra arriba es simplemente un valor promedio, necesitas saber que la velocidad de acceso aleatorio es uno de los valores más importantes a la hora medir la velocidad global del sistema. Los resultados OLTP del HDD ODROID variaron bastante entre las pruebas. Sin embargo, en lo que respecta a la velocidad de acceso secuencial, éste es casi tan rápido como un PC escritorio. Por lo tanto, usar una unidad de disco duro en el ODROID-HC1 para un NAS puede ser una muy buena opción.
Respecto a las pruebas TPS con los 100 usuarios simultáneos, no hay mucha diferencia. Sin embargo, en las otras pruebas, como la TPS OLTP y IOzone, el SSD o el eMMC 64G parecen más rápido que el resto. En la prueba E/S de ficheros, el SSD es la más rápido en las estadísticas por solicitud.
En base a los resultados anteriores, no se recomienda utilizar un HDD o tarjeta MicroSD para un sistema LEMP o LAMP. Recomendamos utilizar un módulo eMMC o SSD para lograr el mejor rendimiento con un ODROID-XU4/HC1/HC2 a la hora de alojar un sitio web y/o utilizarlo como un NAS. Para más detalles, puedes visitar el artículo original en http://bit.ly/2l5aUs1.
Be the first to comment