Setting MongoDB Replication dengan Replica Set dan Arbiters di centos
mohon maaf, sudah lama gak nulis jadinya agak kaku nulisnya hehheheheh. langsung saja kita buat replika set mongodb dengan arbiter dan menggunakan password/authentication
kita samain dulu servernya ya

1. Install MongoDB
[MongoDB]name=MongoDB Repositorybaseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/$basearch/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
ketik, yum install mongodb-org
aktifkan mongodb, systemctl start mongod && systemctl enable mongod
2. Modify /etc/hosts file
On mongodb1 (and mongodb2) server, modify the /etc/hosts file and add the following.
192.168.100.1 mongodb1 192.168.100.2 mongodb2 192.168.100.3 arbiter1
3. Enable Auth on all MongoDB Nodes and activate replica
edit file config mongodb
# vi /etc/mongod.conf
security:
auth = truebindIp: 0.0.0.0 (edit)
replication:
replSetName: ragiel0
Restart the mongodb instance after the above change.
systemctl restart mongod
buat user mongodb
use admin
db.createUser(
{
user: "superadmin",
pwd: "adminsuper",
roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" }]
}
) use admin
db.createUser(
{
user: "root",
pwd: "assssuuu",
roles: [ { role: "root", db: "admin" } ]
}
)
Note: apply disemua server mongo ya geys...~~~//????
4. Setup KeyFile for Replication Auth on all MongoDB Nodes
generate key agar sesama server bisa ngobrol menggunakan key yg sama
openssl rand -base64 756 > /var/lib/mongodb/keyfile chmod 400 /var/lib/mongodb/keyfile chown mongodb:mongodb /var/lib/mongodb/keyfile
5. On mongodb1: Initiate the Replica Set
mari memulai initiate replica rs.initiate() command. ( gw gak ngajarin cara login ke mongonya ya , ente lebih jago dah )
> use admin
> rs.initiate();
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "mongodb1:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
Right after the initiate, you’ll notice that the configuration is not null anymore. Also, you’ll notice that the mongodb prompt changed from “>” to “replicasetName:PRIMARY>” as shown below.
> rs.config();
{
"_id" : "ragiel0",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "mongodb1:27017"
}
]
}
6. On mongodb1: konfirmasi konfig anda dgn View Log and Replica Set Status
cek log nya , kalau seperti ini berarti mantul
# tail /var/log/mongo/mongod.log Sat Feb 22 18:11:30.995 [conn2] ****** Sat Feb 22 18:11:30.995 [conn2] replSet info saving a newer config version to local.system.replset Sat Feb 22 18:11:30.996 [conn2] replSet saveConfigLocally done Sat Feb 22 18:11:30.996 [conn2] replSet replSetInitiate config now saved locally. Should come online in about a minute. Sat Feb 22 18:11:34.568 [rsStart] replSet I am mongodb1:27017 Sat Feb 22 18:11:34.569 [rsStart] replSet STARTUP2 Sat Feb 22 18:11:35.570 [rsSync] replSet SECONDARY Sat Feb 22 18:11:35.570 [rsMgr] replSet info electSelf 0 Sat Feb 22 18:11:36.570 [rsMgr] replSet PRIMARY ...
pake rs.status() command juga bisa ya geys
ragiel0:PRIMARY> rs.status();
{
"set" : "prodRepl",
"date" : ISODate("2014-02-22T06:28:49Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongodb1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 645,
"optime" : Timestamp(1438853170, 1),
"optimeDate" : ISODate("2014-02-22T06:19:30Z"),
"self" : true
}
],
"ok" : 1
}
7. On mongodb1: Add the 2nd node
nambah node replica dgn script ini ya rs.add command dibawah ini contohnya.
prodRepl:PRIMARY> rs.add("mongodb2");
{ "ok" : 1 }
klo berhasil pake rs.config() untuk ngecek statusnya
ragiel0:PRIMARY> rs.config();
{
"_id" : "prodRepl",
"version" : 2,
"members" : [
{
"_id" : 0,
"host" : "mongodb1:27017"
},
{
"_id" : 1,
"host" : "mongodb2:27017"
}
]
}
8. Sync started Between Nodes
tunggu beberapa saat sampai semua ngesync, jangan buru2 bos que
ragiel0:PRIMARY> rs.status();
{
"set" : "prodRepl",
"date" : ISODate("2014-02-22T21:27:53Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongodb1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 225,
"optime" : Timestamp(1343239634, 1),
"optimeDate" : ISODate("2014-02-22T21:27:14Z"),
"self" : true
},
{
"_id" : 1,
"name" : "mongodb2:27017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 39,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2014-02-22T21:27:52Z"),
"lastHeartbeatRecv" : ISODate("2014-02-22T21:27:52Z"),
"pingMs" : 2,
"lastHeartbeatMessage" : "initial sync cloning db: mongoprod"
}
],
"ok" : 1
}
anda akan melihat perubahan status dari startup menjadi secondary
ragiel0:PRIMARY> rs.status();
{
"set" : "prodRepl",
"date" : ISODate("2014-02-22T22:03:21Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongodb1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2353,
"optime" : Timestamp(1394309634, 1),
"optimeDate" : ISODate("2014-02-22T21:27:14Z"),
"self" : true
},
{
"_id" : 1,
"name" : "mongodb2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 2167,
"optime" : Timestamp(1394309634, 1),
"optimeDate" : ISODate("2014-02-22T21:27:14Z"),
"lastHeartbeat" : ISODate("2014-02-22T22:03:21Z"),
"lastHeartbeatRecv" : ISODate("2014-02-22T22:03:20Z"),
"pingMs" : 0,
"syncingTo" : "mongodb1:27017"
}
],
"ok" : 1
}
Note: gak percaya , lu login aja di mongo2, pasti nanti akan tampil ragiel0:SECONDARY>
9. Start setting arbiter , On arbiter1: Start the mongod instance
arbiter ini akan jalan dibackground anda jadi anda bisa menggunakan screen atau tmux, atau > /dev/null 2>&1& atau apa saja lah yang bisa biasa anda gunakan, bisa berjalan berdampingan dengan replica mongo nya atau anda bisa pakai sembarang server yg masih dapat berkomunikasi dengan node mongo yg lain, cara setting nya begini aja
mkdir /data/arb mongod --port 27021 --dbpath /data/db-temp --replSet ragiel0 --bind_ip 0.0.0.0
10. Back To mongodb1: Add arbiter1 node
daftarkan arbiter nya dgn sintak ini rs.addArb , contoh dibawah geys.
ragiel0> rs.addArb("arbiter1:30000");
{ "ok" : 1 }
cek pake syntak rs.config()
ragiel0:PRIMARY> rs.config();
{
"_id" : "prodRepl",
"version" : 3,
"members" : [
{
"_id" : 0,
"host" : "mongodb1:27017"
},
{
"_id" : 1,
"host" : "mongodb2:27017"
},
{
"_id" : 2,
"host" : "arbiter1:30000",
"arbiterOnly" : true
}
]
}
TAmbahan, jika mau remove pake ini ya
ragiel0:PRIMARY> rs.remove("arbiter1:30000")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1644490939, 1),
"signature" : {
"hash" : BinData(0,"UCnoJG5J71n2GTCY0P995Gd1Rqc="),
"keyId" : NumberLong("7062999462582419460")
}
},
"operationTime" : Timestamp(1644490939, 1)
}
11. Verify Final Replication Status
jika berhasil lu bisa jalanin rs.config() and rs.status() di semua node
ragiel0:PRIMARY> rs.status();
{
"set" : "prodRepl",
"date" : ISODate("2014-02-22T22:59:15Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongodb1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 5707,
"optime" : Timestamp(1343042482, 1),
"optimeDate" : ISODate("2014-02-22T22:14:42Z"),
"self" : true
},
{
"_id" : 1,
"name" : "mongodb2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 5521,
"optime" : Timestamp(1343042482, 1),
"optimeDate" : ISODate("2014-02-22T22:14:42Z"),
"lastHeartbeat" : ISODate("2014-02-22T22:59:14Z"),
"lastHeartbeatRecv" : ISODate("2014-02-22T22:59:13Z"),
"pingMs" : 0,
"syncingTo" : "mongodb1:27017"
},
{
"_id" : 2,
"name" : "arbiter1:30000",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 39,
"lastHeartbeat" : ISODate("2014-02-22T22:59:14Z"),
"lastHeartbeatRecv" : ISODate("2014-02-22T22:59:15Z"),
"pingMs" : 0
}
],
"ok" : 1
}
done
ragiel11. cheat and sheet mongodb
berikut troubleshoot yg biasa di temui
1. service tidak mau up , abis ganti config. biasanya karena service monggodb masih jalan di balik layar. anda dapat jalan kan perintah dibawah ini# mongod , tunggu sebentar lalu tekan crtl+c , lalu jalan kan lagi service nya # systemctl start mongod2. jika ingin paksa node secondary menjadi primary, jalankan perintah iniragiel0:PRIMARY> rs.stepDown(1); jika tidak bisa, lakukan ini3. membuat priorify yg jadi node primary, jalankan perintah ini di node yang mau di settingnyaragiel0:PRIMARY> conf = rs.conf()ragiel0:PRIMARY> cfg.members[0].priority = 5value 0 berarti node tersebut tidak akan menjadi primary selamanyasemakin besar value nya , berarti node tersebut semakin di prioritaskan menjadi primary nodeklo gak bisa juga, restart service mongodb di server yg berstatus primary
Source :http://www.thegeekstuff.com/2014/02/mongodb-replication/
https://iitbitz.wordpress.com/2016/03/14/how-to-setup-mongodb-replication-using-replica-set-and-arbiters/
Comments
Post a Comment