Charmed MongoDB K8s Tutorials > Deploy a replica set > 3. Access a replica set
Access a replica set
MongoDB databases can be accessed via the mongosh
, the MongoDB shell. This shell comes pre-installed in the juju units hosting the Charmed MongoDB K8s application as mongosh
.
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 fetch all the information needed to generate a URI that will grant us access to MongoDB, connect to the mongo
shell, and create a test database.
Warning: 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.
Summary
Retrieve URI data
To access MongoDB K8s via mongos
, we need to build a URI of the format
mongodb://$DB_USERNAME:$DB_PASSWORD@$HOST_IP/$DB_NAME?replicaSet=$REPL_SET_NAME
We use a URI of the format:
mongo://<username>:<password>@<hosts>/<database name>?replicaSet=<replica set name>
Connecting via URI requires that you know the values for username
, password
, hosts
, database name
, and the replica set name
. We will show you how to retrieve the necessary fields and set them to environment variables.
Username | $DB_USERNAME
In this case, we are using the operator
user to connect to MongoDB. Use operator
as the username:
export DB_USERNAME="operator"
The operator
user is the admin user in Charmed MongoDB K8s.
Password | $DB_PASSWORD
Run the get-password
action on the Charmed MongoDB application:
juju run mongodb-k8s/leader get-password
The command should output:
Running operation 1 with 1 task
- task 2 on unit-mongodb-k8s-0
Waiting for task 2...
password: INIsjvJmDsuaPY2Rta0fPzas0zVKO5AJ
The command below sets the environment variable automatically by running get-password
and filtering the password
field:
export DB_PASSWORD=$(juju run mongodb-k8s/leader get-password | grep password | awk '{print $2}')
Hosts | $HOST_IP
In this case, we are connecting to mongo
inside mongodb-k8s/0
.
Set the variable HOST_IP
to the IP address to mongodb-k8s-0.mongodb-k8s-endpoints
:
export HOST_IP="mongodb-k8s-0.mongodb-k8s-endpoints"
Database name | $DB_NAME
In this case, we are connecting to the admin
database. Use admin
as the database name.
Once we access the database via the MongoDB URI, we will create a test-db
database to store data.
export DB_NAME="admin"
Replica set name | $REPL_SET_NAME
The replica set name is the name of the application on Juju hosting MongoDB. The application name in this tutorial is mongodb-k8s
. Use mongodb-k8s
as the replica set name.
export REPL_SET_NAME="mongodb-k8s"
Generate the full URI
To summarize:
export DB_USERNAME="operator"
export DB_PASSWORD=$(juju run mongodb-k8s/leader get-password | grep password | awk '{print $2}')
export HOST_IP="mongodb-k8s-0.mongodb-k8s-endpoints"
export DB_NAME="admin"
export REPL_SET_NAME="mongodb-k8s"
Create the full URI with:
export URI=mongodb://$DB_USERNAME:$DB_PASSWORD@$HOST_IP:27017/$DB_NAME?replicaSet=$REPL_SET_NAME
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
To access the unit hosting Charmed MongoDB K8s, ssh into it pod:
juju ssh --container=mongod mongodb-k8s/0
If at any point you’d like to leave the unit, type
exit
.
While ssh
’d into mongodb-k8s/0
unit, we can access mongo
, using the URI that we saved in the previous step.
mongosh <URI>
You should now see something similar to the following:
Current Mongosh Log ID: <your connection id>
Connecting to: mongodb://<credentials>@mongodb-k8s-0.mongodb-k8s-endpoints:27017/admin?replicaSet=mongodb-k8s&appName=mongosh+2.0.1
Using MongoDB: 6.0.6-5
Using Mongosh: 2.0.1
mongosh 2.0.2 is available for download: https://www.mongodb.com/try/download/shell
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting
2023-11-09T06:40:15.609+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2023-11-09T06:40:16.238+00:00: vm.max_map_count is too low
------
mongodb-k8s [primary] admin>
You can now interact with MongoDB directly using any MongoDB commands.
For example, entering show dbs
should output something like:
admin 0.000GB
config 0.000GB
local 0.000GB
Create a database
Now that we have access to MongoDB we can create a database named test-db
.
In the MongoDB shell, run:
use test-db
Now create a user called testUser
with read/write access to test-db
:
db.createUser({
user: "testUser",
pwd: "password",
roles: [
{ role: "readWrite", db: "test-db" }
]
})
You can verify that you added the user correctly by entering the command show users
into the mongo
shell. This will output:
{
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1699533481, i: 1 }),
signature: {
hash: Binary.createFromBase64("/cRpojgyhSuF0UIS8kM0GZhAPss=", 0),
keyId: Long("7299439113034268679")
}
},
operationTime: Timestamp({ t: 1699533481, i: 1 })
}
Feel free to test out any other MongoDB commands. When you’re ready to leave the MongoDB shell, just type exit
. You will be back in the container of Charmed MongoDB K8s (mongodb-k8s/0
).
Exit this container once again typing exit
. Now you will be in your original shell where you can interact with Juju and MicroK8s.
If you accidentally exit one more time or close your terminal session at some point, note that all the environment variables used in the URI will be removed.
If this happens, simply re-export these variables as described in the section Retrieve URI data.
Next step: 4. Scale your replicas