Charmed MongoDB Tutorials > Deploy a sharded cluster > 3. Access a sharded cluster
Access a sharded cluster
In sharded MongoDB clusters, the database is accessed via mongos
. In Charmed MongoDB clusters, we have an operational mongos
daemon running as the admin user within the config-server
.
Connecting to the database requires a Uniform Resource Identifier (URI). MongoDB expects a MongoDB-specific URI that contains information used to authenticate us to the database.
In this part of the tutorial, we will generate a URI containing database credentials
that will allow us to connect to the database via the mongos
router.
Summary
- Retrieve URI Data
- Username |
$DB_USERNAME
- Password |
$DB_PASSWORD
- Username |
- Generate a URI
- Connect to the
mongo
shell via URI
Disclaimer: This part of the tutorial accesses the sharded MongoDB cluster via the operator
user. This is the admin user in Charmed MongoDB.
Do not directly interface with the operator
user in a production environment. Always connect to MongoDB via a separate user. We will cover this later in this tutorial when we learn how to integrate with other applications.
Retrieve URI Data
To access MongoDB viamongos
, we need to build a URI of the format
mongodb://$DB_USERNAME:$DB_PASSWORD@localhost:27018/admin
Let’s start by retrieving the necessary information for these environment variables.
Username | $DB_USERNAME
In this case, we are using the admin
user to connect to MongoDB. Use operator
as the username:
export DB_USERNAME="operator"
Password | $DB_PASSWORD
The password can be retrieved by running the get-password
action on the Charmed MongoDB application:
juju run config-server/leader get-password
Running the command above will output
Running operation 5 with 1 task
- task 6 on unit-config-server-0
Waiting for task 6...
password: 9JLjd0tuGngW5xFKWWbo0Blxyef0oGec
You can manually copy the password displayed above into the DB_PASSWORD
environment variable, or use the command below to retrieve and assign it in one go:
export DB_PASSWORD=$(juju run config-server/leader get-password | grep password| awk '{print $2}')
Generate a MongoDB URI
Now that you have the necessary fields to connect to the URI, you can connect to MongoDB withcharmed-mongodb.mongosh
via the URI.
You can create the URI with the environment variables you exported earlier:
export URI=mongodb://$DB_USERNAME:$DB_PASSWORD@localhost:27018/admin
Now echo the URI and save it, as you won’t be able to rely on this environment variable when you ssh
into a unit in the next step:
echo $URI
Connect via MongoDB URI
Themongo
shell is already installed in Charmed MongoDB as charmed-mongodb.mongosh
.
To access the unit hosting Charmed MongoDB, first ssh
into the config-server unit:
juju ssh config-server/0
Then use your URI to to access the mongo
shell:
charmed-mongodb.mongosh <saved URI>
Below is an example output of running this command inside the leader unit:
ubuntu@juju-573669-0:~$ charmed-mongodb.mongosh mongodb://operator:e4HufmNaNbIdr0ArNgRTWSe7LXmNID8c@10.56.148.138/admin
Current Mongosh Log ID: 65c68b16f117c8adb6cab710
Connecting to: mongodb://<credentials>@localhost/admin?directConnection=true&appName=mongosh+2.0.1
Using MongoDB: 6.0.6-5
Using Mongosh: 2.0.1
mongosh 2.1.4 is available for download: https://www.mongodb.com/try/download/shell
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
config-server [direct: primary] admin>
You can verify which shards are in the sharded cluster by running sh.status()
The first few lines will output:
shardingVersion
{ _id: 1, clusterId: ObjectId("65c67095d6c910a966c84b68") }
---
shards
[
{
_id: 'shard0',
host: 'shard0/10.56.148.149:27017',
state: 1,
topologyTime: Timestamp({ t: 1707504367, i: 4 })
},
{
_id: 'shard1',
host: 'shard1/10.56.148.60:27017',
state: 1,
topologyTime: Timestamp({ t: 1707504376, i: 2 })
}
]
...
Notice how shard0
and shard1
are both present under shards
When you’re ready to leave the MongoDB shell, just type exit
. You will be back in the host of Charmed MongoDB (mongodb/0
).
Exit this host by once again typing exit
. Now you will be in your original shell where you can interact with Juju and LXD.
Next Step: 4. Add and remove shards