{"id":165,"date":"2011-11-16T13:38:58","date_gmt":"2011-11-16T16:38:58","guid":{"rendered":"http:\/\/wagnerbianchi.com\/blog\/?p=165"},"modified":"2011-11-17T12:23:09","modified_gmt":"2011-11-17T15:23:09","slug":"monitorando-discos-do-servidor","status":"publish","type":"post","link":"http:\/\/wagnerbianchi.com\/blog\/?p=165","title":{"rendered":"Monitorando discos do servidor"},"content":{"rendered":"<p>Pode ser que esse post n\u00e3o tenha haver com o fato de este ser um blog focado em MySQL, mas, pelo contr\u00e1rio, tudo que est\u00e1 em torno de tal software de bancos de dados ser\u00e1 abordado aqui com foco na utilidade e melhor funcionamento. Levando em conta que alguns servi\u00e7os em nuvem ainda oferecem servi\u00e7os muito\u00a0aqu\u00e9m\u00a0daquilo que se espera, precisamos ter pr\u00f3-atividade suficiente para monitorar hardwarede um servidor e principalmente, monitorar os discos, aonde reside a parte f\u00edsica dos bancos de dados &#8211; <strong>focando no MySQL<\/strong> &#8211; arquivos de dados ou tablespaces, logs de transa\u00e7\u00f5es, logs bin\u00e1rios, relay logs, general logs e logs de erro.<\/p>\n<p><strong>Muito interessante que voc\u00ea DBA entenda que todos estes arquivos s\u00e3o tamb\u00e9m parte necess\u00e1ria para o seu trabalho di\u00e1rio uma vez que:<br \/>\n<\/strong><\/p>\n<ul>\n<li><strong>Arquivo de Dados ou Tablespaces<\/strong>: como o MySQL tem sido mais utilizado ultimamente com o Storage Engine InnoDB, motor de armazenamento que possibilita a utiliza\u00e7\u00e3o de um ou mais arquivos de tablespace compartilhados com prefixo ibdataX (onde X \u00e9 o n\u00famero de sequ\u00eancia do nome do tablepace compartilhado) ou ainda com a configura\u00e7\u00e3o innodb_file_per_table que criar\u00e1 um tablepsace individual para cada tabela de um banco de dados. Uma falha dos discos poder\u00e1 corromper os tablepsaces, sejam eles de quaisquer dos tipos citados acima, gerando um erro pareceido com este <a href=\"http:\/\/www.google.com.br\/url?sa=t&amp;rct=j&amp;q=innodb%20assertion%20failure%20in%20thread&amp;source=web&amp;cd=1&amp;sqi=2&amp;ved=0CBoQFjAA&amp;url=http%3A%2F%2Fbugs.mysql.com%2Fbug.php%3Fid%3D18410&amp;ei=pqzCToiiMcH1gAfHi63aDg&amp;usg=AFQjCNGa6PeIXsXmND66KOlVC8O7ULTB3A&amp;sig2=qiDgoqNf0ZaLZbhqORNy9g&amp;cad=rja\" target=\"_blank\">MySQL Bug # 18410<\/a>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Logs de Transa\u00e7\u00f5es<\/strong>: estes arquivos (que por padr\u00e3o s\u00e3o criados 2 ap\u00f3s uma instala\u00e7\u00e3o padr\u00e3o, id_logfile0 e ib_logfile1) s\u00e3o respons\u00e1veis por armazenar transa\u00e7\u00f5es do InnoDB que receberam ou n\u00e3o um COMMIT. Utilizado principalmente para realizar, em conjunto com as \u00e1reas internas ao tablespace compartilhado (undo, redo e metadados), o processo de <a href=\"http:\/\/dev.mysql.com\/doc\/innodb-plugin\/1.0\/en\/innodb-create-index-recovery.html\" target=\"_blank\">crash-recovery<\/a>, eliminando do log todas as transa\u00e7\u00f5es que n\u00e3o contam atualmente com um COMMIT e criando um checkpoint. Outros processo s\u00e3o realizados em conjunto (flush logs, escrita de dados&#8230;); tema para outro post.<\/li>\n<\/ul>\n<ul>\n<li><strong>Logs bin\u00e1rios:<\/strong> estes arquivos podem ser utilizados como uma fonte muito \u00e1gil de extra\u00e7\u00e3o de backup incremental, j\u00e1 que armazena tudo (STATEMENT ou ROW) que atualiza o estado dos bancos de dados. Al\u00e9m de ser uma \u00f3tima fonte para tal estrat\u00e9gia de backup, \u00e9 obrigatoriamente utilizado para implementa\u00e7\u00e3o de topologias de replica\u00e7\u00e3o entre dois ou mais servidores de bancos de dados MySQL.<\/li>\n<\/ul>\n<p>N\u00e3o vou citar a utilidade de todos os arquivos que foram mencionados na introdu\u00e7\u00e3o deste post para n\u00e3o torn\u00e1-lo cansativo, pois, o intuito aqui \u00e9 voc\u00ea ter em mente que, al\u00e9m dos dados, que s\u00e3o a parte mais importante que qualquer outra, voc\u00ea ainda precisa monitorar os seus discos para que n\u00e3o existam surpresas, por exemplo, ao extrair backups com o mysqldump e este backup n\u00e3o contar com todos os dados pois o tablespace de uma tabela espec\u00edfica (geralmente a mais importante de todo o modelo f\u00edsico) est\u00e1 com uma parte de seus dados corrompida. Isso pode acontecer. Uma outra surpresa \u00e9 receber uma mensagem de erro de <em>Assertion Thread Failure<\/em> do inode do InnoDB ao tentar efetuar o CHECKSUM dos dados e n\u00e3o ter conseguido -esse \u00e9 um dos problemas que uma intermit\u00eancia nos discos poder\u00e1 gerar.<\/p>\n<p>98% das falhas atualmente detectadas com tablepace do InnoDB est\u00e3o relacionadas com hardware mal provisionado, banco de dados mal configurado em rela\u00e7\u00e3o ao desempenho e a press\u00e3o sobre mem\u00f3ria secund\u00e1ria, o que implica em muito mais trabalho de disco e CPU e menos da mem\u00f3ria (quando deveria ser ao contr\u00e1rio). A utiliza\u00e7\u00e3o intensa de disco e CPU gera overhead e, consequentemente, lentid\u00e3o.<\/p>\n<p style=\"text-align: center;\"><strong>Mas como fazer para monitorar poss\u00edveis problemas com os discos do meu servidor?<\/strong><\/p>\n<p style=\"text-align: left;\">Tenho utilizado muito o <a href=\"http:\/\/smartmontools.sourceforge.net\/\" target=\"_blank\">S.M.A.R.T.<\/a> com o <strong>smartctl<\/strong> e o <strong>smartd<\/strong> com que s\u00e3o respectivamente o utilit\u00e1rio e o daemon para verifica\u00e7\u00e3o\u00a0cont\u00ednua\u00a0da sa\u00fade dos discos de um servidor, seja ele cr\u00edtico ou n\u00e3o. Indenpendente da criticidade, \u00e9 muito importante que se tenha um pleno monitoramento, pois, o hardware tamb\u00e9m poder\u00e1 nos deixar na m\u00e3o e parar o acesso \u00e0 informa\u00e7\u00e3o.<\/p>\n<p style=\"text-align: left;\">O smartd \u00e9 o daemon, sendo assim, ele precisa estar rodando para que possamos interagir com o mesmo e gerar os resultados que buscamos ao monitorar os discos de um servidor. O comando cliente \u00e9 o smartctl que poder\u00e1 ser utilizado das seguintes formas:<\/p>\n<p><code>[root@redhat01 ~]# smartctl -i \/dev\/sda3<br \/>\nsmartctl 5.39.1 2010-01-28 r3054 [x86_64-redhat-linux-gnu] (local build)<br \/>\nCopyright (C) 2002-10 by Bruce Allen, http:\/\/smartmontools.sourceforge.net<\/p>\n<p>=== START OF INFORMATION SECTION ===<br \/>\nDevice Model: WDC WD1003FBYX-01Y7B0<br \/>\nSerial Number: WD-WCAW32441497<br \/>\nFirmware Version: 01.01V01<br \/>\nUser Capacity: 1,000,204,886,016 bytes<br \/>\nDevice is: Not in smartctl database [for details use: -P showall]<br \/>\nATA Version is: 8<br \/>\nATA Standard is: Exact ATA specification draft version not indicated<br \/>\nLocal Time is: Wed Nov 16 14:40:28 2011 CST<br \/>\nSMART support is: Available - device has SMART capability.<br \/>\nSMART support is: Enabled<\/code><\/p>\n<p style=\"text-align: left;\">O comando mostrado acima nos permite verificar o modelo e o firmware do disco \/dev\/hda. O SMART mant\u00e9m um database com v\u00e1rios modelos de disco e possivelmente o seu esteja neste database ser\u00e1 reconhecido.<\/p>\n<p>Voc\u00ea pode verificar o conte\u00fado deste database com o seguinte comando (resultados suprimidos):<br \/>\n<code>[root@redhat01 ~]# smartctl -P showall<br \/>\n...<br \/>\nMODEL REGEXP: QUANTUM FIREBALL EX(3.2|6.4)A<br \/>\nFIRMWARE REGEXP: .*<br \/>\nMODEL FAMILY: Quantum Fireball EX series<br \/>\nATTRIBUTE OPTIONS: None preset; no -v options are required.<\/code><\/p>\n<p>MODEL REGEXP: QUANTUM FIREBALL ST(3.2|4.3|4300)A<br \/>\nFIRMWARE REGEXP: .*<br \/>\nMODEL FAMILY: Quantum Fireball ST series<br \/>\nATTRIBUTE OPTIONS: None preset; no -v options are required.<\/p>\n<p>MODEL REGEXP: QUANTUM FIREBALL SE4.3A<br \/>\nFIRMWARE REGEXP: .*<br \/>\nMODEL FAMILY: Quantum Fireball SE series<br \/>\nATTRIBUTE OPTIONS: None preset; no -v options are required.<\/p>\n<p>MODEL REGEXP: QUANTUM FIREBALLP LM(10.2|15|20.[45]|30)<br \/>\nFIRMWARE REGEXP: .*<br \/>\nMODEL FAMILY: Quantum Fireball Plus LM series<br \/>\nATTRIBUTE OPTIONS: None preset; no -v options are required.<\/p>\n<p>MODEL REGEXP: QUANTUM FIREBALLP AS(10.2|20.5|30.0|40.0)<br \/>\nFIRMWARE REGEXP: .*<br \/>\nMODEL FAMILY: Quantum Fireball Plus AS series<br \/>\nATTRIBUTE OPTIONS: None preset; no -v options are required.<\/p>\n<p>MODEL REGEXP: QUANTUM FIREBALLP KX27.3<br \/>\nFIRMWARE REGEXP: .*<br \/>\nMODEL FAMILY: Quantum Fireball Plus KX series<br \/>\nATTRIBUTE OPTIONS: None preset; no -v options are required.<br \/>\n&#8230;<\/p>\n<p style=\"text-align: left;\">O segundo comando \u00e9 o mais interessante, pois, possibilita criar um relat\u00f3rio mais completo que lista pontos\u00a0importantes\u00a0relacionados com a sa\u00fade do disco analisado. \u00c9 conhecido como &#8220;Executive Summary of Disk Health&#8221; &#8211; o relat\u00f3rio abaixo mostra que o disco foi aprovado e n\u00e3o existem falhas, mas, caso o relat\u00f3rio te mostre o contr\u00e1rio, fa\u00e7a o backup de seus dados imediatamente.<\/p>\n<p><code>[root@redhat01 ~]# smartctl -Hc \/dev\/sda3<br \/>\nsmartctl 5.39.1 2010-01-28 r3054 [x86_64-redhat-linux-gnu] (local build)<br \/>\nCopyright (C) 2002-10 by Bruce Allen, http:\/\/smartmontools.sourceforge.net<\/p>\n<p>=== START OF READ SMART DATA SECTION ===<br \/>\nSMART overall-health self-assessment test result: PASSED<\/p>\n<p>General SMART Values:<br \/>\nOffline data collection status: (0x84) Offline data collection activity<br \/>\nwas suspended by an interrupting command from host.<br \/>\nAuto Offline Data Collection: Enabled.<br \/>\nSelf-test execution status: ( 0) The previous self-test routine completed<br \/>\nwithout error or no self-test has ever<br \/>\nbeen run.<br \/>\nTotal time to complete Offline<br \/>\ndata collection: (16500) seconds.<br \/>\nOffline data collection<br \/>\ncapabilities: (0x7b) SMART execute Offline immediate.<br \/>\nAuto Offline data collection on\/off support.<br \/>\nSuspend Offline collection upon new<br \/>\ncommand.<br \/>\nOffline surface scan supported.<br \/>\nSelf-test supported.<br \/>\nConveyance Self-test supported.<br \/>\nSelective Self-test supported.<br \/>\nSMART capabilities: (0x0003) Saves SMART data before entering<br \/>\npower-saving mode.<br \/>\nSupports SMART auto save timer.<br \/>\nError logging capability: (0x01) Error logging supported.<br \/>\nGeneral Purpose Logging supported.<br \/>\nShort self-test routine<br \/>\nrecommended polling time: ( 2) minutes.<br \/>\nExtended self-test routine<br \/>\nrecommended polling time: ( 170) minutes.<br \/>\nConveyance self-test routine<br \/>\nrecommended polling time: ( 5) minutes.<br \/>\nSCT capabilities: (0x303f) SCT Status supported.<br \/>\nSCT Feature Control supported.<br \/>\nSCT Data Table supported.<\/code><\/p>\n<p>Percebam que o primeiro atributo \u00e9 mesmo aquele que indica que o disco PASSOU no teste do SMART.<\/p>\n<p style=\"text-align: left;\"><strong>Refer\u00eancias:<\/strong><\/p>\n<ul>\n<li>Wiki: <a href=\"http:\/\/en.wikipedia.org\/wiki\/S.M.A.R.T.\">http:\/\/en.wikipedia.org\/wiki\/S.M.A.R.T.<\/a>]<\/li>\n<li>Source Forge: <a href=\"http:\/\/sourceforge.net\/apps\/trac\/smartmontools\/wiki\/TocDoc\">http:\/\/sourceforge.net\/apps\/trac\/smartmontools\/wiki\/TocDoc<\/a>]<\/li>\n<li>Linux Magazine:\u00a0<a href=\"http:\/\/www.linuxjournal.com\/magazine\/monitoring-hard-disks-smart?page=0,2\">http:\/\/www.linuxjournal.com\/magazine\/monitoring-hard-disks-smart?page=0,2<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Pode ser que esse post n\u00e3o tenha haver com o fato de este ser um blog focado em MySQL, mas, pelo contr\u00e1rio, tudo que est\u00e1 em torno de tal software de bancos de dados ser\u00e1 abordado aqui com foco na utilidade e melhor funcionamento. Levando em conta que alguns servi\u00e7os em nuvem ainda oferecem servi\u00e7os [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[17],"tags":[22,20,11,21,23,19,25,24],"_links":{"self":[{"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/165"}],"collection":[{"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=165"}],"version-history":[{"count":20,"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":175,"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/165\/revisions\/175"}],"wp:attachment":[{"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wagnerbianchi.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}