MongDB一共有三种集群搭建方式
Replica Set(副本集)
Sharding (切片)
Mast-Salver(主从)已不推荐使用
三种模式当中,Sharding切片模式最为复杂。Replica Set副本集模式可以理解为是主从的一种升级版,双方互为主从。
根据MongDB的版本同步方案也被分为两种,oplog和change stream,在MongDB 3.6之前都是采用oplog的方式实时同步数据,那么在MongDB 3.6之后都是使用change stream,它是oplog的一个升级版,并且只支持Replica Set副本集和Sharding切片的集群模式,不支持单机模式。
所以接下来就简单介绍下Replica Set副本集的搭建和change stream的使用。
选择Centos7.5系统的三台虚拟机进行安装
3台主机分别为mongodb001,mongodb002,mongodb003
(1)创建/etc/yum.repos.d/mongodb-org-4.2.repo文件,以便可以使用yum安装
[root@mongodb001 ~]# vim /etc/yum.repos.d/mongodb-org-4.2.repo [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
(2)安装MongoDB软件包
[root@mongodb001 ~]# sudo yum install -y mongodb-org-4.2.6 mongodb-org-server-4.2.6 mongodb-org-shell-4.2.6 mongodb-org-mongos-4.2.6 mongodb-org-tools-4.2.6
(3)安装完毕后,会自动创建/var/lib/mogo和/var/logmonogb两个目录,如果没创建需要手动自己创建下,并且要将所属用户和所属组都设置为mongod
(4)查看SELinux模式,如果是enforcing模式则需要额外配置自定义策略,本机处于关闭模式不需要额外配置,自定义策略见官网配置。
链接: link
[root@mongodb001 lib]# sestatus SELinux status: disabled
(5)启动mongodb
[root@mongodb001 lib]# systemctl start mongod
(6)查看状态
[root@mongodb001 lib]# systemctl status mongod
(7)mongodb002,mongodb003也同样进行安装,安装完毕后先将mongodb数据停止
[root@mongodb001 lib]# systemctl stop mongod
(8)配置/etc/hosts,确保主机都能访问
[root@mongodb001 lib]# vim /etc/hosts 172.26.16.34 mongodb001 mongodb001 172.26.16.33 mongodb002 mongodb002 172.26.16.35 mongodb003 mongodb003 [root@mongodb001 lib]# scp /etc/hosts mongodb002:/etc/ [root@mongodb001 lib]# scp /etc/hosts mongodb003:/etc/
(9)修改各主机mongodb地址配置
[root@mongodb001 ~]# vim /etc/mongod.conf net: port: 27017 bindIp: 0.0.0.0 replication: replSetName: "rs0" [root@mongodb002 ~]# vim /etc/mongod.conf net: port: 27017 bindIp: 0.0.0.0 replication: replSetName: "rs0" [root@mongodb003 ~]# vim /etc/mongod.conf net: port: 27017 bindIp: 0.0.0.0 replication: replSetName: "rs0"
(10)集群指定副本集和ip绑定
[root@mongodb001 ~]# mongod -f /etc/mongod.conf [root@mongodb002 ~]# mongod -f /etc/mongod.conf [root@mongodb003 ~]# mongod -f /etc/mongod.conf [root@mongodb001 ~]# mongo > rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb001" }, { _id: 1, host: "mongodb002" }, { _id: 2, host: "mongodb003" } ] })
···
rs0:SECONDARY> exit;
···
绑定成功,集群模式 mongod -f /etc/mongod.conf为启动数据库命令
(1 ) 连接shell
[root@mongodb001 ~]# mongo
(2) 查看数据库
rs0:PRIMARY> show dbs admin 0.000GB config 0.000GB local 0.000GB
(3) 查看当前正在使用的库
rs0:PRIMARY> db test
(4) 创建collection
rs0:PRIMARY> db.createCollection("testCollection") { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1594274891, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1594274891, 1) }
(5) 查看已有集合
rs0:PRIMARY> show collections testCollection
(6) 插入测试数据
rs0:PRIMARY> db.testCollection.insert({name:"张三","age":22,sex:"男"}) WriteResult({ "nInserted" : 1 })
(7) 查询表数据
rs0:PRIMARY> db.testCollection.find() { "_id" : ObjectId("5f06b4cb41c332467846251d"), "name" : "张三", "age" : 22, "sex" : "男" }
(8) 修改表数据,将张三姓名修改成李四
rs0:PRIMARY> db.testCollection.update({name:"张三"},{$set:{name:"李四"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) rs0:PRIMARY> db.testCollection.find() { "_id" : ObjectId("5f06b4cb41c332467846251d"), "name" : "李四", "age" : 22, "sex" : "男" }2.4添加用户
提示:先进入admin库,然后创建角色
rs0:PRIMARY>use amdin; rs0:PRIMARY> db.createUser({user:'admin',pwd:'admin',roles:[{role:'readWrite',db:'admin,config,local,test'}]}) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "readWrite", "db" : "admin,config,local,test" } ] }3. 利用flink cdc编写程序同步数据
{ _id : { // 存储元信息 "_data" :// resumeToken,用于断点恢复 }, "operationType" : " ", // insert, delete, replace, update, drop, rename, dropDatabase, invalidate,部分仅支持4.0后的版本,详情见下 "fullDocument" : { }, // 修改后的数据,出现在insert, replace, delete, update的事件中 "ns" : { // namespace "db" : " ", "coll" : " ", "coll" : " }, // 相当于o2字段。出现在insert, replace, delete, update事件中。正常只包含_id,对于sharded collection,还包括shard key "updateDescription" : { // 只在operationType为update的时候出现,相当于是增量的修改,而replace是替换 "updatedFields" : { }, // 更新的field的值 "removedFields" : [ " ", ... ] // 删除的field列表 }, "clusterTime" : , // 相当于ts字段 "txnNumber" : , // 相当于oplog里面的txnNumber,只在事务里面出现。事务号在一个事务里面单调递增 "lsid" : { // 相当于lsid字段,只在事务里面出现。logic session id,请求所在的session的id "id" : , "uid" : } }