Docs Menu
Docs Home
/

Convierta un set de réplicas autogestionado en un clúster

Los clústeres fragmentados dividen los datos en varios servidores en función de un Clave de fragmento. Un clúster fragmentado escala mejor que un conjunto de réplicas para implementaciones con grandes conjuntos de datos y operaciones de alto rendimiento.

Este tutorial convierte un conjunto de réplicas de tres miembros en un clúster fragmentado con dos fragmentos. Cada fragmento del nuevo clúster es un conjunto de réplicas independiente de tres miembros.

Puede convertir a un clúster fragmentado en la interfaz de usuario para implementaciones alojadas en MongoDB Atlas.

Este tutorial utiliza los siguientes servidores:

Nombre del host
Puerto
Descripción

mongodb0.example.net

27017

Miembro del fragmento inicial que contiene datos, rs0.

mongodb1.example.net

27017

Miembro del fragmento inicial que contiene datos, rs0.

mongodb2.example.net

27017

Miembro del fragmento inicial que contiene datos, rs0.

mongodb3.example.net

27018

Miembro del segundo fragmento que contiene datos, rs1.

mongodb4.example.net

27018

Miembro del segundo fragmento que contiene datos, rs1.

mongodb5.example.net

27018

Miembro del segundo fragmento que contiene datos, rs1.

mongodb6.example.net

27017

mongosEl, utilizado para conectarse al clúster fragmentado.

mongodb7.example.net

27019

Miembro del conjunto de réplicas del servidor de configuración.

mongodb8.example.net

27019

Miembro del conjunto de réplicas del servidor de configuración.

mongodb9.example.net

27019

Miembro del conjunto de réplicas del servidor de configuración.

Los nombres de host utilizados en este tutorial son ejemplos. Reemplace los nombres de host utilizados en los comandos de ejemplo con los nombres de host utilizados en sus implementaciones.

Importante

Para evitar actualizaciones de configuración debido a cambios en las direcciones IP, utilice nombres de host DNS en lugar de direcciones IP. Es particularmente importante usar un nombre de host DNS en lugar de una dirección IP al configurar miembros de set de réplicas o miembros de clústeres particionados.

Utiliza nombres de host en lugar de direcciones IP para configurar clústeres en un horizonte de red dividido. A partir de MongoDB 5.0, los nodos que solo están configurados con una dirección IP no pasan la validación de inicio y no se inician.

Nota

A partir de MongoDB 8.0, solo puedes ejecutar ciertos comandos en nodos de clústeres fragmentados. Si intentas conectarte directamente a un nodo y ejecutar un comando no compatible, MongoDB devuelve un error:

"You are connecting to a sharded cluster improperly by connecting directly
to a shard. Please connect to the cluster via a router (mongos)."

Para ejecutar un comando de base de datos no compatible directamente contra un nodo en un clúster fragmentado, debes conectarte a mongos o tener el rol de solo mantenimiento directShardOperations.

1

Para obtener los usuarios y roles existentes, ejecute mongodump:

mongodump -d=admin --out=adminDump -u <adminUser> -p <password> --host <replicaSetURI> --dumpDbUsersAndRoles
2

