首页 文章 精选 留言 我的

精选列表

搜索[轻量级运维极速引擎],共10010篇文章
优秀的个人博客,低调大师

MongoDB日常运维操作命令小结

总所周知,MongoDB是一个NoSQL非数据库系统,即一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表;而每个集合中可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由一组列标识的实体的集合对应于关系数据库表中的行。下面通过熟悉MongoDB的基本管理命令,来了解MongoDB提供的DBMS的基本功能和行为。 0)MongoDB的安装 [root@centos6-vm01~]#curl-Ohttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz [root@centos6-vm01~]#tar-zxvfmongodb-linux-x86_64-3.0.6.tgz [root@centos6-vm01~]#mvmongodb-linux-x86_64-3.0.6//usr/local/mongodb [root@centos6-vm01~]#vim/etc/profile ...... exportPATH=$PATH:/usr/local/mongodb/bin/ [root@centos6-vm01~]#source/etc/profile 启动mongodb [root@centos6-vm01~]#mkdir-p/data/db [root@centos6-vm01~]#cd/usr/local/mongodb/bin/ [root@centos6-vm01bin]#./mongod& [root@centos6-vm01bin]#lsof-i:27017 COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME mongod24304root5uIPv41873600t0TCP*:27017(LISTEN) mongod24304root12uIPv41874560t0TCPlocalhost:27017->localhost:48742(ESTABLISHED) mongo24319root3uIPv41874550t0TCPlocalhost:48742->localhost:27017(ESTABLISHED) ----------------------------------------------------- 连接mongodb报错: Failedglobalinitialization:BadValueInvalidornouserlocaleset.PleaseensureLANGand/orLC_*environmentvariablesaresetcorrectly. 解决办法: [root@centos6-vm01~]#vim/etc/profile ...... exportLC_ALL=C [root@centos6-vm01~]#source/etc/profile ----------------------------------------------------- 1)MongoDB命令帮助系统在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控。看一下MongoDB的命令帮助系统: [root@centos6-vm01~]#mongo MongoDBshellversion:3.0.6 connectingto:test WelcometotheMongoDBshell. Forinteractivehelp,type"help". Formorecomprehensivedocumentation,see http://docs.mongodb.org/ Questions?Trythesupportgroup http://groups.google.com/group/mongodb-user Serverhasstartupwarnings: 2018-01-02T23:24:23.304+0000ICONTROL[initandlisten]**WARNING:Youarerunningthisprocessastherootuser,whichisnotrecommended. 2018-01-02T23:24:23.304+0000ICONTROL[initandlisten] 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten] 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**WARNING:/sys/kernel/mm/transparent_hugepage/enabledis'always'. 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**Wesuggestsettingitto'never' 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten] 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**WARNING:/sys/kernel/mm/transparent_hugepage/defragis'always'. 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**Wesuggestsettingitto'never' 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten] >help db.help()helpondbmethods db.mycoll.help()helponcollectionmethods sh.help()shardinghelpers rs.help()replicasethelpers helpadminadministrativehelp helpconnectconnectingtoadbhelp helpkeyskeyshortcuts helpmiscmiscthingstoknow helpmrmapreduce showdbsshowdatabasenames showcollectionsshowcollectionsincurrentdatabase showusersshowusersincurrentdatabase showprofileshowmostrecentsystem.profileentrieswithtime>=1ms showlogsshowtheaccessibleloggernames showlog[name]printsoutthelastsegmentofloginmemory,'global'isdefault use<db_name>setcurrentdatabase db.foo.find()listobjectsincollectionfoo db.foo.find({a:1})listobjectsinfoowherea==1 itresultofthelastlineevaluated;usetofurtheriterate DBQuery.shellBatchSize=xsetdefaultnumberofitemstodisplayonshell exitquitthemongoshell > 这是MongoDB最顶层的命令列表,主要告诉我们管理数据库相关的一些抽象的范畴:数据库操作帮助、集合操作帮助、管理帮助。如果你想了解数据库操作更详细的帮助命令,可以直接使用db.help(),如下所示: >db.help() DBmethods: db.adminCommand(nameOrDocument)-switchesto'admin'db,andrunscommand[justcallsdb.runCommand(...)] db.auth(username,password) db.cloneDatabase(fromhost) db.commandHelp(name)returnsthehelpforthecommand db.copyDatabase(fromdb,todb,fromhost) db.createCollection(name,{size:...,capped:...,max:...}) db.createUser(userDocument) db.currentOp()displayscurrentlyexecutingoperationsinthedb db.dropDatabase() db.eval()-deprecated db.fsyncLock()flushdatatodiskandlockserverforbackups db.fsyncUnlock()unlocksserverfollowingadb.fsyncLock() db.getCollection(cname)sameasdb['cname']ordb.cname db.getCollectionInfos() db.getCollectionNames() db.getLastError()-justreturnstheerrmsgstring db.getLastErrorObj()-returnfullstatusobject db.getLogComponents() db.getMongo()gettheserverconnectionobject db.getMongo().setSlaveOk()allowqueriesonareplicationslaveserver db.getName() db.getPrevError() db.getProfilingLevel()-deprecated db.getProfilingStatus()-returnsifprofilingisonandslowthreshold db.getReplicationInfo() db.getSiblingDB(name)getthedbatthesameserverasthisone db.getWriteConcern()-returnsthewriteconcernusedforanyoperationsonthisdb,inheritedfromserverobjectifset db.hostInfo()getdetailsabouttheserver'shost db.isMaster()checkreplicaprimarystatus db.killOp(opid)killsthecurrentoperationinthedb db.listCommands()listsallthedbcommands db.loadServerScripts()loadsallthescriptsindb.system.js db.logout() db.printCollectionStats() db.printReplicationInfo() db.printShardingStatus() db.printSlaveReplicationInfo() db.dropUser(username) db.repairDatabase() db.resetError() db.runCommand(cmdObj)runadatabasecommand.ifcmdObjisastring,turnsitinto{cmdObj:1} db.serverStatus() db.setLogLevel(level,<component>) db.setProfilingLevel(level,<slowms>)0=off1=slow2=all db.setWriteConcern(<writeconcerndoc>)-setsthewriteconcernforwritestothedb db.unsetWriteConcern(<writeconcerndoc>)-unsetsthewriteconcernforwritestothedb db.setVerboseShell(flag)displayextrainformationinshelloutput db.shutdownServer() db.stats() db.version()currentversionoftheserver 对数据库进行管理和操作的基本命令,可以从上面获取到。如果想要得到更多,而且每个命令的详细用法,可以使用上面列出的db.listCommands()查询。另一个比较基础的是对指定数据库的集合进行操作、管理和监控,可以通过查询db.mycoll.help()获取到: >db.mycoll.help() DBCollectionhelp db.mycoll.find().help()-showDBCursorhelp db.mycoll.count() db.mycoll.copyTo(newColl)-duplicatescollectionbycopyingalldocumentstonewColl;noindexesarecopied. db.mycoll.convertToCapped(maxBytes)-calls{convertToCapped:'mycoll',size:maxBytes}}command db.mycoll.dataSize() db.mycoll.distinct(key)-e.g.db.mycoll.distinct('x') db.mycoll.drop()dropthecollection db.mycoll.dropIndex(index)-e.g.db.mycoll.dropIndex("indexName")ordb.mycoll.dropIndex({"indexKey":1}) db.mycoll.dropIndexes() db.mycoll.ensureIndex(keypattern[,options]) db.mycoll.explain().help()-showexplainhelp db.mycoll.reIndex() db.mycoll.find([query],[fields])-queryisanoptionalqueryfilter.fieldsisoptionalsetoffieldstoreturn. e.g.db.mycoll.find({x:77},{name:1,x:1}) db.mycoll.find(...).count() db.mycoll.find(...).limit(n) db.mycoll.find(...).skip(n) db.mycoll.find(...).sort(...) db.mycoll.findOne([query]) db.mycoll.findAndModify({update:...,remove:bool[,query:{},sort:{},'new':false]}) db.mycoll.getDB()getDBobjectassociatedwithcollection db.mycoll.getPlanCache()getqueryplancacheassociatedwithcollection db.mycoll.getIndexes() db.mycoll.group({key:...,initial:...,reduce:...[,cond:...]}) db.mycoll.insert(obj) db.mycoll.mapReduce(mapFunction,reduceFunction,<optionalparams>) db.mycoll.aggregate([pipeline],<optionalparams>)-performsanaggregationonacollection;returnsacursor db.mycoll.remove(query) db.mycoll.renameCollection(newName,<dropTarget>)renamesthecollection. db.mycoll.runCommand(name,<options>)runsadbcommandwiththegivennamewherethefirstparamisthecollectionname db.mycoll.save(obj) db.mycoll.stats({scale:N,indexDetails:true/false,indexDetailsKey:<indexkey>,indexDetailsName:<indexname>}) db.mycoll.storageSize()-includesfreespaceallocatedtothiscollection db.mycoll.totalIndexSize()-sizeinbytesofalltheindexes db.mycoll.totalSize()-storageallocatedforalldataandindexes db.mycoll.update(query,object[,upsert_bool,multi_bool])-insteadoftwoflags,youcanpassanobjectwithfields:upsert,multi db.mycoll.validate(<full>)-SLOW db.mycoll.getShardVersion()-onlyforusewithsharding db.mycoll.getShardDistribution()-printsstatisticsaboutdatadistributioninthecluster db.mycoll.getSplitKeysForChunks(<maxChunkSize>)-calculatessplitpointsoverallchunksandreturnssplitterfunction db.mycoll.getWriteConcern()-returnsthewriteconcernusedforanyoperationsonthiscollection,inheritedfromserver/dbifset db.mycoll.setWriteConcern(<writeconcerndoc>)-setsthewriteconcernforwritestothecollection db.mycoll.unsetWriteConcern(<writeconcerndoc>)-unsetsthewriteconcernforwritestothecollection 有关数据库和集合管理的相关命令,是最基础和最常用的,如集合查询、索引操作等。下面通过实际的例子来演示一些常见的命令: 一、基本命令1)show dbs显示当前数据库服务器上的数据库 2)use pagedb切换到指定数据库pagedb的上下文,可以在此上下文中管理pagedb数据库以及其中的集合等 3)show collections显示数据库中所有的集合(collection) 4)db.serverStatus() 查看数据库服务器的状态。有时,通过查看数据库服务器的状态,可以判断数据库是否存在问题,如果有问题,如数据损坏,可以及时执行修复。 5)查询指定数据库统计信息use fragmentdb.stats()查询结果示例如下所示: >usefragment switchedtodbfragment >db.stats() { "db":"fragment", "collections":0, "objects":0, "avgObjSize":0, "dataSize":0, "storageSize":0, "numExtents":0, "indexes":0, "indexSize":0, "fileSize":0, "ok":1 } 6)查询指定数据库包含的集合名称列表db.getCollectionNames()结果如下所示: >db.getCollectionNames() [ "17u", "baseSe", "bytravel", "daodao", "go2eu", "lotour", "lvping", "mafengwo", "sina", "sohu", "system.indexes" ] 二、基本DDL和DML1)创建数据库如果你习惯了关系型数据库,你可能会寻找相关的创建数据库的命令。在MongoDB中,你可以直接通过use dbname来切换到这个数据库上下文下面,系统会自动延迟创建该数据库,例如: >showdbs local0.078GB >useLuceneIndexDB switchedtodbLuceneIndexDB >showdbs local0.078GB >db LuceneIndexDB >db.storeCollection.save({'version':'3.5','segment':'e3ol6'}) WriteResult({"nInserted":1}) >showdbs LuceneIndexDB0.078GB local0.078GB > 可见,在use指定数据库后,并且向指定其中的一个集合并插入数据后,数据库和集合都被创建了。 2)删除数据库直接使用db.dropDatabase()即可删除数据库。 3)创建集合可以使用命令db.createCollection(name, { size : ..., capped : ..., max : ... } )创建集合,示例如下所示: >db.createCollection('replicationColletion',{'capped':true,'size':10240,'max':17855200}) {"ok":1} >showcollections replicationColletion storeCollection system.indexes 4)删除集合删除集合,可以执行db.mycoll.drop()。 5)插入更新记录直接使用集合的save方法,如下所示: >db.storeCollection.save({'version':'3.5','segment':'e3ol6'}) WriteResult({"nInserted":1}) 更新记录,使用save会将原来的记录值进行覆盖实现记录更新。 6)查询一条记录使用findOne()函数,参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)示例如下所示: >db.storeCollection.findOne({'version':'3.5'}) { "_id":ObjectId("5a4c1733f5c45f057ae82292"), "version":"3.5", "segment":"e3ol6" } 7)查询多条记录使用find()函数,参数指定查询条件,不指定条件则查询全部记录。 8)删除记录使用集合的remove()方法,参数指定为查询条件,示例如下所示: >db.storeCollection.remove({'version':'3.5'}) WriteResult({"nRemoved":2}) >db.storeCollection.findOne() null 9)创建索引可以使用集合的ensureIndex(keypattern[,options])方法,示例如下所示: >usepagedb switchedtodbpagedb >db.page.ensureIndex({'title':1,'url':-1}) { "createdCollectionAutomatically":true, "numIndexesBefore":1, "numIndexesAfter":2, "ok":1 } >db.system.indexes.find() {"v":1,"key":{"_id":1},"name":"_id_","ns":"pagedb.page"} {"v":1,"key":{"title":1,"url":-1},"name":"title_1_url_-1","ns":"pagedb.page"} 上述,ensureIndex方法参数中,数字1表示升序,-1表示降序。使用db.system.indexes.find()可以查询全部索引。 10)查询索引我们为集合建立的索引,那么可以通过集合的getIndexes()方法实现查询,示例如下所示: >db.page.getIndexes() [ { "v":1, "key":{ "_id":1 }, "name":"_id_", "ns":"pagedb.page" }, { "v":1, "key":{ "title":1, "url":-1 }, "name":"title_1_url_-1", "ns":"pagedb.page" } ] 当然,如果需要查询系统中全部的索引,可以使用db.system.indexes.find()函数。 11)删除索引删除索引给出了两个方法: >db.mycoll.dropIndex(name) 2018-01-02T23:45:50.155+0000EQUERYReferenceError:nameisnotdefined at(shell):1:21 >db.mycoll.dropIndexes() {"ok":0,"errmsg":"nsnotfound"} > 第一个通过指定索引名称,第二个删除指定集合的全部索引。 12)索引重建可以通过集合的reIndex()方法进行索引的重建,示例如下所示: >db.page.reIndex() { "nIndexesWas":2, "nIndexes":2, "indexes":[ { "key":{ "_id":1 }, "name":"_id_", "ns":"pagedb.page" }, { "key":{ "title":1, "url":-1 }, "name":"title_1_url_-1", "ns":"pagedb.page" } ], "ok":1 } 13)统计集合记录数 >usefragment switchedtodbfragment >db.baseSe.count() 36749 上述统计了数据库fragment的baseSe集合中记录数。 14)查询并统计结果记录数 >usefragment switchedtodbfragment >db.baseSe.find().count() 36749 find()可以提供查询参数,然后查询并统计结果。上述执行先根据查询条件查询结果,然后统计了查询数据库fragment的baseSe结果记录集合中记录数。 15)查询指定数据库的集合当前可用的存储空间 >usefragment switchedtodbfragment >db.baseSe.storageSize() 142564096 16)查询指定数据库的集合分配的存储空间 >db.baseSe.totalSize() 144096000 上述查询结果中,包括为集合(数据及其索引存储)分配的存储空间。 三、启动与终止 1)正常启动[root@centos6-vm01 ~]# mongod --dbpath /data/db --logfile /var/mongo.log说明:指定数据存储目录和日志目录 如果采用安全认证模式,需要加上--auth选项,如:[root@centos6-vm01 ~]# mongod --auth --dbpath /data/db --logfile /var/mongo.log 2)以修复模式启动[root@centos6-vm01 ~]# mongod --repair以修复模式启动数据库。 实际很可能数据库数据损坏或数据状态不一致,导致无法正常启动MongoDB服务器,根据启动信息可以看到需要进行修复。或者执行:[root@centos6-vm01 ~]# mongod -f /etc/mongodb.conf --repair 3)终止服务器进程> db.shutdownServer()终止数据库服务器进程。或者,可以直接kill掉mongod进程即可。 四、安全管理 1)以安全认证模式启动[root@centos6-vm01 ~]# mongod --auth --dbpath /usr/mongo/data --logfile /var/mongo.log使用--auth选项启动mongod进程即可启用认证模式。或者,也可以修改/etc/mongodb.conf,设置auth=true,重启mongod进程。 2)添加用户>db.createUser({user: "admin",pwd: "1234!@#$qwer",roles: [ "readWrite", "dbAdmin" ]})添加数据库用户,添加成功,则显示结果如下所示: >db.createUser({user:"admin",pwd:"1234!@#$qwer",roles:["readWrite","dbAdmin"]}) Successfullyaddeduser:{"user":"admin","roles":["readWrite","dbAdmin"]} 3)安全认证前提是必须进入该用户对应的database才行,出现1代表成功> db.auth("admin", "1234!@#$qwer")数据库安全认证。认证成功显示结果: >useadmin switchedtodbadmin >db.auth("admin","1234!@#$qwer") 1 如果是认证用户,执行某些命令,可以看到正确执行结果,如下所示: >db.system.users.find() {"_id":"fragment.admin","user":"admin","db":"fragment","credentials":{"SCRAM-SHA-1":{"iterationCount":10000,"salt":"/QZtFAvcavqZIm15FmbToA==","storedKey":"t91XZuIrnUYtuN1bG+hNg58R+w0=","serverKey":"vZLGW0nVpGSKfUHsS2RABOXhOb4="}},"roles":[{"role":"readWrite","db":"fragment"},{"role":"dbAdmin","db":"fragment"}]} 4、为数据库写数据(同步到磁盘)加锁> db.runCommand({fsync:1,lock:1})说明:该操作已经对数据库上锁,不允许执行写数据操作,一般在执行数据库备份时有用。执行命令,结果示例如下: >db.runCommand({fsync:1,lock:1}) { "info":"nowlockedagainstwrites,usedb.fsyncUnlock()tounlock", "seeAlso":"http://dochub.mongodb.org/core/fsynccommand", "ok":1 } 5)查看当前锁状态> db.currentOp()说明:查询结果如下所示: >db.currentOp() { "inprog":[], "fsyncLock":true, "info":"usedb.fsyncUnlock()toterminatethefsyncwrite/snapshotlock" } 其中,fsyncLock为1表示MongoDB的fsync进程(负责将写入改变同步到磁盘)不允许其他进程执行写数据操作 6)解锁> use admin> db.$cmd.sys.unlock.findOne()说明:执行解锁,结果如下所示: >useadmin switchedtodbadmin >db.$cmd.sys.unlock.findOne() {"ok":1,"info":"unlockcompleted"} 可以执行命令查看锁状态:db.currentOp()状态信息如下: >db.currentOp() {"inprog":[]} 说明当前没有锁,可以执行写数据操作。 五、据备份、恢复与迁移管理 1)备份全部数据库[root@centos6-vm01 ~]# mkdir testbak[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongodump说明:默认备份目录及数据文件格式为./dump/[databasename]/[collectionname].bson 2)备份指定数据库[root@centos6-vm01 ~]# mongodump -d pagedb说明:备份数据库pagedb中的数据。 3)备份一个数据库中的某个集合[root@centos6-vm01 ~]# mongodump -d pagedb -c page说明:备份数据库pagedb的page集合。 4)恢复全部数据库[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongorestore --drop说明:将备份的所有数据库恢复到数据库,--drop指定恢复数据之前删除原来数据库数据,否则会造成回复后的数据中数据重复。 5)恢复某个数据库的数据[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongorestore -d pagedb --drop说明:将备份的pagedb的数据恢复到数据库。 6)恢复某个数据库的某个集合的数据[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongorestore -d pagedb -c page --drop说明:将备份的pagedb的的page集合的数据恢复到数据库。 7)向MongoDB导入数据[root@centos6-vm01 ~]# mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv说明:将文件csvORtsvFile.csv的数据导入到pagedb数据库的page集合中,使用cvs或tsv文件的列名作为集合的列名。 需要注意的是,使用--headerline选项时,只支持csv和tsv文件。--type支持的类型有三个:csv、tsv、json其他各个选项的使用,可以查看帮助: [root@centos6-vm01~]#mongoimport--help Usage: mongoimport<options><file> ImportCSV,TSVorJSONdataintoMongoDB.Ifnofileisprovided,mongoimportreadsfromstdin. Seehttp://docs.mongodb.org/manual/reference/program/mongoimport/formoreinformation. generaloptions: --helpprintusage --versionprintthetoolversionandexit verbosityoptions: -v,--verbosemoredetailedlogoutput(includemultipletimesformoreverbosity,e.g.-vvvvv) --quiethidealllogoutput connectionoptions: -h,--host=mongodbhosttoconnectto(setname/host1,host2forreplicasets) --port=serverport(canalsouse--hosthostname:port) authenticationoptions: -u,--username=usernameforauthentication -p,--password=passwordforauthentication --authenticationDatabase=databasethatholdstheuser'scredentials --authenticationMechanism=authenticationmechanismtouse namespaceoptions: -d,--db=databasetouse -c,--collection=collectiontouse inputoptions: -f,--fields=commaseparatedlistoffieldnames,e.g.-fname,age --fieldFile=filewithfieldnames-1perline --file=filetoimportfrom;ifnotspecified,stdinisused --headerlineusefirstlineininputsourceasthefieldlist(CSVandTSVonly) --jsonArraytreatinputsourceasaJSONarray --type=inputformattoimport:json,csv,ortsv(defaultsto'json') ingestoptions: --dropdropcollectionbeforeinsertingdocuments --ignoreBlanksignorefieldswithemptyvaluesinCSVandTSV --maintainInsertionOrderinsertdocumentsintheorderoftheirappearanceintheinputsource -j,--numInsertionWorkers=numberofinsertoperationstorunconcurrently(defaultsto1) --stopOnErrorstopimportingatfirstinsert/upserterror --upsertinsertorupdateobjectsthatalreadyexist --upsertFields=comma-separatedfieldsforthequerypartoftheupsert --writeConcern=writeconcernoptionse.g.--writeConcernmajority,--writeConcern'{w:3,wtimeout:500,fsync: true,j:true}'(defaultsto'majority') 8)从向MongoDB导出数据[root@centos6-vm01 ~]# mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv 说明:将pagedb数据库中page集合的数据导出到pages.csv文件,其中各选项含义:-f 指定cvs列名为_id,title,url,spiderName,pubDate-q 指定查询条件其他各个选项的使用,可以查看帮助: [root@centos6-vm01~]#mongoexport--help Usage: mongoexport<options> ExportdatafromMongoDBinCSVorJSONformat. Seehttp://docs.mongodb.org/manual/reference/program/mongoexport/formoreinformation. generaloptions: --helpprintusage --versionprintthetoolversionandexit verbosityoptions: -v,--verbosemoredetailedlogoutput(includemultipletimesformoreverbosity,e.g.-vvvvv) --quiethidealllogoutput connectionoptions: -h,--host=mongodbhosttoconnectto(setname/host1,host2forreplicasets) --port=serverport(canalsouse--hosthostname:port) authenticationoptions: -u,--username=usernameforauthentication -p,--password=passwordforauthentication --authenticationDatabase=databasethatholdstheuser'scredentials --authenticationMechanism=authenticationmechanismtouse namespaceoptions: -d,--db=databasetouse -c,--collection=collectiontouse outputoptions: -f,--fields=commaseparatedlistoffieldnames(requiredforexportingCSV)e.g.-f"name,age" --fieldFile=filewithfieldnames-1perline --type=theoutputformat,eitherjsonorcsv(defaultsto'json') -o,--out=outputfile;ifnotspecified,stdoutisused --jsonArrayoutputtoaJSONarrayratherthanoneobjectperline --prettyoutputJSONformattedtobehuman-readable queryingoptions: -q,--query=queryfilter,asaJSONstring,e.g.,'{x:{$gt:1}}' -k,--slaveOkallowsecondaryreadsifavailable(defaulttrue) --forceTableScanforceatablescan(donotuse$snapshot) --skip=numberofdocumentstoskip --limit=limitthenumberofdocumentstoexport --sort=sortorder,asaJSONstring,e.g.'{x:1}' 注意:如果上面的选项-q指定一个查询条件,需要使用单引号括起来,如下所示: [root@centos6-vm01~]#mongoexport-dpage-cArticle-q'{"spiderName":"mafengwoSpider"}'-f_id,title,content,images,publishDate,spiderName,url--jsonArray>mafengwoArticle.txt 2018-01-03T08:12:41.234+0800connectedto:localhost 2018-01-03T08:12:41.234+0800exported0records [root@centos6-vm01~]#llmafengwoArticle.txt -rw-r--r--.1rootroot3Jan300:12mafengwoArticle.txt 否则,就会出现下面的错误: ERROR:toomanypositionaloptions 六、远程连接管理 1)基于mongo实现远程连接[root@centos6-vm01 ~]# mongo 192.168.10.220:27017/pagedb或者[root@centos6-vm01 ~]# mongo 192.168.10.220:27017/pagedb -ukevin -p123456kevin 通过mongo实现连接,可以非常灵活的选择参数选项,参看命令帮助,如下所示: [root@centos6-vm01~]#mongo--help MongoDBshellversion:3.0.6 usage:mongo[options][dbaddress][filenames(endingin.js)] dbaddresscanbe: foofoodatabaseonlocalmachine 192.169.0.5/foofoodatabaseon192.168.0.5machine 192.169.0.5:9999/foofoodatabaseon192.168.0.5machineonport9999 Options: --shellruntheshellafterexecutingfiles --nodbdon'tconnecttomongodonstartup-no 'dbaddress'argexpected --norcwillnotrunthe".mongorc.js"fileon startup --quietbelesschatty --portargporttoconnectto --hostargservertoconnectto --evalargevaluatejavascript -h[--help]showthisusageinformation --versionshowversioninformation --verboseincreaseverbosity --ipv6enableIPv6support(disabledbydefault) AuthenticationOptions: -u[--username]argusernameforauthentication -p[--password]argpasswordforauthentication --authenticationDatabaseargusersource(defaultstodbname) --authenticationMechanismargauthenticationmechanism --gssapiServiceNamearg(=mongodb)Servicenametousewhenauthenticating usingGSSAPI/Kerberos --gssapiHostNameargRemotehostnametouseforpurposeof GSSAPI/Kerberosauthentication filenames:alistoffilestorun.fileshavetoendin.jsandwillexitafterunless--shellisspecified 2)基于MongoDB支持的javascript实现远程连接当你已经连接到一个远程的MongoDB数据库服务器(例如,通过mongo连接到192.168.0.184),现在想要在这个会话中连接另一个远程的数据库服务器(192.168.0.197),可以执行如下命令: >varx=newMongo('192.168.10.220:27017') >varydb=x.getDB('pagedb'); >useydb switchedtodbydb >db ydb >ydb.page.findOne() { "_id":ObjectId("4eded6a5bf3bfa0014000003"), "content":"巴黎是浪漫的城市,可是...", "pubdate":"2006-03-19", "title":"巴黎:从布鲁塞尔赶到巴黎", "url":"http://france.bytravel.cn/Scenery/528/cblsegdbl.html" } 上述通过MongoDB提供的JavaScript脚本,实现对另一个远程数据库服务器进行连接,操作指定数据库pagedb的page集合。 如果启用了安全认证模式,可以在获取数据库连接实例时,指定认证账号,例如: >varx=newMongo('192.168.0.197:27017') >varydb=x.getDB('pagedb','shirdrn','(jkfFS$343$_\=\,.F@3'); >useydb switchedtodbydb ==========================扩展知识==========================节点角色 MongoDB读写分离MongoDB副本集对读写分离的支持是通过Read Preferences特性进行支持的,这个特性非常复杂和灵活。设置读写分离需要先在从节点SECONDARY设置setSlaveOk。应用程序驱动通过read reference来设定如何对副本集进行读取操作,默认的,客户端驱动所有的读操作都是直接访问primary节点的,从而保证了数据的严格一致性。有如下几种模式: mongo shell中复制相关方法 复制数据库的命令 用户管理和认证方法官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell 角色管理方法官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

