Installare MongoDB su Centos 6.10

Creare un repository così da poter installare MongoDB usando yum.

vi /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

Queste info possono essere recuperate dal manuale di installazione mondodb su redhat
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

Prima di installare il pacchetto verifichiamo che il repository MongoDB esiste con il seguente comando:
yum repolist
Plugin abilitati:fastestmirror, security
Loading mirror speeds from cached hostfile
id repo              nome repo              stato
base                 CentOS-6 - Base        6713
mongodb-org-4.0      MongoDB Repository       55
updates              CentOS-6 - Updates      467
repolist: 7235

Ora è possibile procedere con l'installazione del pacchetto.
yum install -y mongodb-org

Vengono installati 5 pacchetti principali oltre alle dipendenze:
 mongodb-org-mongos
mongodb-org-server
mongodb-org-shell
mongodb-org-tools

Vengono creati i seguenti oggetti che hanno come owner e gruppo mongod:
/etc/mongod.cong          è il file di configurazione
/var/lib/mongo               è la directory dei dati
/var/log/mongodb          è la directory dei log


Nella mia installazione di Centos ho disabilitato Selinux pertanto non occorre configurarlo per Mongodb.
vim /etc/selinux/config
........

SELINUX=disable

.....

SELINUXTYPE=targeted



Start MongoDB
service mongod start


Verifica che si sia avviato il servizio e il log.
ps -ef | grep mongod
mongod   23945     1  2 11:03 ?        00:00:01 /usr/bin/mongod -f /etc/mongod.conf
root     23984 22837  0 11:04 pts/0    00:00:00 grep mongod

Controllare il file di log /var/log/mongodb/mongod.log


Stop MongoDB
service mongod stop

Start MongoDB
service mongod restart

Se si vuole avviare MongoDB al reboot del sistema
chkconfig mongod on


Accediamo alla Shell mongo
[root@coslab02 mongodb]# mongo
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a21e3d6e-9245-4fa9-a185-da46c5140f3b") }
MongoDB server version: 4.0.10
Server has startup warnings:
2019-06-19T11:17:38.810+0200 I STORAGE  [initandlisten]
2019-06-19T11:17:38.810+0200 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-06-19T11:17:38.810+0200 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2019-06-19T11:17:41.510+0200 I CONTROL  [initandlisten]
2019-06-19T11:17:41.510+0200 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-06-19T11:17:41.510+0200 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-06-19T11:17:41.511+0200 I CONTROL  [initandlisten]
2019-06-19T11:17:41.512+0200 I CONTROL  [initandlisten]
2019-06-19T11:17:41.512+0200 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
---
>

Il warning  "soft rlimits too low"  può essere risolto aggiungendo nel file
/etc/security/limits.d/ 90-nproc.conf le due righe evidenziate in giallo.

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     1024
root       soft    nproc     unlimited
mongo  soft    nproc      64000
mongo  hard   nproc      64000


Il warning  "Access control is not enabled for the database" può essere risolto modificando il file di configurazione abilitando la "security authorization":
vi /etc/mongod.conf
.....
security:
  authorization: enabled
......

Riavviare i servizio di mongod
service mongod restart


Si abilitare o disabilitare il controllo degli accessi basato sui ruoli (RBAC) per garantire l'accesso di ciascun utente alle proprie risorse e privilegi del database.
enabled Un utente può accedere solo alle risorse del database ed eseguire le azioni per le quali ha avuto i privilegi.
disabled Un utente può accedere a un qualsiasi database ed eseguire una qualsiasi azione.



N.B. Quando è abilitato l'access control occorre definire un utenza che abbia almeno ruoli  userAdminAnyDatabase readWriteAnyDatabase che permette di creare ed eliminare utenti, ruoli e cambiare password, e può farlo su ogni database presente nell'istanza.

                                                  Abilitazione dell'Access Control                                                          

1) Mantenere "security authorization: disabled" quindi avviare mongodb senza access control abilitato.

service mongodb stop
mongod --port 27017 --dbpath /var/lib/mongo 
oppure se si cambiano i path
mongod --port 27017 --dbpath /u02/mongodb/data

Aprire un altro terminale ed accedere alla shell mongo
mongo --port 27017

Creare un utente amministratore degli utenti di tutti i database presenti in MongoDB.
> use admin
switched to db admin
> db.createUser(
   {
     user: "admin",
    pwd: "admin",
  roles: [{role: "root" , db:"admin"}]
  }
 )
Il ruolo root ha accesso alle operazioni e a tutte le risorse: readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, restore e backup.


Stoppare l'istanza Mongodb dalla shell
>db.adminCommand( { shutdown: 1 } )
>exit

Una volta creato l'utente amministratore posso riavviare mongodb con Access Control in due modi:
1) security authorization: disabled
mongod --auth --port 27017 --dbpath /var/lib/mongodb
oppure
mongod --auth --port 27017 --dbpath /u02/mongodb/data
2)  security authorization: enabled
service mongod start

Creare una utenza amministratore per l'ambiente di sviluppo.
i) accedere a mongo come amministratore e usare db.createUser().
mongo -u admin -p admin admin
> use heroesdb
> db.createUser(
{ user: "heroadmin",
  pwd: "heroadmin",
  roles: [{role: "dbOwner" , db:"heroesdb"}]
})
>

ii) uscire dalla shell mongo e autenticarsi come nuovo user e creare il db.
 mongo -u heroadmin -p heroadmin heroesdb
> db
heroesdb
> db.heroes.insert( {hero:"Punisher", name:"Frank", surname:"Castle", groups:" "} )
WriteResult({ "nInserted" : 1 })


                                                           Cambiare directory dati e log                                                     

Se si vuole usare un'altra directory per i log e i dati modificare il file di config come segue:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /u01/mongodb/log/mongod.log

# Where and how to store data.
storage:
  dbPath: /u01/mongodb/data
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

Creare le directory
[root@coslab02 /]# mkdir -p /u01/mongodb/log/
[root@coslab02 /]# mkdir -p /u01/mongodb/data

Cambiare utente.
chown -R  mongod:mongod mongodb

Riavviare il servizio mongod.

Subito dopo l’installazione, MongoDB non ha utenti preimpostati ma un meccanismo detto Localhost Exception che permette di accedere come amministratore a tutti gli utenti che tentano di accedere dalla stessa macchina in cui si trova il server.
Creare subito un utente con i permessi di amministratore degli utenti di tutti i database presenti in MongoDB.
Usare come ruolo "userAdminAnyDatabase" che permette di creare ed eliminare utenti, ruoli e cambiare password su ogni database presente nell’istanza.
> use admin
switched to db admin
> db.createUser({ user: "fradmin",
pwd: "fradmin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }]
})

Se avessimo usato il ruolo "UserAdmin" l'utente sarebbe stato solo l'amministratore del db indicato.

                                                                  Disinstallare Mongod                                                            

Stop del servizio
service mongod stop
Rimuovere i pacchetti
yum erase $(rpm -qa | grep mongodb-org)
Rimuovere le directory
rm -r /var/log/mongodb
rm -r /var/lib/mongo

Rimuovere le directory non di default come ad esempio /u01/mongodb/.

Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database