Implemente un conjunto de réplicas de tres miembros para los servidores de configuración. En este ejemplo, los servidores de configuración utilizan los siguientes hosts:

  • mongodb7.example.net

  • mongodb8.example.net

  • mongodb9.example.net

  1. Configurar los servidores de configuración

    Configure una instancia en cada host del servidor mongod de configuración. Especifique estas opciones en el archivo de configuración para cada mongod instancia:

    Opción
    Valor

    configReplSet

    configsvr

    localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones de mongod cliente.

    replication:
    replSetName: configReplSet
    sharding:
    clusterRole: configsvr
    net:
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda para su implementación.

  2. Inicie los servidores de configuración

    Implemente el con la configuración mongod especificada:

    mongod --config <PATH_TO_CONFIG_FILE>

    Los servidores de configuración utilizan el directorio de datos predeterminado /data/configdb y el puerto predeterminado 27019.

  3. Conéctese a uno de los servidores de configuración.

    Utilice para conectarse a uno de los servidores de configuración. Por mongosh ejemplo:

    mongosh "mongodb://mongodb7.example.net:27019"
  4. Inicie el conjunto de réplicas del servidor de configuración.

    Para iniciar el conjunto de réplicas,rs.initiate() ejecute:

    rs.initiate( {
    _id: "configReplSet",
    configsvr: true,
    members: [
    { _id: 0, host: "mongodb7.example.net:27019" },
    { _id: 1, host: "mongodb8.example.net:27019" },
    { _id: 2, host: "mongodb9.example.net:27019" }
    ]
    } )

    El comando anterior utiliza la excepción localhost para realizar acciones administrativas sin autenticación.

    Importante

    Se debe ejecutar rs.initiate() en una sola instancia mongod para el set de réplicas.

3

Restaure los usuarios y roles existentes que tenía cuando ejecutó mongodump.

mongorestore ./adminDump --nsInclude "admin.*" --host <configPrimaryURI>

El comando anterior utiliza la excepción localhost para realizar acciones administrativas sin autenticación.

El resultado de ejecutar este comando puede ser similar a:

0 document(s) restored successfully

Este mensaje no indica ningún problema. Significa que se restauraron 0 documentos, aparte de los usuarios y roles.

4

Reconfigure y reinicie el conjunto de réplicas del servidor de configuración.

  1. Reconfigurar los servidores de configuración

    Seleccione la pestaña para su mecanismo de autenticación:

    Reinicie una instancia en cada uno de estos mongod hosts:

    • mongodb7.example.net

    • mongodb8.example.net

    • mongodb9.example.net

    Especifique estas opciones en el archivo de configuración para cada mongod instancia:

    Opción
    Valor

    La ruta al archivo de clave utilizado para su conjunto de réplicas inicial.

    security:
    keyFile: <PATH_TO_KEYFILE>
    replication:
    replSetName: configReplSet
    sharding:
    clusterRole: configsvr
    net:
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda para su implementación.

    Reinicie una instancia en cada uno de estos mongod hosts:

    • mongodb7.example.net

    • mongodb8.example.net

    • mongodb9.example.net

    Especifique estas opciones en el archivo de configuración para cada mongod instancia además de las opciones que ya configuró:

    Opción
    Valor

    x509

    requireTLS

    La ruta absoluta al archivo .pem que contiene el certificado TLS y la clave.

    La ruta absoluta hacia el archivo .pem que contiene la cadena de certificados raíz de la Autoridad Certificadora.

    localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones de mongod cliente.

    ADVERTENCIA: Antes de vincular su instancia a una dirección IP pública, debe proteger su clúster contra accesos no autorizados. Para obtener una lista completa de recomendaciones de seguridad, consulte la Lista de verificación de seguridad para implementaciones autogestionadas. Como mínimo, considere habilitar la autenticación y reforzar la infraestructura de red.

    sharding:
    clusterRole: configsvr
    replication:
    replSetName: configReplSet
    security:
    clusterAuthMode: x509
    net:
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda a su implementación, como si su archivo de clave de certificado TLS está encriptado con una net.tls.certificateKeyFilePassword contraseña.

  2. Reiniciar MongoDB

    Reinicie el con la configuración mongod especificada:

    mongod --config <PATH_TO_CONFIG_FILE> --shutdown
    mongod --config <PATH_TO_CONFIG_FILE>
5