优秀的个人博客,低调大师

自动化运维之PSSH

1.PSSH简介 PSSH提供OpenSSH和相关工具的并行版本。包括pssh,pscp,prsync,pnuke和pslurp。该项目包括psshlib,可以在自定义应用程序中使用。 pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上的进程等等。杀手锏是文件并行复制,,当进行再远程主机批量上传下载的时候,最好使用它。 项目地址: https://code.google.com/archive/p/parallel-ssh/ 2.PSSH使用 2.1 安装PSSH 前提条件:注意需要安装 python 2.4 或以上版本 wget https://clsn.io/files/pssh/pssh-2.3.1.tar.gz tar zxf pssh-2.3.1.tar.gz cd pssh-2.3.1 python setup.py install 安装过程 [root@clsn.io /opt/pssh-2.3.1] #python setup.py install running install running build running build_py creating build creating build/lib creating build/lib/psshlib copying psshlib/task.py -> build/lib/psshlib copying psshlib/askpass_server.py -> build/lib/psshlib copying psshlib/__init__.py -> build/lib/psshlib copying psshlib/cli.py -> build/lib/psshlib copying psshlib/psshutil.py -> build/lib/psshlib copying psshlib/manager.py -> build/lib/psshlib copying psshlib/askpass_client.py -> build/lib/psshlib copying psshlib/version.py -> build/lib/psshlib copying psshlib/color.py -> build/lib/psshlib running build_scripts creating build/scripts-2.6 copying and adjusting bin/pssh -> build/scripts-2.6 copying and adjusting bin/pnuke -> build/scripts-2.6 copying and adjusting bin/prsync -> build/scripts-2.6 copying and adjusting bin/pslurp -> build/scripts-2.6 copying and adjusting bin/pscp -> build/scripts-2.6 copying and adjusting bin/pssh-askpass -> build/scripts-2.6 changing mode of build/scripts-2.6/pssh from 644 to 755 changing mode of build/scripts-2.6/pnuke from 644 to 755 changing mode of build/scripts-2.6/prsync from 644 to 755 changing mode of build/scripts-2.6/pslurp from 644 to 755 changing mode of build/scripts-2.6/pscp from 644 to 755 changing mode of build/scripts-2.6/pssh-askpass from 644 to 755 running install_lib creating /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/task.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/askpass_server.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/__init__.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/cli.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/psshutil.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/manager.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/askpass_client.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/version.py -> /usr/lib/python2.6/site-packages/psshlib copying build/lib/psshlib/color.py -> /usr/lib/python2.6/site-packages/psshlib byte-compiling /usr/lib/python2.6/site-packages/psshlib/task.py to task.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/askpass_server.py to askpass_server.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/__init__.py to __init__.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/cli.py to cli.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/psshutil.py to psshutil.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/manager.py to manager.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/askpass_client.py to askpass_client.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/version.py to version.pyc byte-compiling /usr/lib/python2.6/site-packages/psshlib/color.py to color.pyc running install_scripts copying build/scripts-2.6/pscp -> /usr/bin copying build/scripts-2.6/prsync -> /usr/bin copying build/scripts-2.6/pnuke -> /usr/bin copying build/scripts-2.6/pssh -> /usr/bin copying build/scripts-2.6/pssh-askpass -> /usr/bin copying build/scripts-2.6/pslurp -> /usr/bin changing mode of /usr/bin/pscp to 755 changing mode of /usr/bin/prsync to 755 changing mode of /usr/bin/pnuke to 755 changing mode of /usr/bin/pssh to 755 changing mode of /usr/bin/pssh-askpass to 755 changing mode of /usr/bin/pslurp to 755 running install_data creating /usr/man creating /usr/man/man1 copying man/man1/pssh.1 -> /usr/man/man1 copying man/man1/pscp.1 -> /usr/man/man1 copying man/man1/prsync.1 -> /usr/man/man1 copying man/man1/pslurp.1 -> /usr/man/man1 copying man/man1/pnuke.1 -> /usr/man/man1 running install_egg_info Writing /usr/lib/python2.6/site-packages/pssh-2.3.1-py2.6.egg-info 2.2 安装完成 使用yum安装后,只能使用pssh,但是编译安装后会包括其他命令也安装了(pscp prsync pnuke pslurp) pssh:在远程多台主机上并行运行命令 Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime pscp :把文件并行复制到多台远程主机上 Example: pscp -h hosts.txt -l irb2 foo.txt /home/irb2/foo.txt prsync:使用rsync协议本地文件同步到远程多台主机上。 Example: prsync -r -h hosts.txt -l irb2 foo /home/irb2/foo pnuke:在远程多台主机上并行killall某一进程 Example: pnuke -h hosts.txt -l irb2 java pslurp:把文件从远程多台主机上复制到本地主机上 Example: pslurp -h hosts.txt -L /tmp/outdir -l irb2 /home/irb2/foo.txt foo.txt 2.3 pssh参数说明 -h HOST_FILE 后边跟远程主机列表(ip) -H HOST_STRING 后边跟远程主机名或者ip地址 -l USER 指定远程主机的用户名-p PAR 指定pssh最大的并行线程数。 -o 将输出的内容重定向到一个指定的文件中 -O 指定ssh参数的具体配置 -e 将执行错误重定向到一个指定的文件中 -t 设定命令执行超时时间 -x 传递ssh命令的一些参数 -i 在远程主机上执行命令完成后显示标准输出和标准错误 -P 在执行远程命令时,输出执行结果 2.4 其他常用的方法 pssh使用帮助 pssh --help pssh查看所有服务器的uptime -h list 指定了执行命令的机器列表 -A表示提示输入密码(如果机器都是ssh key打通的则无需加-A) pssh -i -A -h list 'uptime' 使用pscp向一堆机器分发文件 pscp -h list localfile remote_dir 从一堆机器中拷贝文件到中心机器 pslurp -h list /etc/hosts local_dir 2.5 常见问题 如果你遇到这样的错误: IOError: [Errno 4] Interrupted system call 建议升级python版本到python2.7 3.附录 3.1 pssh CLSN站点镜像地址 本站将pssh软件包镜像到本地,以防丢失,有需求的可以执行下载,下载后注意校验MD5值。 File Summary + Labels Uploaded Size pssh-2.3.1.tar.gz PSSH 2.3.1 Source Feb 3, 2012 22.88KB pssh-2.3.tar.gz PSSH 2.3 Source Jan 25, 2012 21.62KB pssh-2.2.2.tar.gz PSSH 2.2.2 Source Feb 3, 2011 20.94KB pssh-2.2.1.tar.gz PSSH 2.2.1 Source Jan 27, 2011 20.88KB pssh-2.2.tar.gz PSSH 2.2 Source Jan 27, 2011 20.84KB pssh-2.1.1.tar.gz PSSH 2.1.1 Source Mar 5, 2010 17.94KB pssh-2.1.tar.gz PSSH 2.1 Source Feb 26, 2010 17.65KB pssh-2.0.tar.gz PSSH 2.0 Source Oct 21, 2009 15.03KB 3.2 pssh GOOGLE源 File Summary + Labels Uploaded Size pssh-2.3.1.tar.gz​ PSSH 2.3.1 Source Feb 3, 2012 22.88KB ​pssh-2.3.tar.gz​ PSSH 2.3 Source Jan 25, 2012 21.62KB ​pssh-2.2.2.tar.gz​ PSSH 2.2.2 Source Feb 3, 2011 20.94KB ​pssh-2.2.1.tar.gz​ PSSH 2.2.1 Source Jan 27, 2011 20.88KB ​pssh-2.2.tar.gz​ PSSH 2.2 Source Jan 27, 2011 20.84KB ​pssh-2.1.1.tar.gz​ PSSH 2.1.1 Source Mar 5, 2010 17.94KB ​pssh-2.1.tar.gz​ PSSH 2.1 Source Feb 26, 2010 17.65KB ​pssh-2.0.tar.gz​ PSSH 2.0 Source Oct 21, 2009 15.03KB 3.3 文件包MD5值 下载完成后务必校验MD5值 MD5值 文件名 dbdbfda5681b82d4c64abdb3668e88bc pssh-2.3.tar.gz 53e70d53064f658bf8f44880340e8e5c pssh-2.3.1.tar.gz 689207677b260a7e4178174295b1389e pssh-2.2.tar.gz 865305ae39647884bc54a42e9f9554bb pssh-2.2.2.tar.gz f7583259976ef64bf3cae957a0b66e41 pssh-2.2.1.tar.gz 725f902bb7e128cc7aa1322551f7ca37 pssh-2.1.tar.gz 4b355966da91850ac530f035f7404cd5 pssh-2.1.1.tar.gz 07474f9f9dbefedc809e997f04e1dee5 pssh-2.0.tar.gz 4.参考文献 https://code.google.com/archive/p/parallel-ssh/http://opstool.com/article/266https://www.cnblogs.com/Dicky-Zhang/p/5988415.htmlhttps://help.aliyun.com/knowledge_detail/38835.html 作者: 惨绿少年 出处: http://clsn.io 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

