# MongoDB Basic Cluster Administration<br />ch2 Replication
###### tags: `MongoDB University M103`
## MongoDB Replica Set
* Primary
* Secondary
* arbiter
* Holds no data
* Can vote in an election
* Cannot become primary
* Replica set can be up to **50** members
* only **7** voting members
:::info
* Replica set are groups of mongod
* High availability and Failover
* Members can have different roles and specific purposes
:::
election trigger
* Adding a new node to the replica set,
* initiating a replica set,
* performing replica set maintenance using methods such as rs.stepDown() or rs.reconfig()
* the secondary members losing connectivity to the primary for more than the configured timeout (10 seconds by default).
## Setting Up a Replica Set
Use setting file demo
```yaml=
storage:
dbPath: /var/mongod/db/node1
net:
bindIp: 127.0.0.1,192.168.103.100
port: 27011
security:
authorization: enabled
keyFile: /var/mongod/kpi/m103-keyfile
systemLog:
destination: file
path: /var/mongodb/db/node1/mongod.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: m103-example
```
## Replication Configuration Document
### Replication Configuration
* JSON Object that defines the configuration options of our replica set
* Can be configured manually from the shell
* There are set of mongo shell replication help make it easyer to manage
* rs.add
* rs.initiate
* rs.remove
* rs.status
* rs.config
* rs.reconfig
## Replication Commands
* rs.status()
* Reports health on replica set nodes
* Uses data from heartbeats
* rs.isMaster()
* Describes a node's role in the replica set
* Shorter output than rs.status()
* db.serverStatus('repl')
* section of the db.serverStatus() output
* Similar to the output of rs.isMaster()
* rs.printReplicationInfo()
* only returns the oplog data relative to current node
* content first and last oplog events timestamps
## Local DB
```javascript=
use local
```
* me
* oplog.rs
* replset.election
* replset.minvalid
* startup_log
* system.replset
* system.rollback_id
:::warning
### Usually, do not modify them.
Any data written to **local** database is not written to oplog.rs or changing any of the system configuration collections will stay there and will not be replicated
:::
#### oplog.rs
* capped collection
* takes 5% of free disk by default
```javascript=
var stats = db.oplog.rs.stats()
stats.capped
// true
stats.size
stats.maxSize
```
## Reads and Writes on a Replica Set
To enable to read on secondary node
```javascript=
rs.slaveOk()
```
:::info
We can never write to secondary node
:::