mongos proporciona la interfaz entre las aplicaciones cliente y el clúster fragmentado.

  1. Crea un archivo de configuración para mongos.

    Especifique estas opciones en su mongos archivo de configuración:

    Opción
    Valor

    configReplSet, seguido de una barra / y al menos uno de los nombres de host y puertos del servidor de configuración.

    La ruta al archivo de clave utilizado para su conjunto de réplicas inicial.

    localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones de mongos cliente.

    sharding:
    configDB: configReplSet/mongodb7.example.net:27019,mongodb8.example.net:27019,mongodb9.example.net:27019
    security:
    keyFile: <PATH_TO_KEYFILE>
    net:
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda para su implementación.

    Especifique estas opciones en su mongos archivo de configuración:

    Opción
    Valor

    configReplSet, seguido de una barra / y al menos uno de los nombres de host y puertos del servidor de configuración.

    x509

    requireTLS

    La ruta absoluta al archivo .pem que contiene el certificado TLS y la clave.

    La ruta absoluta hacia el archivo .pem que contiene la cadena de certificados raíz de la Autoridad Certificadora.

    localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones de mongos cliente.

    sharding:
    configDB: configReplSet/mongodb7.example.net:27019,mongodb8.example.net:27019,mongodb9.example.net:27019
    security:
    clusterAuthMode: x509
    net:
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<ipaddress>

    Incluya cualquier opción adicional adecuada para su implementación.

  2. Implementar los mongos.

    Implemente el con la configuración mongos especificada:

    mongos --config <PATH_TO_CONFIG_FILE>
6

En este ejemplo, el conjunto de réplicas inicial consta de tres miembros. Este paso actualiza el conjunto de réplicas inicial para que pueda añadirse como fragmento al clúster fragmentado.

El conjunto de réplicas se ejecuta en estos hosts:

  • mongodb0.example.net:27017

  • mongodb1.example.net:27017

  • mongodb2.example.net:27017

Para clústeres fragmentados, debe configurar el rol para cada instancia mongod del shardsvr fragmento. Para especificar el rol del servidor, configure el valor en sharding.clusterRole el mongod archivo de configuración.

Nota

El puerto predeterminado para las instancias con mongod el shardsvr rol 27018 es. Para usar un puerto diferente, especifique la net.port configuración.

  1. Conéctese a un miembro de su conjunto de réplicas inicial.

    Utilice para conectarse a uno mongosh de los miembros de su conjunto de réplicas inicial.

    mongosh "mongodb://<username>@mongodb0.example.net:27017"

    Si su implementación utiliza509 autenticación X., especifique estas mongosh opciones:

    Por ejemplo:

    mongosh "mongodb://<username>@mongodb0.example.net:27017" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
  2. Determinar los elementos primarios y secundarios del conjunto de réplicas.

    Ejecute para determinar los primarios y rs.status() secundarios:

    rs.status()

    En la salida del comando, el campo indica qué miembro es el principal y cuáles son los replSetGetStatus.members[n].stateStr secundarios.

  3. Reinicie los secundarios con la opción --shardsvr.

    Advertencia

    Este paso requiere cierto tiempo de inactividad para las aplicaciones conectadas a los secundarios del conjunto de réplicas.

    1. Conectarse a un secundario.

      Utilice para conectarse a uno de los mongosh secundarios.

      mongosh "mongodb://<username>@<host>:<port>"
    2. Apague el secundario.

      Ejecute los siguientes comandos:

      use admin
      db.shutdownServer()
    3. Editar el archivo de configuración del secundario.

      En el archivo de configuración del secundario,sharding.clusterRole establezca shardsvr en:

      security:
      keyFile: <PATH_TO_KEYFILE>
      replication:
      replSetName: rs0
      sharding:
      clusterRole: shardsvr
      net:
      port: 27017
      bindIp: localhost,<ipaddress>

      Incluya opciones adicionales según corresponda para su implementación.

    4. Reinicie el secundario como servidor de particiones.

      Ejecute el siguiente comando en el host que contiene el secundario:

      mongod --config <PATH_TO_CONFIG_FILE>
    5. Repita los pasos de apagado y reinicio para el otro secundario.

    1. Conectarse a un secundario.

      Utilice para conectarse a uno de los mongosh secundarios.

      Si su implementación utiliza509 autenticación X., especifique estas mongosh opciones:

      mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
    2. Apague el secundario.

      Ejecute los siguientes comandos:

      use admin
      db.shutdownServer()
    3. Editar el archivo de configuración del secundario.

      En el archivo de configuración del secundario,sharding.clusterRole establezca shardsvr en:

      replication:
      replSetName: rs0
      sharding:
      clusterRole: shardsvr
      security:
      clusterAuthMode: x509
      net:
      port: 27017
      tls:
      mode: requireTLS
      certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
      CAFile: <CA_FILE>
      bindIp: localhost,<ipaddress>

      Incluya opciones adicionales según corresponda a su implementación, como si su archivo de clave de certificado TLS está encriptado con una net.tls.certificateKeyFilePassword contraseña.

    4. Reinicie el secundario como servidor de particiones.

      Ejecute el siguiente comando en el host que contiene el secundario:

      mongod --config <PATH_TO_CONFIG_FILE>
    5. Repita los pasos de apagado y reinicio para el otro secundario.