优秀的个人博客,低调大师

运维篇(Operations)

目录 14. ITSM 实践 14.1. 组织架构 14.2. Help Desk / Service Desk 14.3. Problem Management(问题管理) 14.3.1. 故障树分析(Fault Tree Analysis,FTA) 14.3.2. 员工手册 14.4. Incident Management(突发事件管理) 14.4.1. 突发事件处理流程 14.5. Change Management(变更管理) 14.6. Release Management(发布管理) 14.7. 内部培训 14.8. IT资源管理 14.8.1. 设备采购 14.8.1.1. 招标采购流程 14.8.2. 合同管理 14.8.3. 周期性时间管理 14.8.3.1. 合同到期与续约 14.8.3.2. SSL 证书 14.8.4. IDC 设备管理 14.8.4.1. 资产管理 14.8.4.2. 图表管理 14.8.4.3. 进出IDC机房 14.8.4.4. 设备上下架 14.8.4.5. 如何维护设备 14.9. 桌面支持 14.9.1. Office 基础设施及周边设备管理 14.9.1.1. 固定资产管理 14.9.1.2. 电脑设备 14.9.1.3. 打印机设备 14.9.1.4. 电脑设备采购 14.9.1.5. 电脑升级 14.9.1.6. 报修流程 14.9.1.7. 报废流程 14.9.2. 网络用户管理 14.9.2.1. 用户分配 14.9.2.2. 邮箱分配 14.9.2.3. 权限分配 14.9.3. 网络安全保密管理 14.9.3.1. 系统杀毒 14.9.3.2. 系统帐号 14.9.4. 信息存储备份管理 14.9.4.1. 邮件备份 14.9.4.2. 图片备份 14.9.4.3. 文档备份 14.9.5. 网络操作系统管理 14.9.5.1. 域控制器 14.9.5.2. 文件存储服务器 14.9.6. 网络应用系统管理 14.9.6.1. MIS 系统 14.9.6.2. ERP 系统 14.9.6.3. OA/CRM... 系统 14.9.7. 网络机房管理 14.9.7.1. 网络拓扑图 14.9.7.2. 机柜机架 14.9.7.3. Router 14.9.7.4. Switch 15. 监控 15.1. 监控方法 15.1.1. 人工监控 15.1.2. 机器监控 15.2. 网络监控 15.2.1. DNS解析監控 15.2.2. IP地址監控 15.2.3. 路由監控 15.2.4. 流量監控 15.2.5. 会话数监控 15.3. 服务监控 15.3.1. 端口监控 15.3.2. URL 监控 15.3.3. TCP、UDP协议模拟监控 15.3.4. 数据库监控 15.4. 内容监控 15.4.1. 访问速度监控 15.4.2. 日志监控 Please enable JavaScript to view the &lt;a href="http://disqus.com/?ref_noscript"&gt;comments powered by Disqus.&lt;/a&gt;comments powered by Disqus 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

