Creando Un Cluster De Hadoop, Parte 1
Vamos a crear un cluster de 3 nodos para Hadoop.
Por donde empiezo? ah si, es domingo, el sol brilla despues de varios dias de lluvia horrible y yo estoy solo de rodriguez en casa…que hacemos? aprovechar las horas muertas
y ponerme a montar ese clustercillo de nada que tenemos que preparar en $HouseOfCaos, para ver si el concepto nos gusta y podemos meterlo para todos los entornos de produccion, asi les damos un juguete nuevo a los $Devilopers.
Las maquinas
Nosostros vamos a utilizar Hortonworks 2.6 para que haga el despliegue desde Ambari. Luego, desdo otro Ambari conectamos a los demas Ambaris….el Meta-Ambari! :O
Os habeis leido la guia de Horton para particionar las maquinas?…no? pues leerosla aqui
Bien, una vez que tenemos claro que vamos a hacer, os cuento mi setup y como he tenido que empezar a hacer las cosas mal desde el principio, aunque abrigo la posibilidad de que esta PoC pase a produccion y pueda meterle mas nodos como dios manda.
| ROL | CORES | RAM | DISCOS | NICs |
|---|---|---|---|---|
| master NN & DN | 32 | 64 | 4 SAS 500GB | 2 x IntelPR01000 QUAD (8 NICS) |
| slave NN & DN | 32 | 64 | 4 SAS 500GB | 2 x IntelPR01000 QUAD (8 NICS) |
| EN + DN | 24 | 48 | 4 SAS 500GB | 2 x IntelPR01000 QUAD (8 NICS) |
NN > NameNodes
DN > DataNodes
EN > EdgeNodes
Como solo tenemos 3 nodos, voy a cruzar todos los servicios, asi si se me cae un nodo, los otro dos pueden vivir mientras lo intento revivir. Aparte, como creo que el futuro meteremos mas nodos, puedo ir sacando los DataNodes de los NamesNodes y meterlos en sus propios nodos.
La particion que he usado es la que recomienda Horton para los master: RAID 10 y JBOD donde puedas:
2 x 500 > RAID 10 > OS > EXT4
1 x 500 > RAID 0 > grid/1 > EXT4
1 x 500 > RAID 0 > grid/2 > EXT4
Y la disto, centos 7.3 porque es la que usamos por normal, aunque me hubiera gustado investigar alguna mas cloud porque estos nodos solo seran para esto, pero bueno.
La red
Tenemos 2 intel PRO1000/MT QUAD en cada maquina, con lo que vamos a montar algo que siempre me gusta hacer con las bases de datos: montar una red de datos que si no tenemos un maravilloso switch SAN o algo gordo, nos valen 10GB o en este caso bonding a muerte. Todo a un switch cisco de 24 puertos que vamos a partir en dios, para tambien usarlo para los servidores de MariaDB y descargar el core que Tenemos a tope.
Cada maquina viene con dos IntelPR01000 Quad. Como solo tenemos 1 switch cisco libre, vamos a crear la red de datos haciendo bonding entre 4 interfaces por maquina y el switch.
No es mucho, pero es mejor que nada.
Aqui nos metemos en la configuracion de la red, que desde hace unas distros en centos, te pone nombre raros y me vuelve loco. Asi que vamos a cambiar al viejo metodo de nombras las NICs que ya vereis como os gusta mas ;)
Renombrar NICS al viejo estilo
- Editamos el fichero /etc/default/grub
vim /etc/default/grub - Buscamos la linea de GRUB_CMDLINE_LINE y le agregamos al final:
net.ifnames=0 biosdevname=0 - Probamos que la configuracion es correcta
grub2-mkconfig - Y si todo esta ok, la generamos
grub2-mkconfig -o /boot/grub2/grub.cfg - Reiniciamos
Listo. Si esto lo haceis con un equipo que ya estuviera configurado, debereis de cambiar los nombres de las NICs y renombrar los ficheros de ifcfg-XXX, sino, no va a tener red antes de reiniciar.
Los valores a cambiar dentro de los ifcfg-XXX son:
1 | NAME= |
Configurando el bonding
Ya sabeis que hay varios tipos de bonding aunque yo casi siempre me suelo decantar por el mismo, LACP.
Este tiene la particularidad que tienes que configurarlo en el switch para indicarle que puertos debes de estar esperando ese protocolo, pero una vez hecho, puedes cambiarlo de puerto y que lo siga reconociendo.
Ya que tenemos 8 NICs voy a distribuirlos de la siguiente manera, intentando tener siempre 2 interfaces en cada tarjeta de red, asi si muere una tarjeta de red, tenemos backup.
- eth 6 y 7 > bondWAN0
- eth 1,2,5,8 > bondDATA0
- eth 3 > Management
- eth 4 > backup
Creamos el fichero para los alias
vi /etc/modprobe.d/bonding.confConfiguramos el alias con los Bondx para tenerlo contralizado y no tenerlo en los ficheros ifcfg-ethX
1
2alias bondWAN0 bonding
options bondWAN0 miimon=100 mode=4 lacp_rate=1Configuramos los interfaces por separado, incluyendo el bondWAN0
- ifcfg-eth6
1
2
3
4
5
6
7BOOTPROTO=none
NM_CONTROLLED=no
NAME=eth6
DEVICE=eth6
ONBOOT=yes
MASTER=bondWAN0
SLAVE=yes - ifcfg-eth7
1
2
3
4
5
6
7BOOTPROTO=none
NM_CONTROLLED=no
NAME=eth7
DEVICE=eth7
ONBOOT=yes
MASTER=bondWAN0
SLAVE=yes - ifcfg-bondWAN0
1
2
3
4
5
6
7DEVICE=bondWAN0
NAME=bondWAN0
IPADDR=10.25.12.110
NETMASK=255.255.255.0
GATEWAY=10.25.12.1
USERCTL=no
BOOTPROTO=none
Reiniciamos la red
1
service network restart
oh! nos escupe este error….que podra ser?
1
2
3Mar 11 10:20:59 localhost NetworkManager[704]: <info> [1520763659.0821] device (lo): link connected
Mar 11 10:20:59 localhost NetworkManager[704]: <info> [1520763659.2367] audit: op="connection-activate" uuid="b7908d14-XXXXXX-8986afa6cf97" name="bondWAN0" result="fail" reason="No suitable device found for this connection."
Mar 11 10:23:50 localhost NetworkManager[704]: <info> [1520763830.7592] caught SIGTERM, shutting down normally.Maldito NetworkManager….Lo desactivamos.
1
service NetworkManager stop; chkconfig NetworkManager off`
…y volvemos a probar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24service network restart
Mar 11 11:03:44 localhost systemd: Stopping LSB: Bring up/down networking...
Mar 11 11:03:44 localhost kernel: bondWAN0: Removing slave eth6
Mar 11 11:03:44 localhost kernel: bondWAN0: Releasing backup interface eth6
Mar 11 11:03:44 localhost kernel: bondWAN0: the permanent HWaddr of eth6 - ac:XX:XX:XX:XX - is still in use by bondWAN0 - set the HWaddr of eth6 to a different address to avoid conflicts
Mar 11 11:03:45 localhost firewalld[702]: ERROR: UNKNOWN_INTERFACE: 'eth6' is not in any zone
Mar 11 11:03:45 localhost kernel: bondWAN0: Removing slave eth7
Mar 11 11:03:45 localhost kernel: bondWAN0: Releasing backup interface eth7
Mar 11 11:03:45 localhost firewalld[702]: ERROR: UNKNOWN_INTERFACE: 'eth7' is not in any zone
Mar 11 11:03:46 localhost network: Shutting down interface bondWAN0:
Mar 11 11:03:46 localhost network: Shutting down loopback interface:
Mar 11 11:03:46 localhost systemd: Stopped LSB: Bring up/down networking.
Mar 11 11:03:46 localhost systemd: Starting LSB: Bring up/down networking...
Mar 11 11:03:46 localhost network: Bringing up loopback interface:
Mar 11 11:03:46 localhost kernel: IPv6: ADDRCONF(NETDEV_UP): bondWAN0: link is not ready
Mar 11 11:03:46 localhost kernel: bondWAN0: Adding slave eth6
Mar 11 11:03:46 localhost kernel: bondWAN0: Enslaving eth6 as an active interface with an up link
Mar 11 11:03:46 localhost kernel: bondWAN0: Adding slave eth7
Mar 11 11:03:46 localhost kernel: bondWAN0: Enslaving eth7 as an active interface with an up link
Mar 11 11:03:49 localhost kernel: tg3 0000:03:00.3 eth6: Link is up at 1000 Mbps, full duplex
Mar 11 11:03:49 localhost kernel: tg3 0000:03:00.3 eth6: Flow control is off for TX and off for RX
Mar 11 11:03:49 localhost kernel: tg3 0000:03:00.3 eth6: EEE is disabled
Mar 11 11:03:51 localhost network: Bringing up interface bondWAN0:
Mar 11 11:03:52 localhost systemd: Started LSB: Bring up/down networking.Listo!
Ahora ya podemos acceder por ssh y continuar fuera de la iLO.
Haz lo mismo en todos los nodos del cluster y listo.
Para la red de datos, vamos a hacer lo mismo, pero creado otro bond y agregando las otras interfaces al otro bond.
Yo suelo crear una red 192.168.x.x sin siquiera salida a internet.
Esa es la red que usaremos para que los nodos de hadoop se hablen entre ellos. Esta publica solo tendra el 22 y el 8080 de ambari abierto. Lo demas, cerrado con iptables.
Ya esta bien por hoy, continuaremos esta semana con la segunda parte: Configurando la bondDATA0 e instalando Ambari. Aunque todo eso lo vamos a hacer usando Ansible.
Teneis toda la bibliografia aqui abajo, echadle un vistazo si os place.
ByeBye!
[1] link aggregation basics (https://www.thomas-krenn.com/en/wiki/Link_Aggregation_and_LACP_basics)
[2] bonding module directives (https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s3-modules-bonding-directives.html)
[3] disabling network manager
(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/3/html/Installation_and_Configuration_Guide/Disabling_Network_Manager.html)
[4] Custom Install of Hortonworks Data Platform like a Pro (https://community.hortonworks.com/articles/16763/cheat-sheet-and-tips-for-a-custom-install-of-horto.html)