7

Advertencia

Este paso requiere cierto tiempo de inactividad para las aplicaciones conectadas a la parte principal del conjunto de réplicas.

  1. Conectarse al primario.

    Usa mongosh para conectarte al primario:

    mongosh "mongodb://<username>@<host>:<port>"
  2. Reducir la primaria.

    Ejecuta el siguiente comando:

    rs.stepDown()
  3. Verifique que el paso hacia abajo se haya completado.

    Ejecute para confirmar que el miembro al que está conectado se ha retirado y ahora es rs.status() secundario:

    rs.status()
  4. Cerrar las antiguas primarias.

    Ejecute los siguientes comandos:

    use admin
    db.shutdownServer()

    Espere a que se complete el apagado.

  5. Editar el archivo de configuración principal.

    En el archivo de configuración principal,sharding.clusterRole establezca shardsvr en:

    security:
    keyFile: <PATH_TO_KEYFILE>
    replication:
    replSetName: rs0
    sharding:
    clusterRole: shardsvr
    net:
    port: 27017
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda para su implementación.

  6. Reinicie el servidor principal como un servidor fragmentado.

    Ejecute el siguiente comando en el host que contiene el servidor principal:

    mongod --config <PATH_TO_CONFIG_FILE>
  1. Conectarse al primario.

    Utilice para conectarse a uno de los mongosh secundarios.

    Si su implementación utiliza509 autenticación X., especifique estas mongosh opciones:

    Si su implementación utiliza509 autenticación X., especifique estas mongosh opciones:

    mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
  2. Reducir la primaria.

    Ejecuta el siguiente comando:

    rs.stepDown()
  3. Verifique que el paso hacia abajo se haya completado.

    Ejecute para confirmar que el miembro al que está conectado se ha retirado y ahora es rs.status() secundario:

    rs.status()
  4. Cerrar las antiguas primarias.

    Ejecute los siguientes comandos:

    use admin
    db.shutdownServer()

    Espere a que se complete el apagado.

  5. Editar el archivo de configuración principal.

    En el archivo de configuración principal,sharding.clusterRole establezca shardsvr en:

    replication:
    replSetName: rs0
    sharding:
    clusterRole: shardsvr
    security:
    clusterAuthMode: x509
    net:
    port: 27017
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda a su implementación, como si su archivo de clave de certificado TLS está encriptado con una net.tls.certificateKeyFilePassword contraseña.

  6. Reinicie el servidor principal como un servidor fragmentado.

    Ejecute el siguiente comando en el host que contiene el servidor principal:

    mongod --config <PATH_TO_CONFIG_FILE>
8

