①界面地址:http://bianque.webdev.com/mongo/mongoApply
②注意事项:
②注意事项:
②注意事项:
① 界面地址:http://bianque.webdev.com/mongo/mongoApplyInfo
②数据表名:mongodev
③注意事项:
“1+1+1”模式业务,即业务采用全新(各机器上均未部署过MongoDB业务)三台机器(1台业务机、1台业务机、1台备份机)进行部署(独立/混合),在部署时需进行如下步骤:
①业务接入
②软件包部署
③监控初始化
监控系统会部署到每台机器上,并完成初始化和自启动。
④集群初始化
⑤用户授权
根据既定规则,生成用户名、密码,并且设置相关权限,提供给用户使用,并将其写入t_mongo_apply表中,用户可在回执中查看。
⑥备份初始化
由于备份机制的规则约束,完成“1+1+1”模式业务上线后,必须完善“备机”与“冷备存储(104)”的信任关系建立,之后整个上线过程结束了。
“2+1”模式业务,即业务采用全新(各机器上均未部署过MongoDB业务)两台机器(业务机),以及复用一台大存储备份机(机器上部署过MongoDB业务的备份机)进行部署(独立/混合),在部署时需进行如下步骤:
①业务接入
②软件包部署
由于“2+1”模式的备份机属于多业务混用,已经部署过软件包,故无需重新传输。
由于“2+1”模式的备份机属于多业务混用,已经部署过软件包,故无需在重新安装。
③监控初始化
④集群初始化
⑤用户授权
测试业务,即给业务提供功能测试的MongoDB平台,将接入业务部署到托管平台所提供的MongoDB测试集群中(sz_test),进行混合部署,在部署时需进行如下步骤:
①查找测试集群
采集到的数据保存到10.240.64.138:4120里,采集间隔为一分钟,可在采集程序配置文件修改。采集通过连接mongodb,获取serverstatus,dbstats,colstat,rs.status等系统内置命令获取。每个机器上可能有多个mongodb实例,可在配置文件里配置相应的端口,每个实例启动一个线程采集数据。连接mongodb使用账号root:root, 需要在每台mongodb里添加认证,zabbix采集脚本里也需要配置,如果需要改动,需要更改zabbix自定义采集脚本和mongomon代码。
由于mongomon采集数据的时候依赖于ip,port,无法方便的与产品线关联,在mongodb配置的时候,会把标志每个产品的bid,配置成mongodb的setname里,获取数据的时候联同bid一起写入mysql,这样就实现了监控数据和产品的映射。
报警由zabbix触发,可在zabbix上配置监控策略,zabbix调用脚本进行告警。告警脚本调用微信的接口,接口文档可在http://alarm.weixin.oa.com/查看。
当zabbix触发报警时,会调用10.49.102.18目录/usr/local/zabbix/share/zabbix/alertscripts下,后续可根据zabbix发送的报警信息,去10.240.64.138:4120里查询业务信息,然后发送到微信群。
采集程序部署在/data1/opbin/mongomon
zabbix部署在/data1/opbin/zabbix
启动采集程序使用目录里的脚本control
./control start 启动程序
./control status 查看运行状态
./control stop 停止程序
日志保存在mongomon/var目录下
①部署
每台需要监控的机器上都需要部署zabbix agent
zabbix部署在下面两台机器,agent需要在每台mongodb上部署
zabbix proxy 100.65.33.201
zabbix server 10.49.102.18
②报警
报警脚本在10.49.102.18机器的下面目录里
/usr/local/zabbix/share/zabbix/alertscripts/tg_alarm.py
该脚本根据zabbix相关报警信息发送报警消息
③配置
zabbix agent配置文件在zabbix/etc目录
只需要修改hostname为本机ip即可
日报程序在10.166.141.29的/data/aid.qq.com/qywx/scripts/mongodb_scripts目录下,由两个脚本构成:
统计数据保存在10.240.64.138:4120上,每天0点1分生成前一天的按天统计数据,十点发送日报。
(1)库地址 : 10.240.64.138:4120
(2)库名 : database: tg_data
(3)表结构:
①监控信息
create table mongomon (
`Id` int(11) auto_increment primary key, //自增ID
`Bid` varchar(30) not null, //bid
`MongoIns` varchar(30) not null, //mongodb实例,格式为IP:port
`IsMaster` bool not null default false, //是否是master
`Insert` int(10) not null default 0, //insert操作的量
`Query` int(10) not null default 0, //query操作的量
`Update` int(10) not null default 0, //update操作的量
`Delete` int(10) not null default 0, //delete操作的量
`Getmore` int(10) not null default 0, //getmore操作的量
`Command` int(10) not null default 0, //command操作的量
`NetIn` bigint not null default 0, //网络进流量
`NetOut` bigint not null default 0, //网络出流量
`NumRequests` int(10) not null default 0, //请求量
`ConnAvg` int(10) not null default 0,
`ConnTotal` int(10) not null default 0, //总连接数
`ConnAvail` int(10) not null default 0, //可用连接数
`ConnCurr` int(10) not null default 0, //当前连接数
`MemResident` bigint not null default 0, //物理内存使用量,Mb
`MemVirtual` bigint not null default 0,
`PageFaults` int(10) not null default 0, //页错误量
`AssertsWarning` int(10) not null default 0,
`AssertsUser` int(10) not null default 0,
`AssertsRollovers` int(10) not null default 0,
`AssertsRegular` int(10) not null default 0,
`AssertsMsg` int(10) not null default 0,
`GLQueueRead` int(10) not null default 0, //等待读锁的队列数
`GLQueueWrite` int(10) not null default 0, //等待写锁的队列数
`GLQueueTotal` int(10) not null default 0, //等待锁的队列总数
`GLActiveConnRead` int(10) not null default 0, //执行读操作的活动连接数
`GLActiveConnWrite` int(10) not null default 0, //执行写操作的活动连接数
`GLActiveConnTotal` int(10) not null default 0, //活动连接总数
`Delay` int(10) not null default 0, //主从同步延时
`Timestamp` datetime not null,
indexbid_i (`Bid`),
indexmongoins_i (`MongoIns`),
indextimestamp_i (`Timestamp`),
indexmongotime_i (`MongoIns`,`Timestamp`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
②保存库信息数据
create table dbstat (
`Id` int(11) auto_increment primary key,
`Bid` varchar(30) not null,
`MongoIns` varchar(30) not null,
`Dbname` varchar(50) not null, //库名
`Collections` int(10) not null default 0, //collection的量
`Objects` bigint not null default 0, //document的量
`AvgObjSize` int(10) not null default 0, //平均document大小
`DataSize` bigint not null default 0, //压缩前数据大小,kb
`StorageSize` bigint not null default 0, //存储空间大小,kb
`Indexes` int(10) not null default 0, //索引数量
`IndexSize` bigint not null default 0, //索引大小,kb
`Slowlog` int(10) not null default 0, //慢日志条数
`Timestamp` datetime not null,
indexbid_i (`Bid`),
indexmongoins_i (`MongoIns`),
indextimestamp_i (`Timestamp`),
indexmongotime_i (`MongoIns`,`Timestamp`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
③保存collections信息数据
create table colstat (
`Id` int(11) auto_increment primary key,
`Bid` varchar(30) not null,
`MongoIns` varchar(30) not null,
`Dbname` varchar(50) not null, //库名
`Colname` varchar(50) not null, //collection名
`Count` bigint not null default 0, //document量
`Size` bigint not null default 0, //总记录大小,kb
`AvgObjSize` int(10) not null default 0, //平均单个记录大小
`StorageSize` bigint not null default 0, //总存储空间,kb
`Indexes` int(10) not null default 0, //索引数量
`TotalIndexSize` bigint not null default 0, //总索引大小,kb
`Max` int(10) not null default 0,
`Maxsize` int(10) not null default 0,
`Timestamp` datetime not null,
indexbid_i (`Bid`),
indexmongoins_i (`MongoIns`),
indextimestamp_i (`Timestamp`),
indexmongotime_i (`MongoIns`,`Timestamp`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
④保存存储容量日报信息数据
CREATE TABLE `mongo_datasize_daily` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Bid` varchar(30) NOT NULL,
`Db_num` int(10) NOT NULL DEFAULT '0',
`Col_num` int(10) NOT NULL DEFAULT '0',
`Obj_num` int(10) NOT NULL DEFAULT '0',
`StorageSize` bigint(20) NOT NULL DEFAULT '0',
`DataSize` bigint(20) NOT NULL DEFAULT '0',
`Index_num` int(10) NOT NULL DEFAULT '0',
`IndexSize` bigint(20) NOT NULL DEFAULT '0',
`D_Date` date NOT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `bid_date` (`Bid`,`D_Date`),
KEY `bid_i` (`Bid`),
KEY `d_date_i` (`D_Date`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8
⑤保存访问量日报信息数据
CREATE TABLE `mongo_qps_daily` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Bid` varchar(30) NOT NULL,
`QpsWrite` int(10) NOT NULL DEFAULT '0',
`QpsRead` int(10) NOT NULL DEFAULT '0',
`QpsTotal` int(10) NOT NULL DEFAULT '0',
`D_Date` date NOT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `bid_date` (`Bid`,`D_Date`),
KEY `bid_i` (`Bid`),
KEY `d_date_i` (`D_Date`)
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8
⑥保存bid,mongodb实例映射信息
CREATE TABLE `mongoins` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`bid` char(20) NOT NULL,
`ip` char(20) NOT NULL,
`port` int(11) NOT NULL,
`name_server` char(80) NOT NULL,
`grp` varchar(50) NOT NULL,
`isbackup` tinyint(1) NOT NULL,
PRIMARY KEY (`Id`),
KEY `ipport` (`ip`,`port`),
KEY `name_server` (`name_server`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8
每天1点备份全库,每小时备份一次oplog
2、备份实现
目前备份会在两台Secondary上其中一台固定执行,这台机器一般需要使用磁盘容量较大的机器,这台机器优先级较低,不会被选成master。因为磁盘容量大,这台机器可多跑几个mongodb实例,但是不能影响复制延时。注意: 备份的机器需要跟10.62.19.104建立信任关系,方便传输备份文件到上面。
备份数据相关信息写入mysql,10.240.64.138:4120, 在tg_data库,backup_stat表里。
表结构如下:
CREATE TABLE `backup_stat` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Bid` varchar(30) NOT NULL, #bid,也就是mongo的setname
`Filename` varchar(255) NOT NULL, #文件名
`Size` varchar(50) NOT NULL, #文件大小
`Type` varchar(50) NOT NULL, #备份类型 all,全库备份,oplog
`Status` char(10) NOT NULL, #状态 success, failure
`T_Timestamp` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `bid_i` (`Bid`),
KEY `timestamp_i` (`T_Timestamp`),
KEY `bidtime_i` (`Bid`,`T_Timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据恢复原则一般为:
①优先用冷备数据,冷备数据无法满足(备份失败、实时性差等)时,采用在从库down数据,并进行恢复
②误操作、分子操作回滚等优先使用oplog进行恢复
③为保证数据一致性,在进行down数据时,必须先进行锁表操作
④在集群机器替换和数据恢复前,需将机器remove出集群配置(在主上操作)
①锁库、解锁
usedb
db.fsyncLock()
db.fsyncUnlock()
②状态命令
rs.status();--查看状态
rs.slaveOk();--sencondary机器授权查询
rs.isMaster();--查看副本集状态
③节点操作
rs.remove("localhost:20001");--删除节点在主服务器执行
rs.add("localhost:20001");--增加节点
④数据备份
/data/mongodb/server/mongo/bin/mongodump --port 27019 --db omg --out /data/mongodb/shard23_27019/backup
④数据恢复
/data1/mongodb/m_server/bin/mongorestore -h 10.49.120.147 --port 25031 -u xxx -p
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。