a shell to monitor mongodb replicaset status
- 1 first create a database in mysql that including the mongodb info
CREATE TABLE `serverlist` (
`dbname` varchar(30) NOT NULL COMMENT 'database name',
`server_name` varchar(50) NOT NULL COMMENT '服务器名',
`IP` char(16) NOT NULL,
`osport` int(11) DEFAULT NULL,
`dbport` smallint(6) DEFAULT NULL,
`status` tinyint(4) DEFAULT NULL COMMENT '3:mongodb',
`inserttime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
`updatetime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`SerID`),
UNIQUE KEY `u_server_name` (`server_name`),
UNIQUE KEY `u_dbname` (`IP`,`dbname`,`dbport`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `slave` (
`slave_ip` char(16) NOT NULL DEFAULT '',
`osport` int(11) DEFAULT NULL,
`mongodb_ip` char(16) DEFAULT NULL,
`slave_port` int(10) DEFAULT NULL,
`master_ip` char(16) DEFAULT NULL,
`port` int(10) DEFAULT NULL,
`status` tinyint(4) NOT NULL,
`role` int(5) DEFAULT NULL COMMENT '1 master 2 secondonary 3 arbiter'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_mongo_server` AS select distinct `a`.`IP` AS `ip`,`a`.`dbport` AS `dbport`,`b`.`slave_ip` AS `slave_ip`,`b`.`slave_port` AS `slave_port`,`b`.`role` AS `role` from (`serverlist` `a` join `slave` `b`) where ((`b`.`mongodb_ip` = `a`.`IP`) and (`a`.`dbport` = `b`.`port`) and (`a`.`status` = 3)) order by `a`.`IP`
in slave table,role 1 means master ;2 means secondary ;3 means arbiter in serverlist table you just need input the master server info
- 1 you should config the mysql ip,user,password in the shell scripts and config the mongodb monitor username,password in the shell scripts please give the admin role to the monitor user
you should config the database info into the shell scirpts ,include username,passwod,dbport,ipadress
the mysql config info is like abrove
the mongodb output size is in Gb