Después de convertir el conjunto de réplicas inicial (rs0) en un fragmento, agréguelo al clúster fragmentado.

  1. Conéctese a mongos como usuario administrativo de su clúster.

    La instancia mongos se está ejecutando en el host mongodb6.example.net.

    Para conectar mongosh al mongos, ejecuta el siguiente comando:

    mongosh "mongodb://admin01@mongodb6.example.net:27017"

    Si su implementación utiliza509 autenticación X., especifique estas mongosh opciones:

    Si su implementación utiliza509 autenticación X., especifique estas mongosh opciones:

    mongosh "mongodb://admin01@mongodb6.example.net:27017" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>

    Este comando lo autentica como el usuario admin01 que creó en el clúster fragmentado. Después de ingresar el comando, ingrese su contraseña.

  2. Añade el fragmento.

    Para agregar un fragmento al clúster, ejecute el sh.addShard() método:

    sh.addShard( "rs0/mongodb0.example.net:27017,mongodb1.example.net:27017,mongodb2.example.net:27017" )
9

Después de agregar el primer fragmento a su clúster, actualice la cadena de conexión que usan sus aplicaciones con la cadena de conexión de su clúster fragmentado. Luego, reinicie sus aplicaciones.

Advertencia

Una vez que el nuevo fragmento esté activo, mongosh y los demás clientes siempre deben conectarse a la mongos instancia. No se conecte directamente a las mongod instancias. Si sus clientes se conectan directamente a los fragmentos, podrían generarse inconsistencias en los datos o metadatos.

10

Implemente un nuevo conjunto de réplicas llamado rs1. Los miembros del conjunto de réplicas rs1 se encuentran en los siguientes hosts:

  • mongodb3.example.net

  • mongodb4.example.net

  • mongodb5.example.net

  1. Inicie cada miembro del conjunto de réplicas.

    Para cada instancia en el conjunto de réplicas, cree un archivo de configuración con estas mongod opciones:

    Opción
    Valor

    La ruta al archivo de clave utilizado para su conjunto de réplicas inicial.

    rs1

    shardsvr

    localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones de mongod cliente.

    security:
    keyFile: <PATH_TO_KEYFILE>
    replication:
    replSetName: rs1
    sharding:
    clusterRole: shardsvr
    net:
    bindIp: localhost,<ipaddress>

    Incluya opciones adicionales según corresponda para su implementación.

    Para cada miembro, inicie un con las siguientes mongod opciones:

    Opción
    Valor

    rs1

    shardsvr

    x509

    requireTLS

    La ruta absoluta al archivo .pem que contiene el certificado TLS y la clave.

    La ruta absoluta hacia el archivo .pem que contiene la cadena de certificados raíz de la Autoridad Certificadora.

    localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones de mongod cliente.

    replication:
    replSetName: rs1
    sharding:
    clusterRole: shardsvr
    security:
    clusterAuthMode: x509
    net:
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<ipaddress>

    Implemente el con la configuración mongod especificada:

    mongod --config <PATH_TO_CONFIG_FILE>

    Nota

    Cuando especifica la --shardsvr opción para una instancia, la instancia se ejecuta en el mongod puerto 27018 de forma predeterminada.

  2. Inicie cada miembro del conjunto de réplicas.

  3. Conectarse a un miembro del conjunto de réplicas.

    Utilice para conectarse a uno de los miembros del conjunto de réplicas. Por mongosh ejemplo:

    mongosh "mongodb://mongodb3.example.net:27018"
    mongosh "mongodb://mongodb3.example.net:27018" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
  4. Inicia el set de réplicas.

    mongoshEn, ejecute el rs.initiate() método para iniciar un conjunto de réplicas que contenga el miembro actual:

    rs.initiate( {
    _id : "rs1",
    members: [
    { _id: 0, host: "mongodb3.example.net:27018" },
    { _id: 1, host: "mongodb4.example.net:27018" },
    { _id: 2, host: "mongodb5.example.net:27018" }
    ]
    } )

    El comando anterior requiere la excepción localhost para realizar acciones administrativas sin autenticación.

    Importante

    Se debe ejecutar rs.initiate() en una sola instancia mongod para el set de réplicas.

  5. Agregue un usuario administrativo para el conjunto de réplicas.

    Después de implementar el conjunto de réplicas, utilice la excepción localhost para crear el primer usuario del conjunto de réplicas.

    1. Determinar el conjunto de réplicas primario.

      Para determinar el primario,rs.status() ejecute:

      rs.status()

      En la salida del comando, el campo indica qué miembro es el replSetGetStatus.members[n].stateStr principal.

    2. Conéctate al primario del conjunto de réplicas.

      Conéctese al conjunto de réplicas principal con. Por ejemplo, si el mongosh principal mongodb4.example.net es, ejecute este comando:

      mongosh "mongodb://mongodb4.example.net:27018"
    3. Crear un usuario administrativo.

      Ejecute el siguiente método para crear un usuario db.createUser() llamado rs1Admin con el userAdmin rol:

      use admin
      db.createUser(
      {
      user: "rs1Admin",
      pwd: passwordPrompt(),
      roles: [
      { role: "userAdmin", db: "admin" }
      ]
      }
      )

      Después de ejecutar el comando, la base de datos le solicitará que ingrese una contraseña para el usuario rs1Admin.