优秀的个人博客,低调大师

《OpenStack运维指南》节选—— 双层VLAN

双层VLAN 我在加拿大不列颠哥伦比亚省的基隆拿创建了一套新的OpenStack系统。整个部署过程是全自动的:Cobbler负责在硬件上部署OS,OS被引导后,Puppet接手剩下的事情。我已经在实践中运行这套部署方案很多次了,就理所应当地认为没有任何问题。 在基隆拿的最后一天,我在酒店里参加电话会议。实际上,我正在新部署出来的云系统里面随便玩着。我启动了一个虚拟机实例,并登录进去。一切看起来都很正常。闲着无聊,我运行了一下ps aux命令,突然整个虚拟机实例就锁住了。 我认为这是一个偶发事件,因此我停止了这个实例,并启动了一个新的。这时,电话会议结束了,我需要去数据中心走一趟。 在数据中心,我完成了一些收尾的工作,这时想起了那个实例锁住的的事情。于是我登录到新的实例,并再一次运行ps aux。它工作正常。唷。我决定再运行一次。它又锁住了。搞什么啊! 在重现了这个问题几次之后,我得出一个不幸的结论,那就是这套云系统其实真的有问题。更糟的是,我在基隆拿的出差就要结束了,我必须回到卡尔加里去。 我应该从哪里开始排查像这样的故障呢?一个虚拟机实例因为一个命令就随机地锁住了。是镜像的问题吗?不——所有镜像都有这个问题。 是计算节点的问题吗? 不——所有节点都有这个问题。实例真的锁住了吗?不!因为新的SSH连接很正常! 我们去寻求帮助,一个网络工程师说可能是MTU的问题。太棒了!MTU!终于有进展了!MTU是什么?它为什么会出问题? MTU是最大传输单元(maximum transmission unit)的英文缩写。它规定了网卡接收的每一个数据包字节的最大值。如果两个网卡上的MTU设置不一样,过来的字节就会被卡住,奇怪的事情就会发生 ——比方说会话随机被锁住。 并非所有的数据包都有1500 B这么大。通过SSH运行ls命令可能只会创建一个小于1500 B的数据包。但是,运行的命令如果有很大的输出,比方说ps aux命令,就需要多个1500 B的数据包。 好的,那么MTU的问题是从哪儿跑出来的?为什么我们在其他的任一部署中没有遇到过这个问题?这次的情况有啥新变化吗?好吧,新的数据中心,新的上行链路,新的交换机,新的交换机型号,新的服务器,第一次使用这个型号的服务器……所以,基本上所有东西都是新的。太棒了。我们在各个地方都要调大了MTU:交换机,计算节点的网卡,实例的虚拟网卡,甚至使数据中心为我们的上行链路接口都调大了MTU。一些修改起作用了,一些却没用。可是这条排障的方向似乎不对,我们没必要在这些地方调整MTU。 作为最后一根救命稻草,我们的网络管理员(Alvaro)和我坐在一起,旁边有四个终端窗口、一根铅笔和一张纸。在其中一个窗口中,我们运行ping。在第二个窗口中,我们在云控制器上运行tcpdump。在第三个窗口,我们在计算节点上运行tcpdump。然后第四个窗口中,我们在实例上运行tcpdump。介绍一些背景:我们这个云是多节点而不是多主机设置。 一个云控制器作为所有计算节点的网关。VlanManager用来配置网络。这意味着,云控制器和所有计算节点在每一个OpenStack的项目中都使用一个不同的VLAN。我们使用了ping的-s选项来修改数据包的大小。我们观察到有时这个包可以完整地返回,有时它发出去了却没法回来,而有时它会随机地停下来。我们修改tcpdump来显示数据包的十六进制转储,并不停地修改ping的组合:外部、控制器、计算节点和虚拟机实例。 最终,Alvaro发现了一个问题。当一个数据包从外面到达云控制器的时候,它不应该配有一个VLAN。我们确认了这点。当数据包从云控制器发往计算节点时,只有当目的地是一个虚拟机实例时,它才会携带一个VLAN。这也是对的。当ping应答从实例发出时,它应该在一个VLAN里面。确实如此。当它返回到控制器,然后发送到互联网上时,它不应该再带有一个VLAN。不对。噢,看起来好像是这个包的VLAN部分没有被移除掉。 那是说不通的。 带着这个想法,我在计算节点上随机地敲了一些命令: $ipa… 10:vlan100@vlan20:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscnoqueuemasterbr100stateUP … “嘿,Alvaro,你能在一个VLAN上运行一个VLAN吗?” “如果你这么做,就会给数据包增加额外4个字节。” 那么这就全说通了: grepvlan_interface/etc/nova/nova.conf vlan_interface=vlan20 在nova.conf中,vlan_interface指定了OpenStack要在哪个网卡上挂VLAN。正确的设置本应该是:vlan_interface=bond0。 这也就是服务器捆绑后的网卡。 vlan20是数据中心分配给我们用于公网访问的VLAN。它是一个正确的VLAN,也和bond0相连。 结果我错误地把OpenStack配置成了将所有的租户VLAN与vlan20而不是bond0相连,所以这就在一个VLAN上又叠加了另一个VLAN。结果每个包增加了额外的4 B,导致发出的是一个1504 B的包,这当然会出问题,因为我们网卡有1500 B的限制啊! 这个设置一修复,一切都好了。 本文作者:钱永超 来源:51CTO