11

Agregue el nuevo conjunto de réplicas, rs1, al clúster fragmentado.

  1. Conecte mongosh al mongos.

    Ejecute el siguiente comando desde la línea de comandos para conectarse a la instancia que se mongos ejecuta en el mongodb6.example.net host:

    mongosh "mongodb://admin01@mongodb6.example.net:27017/admin"
    mongosh "mongodb://admin01@mongodb6.example.net:27017/admin" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>

    Este comando lo autentica como el usuario admin01 que creó en el clúster fragmentado. Después de ingresar el comando, ingrese su contraseña.

  2. Añade el segundo fragmento.

    Después de conectarse a, agregue el conjunto de mongos réplicas rs1 como un fragmento al clúster con el sh.addShard() método:

    sh.addShard( "rs1/mongodb3.example.net:27018,mongodb4.example.net:27018,mongodb5.example.net:27018" )
12

El paso final del procedimiento es fragmentar una colección en el clúster fragmentado.

  1. Determinar la clave del fragmento.

    Determine la clave de fragmento para la colección. La clave de fragmento indica cómo MongoDB distribuye los documentos entre fragmentos. Claves de fragmento adecuadas:

    • Tener valores distribuidos uniformemente entre todos los documentos.

    • Agrupe documentos a los que se accede con frecuencia al mismo tiempo en fragmentos contiguos.

    • Permitir una distribución efectiva de la actividad entre fragmentos.

    Para obtener más información, consulte Elegir una clave de fragmento.

    Este procedimiento utiliza el campo number como clave de fragmento para la colección test_collection.

  2. Crea un índice en la clave del fragmento.

    Antes de fragmentar una colección que no esté vacía, cree un índice en la clave de fragmentación:

    use test
    db.test_collection.createIndex( { "number" : 1 } )
  3. Fragmentar la colección.

    En la base de datos test, fragmente test_collection. Especifique number como clave de fragmentación.

    sh.shardCollection( "test.test_collection", { "number" : 1 } )

    La próxima vez que se ejecute el balanceador, redistribuirá fragmentos de documentos entre los fragmentos. A medida que los clientes insertan documentos adicionales en esta colección, el los enruta mongos al fragmento correspondiente.

    Cuando el balanceador redistribuye fragmentos, puede afectar negativamente el rendimiento de la aplicación. Para minimizar el impacto en el rendimiento, puede especificar cuándo se ejecuta el balanceador para que no lo haga durante las horas punta. Para obtener más información, consulte Programar la ventana de balanceo.

Para obtener más tutoriales y procedimientos de fragmentación, consulte estas páginas:

Volver

Convertir un clúster fragmentado en un conjunto de réplicas

En esta página