优秀的个人博客,低调大师

互联网运维装腔指南

1、全球化的认证有助于提升逼格,什么OCM、CCIE、RHCA、CISSP等等能考都考,再不济,也要有一张系统架构设计师或者网络规划设计师的信产部认证。每过一个认证,逼格提升一档。如果再有能一个211工程的MSC,那就再好不过了。 2、TCP/IP协议、Linux内核深入研究、ORACLE大全等等之类的超过1千页大本头的书能有效提升B格,一定要放手边。不懂不要紧,别人能看见就行了。真有人跟你谈这些,也别担心装B失败,谈网络就从TCP的实现谈起,谈Linux就从内存的管理谈起,谈数据库就从各数据库SQL语句的源码实现谈起。如果有人跟你谈MS的东西也不要紧,就说自己之前有多年的微软的工作经历,外包的也算。反正也不会有查。有人非要跟你谈硬件,最次也要从CPU的指令集的实现谈起吧。 3、大众化的东西要少用。能用ATS,就别用squid;能用postgresql,就别用MySQL;坚信什么nginx、lighty这种webserver要比apache好一万倍,而且apache能实现的功能,这些都能实现,不行就自己写模块、写扩展。实在要用apache,也别用高版本,抱死1.3的系统。有人要是问起,就说这是基于1.3的版是自己深度二次开发版本。实在要找不到的话也不要紧,没事在sf、oschina上看看什么下载量少的项目,背背项目简介啥的。不得不说,这两个网站太贴心,分类都给你做好了。总之,小众的东西能很有效的提升iBer的战斗力。 4、写脚本的话,别用grep、sort 、uniq、管道这类命令。iBer会选择使用纯粹的awk、sed的实现,长度不要紧,阅读性、性能也不是问题。功能实现了,别人都还不懂这就是关键。如果真有人来请教,也要装出一副很简单的表情。切记不要摇头尾巴晃。就算是你是从《sed和awk》这种书上抄你自己也不一定能看懂的代码。 5、虽然会shell,但也要少用shell。初级iBer,系统管理会首选perl、python、php这类3p的工具,而且要对shell这种语言有一种不屑。把什么性能、移植性、面向对象要常挂嘴边。,如果再能写二行什么erlang、ruby、lua这类语言做系统管理,绝对是iBer的装B神器,也是中级iBer的标准。高级IBer会有Haskell这类函数式语言进行系统管理,这绝对是装B的B2轰炸机呀。当然,资深iBer会返璞归真,使用面向对象进行shell编程。对,你没看错,是使用OO进行shell编程。 6、iBer对谈到Redhat、ubuntu这类大众发行版本时,会回复一个字“切!”LFS、Gentoo这类系统绝对是iBer们首选。不为什么,就为在无穷尽的编译中找到属于iBer的快感。如果非装大众发行版,iBer也会从开机画面、登陆提示等等地方打自己上深刻的烙印。iBer的寂寞岂是一般人能懂的。 7、iBer对什么checkpoint,juniper等表示不屑。必须天天把iptabes的链和表都挂在嘴边,尤其是mangle表。原则上对商用产品的一律不屑一顾,什么f5,radware一律自己开发实现。至于意外的将自己关在外面的事情一定要严格遵守各自公司的保密协议。 8、iBer的操作终端呢,像SecureCRT、xshell这种绝对是不用的,一定要用最原始的,什么黑屏绿字只是初级iBer的水平,中高级iBer的都是Alpha半透明终端,桌面背景在设置个全球internet流量趋势图。让你根本就不知道他天天对着屏幕在敲什么东西。有事没事编译一些大型软件,看着翻滚的屏幕做思考状。 9、名片的title一定要是系统架构师,没有名片也不要紧,什么QQ签名、人人状态、微博简介上,有人看的地方一定要写上。这些都是提升B格的好地方。 10、初级iBer谈流量、PV、自动化;中级iBer谈流程、谈规范,什么ITIL、ITSM要常挂嘴边;高级iBer谈架构、谈模式;资深iBer谈合同、谈成本。 11、混圈子对iBer来非常有必要的。什么XX沙龙、XX架构师大会、XX优化大会之类必要是常客,露个B脸就行。基本原则就是跟搞系统谈网络,跟搞网络的谈数据库,跟搞数据库的谈安全……对方不懂什么就谈什么对就了 12、骨灰级iBer早就超出三界外,不在五行中,他们注定有着传奇的色彩。他们正忙于对iBer们进行职业发展规划。iBer助理、iBer、高级iBer、资深iBer、iBer总监直至CBO。如果发展了到了CBO,那么你一定是一位惊天地、泣鬼神的一代B神,一统江湖的教主,供万千iBer敬仰。darling,我很看好你哟! 作者:佚名 来源:51CTO

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册