系统之家提供 Windows 系统、Ghost 系统、驱动与常用软件的安全下载及安装教程。 后台管理
📢 欢迎访问系统之家!所有资源均经过安全检测。

SegmentFault æ°‘å

发布时间:2026-07-28 | 浏览:1
📥 下载地址(文章开头)
恢复一切数据
📥 下载地址(文章中间)
恢复一切数据
SegmentFault æ°‘å·¥å“¥æŠ€æœ¯ä¹‹è·¯æœ€æ–°çš„æ–‡ç« 2026-01-30T22:13:23+08:00 https://segmentfault.com/feeds/blogs https://creativecommons.org/licenses/by-nc-nd/4.0/ 国内 IT 软件外包公å�¸ TOP 10ï¼� https://segmentfault.com/a/1190000047584089 2026-01-30T22:13:23+08:00 2026-01-30T22:13:23+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>大家好,我是民工哥。</p><p>之å‰�我们è�Šè¿‡äº†ï¼šå›½å†…<a href="https://link.segmentfault.com/?enc=iVQRH15%2Bbdhlz8WyvBA9xA%3D%3D.fYSKooPgQUAPejrxo3IYKkLVIyft9XZ74m8%2BlA8sX2y5ReWOQLHpMJvHucLzwi0XCU5kreql3t81t2%2FbvttX1vsdO%2FxtFgZO2W%2BZKMaZrNJr8VECfrpxKwbItwfk34vhaRmKvJdz1KK9nY3b1J2eejKlSz0g9%2F9C%2FTReGRHYqQ2pIEF9Ft649KsWCFNVa6kD" rel="nofollow">互è�”网公å�¸TOP 10</a>ä¸�<a href="https://link.segmentfault.com/?enc=Ra%2FUSWR%2BY4pUtjMSJDM56w%3D%3D.fGLssoUV6BtTRqf6SQJ%2FUIIKmZ80BDimc9dOvubEy02zBnCIOhmQ56Pu3WMqUemlzCGXiKLs5xIBcTO7qaUoplXZXvjHXEH3vKic%2B323fOmfsI1%2FLx0llIMCYLbZMuDqX%2B%2BQajx4Z754idyjUcKsKu26RxBbfcHGh2JOPJBFeXvdjEhhU00%2Bf%2FaxT4TT81Uc" rel="nofollow">å…¨ç�ƒæ“�作系统 TOP 10</a>。</p><p>最近,看到很多人都在谈论外包公å�¸ï¼Œè¿™ä¸�,我也æ�¥è¹­ä¸€ä¸‹çƒ­é—¹ã€‚</p><p><img src="/img/remote/1460000047584091" alt="图片" title="图片"></p><p>å…¶å®�,æ€�么讲呢,对äº�ä»�事IT行业的我们æ�¥è¯´ï¼Œå¤–包ä¼�业永远是IT人逃ä¸�æ�‰çš„å��,而且,很多人都有一个疑问:<a href="https://link.segmentfault.com/?enc=%2FRt3WjjAXS7kxe8sW83PuQ%3D%3D.kGR8J1bf%2FAHFeHL8fB599sStR1A7fEgRy3nhAJxRtwR6EWwd6%2B5EgLzT5swiOH%2FqC%2FeRT4xP1snQiVq%2FUS07vZKKWNrcCbsuFQBPIzZKjJ30T9EDyIO1FuNDJ3vovGgryxC1lHO%2BG83mI87N55frHwcpKCD7TfKZnU5498DEbTfnfqgCpJ2hz2jMQQ925UZG" rel="nofollow">为什么 it 外包永远在招人</a>?</p><p>ç‰¹åˆ«æ˜¯æœ€è¿‘å‡ å¹´ï¼Œå¤§ç�¯å¢ƒä¸�好的情况,很多ä¼�业都在缩招ã€�ç²¾å‡�å²—ä½�。</p><p>这么å�šç›®çš„很æ˜�确,开æº�节æµ�,å‡�少人力æˆ�本的支出,é™�ä½�管ç�†è´£ä»»ã€‚</p><p>这也是外包公å�¸ä¸€ç›´å­˜åœ¨çš„æ ¸å¿ƒå�Ÿå› ,也是为什么有的外包ä¼�业越å�šè¶Šå¥½ï¼Œè¶Šæ�¥è¶Šå¤§çš„æ ¸å¿ƒæ‰€åœ¨ã€‚</p><p>所以,很多中大å�‹ä¼�业的部分岗ä½�都会选择给外包公å�¸æ�¥å�šã€‚</p><p><img src="/img/remote/1460000047584092" alt="图片" title="图片"></p><p>用行è¯�æ�¥è¯´å°±æ˜¯ï¼šåˆ©ç›Šå…±åˆ†ï¼Œé£�险共担。</p><p>对äº�,求è�Œè€…æ�¥è¯´ï¼Œå‰�å‡ å¹´ï¼Œéƒ½æµ�行:外包狗都ä¸�å�»ã€‚</p><p>但是,在当å‰�è¿™ç§�情况之下,如æ�œç©ºçª—期过长也ä¸�是很好的情况,选择外包ä¼�业也是一ç§�曲线选择(先生存æ‰�能有å��续)。</p><h2>外包ä¼�业概述</h2><p>å…¶å®�,就是上é�¢æ‰€è¯´çš„,ä¼�业为了节çœ�æˆ�本,而将ä¼�业内部一些岗ä½�或项目交由第三方公å�¸æ‰¿å�šï¼Œä¼�业å�¯ä»¥å°†ä¼˜åŠ¿èµ„æº�ä¸�æ ¸å¿ƒç²¾åŠ›é›†ä¸­äº�å�‘å±•æ ¸å¿ƒ 业务上é�¢ã€‚</p><p>我们在日常求è�Œè¿‡ç¨‹ä¸­ï¼Œå¸¸è§�的有:ä¼�业IT资产管ç�†ã€�桌é�¢è¿�ç»´ã€�机房æœ�务器è¿�维管ç�†ï¼ˆæœ�务器硬件ã€�软件ã€�监æ�§ã€�巡检等)诸如这些工作,都å�¯ä»¥è§†ä½œå¤–包ä¼�业对外æ��供的æœ�务项目。</p><h4>业务模å¼�</h4><p>外包ä¼�业的业务模å¼�一般æ�¥è¯´æœ‰ä»¥ä¸‹ä¸‰ç§�:</p><ul><li>1ã€�人员外派(驻场)</li><li>2ã€�项目承æ�¥</li><li>3ã€�è�”å�ˆç”²æ–¹æˆ�ç«‹å…¬å�¸</li></ul><p>总体æ�¥è¯´ï¼Œ1ã€�2这类模å¼�å� 比较高。</p><p>我们通常讨论比较多的还是东软集团ã€�中软国际ã€�软通动力ã€�æ–‡æ€�海辉(ç�°ä¸­ç”µé‡‘信)这四家。</p><p>它们在规模ã€�业务领域ã€�市场影å“�力等方é�¢å�‡å¤„äº�行业领先地ä½�。</p><p>近日,有专业机æ�„å�‘布了《2026年中国å��大IT外包ä¼�业》,æ�’å��ä¸�分先å��,ä½�å±…å‰�å��的有:</p><ul><li>软通动力</li><li>中软国际</li><li>东软Neusoft</li><li>中电文æ€�海辉</li><li>浪潮inspur</li><li>å�šå½¦ç§‘技</li><li>中科软科技</li><li>é“¶é›�科技</li><li>ä¿¡å��ä¿¡</li><li>ä½°é’§æˆ�</li></ul><p>今天,我们就一å�Œæ�¥ç�†ä¸€ç�†è¿™å��大 IT 外包ä¼�业,希望对大家æ�¥å¹´çš„æ±‚è�Œæ‰¾å·¥ä½œæœ‰æ‰€å¸®åŠ©ä¸�借鉴。</p><h2>东软集团</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:1991年,1996年上市,上交所,股票代ç �:600718。</p><p><img src="/img/remote/1460000047584093" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:中国第一家上市的软件公å�¸ï¼Œä»¥è½¯ä»¶æŠ€æœ¯ä¸ºæ ¸å¿ƒï¼Œä¸šåŠ¡è¦†ç›–æ™ºæ…§åŸ�市ã€�医疗å�¥åº·ã€�智能汽车互è�”等领域。</p><p><strong>业务领域</strong>:业务é‡�心涵盖智慧医疗ã€�智慧åŸ�市ã€�汽车电å­�ä¸‰å¤§æ ¸å¿ƒé¢†åŸŸã€‚</p><p><strong>市场地ä½�</strong>:</p><ul><li>医疗IT解决方案市å� ç�‡é•¿æœŸä½�居国内第一,国内众多åŸ�市的医院信æ�¯ç³»ç»Ÿï¼ˆHIS)ã€�å½±åƒ�归档和通信系统(PACS)å�‡å‡ºè‡ªä¸œè½¯ä¹‹æ‰‹ã€‚</li><li>在智慧åŸ�市领域,东软å�‚ä¸�çš„é¡¹ç›®ä¸­æ ‡é‡�è¶…75个,覆盖政务ã€�交通ã€�安防等多个场景。</li><li>在汽车电å­�领域,其车载系统解决方案也已æˆ�为行业é‡�è¦�ç�©å®¶ã€‚</li></ul><p>嵌入å¼�软件æœ�务äº�å…¨ç�ƒçŸ¥å��å“�牌,拥有Linuxæ“�作系统ä¸�åŠ�公软件业务。</p><h2>中软国际</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:2000年,2008年上市香港主æ�¿ï¼Œè‚¡ç¥¨ä»£ç �:00354.HK。</p><p><img src="/img/remote/1460000047584094" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:全ç�ƒåŒ–软件ä¸�ä¿¡æ�¯æŠ€æœ¯æœ�务ä¼�业,ä¸�å��为等战略伙伴å�ˆä½œæ�„建互è�”网信æ�¯æŠ€æœ¯æœ�务平å�°ã€‚</p><p><strong>业务领域</strong>:早期专注äº�电å­�政务和金è��ä¿¡æ�¯åŒ–,å��æˆ�为å��为生æ€�里的“关键ç�©å®¶â€�,深度å�‚ä¸�å��为云计算ã€�人工智能ã€�é€šä¿¡è®¾å¤‡ç­‰æ ¸å¿ƒé¢†åŸŸçš„ç ”å�‘项目。</p><p><strong>市场地ä½�</strong>:</p><ul><li>员工规模超过8万人,在国内外70个åŸ�市å�‡æœ‰å¸ƒå±€ï¼ŒåŒ—京ã€�西安ã€�æ·±åœ³ç­‰åœ°è®¾æœ‰ç ”å�‘基地。</li><li>在政ä¼�æœ�务领域,中软国际拿下了ä¸�少国家级ã€�çœ�级的数字化转å�‹é¡¹ç›®ï¼Œåœ¨æ”¿åŠ¡äº‘ã€�金è��ä¿¡æ�¯åŒ–等赛é�“的市场份é¢�一直å��列å‰�茅。</li></ul><p>在政务云ã€�金è��ä¿¡æ�¯åŒ–等赛é�“市场份é¢�领先,具备ä»�咨询到交付的全æµ�程æœ�务能力。</p><h2>软通动力</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:2005å¹´</p><p><img src="/img/remote/1460000047584095" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>ï¼šå…¨æ ˆæ™ºèƒ½åŒ–äº§å“�ä¸�æœ�务æ��供商,具备ä»�咨询到交付的全æµ�程æœ�务能力。</p><p><strong>业务领域</strong>:业务覆盖金è��ã€�能æº�ã€�æ™ºèƒ½åˆ¶é€ ã€�ICT等多个领域,æ�­å»ºäº†ä»�咨询规划ã€�技术开å�‘到è¿�ç»´æœ�务的全æµ�程体系。</p><p><strong>市场地ä½�</strong>:</p><ul><li>æˆ�立第二年便æˆ�功挤进微软ã€�IBMç­‰å›½é™…å·¨å¤´çš„ä¾›åº”é“¾ï¼Œæ‰©å¼ é€Ÿåº¦è¿…çŒ›ã€‚</li><li>员工规模超过9万人,在全ç�ƒ40余个åŸ�市设有近百个分支机æ�„和超过20个全ç�ƒäº¤ä»˜ä¸­å¿ƒã€‚</li><li>在2023年中国ITæœ�务市场份é¢�中æ�’å��第一,IT咨询国内领导者å�‚商首ä½�。</li></ul><p>è�šç„¦äº‘计算ã€�大数æ�®ã€�人工智能等新兴技术,æœ�务å��为ã€�腾讯等头部ä¼�业。</p><h2>æ–‡æ€�海辉(ç�°ä¸­ç”µé‡‘信)</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:由1995å¹´æˆ�立的文æ€�创新和1996å¹´æˆ�立的海辉软件äº�2012å¹´å�ˆå¹¶è€Œæ�¥ï¼Œå��åŠ å…¥ä¸­å›½ç”µå­�(CEC)阵è�¥ã€‚</p><p><img src="/img/remote/1460000047584096" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:国有ä¼�业背景,专注äº�金è��科技赛é�“,具备ä»�咨询到软件开å�‘的全æµ�程æœ�务能力。</p><p><strong>业务领域</strong>:主攻金è��科技赛é�“,尤其是在银行业ITé¡¹ç›®ä¸Šå ªç§°â€œéš�å½¢å† å†›â€�ã€‚ä¸šåŠ¡è¦†ç›–é“¶è¡Œæ ¸å¿ƒç³»ç»Ÿå�‡çº§ã€�数字支付解决方案ã€�金è��é£�æ�§çš„AI模å�‹å¼€å�‘等银行数字化转å�‹çš„å…¨æµ�程。</p><p><strong>市场地ä½�</strong>:</p><ul><li>å…¨ç�ƒåŒ–布局优势显著,在31个国家建有54个交付中心,员工覆盖55个国家,规模超过3万人。</li><li>在离岸外包领域,其欧ç¾�市场æœ�务能力在国内å�Œè¡Œé‡Œç®—是顶尖的。</li><li>市场份é¢�在金è��科技领域一直稳居å‰�列。</li></ul><p>æ ¸å¿ƒæ•°å­—åŒ–äº§å“�为智翼云SuperDXPä¼�业数字化创新平å�°ï¼Œé‡‡ç”¨åˆ†å¸ƒå¼�互è�”网中å�°PaaS技术æ�¶æ�„。</p><h2>浪潮(Inspur)</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:1945 å¹´</p><p><img src="/img/remote/1460000047584097" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:中国领先的IT解决方案和产å“�æ��供商,æ��供全方ä½�IT产å“�å’Œæœ�务。</p><p><strong>业务领域</strong>:云计算ã€�大数æ�®ã€�人工智能ã€�ä¼�业资æº�规划(ERP)ã€�æœ�务器ã€�存储设备等。</p><p><strong>市场地ä½�</strong>:æœ�务器产å“�国内市场å� 有é‡�è¦�地ä½�,国际市场影å“�力ä¸�断扩展。</p><p>ä¸�Intelã€�NVIDIAã€�å��为等全ç�ƒé¢†å…ˆç§‘技公å�¸å�ˆä½œï¼Œæ�¨åŠ¨æŠ€æœ¯ç”Ÿæ€�建设。</p><h2>å�šå½¦ç§‘技</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:1995å¹´</p><p><img src="/img/remote/1460000047584098" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:全ç�ƒIT咨询ã€�产å“�å�Šè§£å†³æ–¹æ¡ˆæœ�务商,业务涵盖人工智能ã€�大数æ�®ã€�物è�”网等领域。</p><p><strong>业务领域</strong>:ITæœ�务ã€�金è��ITæœ�务ã€�IT综å�ˆè§£å†³æ–¹æ¡ˆã€�ä¼�业æœ�务å�Šå…¨ç�ƒåŒ–和本地化解决方案。</p><p><strong>市场地ä½�</strong>:在中国ã€�ç¾�国ã€�日本ã€�å�°åº¦ç­‰å…«ä¸ªå›½å®¶è®¾æœ‰70余家分支机æ�„,æœ�务15个行业客户。</p><p>è�·å¾—CMMI 3ã€�ISO 20000ã€�ISO 9001ã€�ISO 27001等资质认è¯�,具备全ç�ƒäº¤ä»˜èƒ½åŠ›ã€‚</p><h2>中科软科技</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:1996年,2019年上交所上市。</p><p><img src="/img/remote/1460000047584099" alt="logo" title="logo"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:国内ä¿�险IT领域的龙头ä¼�业,具备深å�šçš„æŠ€æœ¯ç§¯ç´¯å’Œè¡Œä¸šç»�验。</p><p><strong>业务领域</strong>:计算机软件开å�‘å�Šäº§å“�的销售ä¸�æœ�务,专注äº�ä¿�险ã€�政务信æ�¯åŒ–等行业应用。</p><p><strong>市场地ä½�</strong>:ä¿�险IT解决方案市å� ç�‡é¢†å…ˆï¼Œæ”¿åŠ¡ä¿¡æ�¯åŒ–行业应用ç»�验丰富。</p><p>æŒ�ç»­åŠ ç �AIç ”å�‘,赋能业务全æµ�程,具备å�‚直应用软件开å�‘能力。</p><h2>é“¶é›�科技</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:2009年(整å�ˆå�‡çº§ä¸ºé›†å›¢åŒ–è¿�è�¥äº�2018年)</p><p><img src="/img/remote/1460000047584100" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:以数字化作业平å�°ä¸ºæ ¸å¿ƒï¼Œæ��供业务è¿�è�¥æœ�务,具备å�“è¶Šçš„æœ�务交付能力。</p><p><strong>业务领域</strong>:文档æœ�务ã€�远程æœ�务ã€�网点æœ�务ã€�智慧è¿�è�¥å’Œé‡‘è��科技等五大战略业务。</p><p><strong>市场地ä½�</strong>:在科技æœ�务领域深耕二å��ä¹�年,æœ�务客户é��布多个行业。</p><p>æ�„建“大平å�°+å°�å‰�端+多生æ€�+å…±è¿�è�¥â€�模å¼�,æ��供账户管ç�†æœ�务ã€�ä¿¡è´·é£�险æœ�务等。</p><h2>ä¿¡å��ä¿¡</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:æˆ�ç«‹äº�1996年(å�Ÿå¤§è¿�å��信计算机技术股份有é™�å…¬å�¸ï¼‰</p><p><img src="/img/remote/1460000047584101" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>ï¼šä»¥è½¯ä»¶æŠ€æœ¯ä¸ºæ ¸å¿ƒï¼Œä»�事计算机应用软件开å�‘ã€�系统集æˆ�ã€�软件外包æœ�务等多个业务领域。</p><p><strong>业务领域</strong>:国际业务主è¦�æ��供软件外包æœ�务ã€�BPOå’ŒITOæœ�务;国内业务主è¦�æ��ä¾›IT战略方案咨询ã€�系统策划和设计等全方ä½�æœ�务。</p><p><strong>市场地ä½�</strong>:国家规划布局内é‡�点软件ä¼�业,中国软件产业最大规模å‰�100å®¶ä¼�业之一。</p><p>è�·å¾—ISO9001:2008ã€�CMM5级ã€�CMMI5级等资质认è¯�,具备嵌入å¼�软件ã€�BPOæœ�务ã€�ITOæœ�务等技术能力。</p><h2>ä½°é’§æˆ�</h2><p><strong>æˆ�ç«‹æ—¶é—´</strong>:2006å¹´</p><p><img src="/img/remote/1460000047584102" alt="图片" title="图片"></p><p><strong>æ ¸å¿ƒä¼˜åŠ¿</strong>:中国中西部地区领先的æœ�务外包供应商,具备专业ã€�æˆ�熟的ODC(离岸交付中心)模å¼�交付能力。</p><p><strong>业务领域</strong>ï¼šä¸ºåˆ¶é€ ä¸šã€�金è��ã€�电信ã€�能æº�ã€�ITå�Šæ”¿åºœå…¬å…±æœ�务行业æ��供信æ�¯æŠ€æœ¯å¤–包(ITO)和业务æµ�程外包(BPO)æœ�务。</p><p><strong>市场地ä½�</strong>:客户涵盖IBMã€�å��为ã€�阿里巴巴等世界500强ä¼�业,在中国大陆å�Šæµ·å¤–设立32个分支机æ�„。</p><p>æŒ�有国家高新技术ä¼�业ã€�软件ä¼�业资质,并通过CMMI ML5ã€�ISO27001等国际管ç�†ä½“系认è¯�。</p><h2>外包能å�»å�—?</h2><p>最近,很多å°�伙伴问:<strong>å�ªæœ‰å¤–包的 offer 能å�»å�—</strong>?</p><p>大ç�¯å¢ƒä¸�行,é�¢è¯•太少了,很多本科生想进外包都没机会。</p><p>之å‰�都是买方市场(求è�Œè€…),如今,角色转æ�¢äº†ï¼Œæˆ�å�–市场了(ä¼�业)。</p><p>å¹¶ä¸�è¦�è®¤ä¸ºä½ æœ‰å¤§å�‚å±¥å�†ã€�多牛逼的技术,多少年多少年的ç»�验,这些在ç�°å®�é�¢å‰�都是浮云。</p><p>当今市场情况下,多数ä¼�业ä¸�太会用高薪å�»æ‹›è�˜ä¸€ä¸ªæŠ€æœ¯è¾ƒç‰›çš„人,毕竟å�¯èƒ½å¤šæ•°æƒ…况下ä¼�业目å‰�也用ä¸�上这类人æ‰�,招一个能干活的è¦�求并ä¸�高的æ‰�是第一è¦�务,活下å�»æ‰�是硬é�“ç�†ï¼Œå�¦åˆ™ï¼Œä»€ä¹ˆå�‘展都空谈。</p><p>真的,å�¬åŠ�ï¼�</p><p>é��常时期,ä¸�需è¦�在æ„�那么多,外包作为过渡是完全没问题的,很多外包其å®�比å°�å…¬å�¸è¿˜è¦�好多了。</p><p>也ä¸�è¦�太担心å�»å¤–包会导致自己的简å�†æœ‰â€œæ±¡ç‚¹â€�,å�ªè¦�在å®�际工作中æ�¥è§¦çš„项目还å�¯ä»¥ï¼Œå†™åœ¨ç®€å�†ä¸Šå†�润色一下,å†�就业求è�Œä¹Ÿæ˜¯å®Œå…¨æ²¡é—®é¢˜çš„,放心ï¼�</p><p>默默沉淀,æ��高个人ç«�争力,等待时机æˆ�熟å†�溜就好了。</p><p>之å‰�给大家也整ç�†è¿‡ä¸€ç¯‡å…³äº�å¤–åŒ…è–ªèµ„çš„æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=mNaLxIk7nxdjJcKwW1lpMg%3D%3D.GfoU2cz%2F6z5NFRxP9eJt%2FQKrf2xpNwayWvhAARLjbybhIcpjf7SLo6DKq0wP6mWYCZISJCdQZ84y6PokqQxcZBRcqoppqqEp0SJkCGi7WvKnSyuImQSohndx5r3kdyMqWk%2F%2FpUkGVOsbP83jk4Pldq3v5uVPIaT5eqX5VnbvGEiiB79aaQ%2FGqDB7WKRNaaww" rel="nofollow">ç›®å‰�å·¥èµ„æœ€é«˜çš„å‡ å®¶å¤–åŒ…å…¬å�¸æ±‡æ€»ï¼ˆæœ€æ–°ç‰ˆï¼‰ï¼�</a></p> 早知é�“有这么个å�Šç‚¸å¤©çš„ CI&CD 工具,我就ä¸�用 Jenkins 了ï¼� https://segmentfault.com/a/1190000044920446 2024-05-28T22:33:13+08:00 2024-05-28T22:33:13+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>大家好,我是民工哥ï¼�</p><p>æ��到è¿�维自动化,我们就ä¸�å¾—ä¸�æ��èµ· Jenkins 这个工具,它是一个功能强大且ç�µæ´»çš„æŒ�续集æˆ�工具,适用äº�å�„ç§�规模的软件项目,并能够通过自动化和集æˆ�化的方å¼�æ��高软件开å�‘和测试的效ç�‡ã€‚</p><p>ç�°åœ¨ï¼Œ<strong>ä½ è¿˜åœ¨ Jenkins 上点点å�—?</strong></p><p><img src="/img/remote/1460000044920448" alt="图片" title="图片"></p><p>那就太 OUT 了ï¼�å¿«æ�¥è¯•试 Tekton çš„ç�µæ´»è‡ªåŠ¨åŒ–å�§ã€‚</p><h2>Tekton 简介</h2><p>Tekton是一个用äº�æ�„建CI/CD(æŒ�续集æˆ�å’ŒæŒ�续交付)系统的云å�Ÿç”Ÿè§£å†³æ–¹æ¡ˆï¼Œä¹Ÿæ˜¯ä¸€ä¸ªå¼ºå¤§çš„ã€�ç�µæ´»çš„å¼€æº�框æ�¶ï¼Œå…�许开å�‘者æ�„建ã€�测试和å�‘布应用。它由Tekton Pipelines(æ��ä¾›æ�„建å�—)和支æŒ�组件(如Tekton CLIå’ŒTekton Catalog)组æˆ�,是一个完整的生æ€�系统。</p><p><img src="/img/remote/1460000044920449" alt="图片" title="图片"></p><p>Tekton在Kubernetes集群上作为扩展安装和è¿�行,包å�«ä¸€ç»„Kubernetes自定义资æº�,这些资æº�定义了å�¯ä»¥ä¸ºpipelines创建和é‡�用的æ�„建å�—。Tektonå®�体具有高度的å�¯å®šåˆ¶æ€§ã€�å�¯é‡�å¤�使用性和å�¯æ‰©å±•性,使得用户å�¯ä»¥æ ¹æ�®éœ€è¦�ç�µæ´»å®šä¹‰å’Œæ‰©å±•CI/CDæµ�水线。</p><p>Tekton最åˆ�是Knativeçš„å­�项目build-pipeline,主è¦�用äº�ç»™Knativeçš„build模å�—å¢�åŠ pipeline功能。å��æ�¥ç‹¬ç«‹å‡ºæ�¥ï¼Œæˆ�为一个通用的CI/CD工具,ç�°åœ¨æ˜¯Linux基金会项目CD基金会的一部分。</p><p>官网:<strong><a href="https://link.segmentfault.com/?enc=qsfaTba%2Bqm36QQ7jVEx9AA%3D%3D.aUs1Xd44J4nGCcGCaIIsqaq4Ed9%2BII50kHxRaipj4hI%3D" rel="nofollow">https://tekton.dev/</a></strong></p><h2>Tekton 功能特性</h2><p><img src="/img/remote/1460000044920450" alt="图片" title="图片"></p><p>以下是Tekton的一些主è¦�功能特性:</p><ul><li><strong>跨平å�°ä¸�ç�µæ´»æ€§</strong>:Tekton å…�许开å�‘者跨多云ç�¯å¢ƒæˆ–本地系统进行æ�„建ã€�测试ä¸�部署。为用户æ��供了高度的ç�µæ´»æ€§ï¼Œå�¯ä»¥æ ¹æ�®å…·ä½“需求快速ç�µæ´»åœ°å®šä¹‰æµ�水线。</li><li><strong>工件管ç�†</strong>:Tekton æ��供了工件管ç�†åŠŸèƒ½ï¼Œèƒ½å¤Ÿå­˜å‚¨ã€�管ç�†å’Œä¿�护工件。此外,Tekton管é�“å�¯ä»¥å¾ˆå¥½åœ°ä¸�其它第三方工具相é…�å�ˆï¼Œå®�ç�°æ›´å¹¿æ³›çš„集æˆ�å’Œå��作。</li><li><strong>å�¯å®šåˆ¶æ€§</strong>:Tekton å®�体是完全å�¯å®šåˆ¶çš„,这æ„�味ç�€å¹³å�°å·¥ç¨‹å¸ˆå�¯ä»¥å®šä¹‰é��常详细的æ�„建基目录,以供开å�‘人员在å�„ç§�情况下使用,å�¯ä»¥æ»¡è¶³ä¸�å�Œçš„æ�„建和部署需求。</li><li><strong>å�¯é‡�用性</strong>:Tekton å®�体ä¸�ä»…å�¯å®šåˆ¶ï¼Œè€Œä¸”是完全å�¯ç§»æ¤�的。一旦定义了æŸ�个管é�“,组织内的任何人都å�¯ä»¥ä½¿ç”¨å®ƒå¹¶é‡�用其æ�„é€ å�—ã€‚è¿™å¤§å¤§åŠ é€Ÿäº†å¤�æ�‚管é�“çš„æ�„建过程,é�¿å…�了é‡�å¤�工作。</li><li><strong>å�¯æ‰©å±•性</strong>:Tekton 具有强大的å�¯æ‰©å±•性。Tekton Catalog是Tekton社区驱动的存储库,其中包å�«ä¸°å¯Œçš„预制组件,用户å�¯ä»¥å¿«é€Ÿåˆ›å»ºæ–°çš„并扩展ç�°æœ‰ç®¡é�“。此外,Tekton的工作负载在Kubernetes容器中执行,通过简å�•åœ°å°†èŠ‚ç‚¹æ·»åŠ åˆ°ç¾¤é›†ï¼Œå�¯ä»¥è½»æ�¾å¢�åŠ å·¥ä½œè´Ÿè½½å®¹é‡�。</li><li><strong>安全性ä¸�å�ˆè§„性</strong>:Tekton Chains æ��供了类似DevSecOps的能力,å�¯ä»¥å¯¹æ•´ä¸ªCI/CDæµ�程进行签å��ã€�追踪和审计,ä»�而å¢�åŠ CI/CDæµ�程的安全å�ˆè§„性。</li><li><strong>调试ä¸�问题æ�’查</strong>:Tekton å¢�åŠ äº†æ–­ç‚¹åŠŸèƒ½ï¼Œå½“å®¹å™¨è¿�行失败时ä¸�会立å�³é€€å‡ºï¼Œè¿™ä½¿å¾—用户能够进入容器进行问题æ�’查。å�Œæ—¶ï¼ŒTekton还æ��供了两份调试信æ�¯ï¼Œåˆ†åˆ«ä½�äº�<code>/tekton/debug/scripts</code>å’Œ<code>/tekton/debug/info/step-no</code>,方便开å�‘者进行调试和问题定ä½�。</li></ul><h2>Tekton 组件</h2><p>Tekton的主è¦�组件包括:</p><ul><li><strong>Tekton Pipelines</strong>:这是 Tekton æœ€æ ¸å¿ƒçš„ç»„ä»¶ï¼Œå®ƒå®šä¹‰äº†ä¸€ç»„ Kubernetes 的自定义资æº�(Custom Resources),包括 Pipelineã€�PipelineRunã€�Taskã€�TaskRunã€�TaskSetã€�Trigger å’Œ TriggerTemplate 等。这些资æº�为创建ã€�管ç�†å’Œæ‰§è¡ŒCI/CDæµ�水线æ��供了基础。Pipeline定义了一个æµ�水线的结æ�„,包括一系列的Task(任务),而Task则定义了在æµ�水线中执行的具体步骤。</li><li><strong>Tekton CLI</strong>:这是Tekton的命令行界é�¢å·¥å…·ï¼Œå®ƒå…�许用户通过命令行ä¸�Tekton Pipelines进行交互。用户å�¯ä»¥ä½¿ç”¨Tekton CLIæ�¥åˆ›å»ºã€�查看ã€�æ›´æ–°å’Œåˆ é™¤æµ�水线ã€�任务等资æº�,以å�Šè§¦å�‘æµ�水线的执行。</li><li><strong>Tekton Catalog</strong>:这是一个社区驱动的Tektonæ�„建å�—存储库。它包å�«äº†å¤§é‡�预定义的组件和任务,用户å�¯ä»¥å¿«é€Ÿåˆ©ç”¨è¿™äº›ç»„ä»¶æ�¥åˆ›å»ºæ–°çš„æµ�水线或扩展ç�°æœ‰ç®¡é�“。这大大æ��高了开å�‘效ç�‡ï¼Œå‡�少了é‡�å¤�工作。</li><li><strong>Tekton Hub</strong>是一个基äº� Web 的图形界é�¢ï¼Œç”¨äº�访问 Tekton Catalog。</li><li><strong>Tekton Triggers</strong>:此组件å…�è®¸ç”¨æˆ·æ ¹æ�®äº‹ä»¶æ�¥å®�例化æµ�水线。例如,当用户æ¯�次将PR(Pull Request)å�ˆå¹¶åˆ°GitHub仓库时,å�¯ä»¥è§¦å�‘æµ�水线å®�例和æ�„建工作。这使得Tekton能够自动å“�应代ç �å�˜æ›´ï¼Œå®�ç�°æŒ�续集æˆ�å’ŒæŒ�续部署。</li><li><strong>Tekton Dashboard</strong>:这是Tekton Pipelines的基äº�Web的一个图形界é�¢ï¼Œæ��供了有关æµ�水线执行的详细信æ�¯ã€‚用户å�¯ä»¥é€šè¿‡è¿™ä¸ªç•Œé�¢å®�时监æ�§æµ�水线的状æ€�ã€�查看日志ã€�进行故障æ�’查等æ“�作。</li></ul><h2>Tekton Pipelines 基本概念</h2><p><img src="/img/remote/1460000044920451" alt="图片" title="图片"></p><p>最基本的四个概念:Taskã€�TaskRunã€�Pipelineã€�PipelineRun。</p><ul><li><strong>Task</strong>: Task 为æ�„建任务,是 Tekton 中ä¸�å�¯åˆ†å‰²çš„æœ€å°�å�•ä½�,正如å�Œ Pod 在 Kubernetes ä¸­çš„æ¦‚å¿µä¸€æ ·ã€‚åœ¨ Task 中,å�¯ä»¥æœ‰å¤šä¸ª Step,æ¯�个 Step 由一个 Container 按照顺åº�æ�¥æ‰§è¡Œã€‚</li><li><strong>Pipeline</strong>: Pipeline 由一个或多个 Task 组æˆ�。在 Pipeline 中,用户å�¯ä»¥å®šä¹‰è¿™äº› Task 的执行顺åº�以å�Šä¾�赖关系æ�¥ç»„æˆ� DAG(有å�‘æ— ç�¯å›¾ï¼‰ã€‚</li><li><strong>PipelineRun</strong>: PipelineRun 是 Pipeline çš„å®�际执行产物,当用户定义好 Pipeline å��,å�¯ä»¥é€šè¿‡åˆ›å»º PipelineRun 的方å¼�æ�¥æ‰§è¡Œæµ�水线,并生æˆ�一æ�¡æµ�水线记录。</li><li><strong>TaskRun</strong>: PipelineRun 被创建出æ�¥å��,会对应 Pipeline 里é�¢çš„ Task 创建å�„自的 TaskRun。一个 TaskRun æ�§åˆ¶ä¸€ä¸ª Pod,Task 中的 Step 对应 Pod 中的 Container。当然,TaskRun 也å�¯ä»¥å�•独被创建。</li></ul><p><img src="/img/remote/1460000044920452" alt="图片" title="图片"></p><h2>Tekton VS Jenkins</h2><p>Tekton å’Œ Jenkins 在多个方é�¢å­˜åœ¨æ˜¾è‘—的差异ï¼�</p><h4>è¿�行ç�¯å¢ƒä¸�æ�¶æ�„</h4><ul><li>Tekton本身è¿�行äº�Kubernetesç�¯å¢ƒä¸­ï¼Œå…¶æµ�水线中的æ¯�一个任务在è¿�行时都会å�¯åŠ¨ä¸€ä¸ªPodæ�¥æ‰§è¡Œã€‚这使得Tekton能够å¤�用云å�Ÿç”Ÿç�¯å¢ƒä¸­çš„å�„ç§�镜åƒ�è®¾æ–½ï¼Œæ— éœ€å�•独部署VM上的应用æ�¥ç®¡ç�†CI/CDè¿‡ç¨‹ã€‚å› æ­¤ï¼ŒTekton更适å�ˆäº�云å�Ÿç”Ÿåº”用的CI/CD。</li><li>Jenkins则是一个更广泛应用的CI/CD工具,其å‰�身Hudsonè¯�生äº�2005年,由äº�优秀的æ�¶æ�„设计和良好的产å“�体验,Jenkins/Hudsonæˆ�为第一个被大规模应用的æŒ�续集æˆ�产å“�。</li></ul><h4>集æˆ�ä¸�定制</h4><ul><li>Tektonæ��供声æ˜�å¼�语法æ�¥å®šä¹‰ä»»åŠ¡å’Œæ­¥éª¤ï¼Œå…·æœ‰é«˜åº¦çš„å�¯æ‰©å±•性和ç�µæ´»æ€§ã€‚用户å�¯ä»¥è‡ªå®šä¹‰ä»»åŠ¡å’Œæ­¥éª¤ï¼Œæ–¹ä¾¿é›†æˆ�第三方工具和库,并支æŒ�多ç§�任务类å�‹ï¼Œå¦‚一次性任务ã€�周期性任务等。</li><li>Jenkins也æ��供了丰富的功能和æ�’ä»¶æ�¥æ”¯æŒ�CI/CD过程,但其æ�¶æ�„和扩展性å�¯èƒ½ä¸�Tekton有所ä¸�å�Œã€‚</li></ul><h4>社区支æŒ�</h4><ul><li>Tektonç”±äº�其云å�Ÿç”Ÿçš„特性和ä¸�Kubernetes的紧密集æˆ�,得到了许多云å�Ÿç”Ÿåº”用团队的é�’ç��。例如,Jenkins X项目选择了Tekton作为其æµ�水线执行引æ“�,并计划移除内部的Jenkinsé�™æ€�master支æŒ�。</li><li>Jenkins作为一个æˆ�熟的CI/CD工具,已ç»�在行业中建立了广泛的用户群体和社区支æŒ�。</li></ul><p>总的æ�¥è¯´ï¼ŒTektonå’ŒJenkinså�„有其优势和应用场景。选择哪一个工具å�–决äº�团队的具体需求ã€�æŠ€æœ¯æ ˆä»¥å�Šè¿�行ç�¯å¢ƒã€‚</p><p>在å��é�¢çš„介ç»�中会给大家æ��供一些建议供å®�é™…å�‚考使用。</p><h2>Tekton 部署</h2><p>Tekton 是基äº� Kubernetes çš„ï¼Œå› æ­¤éœ€è¦�一个è¿�行正常的 K8s ç�¯å¢ƒã€‚</p><p>访问 Tekton 的官方文档或 GitHub 仓库(<a href="https://link.segmentfault.com/?enc=9fdBxTUk5OAKl0rTufxSSA%3D%3D.Z5zdATTaKTP2%2B4iKb01Am8OiVsJtnZtz%2B84yOgUVe4cTlOGRvrl6RKTPFO1mmKhC4NCBnRarNP4YEx12etCTy7rM%2FDWs%2Fq%2FYAxpU91%2F2mUg%3D" rel="nofollow">https://github.com/tektoncd/pipeline#required-kubernetes-version</a>),选择ä¸�ä½ çš„ K8s 集群版本相匹é…�çš„ Tekton 版本。</p><p><strong>版本ä¸�匹é…�å�¯èƒ½ä¼šå¯¼è‡´éƒ¨ç½²å¤±è´¥</strong>,出ç�°å¦‚“Version check failed, kubernetes version xxx is not compatibleâ€�的错误日志。</p><p>ç”±äº�国内的网络å�Ÿå› ï¼Œæ— æ³•æ­£å¸¸è®¿é—® gcr.io 上é�¢çš„镜åƒ�,所以需è¦�将需è¦�的镜åƒ�文件下载下æ�¥ï¼Œæ”¾åˆ°è‡ªå·±çš„镜åƒ�仓库中。</p><h4>下载部署文件</h4><p>访问 Tekton 的官方存储库,下载用äº� Kubernetes ç�¯å¢ƒéƒ¨ç½²çš„ yaml 文件。å�¯ä»¥ä»� <a href="https://link.segmentfault.com/?enc=3F5LVH%2BmIAvOQjk%2FdcJNKA%3D%3D.4yMYAWdTdj09sCq3q2Auuxu2JYnagHM6itqDM1mkNl9%2F2%2Fs1cBdJL0Zu2jGXVgXcc6k8aGXLg73Dw0cVkYtmoYcsZu4hirnhMc0HayqEP3c%3D" rel="nofollow">https://storage.googleapis.com/tekton-releases/pipeline/lates...</a> 下载最新的release.yaml文件。</p><pre><code>#Tekton controller wget  https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.32.3/release.yaml -O tekton-pipeline-release.yaml #Tekton Dashboard wget https://github.com/tektoncd/dashboard/releases/download/v0.25.0/tekton-dashboard-release.yaml -O tekton-dashboard-release.yaml </code></pre><h4>拉å�– gcr.io 镜åƒ�,æ�¨é€�到自己的镜åƒ�</h4><p>在 mac/linux 的工作机器上,执行如下代ç �(如æ�œä½ 用的 Windows,å�¯ä»¥é€šè¿‡å®‰è£… gnu 的命令行工具æ�¥è�·å�– grep, awk 的工具。</p><pre><code>grep -Eo &quot;gcr.io([^\&quot; ]*)&quot; tekton-pipeline-release.yaml | awk '{print &quot;docker pull &quot;$0}' &gt; pull.sh grep -Eo &quot;gcr.io([^\&quot; ]*)&quot; tekton-pipeline-release.yaml | awk -F&quot;@&quot; '{origin = $0;gsub(&quot;gcr.io/&quot;,&quot;&quot;,$1);print &quot;docker tag &quot; origin &quot; my-registry.cn-beijing.cr.aliyuncs.com/gcrio/&quot;$1 &quot;;\ndocker push my-registry.cn-beijing.cr.aliyuncs.com/gcrio/&quot; $1}' &gt; tag.push.sh source pull.sh source push.sh</code></pre><p>ç„¶å��更改 tekton-pipeline-release 中的地å�€ä¸ºè‡ªå·±çš„镜åƒ�仓库(Linux):</p><pre><code>sed -i &quot;s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g&quot; tekton-pipeline-release.yaml</code></pre><p>mac ä¸Šè¿™æ ·è¿�行(如æ�œ mac 上é�¢å®‰è£…了 gnu sed,å�¯ä»¥ç›´æ�¥æ‰§è¡Œä¸Šé�¢çš„ sed 命令):</p><pre><code>sed -i &quot;&quot; &quot;s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g&quot; tekton-pipeline-release.yaml</code></pre><p>ç„¶å��编辑 tekton-pipeline-release.yaml 里é�¢çš„内容,å�»æ�‰é•œåƒ�仓库中的 SHA256,通过版本å�·æˆ–者 latest æ�¥å¼•用。</p><h4>部署 Tekton</h4><h6>部署 Tekton pipeline</h6><pre><code>kubectl create namespace tekton-pipelines kubectl apply -f tekton-pipeline-release.yaml</code></pre><h6>部署 Tekton Dashboard</h6><p>dashboard 用到的镜åƒ�ç›®å‰�å�ªæœ‰1个。直æ�¥ç”Ÿæˆ� docker pull, docker tag, docker push 命令, 输出到 console, ç„¶å��手工执行这些命令å�³å�¯ï¼š</p><pre><code>grep -Eo &quot;gcr.io([^\&quot; ]*)&quot; tekton-dashboard-release.yaml | awk '{print &quot;docker pull &quot;$0}' grep -Eo &quot;gcr.io([^\&quot; ]*)&quot; tekton-dashboard-release.yaml | awk -F&quot;@&quot; '{origin = $0;gsub(&quot;gcr.io/&quot;,&quot;&quot;,$1);print &quot;docker tag &quot; origin &quot; my-registry.cn-beijing.cr.aliyuncs.com/gcrio/&quot;$1 &quot;;\ndocker push my-registry.cn-beijing.cr.aliyuncs.com/gcrio/&quot; $1}' </code></pre><p>æ‹·è´�å‰�é�¢ä¸¤ä¸ªå‘½ä»¤çš„输出, 执行一下命令(docker pullã€�docker push)。</p><p>ç„¶å��替æ�¢æ–‡ä»¶ä¸­çš„镜åƒ�地å�€(Linux):</p><pre><code>sed -i &quot;s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g&quot; tekton-dashboard-release.yaml</code></pre><p>mac ä¸Šè¿™æ ·è¿�行:</p><pre><code>sed -i &quot;&quot; &quot;s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g&quot; tekton-dashboard-release.yaml</code></pre><p>ç„¶å��部署 tekton dashboard:</p><pre><code>kubectl apply -f tekton-dashboard-release.yaml</code></pre><p>检查 pod 的状æ€�:</p><pre><code>kubectl get pods --namespace tekton-pipelines</code></pre><p>å�¯ä»¥çœ‹åˆ°å¦‚下的输出</p><p><img src="/img/remote/1460000044920453" alt="图片" title="图片"></p><p>pod 正常 running 之å��,转å�‘集群端å�£åˆ°æœ¬åœ°ï¼Œå�³å�¯é€šè¿‡æœ¬åœ°è®¿é—®ï¼š</p><pre><code>kubectl --namespace tekton-pipelines port-forward svc/tekton-dashboard 9097:9097</code></pre><p>ç„¶å��å°±å�¯ä»¥æœ¬åœ°è®¿é—® Dashboard: <strong><a href="https://link.segmentfault.com/?enc=nFtoGbA82bv%2FUg9EOyg6zg%3D%3D.zuTo2cGjvMFB7SvZRUU7FItT7hH%2B%2Fc44NGSkItRdG%2FU%3D" rel="nofollow">http://localhost:9097</a></strong></p><p><img src="/img/remote/1460000044920454" alt="图片" title="图片"></p><h2>使用 Tekton 创建 CICD æµ�水线</h2><p>创建一个最简å�•çš„ task å��称为 hello, 这个 task 使用 alpine 的镜åƒ�å�¯åŠ¨ä¸€ä¸ªå®¹å™¨ï¼Œæ‰§è¡ŒæŒ‡å®šè„šæœ¬ã€‚</p><pre><code>#hello-world.yaml 文件内容, 定义å��称为 hello çš„ task apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: hello spec: steps: - name: echo image: alpine script: | #!/bin/sh echo &quot;Hello World&quot;</code></pre><p>部署 Task</p><pre><code>kubectl apply --filename hello-world.yaml</code></pre><p>创建一个 TaskRun æ�¥æ‰§è¡Œ hello 这个 Task</p><pre><code>#hello-world-run.yaml apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: hello-task-run spec: taskRef: name: hello</code></pre><p>在集群中è¿�行 task:</p><pre><code>kubectl apply --filename hello-world-run.yaml</code></pre><h2>使用 Tekton å�‘布 kubernetes 应用</h2><p><img src="/img/remote/1460000044920455" alt="图片" title="图片"></p><p>基äº�Kubernetes æœ�务部署 Tekton Pipeline å®�例,部署完æˆ�å��使用tektonæ�¥å®Œæˆ�æº�ç �拉å�–ã€�应用打包ã€�镜åƒ�æ�¨é€�和应用部署。</p><p>本文å®�ç�°ä¸€ä¸ª golang-helloworld 项目 CI/CD 的完整æµ�程,具体包括以下步骤:</p><ul><li>ä»� gitee 仓库拉å�–代ç �,将æº�ç �æ�„建æˆ�二进制文件</li><li>æ ¹æ�® Dockerfile æ�„建镜åƒ�å¹¶æ�¨é€�到阿里云ACR镜åƒ�仓库</li><li>使用sed命令替æ�¢yaml文件中的镜åƒ�地å�€ä¸ºä¸Šä¸€æ­¥æ�„建的镜åƒ�</li><li>使用 kubectl apply -f 命令部署yaml文件到kubernetes集群</li></ul><h4>创建serviceaccount</h4><p>镜æ�¨é€�到外部镜åƒ�仓库需è¦�进行认è¯�,创建登录阿里云ACR仓库的secret</p><pre><code>kubectl create secret docker-registry aliyun-acr \ --docker-server=https://registry.cn-shenzhen.aliyuncs.com \ --docker-username=&lt;your-username&gt; \ --docker-password=&lt;your-password&gt; \ --dry-run=client -o json | jq -r '.data.&quot;.dockerconfigjson&quot;' | base64 -d &gt; /tmp/config.json kubectl create secret generic docker-config --from-file=/tmp/config.json</code></pre><p>创建kubernetes secret</p><pre><code>kubectl create secret generic kubernetes-config --from-file=/root/.kube/config</code></pre><p>创建serviceAccount</p><pre><code>$ cat serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: name: build-bot secrets: - name: docker-config - name: kubernetes-config --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: tekton-kubectl-role rules: - apiGroups: - &quot;*&quot; resources: - pods - deployments - deployments/scale - deployments/status verbs: - get - list - watch - create - delete - patch - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: tekton-kubectl-binding subjects: - kind: ServiceAccount name: build-bot roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: tekton-kubectl-role</code></pre><p>应用yaml文件</p><pre><code>kubectl apply -f serviceaccount.yaml</code></pre><h4>创建 git-clone task</h4><p>在执行镜åƒ�æ�„建å‰�Dockerfile存放在git仓库中,需è¦�将代ç �克隆到本地,需è¦�安装git-clone task,这里使用官方task。</p><pre><code>kubectl apply -f \https://raw.githubusercontent.com/tektoncd/catalog/main/task/git-clone/0.9/git-clone.yaml</code></pre><h4>创建kaniko-build task</h4><p>创建kaniko-build task,用äº�æ�„建dokcer镜åƒ�,基äº�官方kaniko-taskæ”¹é€ ã€‚</p><pre><code>$ cat kaniko-build-task.yaml apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: kaniko-build spec: params: - name: IMAGE_URL description: Name (reference) of the image to build. - name: IMAGE_TAG description: Tag to apply to the built image default: latest - name: DOCKERFILE description: Path to the Dockerfile to build. default: ./Dockerfile - name: CONTEXT description: The build context used by Kaniko. default: ./ - name: EXTRA_ARGS type: array default: [] - name: BUILDER_IMAGE description: The image on which builds will run (default is v1.5.1) default: gcr.io/kaniko-project/executor:v1.5.1@sha256:c6166717f7fe0b7da44908c986137ecfeab21f31ec3992f6e128fff8a94be8a5 workspaces: - name: source description: Holds the context and Dockerfile - name: dockerconfig description: Includes a docker `config.json` optional: true mountPath: /kaniko/.docker results: - name: IMAGE_DIGEST description: Digest of the image just built. - name: IMAGE_URL description: URL of the image just built. steps: - name: build-and-push workingDir: $(workspaces.source.path) image: $(params.BUILDER_IMAGE) args: - $(params.EXTRA_ARGS) - --dockerfile=$(params.DOCKERFILE) - --context=$(workspaces.source.path)/$(params.CONTEXT) - --destination=$(params.IMAGE_URL):$(params.IMAGE_TAG) - --digest-file=$(results.IMAGE_DIGEST.path) securityContext: runAsUser: 0</code></pre><p>应用yaml文件</p><pre><code>kubectl apply -f kaniko-build-task.yaml</code></pre><h4>创建kubernetes-deploy task</h4><p>创建kubernetes-deploy task,用äº�部署yaml文件到kubernetes集群。</p><pre><code>$ cat kubernetes-deploy-task.yaml apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: kubernetes-deploy spec: workspaces: - name: manifest-dir - name: kubeconfig-dir mountPath: /root/.kube params: - name: pathToYamlFile description: The path to the yaml file to deploy within the git source default: deployment.yaml - name: IMAGE_URL - name: IMAGE_TAG - name: KUBECTL_IMAGE default: docker.io/bitnami/kubectl:latest steps: - name: run-kubectl image: $(params.KUBECTL_IMAGE) workingDir: $(workspaces.manifest-dir.path) script: | sed -i s#IMAGE#$(params.IMAGE_URL)#g $(params.pathToYamlFile) sed -i s#TAG#$(params.IMAGE_TAG)#g $(params.pathToYamlFile) kubectl apply -f $(params.pathToYamlFile)</code></pre><p>应用yaml文件</p><pre><code>kubectl apply -f kubernetes-deploy-task.yaml</code></pre><h4>创建pipelineå’Œpipelinerun</h4><pre><code>$ cat pipeline-run.yaml apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: devops-hello-world-pipeline spec: workspaces: - name: shared-data - name: docker-config - name: kubernetes-config params: # git-clone - name: git_url type: string - name: revision type: string - name: gitInitImage type: string # kaniko-build - name: dockerfile type: string description: reference of the image to build - name: builder_image type: string description: reference of the image to build - name: image_url description: Url of image repository - name: image_tag description: Tag to apply to the built image default: latest # kubernetes-deploy - name: kubectl_image type: string tasks: - name: clone taskRef: name: git-clone workspaces: - name: output workspace: shared-data params: - name: url value: $(params.git_url) - name: revision value: $(params.revision) - name: gitInitImage value: $(params.gitInitImage) - name: build-push-image params: - name: DOCKERFILE value: $(params.dockerfile) - name: IMAGE_URL value: $(params.image_url) - name: IMAGE_TAG value: $(tasks.clone.results.commit) - name: BUILDER_IMAGE value: $(params.builder_image) taskRef: name: kaniko runAfter: - clone workspaces: - name: source workspace: shared-data - name: dockerconfig workspace: docker-config - name: deploy-to-k8s taskRef: name: kubernetes-deploy params: - name: KUBECTL_IMAGE value: $(params.kubectl_image) - name: IMAGE_URL value: $(params.image_url) - name: IMAGE_TAG value: $(tasks.clone.results.commit) - name: pathToYamlFile value: deployment.yaml workspaces: - name: manifest-dir workspace: shared-data - name: kubeconfig-dir workspace: kubernetes-config runAfter: - build-push-image --- apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: devops-hello-world-pipeline-run- spec: serviceAccountName: build-bot pipelineRef: name: devops-hello-world-pipeline params: # git-clone - name: git_url value: https://gitee.com/willzhangee/tekton-golang-demo.git - name: revision value: master - name: gitInitImage #value: gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:latest value: dyrnq/tektoncd-pipeline-cmd-git-init:latest # kaniko - name: dockerfile value: ./Dockerfile - name: builder_image # value: gcr.io/kaniko-project/executor:v1.5.1@sha256:c6166717f7fe0b7da44908c986137ecfeab21f31ec3992f6e128fff8a94be8a5 value: docker.io/bitnami/kaniko:latest - name: image_url value: registry.cn-shenzhen.aliyuncs.com/cnmirror/devops-hello-world - name: image_tag value: latest # kubernetes-deploy - name: kubectl_image value: 'docker.io/bitnami/kubectl:latest' workspaces: - name: shared-data volumeClaimTemplate: spec: accessModes: - ReadWriteOnce storageClassName: openebs-hostpath resources: requests: storage: 1Gi - name: docker-config secret: secretName: docker-config - name: kubernetes-config secret: secretName: kubernetes-config</code></pre><h6>å�‚数说æ˜�</h6><pre><code>gitInitImage# 执行git clone任务的镜åƒ�,官方镜åƒ�æ— æ³•è®¿é—®ï¼Œæ�¨è��在docekrhub中查找替代镜åƒ�。 builder_image #执行kaniko æ�„建任务的镜åƒ�,官方镜åƒ�æ— æ³•è®¿é—®ï¼Œæ�¨è��在docekrhub中查找替代镜åƒ�。 image_url #最终æ�„建的应用镜åƒ�。 serviceAccountName #指定serviceAccountName用äº�认è¯�。 shared-data workspace #用äº�在ä¸�å�Œä»»åŠ¡ä¹‹é—´å…±äº«æ•°æ�®ï¼ŒPipelineRun中定义了volumeClaimTemplateç±»å�‹çš„workspaces,能够动æ€�申请所需的æŒ�ä¹…å�·ï¼Œä½¿ç”¨kubectl get storageclass命令,确认k8s集群有默认å�¯ç”¨çš„storageclass资æº�å�¯ç”¨ï¼Œæœ¬ç¤ºä¾‹è¾“出为openebs-hostpath (default)。 docker-config workspace #用äº�镜åƒ�仓库认è¯�çš„secretå�·ï¼Œå°†secret中的`config.json挂载到/kaniko/.docker`下。 kubernetes-config #用äº�访问kubernetes,挂载到/root/.kube目录下。</code></pre><p>应用yaml文件</p><pre><code>kubectl create -f pipeline-run.yaml</code></pre><p>查看pipelinerun执行结æ�œ</p><p><img src="/img/remote/1460000044920456" alt="图片" title="图片"></p><p>è¿�æ�¥åˆ°kubernetes 确认部署的应用</p><pre><code>root@kube001:~# kubectl get pods -l run=go-web-app NAME READY STATUS RESTARTS AGE go-web-app-79454cfdd7-dcz7p 1/1 Running 0 64s</code></pre><p>查看镜åƒ�ä¿¡æ�¯</p><pre><code>root@kube001:~# kubectl get pods go-web-app-79454cfdd7-dcz7p -o jsonpath='{.spec.containers[0].image}' registry.cn-shenzhen.aliyuncs.com/cnmirror/devops-hello-world:927ec5cc665690ad798ffbbd02a8db520692951e</code></pre><h2>Tekton å�¯ä»¥ç”¨æ�¥å�šä»€ä¹ˆï¼Ÿ</h2><p>Tekton是一个开æº�çš„ã€�云å�Ÿç”Ÿçš„CI/CD框æ�¶ï¼Œæ—¨åœ¨ä¸ºå®¹å™¨åŒ–ç�¯å¢ƒä¸‹çš„æŒ�续集æˆ�å’ŒæŒ�续交付æ��供强大的工具和功能支æŒ�。通过使用Tekton,开å�‘人员å�¯ä»¥å®�ç�°ä»¥ä¸‹ç›®æ ‡ï¼š</p><ul><li><strong>快速ç�µæ´»å®šä¹‰æµ�水线</strong>:Tektonå…�许开å�‘人员通过Kubernetes云平å�°å®šä¹‰CI/CDæµ�水线,使得æ�„建ã€�测试和å�‘布应用å�˜å¾—æ›´åŠ ä¾¿æ�·ã€‚</li><li><strong>声æ˜�å¼�é…�ç½®</strong>:Tektonæ��供了一ç§�声æ˜�å¼�的方å¼�æ�¥æ��è¿°æµ�水线中的å�„个步骤ã€�任务ã€�输入输出等信æ�¯ï¼Œä½¿å¾—整个æµ�ç¨‹æ›´åŠ æ¸…æ™°å�¯è¯»ã€‚è¿™ç§�声æ˜�å¼�的方å¼�ä¸�仅简化了é…�置过程,还æ��高了é…�置的å�¯ç»´æŠ¤æ€§ã€‚</li><li><strong>ç�µæ´»çš„任务编æ�’</strong>:Tekton通过Task资æº�æ�¥å®šä¹‰æ¯�个具体的任务,这些任务是æµ�水线中的最å°�å�•ä½�。开å�‘人员å�¯ä»¥æ ¹æ�®éœ€è¦�自由组å�ˆå’Œç¼–æ�’任务,使得å¤�æ�‚çš„CI/CD场景得以轻æ�¾åº”对。</li><li><strong>å�¯é‡�å¤�使用和å�¯æ‰©å±•性</strong>:Tektonå®�体是完全å�¯ç§»æ¤�å’Œå�¯å®šåˆ¶çš„,一旦定义,组织内的任何人都å�¯ä»¥ä½¿ç”¨ç»™å®šçš„管é�“å¹¶é‡�用其æ�„é€ å�—。å�Œæ—¶ï¼ŒTekton社区驱动的目录(Tekton Catalog)æ��供了预制组件,使得开å�‘人员å�¯ä»¥å¿«é€Ÿåˆ›å»ºæ–°çš„并扩展ç�°æœ‰ç®¡é�“。</li><li><strong>æ ‡å‡†åŒ–</strong>:Tekton在Kubernetes集群上作为扩展安装并è¿�行,ä¸�完善的Kubernetes资æº�模å�‹å…¼å®¹ï¼Œå› æ­¤èƒ½å¤Ÿæ— ç¼�地ä¸�容器编æ�’系统结å�ˆä½¿ç”¨ã€‚</li></ul><p>此外,Tekton还æ��供了其他一些有用的特性,如断点调试支æŒ�ã€�Matrix语法(用äº�ä¸�å�Œå�‚æ•°ã€�ç�¯å¢ƒçš„交å�‰éªŒè¯�)以å�ŠResult API(用äº�管ç�†è¿�行任务的pod资æº�)等。这些特性进一步å¢�强了Tektonçš„ç�µæ´»æ€§å’Œå�¯æ‰©å±•性,使得它æˆ�为一个强大的CI/CD工具。</p><h2>Tekton å’Œ CI/CD 框æ�¶çš„优劣</h2><h4>Tekton 优势</h4><ul><li><strong>云å�Ÿç”Ÿé›†æˆ�</strong>:Tekton是为云å�Ÿç”Ÿç�¯å¢ƒè®¾è®¡çš„,它充分利用了Kubernetes的特性,使得在容器化ç�¯å¢ƒä¸­è¿�行CI/CDæµ�程å�˜å¾—æ›´åŠ é«˜æ•ˆå’Œå�¯é� 。</li><li><strong>声æ˜�å¼�语法</strong>:Tekton使用声æ˜�å¼�语法æ�¥å®šä¹‰ä»»åŠ¡å’Œæ­¥éª¤ï¼Œè¿™ä½¿å¾—é…�置和管ç�†CI/CDæµ�程å�˜å¾—æ›´åŠ ç®€å�•和直观。</li><li><strong>ç�µæ´»æ€§å’Œå�¯æ‰©å±•性</strong>:Tektonå…�许用户自定义任务和步骤,并å�¯ä»¥é›†æˆ�第三方工具和库,ä»�而满足ä¸�å�Œçš„项目需求。å�Œæ—¶ï¼Œå®ƒè¿˜æ”¯æŒ�多ç§�任务类å�‹ï¼Œå¦‚一次性任务ã€�å‘¨æœŸæ€§ä»»åŠ¡ç­‰ï¼Œæ–¹ä¾¿ç”¨æˆ·æ ¹æ�®å®�际需求进行定制。</li><li><strong>å�¯è§‚察性</strong>:Tektonæ��ä¾›äº†ä¸°å¯Œçš„æ—¥å¿—å’ŒæŒ‡æ ‡ä¿¡æ�¯ï¼Œå¸®åŠ©ç”¨æˆ·ç›‘æ�§å’Œè°ƒè¯•CI/CDæµ�程的è¿�行情况,ä»�而å�Šæ—¶å�‘ç�°å’Œè§£å†³é—®é¢˜ã€‚</li></ul><h4>Tekton劣势</h4><ul><li><strong>å­¦ä¹ æˆ�本</strong>:对äº�ä¸�熟悉Kubernetes和云å�Ÿç”ŸæŠ€æœ¯çš„团队æ�¥è¯´ï¼Œå­¦ä¹ 和使用Tektonå�¯èƒ½ä¼šæœ‰ä¸€å®šçš„å­¦ä¹ æˆ�本。</li><li><strong>ç�¯å¢ƒé™�制</strong>:Tekton更适用äº�云å�Ÿç”Ÿç�¯å¢ƒå’ŒKubernetes集群,如æ�œå›¢é˜Ÿçš„ç�¯å¢ƒæˆ–需求ä¸�这些ä¸�符,å�¯èƒ½ä¸�太适å�ˆä½¿ç”¨Tekton。</li></ul><h4>我该如何选择?</h4><p>如æ�œä½ 的应用大部分都是<strong>云å�Ÿç”Ÿç�¯å¢ƒçš„应用</strong>,部署äº� k8s 之上,且团队中有人对äº� k8s/docker 比较熟悉,<strong>æ�¨è��</strong>使用 <strong>Tekton æ�¥ä½œä¸º CICD 的基础设施</strong>。</p><p>如æ�œ<strong>ä¸�是云å�Ÿç”Ÿåº”用</strong>,或者团队对äº� k8s/docker ä¸�够熟悉, <strong>建议使用 Jenkins</strong> æ�¥å�š CICD。</p><p>总的æ�¥è¯´ï¼ŒTekton 为开å�‘人员æ��供了一ç§�高效ã€�ç�µæ´»å’Œå�¯æ‰©å±•的方å¼�æ�¥æ�„建ã€�测试和å�‘布应用,ä»�è€ŒåŠ é€Ÿè½¯ä»¶å¼€å�‘å’Œäº¤ä»˜çš„è¿‡ç¨‹ã€‚æ— è®ºæ˜¯ä¸ªäººé¡¹ç›®è¿˜æ˜¯å¤§å�‹ç»„织,Tekton 都能为 CI/CD æµ�程æ��供强大的支æŒ�。</p> 一个æ��å�‡ä½ Shell 脚本编写质é‡�的工具,建议è¿�维人手必备的ç¥�器ï¼� https://segmentfault.com/a/1190000044920431 2024-05-28T22:22:47+08:00 2024-05-28T22:22:47+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>👉<strong>ä½“ç³»åŒ–å­¦ä¹ ï¼š</strong><a href="https://link.segmentfault.com/?enc=jXj1QldxhMKGPQFVtIW%2BNQ%3D%3D.DL5SpWJj4IV9Qda06kBQXCqCiD8o0ihK6e3Ew4CAGGP5wfPs%2B60sE3GUkczCygFxZNp29%2F8F2%2BgxlmqYy%2BLcshAefN%2F69QwJHfbXO4Hlp36Ez0Ng1PrpTipjAOdTL7PAMO5U3oJmvGu11%2B6Xfpbsl5IT2QZhxhUJ6nAf%2BuIx%2FrK%2Bt%2BEf5JTRPNdNX9NzqzoWrhVOrxfvX4m6OuOBf1%2BFpIRp7g69K9cgpKFwwkkU1DuFYc9V0KcxCB6mkrshRymI4r4Haszt1iQHtSvsvuR2LtsWjxQtl%2F8It%2B5ICV%2FxU70%3D" rel="nofollow"><strong>è¿�维工程师打怪å�‡çº§è¿›é˜¶ä¹‹è·¯ 4.0</strong></a></p><p>— <strong><em><em>特色专æ �</em></strong></em> —</p><p><a href="https://link.segmentfault.com/?enc=mdExxNTX7OkK4%2B16z2bA2w%3D%3D.aaJcXgo%2FPn6ECUIYMU2WrgXfTgqEESUdC310ttnXExVxwxp41fP2ePZHbQ6f0pahDN4B%2BiJTPKmlZ21r%2F1mWbqUaUuzdfdSP1D2Ut8EZFA7fNOeD6EnO1yhwK63xodIFxVVffMQhmEKk9dZQBy1anYumhZZZewjBdAqZEuOcL%2BA%3D" rel="nofollow">MySQL</a> / <a href="https://link.segmentfault.com/?enc=Kc9dGhOPUrSvtAntyWyP3w%3D%3D.1i21D5bXAo6gRrZnEyufoAhm6IZ2o%2Bzol%2FJoBDXj1e%2FRy3T79vGPbr%2FUtz0TEPkH0Vh%2FvSYgqd38etk2hz6U4JfTHFn4DdCIE5BdeXHCXU3XVAWUiIaEZ9BNlXE4OtDuQzbPaK6Ud31IxNqsOnrfIoYpLNH4JkrqDtyPCcYsfxo%3D" rel="nofollow">PostgreSQL</a> / <a href="https://link.segmentfault.com/?enc=GykTMb4INba7ix6aR5C3tw%3D%3D.sd1uwbzhr6UoeFsNyqknIWj4rTtDZEcSFTAHNKvaJqDApx0yZQRZ%2BwmNOGPtSYqMjwk%2B%2FpfZAaKm0tqioSX2B6dv0WlxGaul8jP0TKtdkJpKVEzMHSM8ENUQqfkfaVpbtuBLaV9AhKrMzXtZL13LqBp1lXKMb55x0womjcygXgs%3D" rel="nofollow">MongoDB</a></p><p><a href="https://link.segmentfault.com/?enc=37ZQFWyGzOy9nPUaha0u8g%3D%3D.vn34pDtt1EFlk1u0SCmJF4IzhbrQNYJ%2B929dBG0hcggCmN9nrbdIen7CgHogCOYrl4pDC%2BZjXf3Cxp%2FisFyYXEThFRgeq3FcNvG5Z7vxvZcDelQX%2FyFb37mTia6Tm1IidRipkSzN3ZCQ7KQ3KUUoaHNilItU2jIHYQopau3LFRw%3D" rel="nofollow">ElasticSearch </a> / <a href="https://link.segmentfault.com/?enc=2GjlCoH6r2HLuegl3cYhZQ%3D%3D.8Fx1UiDJ%2FIoYZ4QMUsr0S8VNsysu2sVf3Fth8U68DMaGY%2B%2Fdj8sKeyV7kIV%2BF9ssGyAQAmKTCjHYg9BcXANgc30CDluDsMCQs9%2BI4J50ktXJ0g8Qvyi8uiBYZnZGtBUwvyAzdaxtE3m4%2Fsf38ruZxErSjmeqeslyzJosoKsCvn0%3D" rel="nofollow">Hadoop </a> / <a href="https://link.segmentfault.com/?enc=0faMWP7mQoXXTx36KVdfmw%3D%3D.vTNn9eZiOkvXGN14Ws7vmZVINpXnB8p752%2FeNrxxXIEdNg66CCleKNPaexVZ91lEmFAPAyRnCXBaDL9QNbshw0fk6bB5n2p1RoY02UNe7KdszF3xto6%2BGZTFhMScgYuR3S96hhE00VoFOqoZKfIw8owxF18d5qJuW4IgHQQx%2FcU%3D" rel="nofollow">Redis</a></p><p><a href="https://link.segmentfault.com/?enc=cY7%2FdhNHhjmnSBgo4dt%2Fwg%3D%3D.hEN9CxN3%2FIxHOrHu3ViUmLHVdDKOEhbwVma0gh%2FrMRzfOXSB1HvYo6p0Vyeq72c%2FSXzqxmsfl7kVhtfYL4iLgtIyfJOZjedJRCtP4bmJiSw7i7t6JQjQ%2F8CaS1RahHitiJZ2tIBkgyIFJ4Wi3OgxwrbYIZPBWHnJSgu35JysjRY%3D" rel="nofollow">Kubernetes</a> / <a href="https://link.segmentfault.com/?enc=bjZtu10NC3lcuF%2BjdY3nCw%3D%3D.0rdZjMx31wugcJ3RxVVyMZxOMxi5TFf4RDWLl3YJFvIRcLzlHX1E7jIYYjBP31duS%2Fb9YsBY437Xy8sTUhorG4g0psJenqqrdiHdlI5ZQUbfJ8WNH2SOhAzIWyl6tB%2F3v98qmAHO9gJV7zU7E21MtsftQB0WfrrKkXb08RJg7HA%3D" rel="nofollow">Docker</a> / <a href="https://link.segmentfault.com/?enc=gxHmTbaYwaZQAO2ocuMZoQ%3D%3D.BDgJdkVvpikOZQ%2BxTkkVdLufqzhl8tJJLU5YB4IQv6buJeo1N2Qwyp%2BjH27ZuJH4S%2Bv1yKGAYeTvdcD0PzlxkIrpWjMtPf5lmLKl0xUMVNv9WLXavJJJ7SHw%2BboeR964Ed%2FPGdgkCj1KYcUYV3p17PgHjc3%2B%2B1fLIVN9rii8LgM%3D" rel="nofollow">DevOps</a></p><p><a href="https://link.segmentfault.com/?enc=S2IMrFxqX6RWJOFUw8X9lw%3D%3D.U30pDKFAzAG7CHwIZ28lQcJKNZDS9peRFlT2ccb2G4kjngyulAv%2BhN8D1utk0Wmh8B3Q5ZIX1KV7K8To3E5oRHnaUlhy0dnd2KEdn3xtLVIqOIHssfjzd%2FWWmzwG7sfcY1fxMM4nUMnoXb9yTGGgjvkgaSuAVKszXi7UZ%2FeQtdI%3D" rel="nofollow">Kafka</a> / <a href="https://link.segmentfault.com/?enc=Aot7ibfvv%2FPE9tgxRXm%2F8A%3D%3D.D5tzzG5eOPdeQ5VsfC29C8iIHVKd2HXXUIoniB6imfQrVvHL1VvrEFFS40Ab9oJWDfHNFl34JUPQaRchZjZlrkYN4MtSzfocGcGywQNm1TGKNyM%2BLV%2BH68kX8ZejAkhm0Fs3iQ%2Bwc8eTybLBdzTaykWwYvhjEtZBG0DjHoUOG90%3D" rel="nofollow">RabbitMQ</a> / <a href="https://link.segmentfault.com/?enc=JBlDB92tTIPnllIw50DzhQ%3D%3D.pT1eHQZUMJWdKsY0fvSebBDrDVjH2Lze69Kgx98X%2FY8ItVCk1eDFN1MaLScHkC34I0pnLivuyBk2Q31FKXR3xb3wtt8E32UiLO6k3vaVAMeHGEp%2B%2FQm8sWOPuIgpOQ%2BdeIlSZxEuvlZz63B2uhlbAKzjEMHEEGgfR878NgniTgw%3D" rel="nofollow">Zookeeper</a> </p><p><a href="https://link.segmentfault.com/?enc=hgBNbesim6lh42yi6ge6ZQ%3D%3D.lFLND%2FYzK6J%2B9A5KmTtCMmvD%2F2q4b2oV3Iduh2dJ%2BbMTcl%2BKwpOBS58nMYnyNOKAnC8CqCIFj%2B7EsHuvpY4ySUqvzHwnBrpyXPUfET8qPgB79l4ebvarydNOvnfX5Jtmhg61kD%2FXecLFa4pP%2Byozj0W7wl86dC0QzhdV4pyBpOg%3D" rel="nofollow">监æ�§å¹³å�°</a> / <a href="https://link.segmentfault.com/?enc=CcCbfXWlQWIttzMsVKLOQA%3D%3D.g2%2BrsauvShc7TeABEv1gpV6UNOK5dW6nlavfGRCr0IAk574Oj%2BtbuH3S1%2BMZ0YiF1YKzk%2Fd9Ss9MoLzGm65gmTIHIKv2UvOL8Rhd0Hv%2FelvaYE6hQgvCWp4LLIx2jUgsAhVbEPw%2FVEh5Em6t4KXhkVjH95hA2YHYuiM9InVCGF0%3D" rel="nofollow">应用ä¸�æœ�务</a> / <a href="https://link.segmentfault.com/?enc=baUCn4dqN5lSab9JTFUndw%3D%3D.VgyDgm7cveOV6uFlmTnEKLNb4RTTKFPBAAxVQhZ8%2B9R4UsG53vfH4m%2BDblMMl0ifRiQVOeoG3hcq5pUCHJ9LSrEU9VQZrkk7VL1s4SNnPwsQvj%2FQOzk3Nz3j3srZkpiE0Wpaezo031SAvt41djsO5us6tIGc2KtvHvJWjXfO%2BJI%3D" rel="nofollow">集群管ç�†</a></p><p><a href="https://link.segmentfault.com/?enc=5YRvAbPj92b1Er9hDN82Mw%3D%3D.KKSFhf%2B2kwfmLDsfOpCotqOh%2B3Xi2bHi%2Beha7w4ynEnFmalsl74EmiQGidruxutgSJlEpznVRK2VyJ2tXNwBY0VLrcKfJxysonoQPj%2BOaN3%2F7P8zKWOijkJnj3dAyqjoXWAAk6CYZtd567q9tcznVE51616XMHFQhQTTpx9ALL8%3D" rel="nofollow">Nginx</a> / <a href="https://link.segmentfault.com/?enc=%2FdrtN8WjuLznvOphPc0sgQ%3D%3D.wu3l6AIMV6PU5GpkRUtUIExphhkUeyebFIUxXNhs3ENtCJFevYKpng5KxDNYgI83nDTgzHgQmSvlklqkMaekpl0mwANkFL14wfyCtcgGJ%2Buu4Xkoefo3BrA1ovaw4ZmX%2Be%2BMhNlPyr6DnEHh%2FakaWC1nfw00Eg%2FZcP9W2XtDZWI%3D" rel="nofollow">Git</a> / <a href="https://link.segmentfault.com/?enc=GtqEICeCGwFhzeCZ4JWuPA%3D%3D.c6VDgchtZ2UyLoWomiwHtn7%2FeFIML6Ar9Hvw3wgnunF4lRIxelBaa%2Fw5Rmr%2F%2BIey3JGCkS%2FP3bua8nak16dYmQm1ewuoIZllTScZLI8mfU6P4iw68Fe5uTHwiQFILAib%2Brvf4yBDjyb1GbIF1EXPrqJfCMkD%2FtTNXfgSymoWujQ%3D" rel="nofollow">Tools</a> / <a href="https://link.segmentfault.com/?enc=4bMC3%2BcMn4RHvnwWDFAviA%3D%3D.iRHy3srbaR32%2B5fU7yLxgU3C7uZktysXcdEpt%2ByxVl7fJDRZC7910r6lwATfdkt9jYEPxIWEqOvaxPCCv%2F8jYk9fE5LJbep3bGZY1bYfBsU1cug4mSDSpdE%2FeOhtR3Fns%2FQCvic4yu60MwTNIY%2F4XPNEDMBUypMYoo%2Bb20U%2BYsM%3D" rel="nofollow">OpenStack</a></p><p>大家好,我是民工哥ï¼�</p><p>在 Linux 中,Linux Shell ç¡®å®�是一个强大的工具,也是一ç§�常è§�的自动化任务的解决方案。它å�¯ä»¥ç”¨æ�¥è‡ªåŠ¨æ‰§è¡Œä¸€ç³»åˆ—å‘½ä»¤ï¼Œå¤„ç�†æ–‡æœ¬ï¼Œè¿›è¡Œé€»è¾‘判断等等。</p><p>但是åˆ�学者在编写 Shell 脚本时总会é�‡åˆ°è¿™æ ·é‚£æ ·çš„é”™è¯¯ï¼Œå¾ˆå¤§ç¨‹åº¦ä¸Šä¼šæ‰“å‡»å­¦ä¹ çš„ä¿¡å¿ƒï¼Œä»Šå¤©ï¼Œæ°‘å·¥å“¥å°±ç»™å¤§å®¶åˆ†äº«ä¸€æ¬¾è„šæœ¬ç¥�器:ShellCheckï¼�</p><p><img src="/img/remote/1460000044920433" alt="图片" title="图片"></p><p><strong>一款 Linux Shell ç¥�å™¨ï¼Œè§£å†³ä½ ä¸�会写脚本的烦æ�¼</strong>ï¼�</p><h2>ShellCheck 简介</h2><p>ShellCheck 是一个强大的工具,å�¯ä»¥å¸®åŠ©è§£å†³Linux Shell脚本编写中的烦æ�¼ã€‚它是一个é�™æ€�代ç �分æ��工具,专门针对Shell脚本语言进行检查。</p><ul><li>Github地å�€ï¼š<a href="https://link.segmentfault.com/?enc=dEakgbarGTY5GxCm2zWkEw%3D%3D.GLXcpqsLUtwMHrrm5Lu59Zv%2FhhCtxWYrQh9ra8LyosEImAOf%2Fwc63Y%2BQA%2FnCf09e" rel="nofollow">https://github.com/koalaman/shellcheck</a></li></ul><h4>功能特性</h4><ul><li><strong>错误检测ä¸�çº æ­£</strong>:ShellCheck 能够å�‘ç�°å¹¶çº 正脚本中的常è§�问题ã€�潜在错误和最佳å®�è·µä¸�一致。这包括语法错误ã€�å�˜é‡�使用错误ã€�命令调用错误ã€�输入/输出错误等。</li><li><strong>代ç �é£�æ ¼</strong>:ShellCheck 它还能就代ç �é£�æ ¼ç»™å‡ºå»ºè®®ï¼Œå¸®åŠ©æ��高脚本的å�¯è¯»æ€§å’Œä¸€è‡´æ€§ã€‚</li><li><strong>最佳å®�è·µ</strong>:ShellCheckä¸�ä»…æ��供错误检测,还会给出最佳å®�践建议,如é�¿å…�使用æŸ�些ä¸�æ�¨è��的命令或结æ�„,æ�¨è��使用更安全ã€�å�¯ç»´æŠ¤çš„编写方å¼�。</li><li><strong>跨平å�°æ”¯æŒ�</strong>:ShellCheck 支æŒ�在 Linuxã€�macOSã€�Windows 等多ç§�æ“�作系统上è¿�行,并支æŒ�å�„ç§�常è§�çš„ Shell 解释器,如 Bashã€�Dashã€�Zsh 等。</li><li><strong>自定义规则</strong>:ShellCheck å…�许用户定义自定义规则和过滤器,以适应特定项目或组织的需求。</li><li><strong>集æˆ�到编辑器中</strong>:ShellCheck å�¯ä»¥é›†æˆ�到å�„ç§�文本编辑器和IDE中,如Vimã€�Emacsã€�Sublimeã€�Atomå’ŒVSCode等,å®�ç�°å®�æ—¶å��馈和快速修å¤�。</li></ul><h2>ShellCheck 安装</h2><p>ShellCheck 的安装方法å�–决äº�ä½ ä½¿ç”¨çš„Linuxå�‘è¡Œç‰ˆã€‚ä»¥ä¸‹æ˜¯å‡ ç§�常è§�å�‘行版的安装步骤:</p><h4>RHELã€�CentOSå’ŒFedora系统</h4><p>首先需è¦�å�¯ç”¨EPEL Repo,然å��æ‰�能使用yum安装ShellCheck。具体步骤如下:</p><pre><code>yum -y install epel-release #å�¯ç”¨EPEL Repo。 yum install ShellCheck -y #安装ShellCheck。 </code></pre><h4>Debianå’ŒUbuntu 系统</h4><p>å�¯ä»¥ç›´æ�¥ä½¿ç”¨apt命令进行安装:</p><pre><code>sudo apt install shellcheck #安装ShellCheck。 </code></pre><h4>在线使用</h4><p>ä½ å�¯ä»¥ç›´æ�¥åœ¨ç½‘页 <code>https://www.shellcheck.net</code>ä¸Šè´´å…¥ä½ çš„è„šæœ¬ï¼Œè¿�行检查。</p><p><img src="/img/remote/1460000044920434" alt="图片" title="图片"></p><h4>使用æ“�作</h4><p>安装完æˆ�å��ï¼Œä½ å�¯ä»¥åœ¨å‘½ä»¤è¡Œä¸­ä½¿ç”¨ShellCheckæ�¥æ£€æŸ¥Shell脚本。å�ªéœ€åœ¨shellcheck指令å��é�¢åŠ ä¸ŠShell脚本的å��ç§°å�³å�¯ï¼Œä¾‹å¦‚:</p><pre><code>shellcheck test.sh </code></pre><p>ShellCheck ä¼šæ˜¾ç¤ºä¸€äº›è­¦å‘Šå’Œå»ºè®®ï¼Œå¸®åŠ©ä½ æ”¹å–„è„šæœ¬çš„è´¨é‡�和安全性。</p><p><img src="/img/remote/1460000044920435" alt="图片" title="图片"></p><h6>å®�际例å­�</h6><p>让我们通过一个具体的例å­�æ�¥æ¼”示如何使用ShellCheck。</p><p>å�‡è®¾æˆ‘们有一个简å�•çš„Shell脚本example.sh,内容如下:</p><pre><code>#!/bin/bash echo &quot;Hello, $1&quot;    if [ $1 = &quot;World&quot; ]; then      echo &quot;You said hello to World!&quot;  fi </code></pre><p>这个脚本æ�¥å�—一个å�‚数,并打å�°å‡º"Hello, "åŠ ä¸Šè¿™ä¸ªå�‚数。如æ�œå�‚数是"World",则é¢�外打å�°ä¸€æ�¡æ¶ˆæ�¯ã€‚</p><p>ç�°åœ¨ï¼Œæˆ‘们想è¦�使用ShellCheckæ�¥æ£€æŸ¥è¿™ä¸ªè„šæœ¬æ˜¯å�¦å­˜åœ¨é—®é¢˜ã€‚</p><p>打开终端,切æ�¢åˆ°åŒ…å�«example.sh脚本的目录,è¿�行ShellCheck:</p><pre><code>shellcheck example.sh </code></pre><p>ShellCheck会输出分æ��结æ�œï¼Œå�¯èƒ½ä¼šåŒ…括类似以下的警告和建议:</p><pre><code>In example.sh line 4:  if [ $1 = &quot;World&quot; ]; then     ^-- SC2086: Double quote to prevent globbing and word splitting.    For example:  if [ &quot;$1&quot; = &quot;World&quot; ]; then </code></pre><p>è¿™æ�¡è­¦å‘ŠæŒ‡å‡ºï¼Œåœ¨if语å�¥ä¸­ï¼Œå�˜é‡�$1没有被å�Œå¼•å�·åŒ…围,å�¯èƒ½ä¼šå¯¼è‡´ä¸€äº›é—®é¢˜ã€‚æ ¹æ�®ShellCheck的建议,我们应该修改脚本如下:</p><pre><code>#!/bin/bash echo &quot;Hello, $1&quot;    if [ &quot;$1&quot; = &quot;World&quot; ]; then      echo &quot;You said hello to World!&quot;  fi </code></pre><p>ç�°åœ¨ï¼Œè„šæœ¬æ›´åŠ å�¥å£®ï¼Œå› 为它é�¿å…�了由äº�未引用å�˜é‡�å�¯èƒ½å¯¼è‡´çš„æ½œåœ¨é—®é¢˜ã€‚</p><h4>其它</h4><p>集æˆ�到编辑器中的使用示例(以VSCode为例),如æ�œä½ 使用的是VSCode编辑器,并希望将ShellCheck集æˆ�到其中以å®�ç�°å®�æ—¶å��é¦ˆï¼Œä½ å�¯ä»¥æŒ‰ç…§ä»¥ä¸‹æ­¥éª¤æ“�作:</p><ul><li>在VSCode中打开Extensions视图(通过点击左侧边æ �上的方å�—å›¾æ ‡æˆ–æŒ‰Ctrl+Shift+X)。</li><li>在æ�œç´¢æ¡†ä¸­è¾“入“shellcheckâ€�并找到对应的扩展æ�’件,例如“ShellCheck for Visual Studio Codeâ€�。</li><li>点击“Installâ€�按钮安装æ�’件。</li><li>安装完æˆ�å��,é‡�æ–°åŠ è½½VSCode或é‡�å�¯ç¼–辑器。</li><li>æ‰“å¼€ä½ çš„Shell脚本文件。VSCodeç�°åœ¨åº”该在å��å�°ä½¿ç”¨ShellCheckæ�¥åˆ†æ��ä½ çš„è„šæœ¬ï¼Œå¹¶åœ¨å�‘ç�°é—®é¢˜æ—¶æ˜¾ç¤ºè­¦å‘Šæˆ–错误。</li></ul><p>这些警告和错误通常会在代ç �编辑器的左侧边æ �ä¸­é€šè¿‡æ³¢æµªçº¿æˆ–å›¾æ ‡æ ‡è®°å‡ºæ�¥ï¼Œä½ å�¯ä»¥ç‚¹å‡»å®ƒä»¬æ�¥æŸ¥çœ‹æ›´å¤šè¯¦ç»†ä¿¡æ�¯æˆ–ä¿®å¤�建议。</p><p>å�¦å¤–,如æ�œä½ 使用的是PyCharmè¿™æ ·çš„é›†æˆ�å¼€å�‘ç�¯å¢ƒï¼ˆIDEï¼‰ï¼Œä½ è¿˜å�¯ä»¥åœ¨PyCharm中安装ShellCheckæ�’ä»¶ã€‚è¿™æ ·ï¼Œä½ å°±å�¯ä»¥åœ¨IDE中直æ�¥æ£€æŸ¥Shell脚本,享å�—更方便的编ç �体验。</p><h2>总结</h2><p>总的æ�¥è¯´ï¼ŒShellCheck是一个强大的Shell脚本开å�‘辅助工具,它å�¯ä»¥å¸®åŠ©ä½ æ›´æœ‰æ•ˆåœ°ç¼–å†™ã€�维护和调试Shell脚本,æ��é«˜ä½ çš„å·¥ä½œæ•ˆç�‡å’Œè„šæœ¬è´¨é‡�。</p> 这也太牛了å�§ï¼�ä¸�写一行代ç �,也能轻æ�¾ Get ä½ æƒ³è¦�的资æº� https://segmentfault.com/a/1190000044918003 2024-05-28T10:53:29+08:00 2024-05-28T10:53:29+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥ï¼�</p><p>对äº�我们程åº�员æ�¥è¯´ï¼Œä½¿ç”¨çˆ¬è™«æŠ€æœ¯æ˜¯æˆ‘们常用的采集数æ�®æ‰‹æ®µä¹‹ä¸€ï¼Œå®ƒå�¯ä»¥å¸®åŠ©æˆ‘ä»¬è‡ªåŠ¨åŒ–åœ°ä»�互è�”网上è�·å�–å�„ç§�æ•°æ�®ï¼ŒåŒ…括文本ã€�图片ã€�音频ã€�视频等。</p><p><img src="/img/remote/1460000044918005" alt="" title=""></p><p>说起爬虫,它å�¯æ˜¯ä¸ªè®©äººå�ˆçˆ±å�ˆæ�¨çš„å°�家伙啊ï¼�有时它就åƒ�个勤劳的å°�蜜蜂,在网络的百花园里忙得ä¸�亦ä¹�ä¹�,为我们采集那些甜ç¾�的数æ�®èŠ±æœµã€‚ä½†ï¼Œå°�蜜蜂有时候也ä¸�是那么好伺候的,时ä¸�时会é�‡åˆ°äº›å¤´ç–¼çš„问题,让人哭笑ä¸�得。</p><p>网络世界å�¯ä¸�是个自由市场,到处都有“守门员â€�(æœ�务器管ç�†å‘˜ï¼‰ã€‚他们为了ä¿�护自己的数æ�®ä¸�被éš�æ„�抓å�–,设置了å�„ç§�防爬策略,比如é™�制访问频ç�‡ã€�验è¯�ç �验è¯�ã€�IPå°�é”�等等。</p><p><img src="/img/remote/1460000044918006" alt="" title=""></p><p>但,我们è�ªæ˜�的爬虫工程师们å�¯ä¸�会轻易放弃。他们开始施展å�„ç§�“魔法â€�——使用代ç�†IPã€�模拟用户行为ã€�验è¯�ç �识别等等,试图绕过这些障ç¢�。</p><p>但是,这些“魔法â€�也ä¸�是万能的,有时候å��而会弄巧æˆ�拙,比如被识别为æ�¶æ„�攻击而é�­åˆ°æ›´ä¸¥å�‰çš„å°�é”�。</p><p>除了“守门员â€�çš„é˜»æŒ ï¼Œç½‘ç»œä¸–ç•Œè¿˜å……æ»¡äº†å�„ç§�“陷阱â€�。有些网站为了å�¸å¼•爬虫,故æ„�å�‘布一些虚å�‡ä¿¡æ�¯æˆ–者设置一些诱饵链æ�¥ã€‚</p><p>爬虫一ä¸�å°�心就会中招,抓å�–åˆ°ä¸€å †å�ƒåœ¾æ•°æ�®æˆ–è€…é™·å…¥æ— é™�循ç�¯ã€‚这就åƒ�是在森æ�—里迷路的旅人,越走越å��,最å��è¿�å›�家的路都找ä¸�到了。</p><p><img src="/img/remote/1460000044918007" alt="" title=""></p><p>爬虫技术就åƒ�是一场充满挑战和ä¹�趣的冒险之旅。虽然会é�‡åˆ°å�„ç§�困难和问题,但是å�ªè¦�我们ä¿�æŒ�一颗勇敢和好奇的心,就一定能够找到解决问题的方法,è�·å�–到那些å®�贵的数æ�®å®�è—�ï¼�</p><p>这里我å�‘大家æ�¨è��一个é��常好用ã€�安全的平å�°ï¼š<a href="https://link.segmentfault.com/?enc=Gxdz2JxAPXd72dpr1koS0Q%3D%3D.EDvHAA7Y3V%2BzJ0BwSKqfMo4D70vtxAcRWicJkCzEAuBnkIFG2qkd8gve%2FMQfJehv3p7zdzbjE1SPXcxXFuid1X9oyszD%2BBmdLp5Ike9mkLA2k5wbNf%2FRXaqfWhiivIwq" rel="nofollow"><strong>亮数æ�®</strong></a>(点击直达)</p><p><img src="/img/remote/1460000044918008" alt="" title=""></p><h2>亮数æ�®ä»£ç�† IP</h2><h4>动æ€�ä½�宅代ç�† IP</h4><p>这类动æ€� IP 网络ä½�äº�世界上æ¯�个国家ã€�å·�和市,完全å±�äº�真人ä½�å®…IP,能é��常安全ã€�高效的采集所需数æ�®ã€‚</p><p><img src="/img/remote/1460000044918009" alt="" title=""></p><h4>é�™æ€�ä½�宅代ç�† IP</h4><p>ä¸�动æ€�IPä¸�å�Œçš„æ˜¯ï¼Œè¿™ç±»IP是固定的ä¸�å�˜åŠ¨çš„ï¼Œé€‚ç”¨äº�有固定IP需求的场景。这类IPè¢«ç›®æ ‡ç½‘ç«™å±�蔽的å�¯èƒ½æ€§æ›´å°�ï¼Œå› å…¶æ˜¯çœŸå®�存在的IP地å�€ï¼Œè€Œä¸”æ›´å¿«ã€�更安全。</p><p><img src="/img/remote/1460000044918010" alt="" title=""></p><h4>机房代ç�† IP</h4><p>这类IP具有更快ã€�更稳定的网络访问速度是,多数都自äº�æ•°æ�®ä¸­å¿ƒæˆ–æœ�务器托管商。是需è¦�长期固定 IP 地å�€çš„用户首选,适用äº�å…¨ç�ƒå�„个地域ç�¯å¢ƒã€‚</p><p><img src="/img/remote/1460000044918011" alt="" title=""></p><h4>移动代ç�† IP</h4><p>它类似äº�动æ€�ä½�宅代ç�†IP,IP地å�€åЍæ€�分é…�ä¸�定时更新,å�Œæ—¶ä¹Ÿæ›´å®‰å…¨ã€‚代ç�†IPæº�自移动è¿�è�¥å•†ï¼Œå®ƒçš„覆盖é�¢æ¯”较广,适用äº�业务涉å�Šå¤šä¸ªåœ°ç�†ä½�置的场景需求。</p><p><img src="/img/remote/1460000044918012" alt="" title=""></p><p>用户å�¯ä»¥æ ¹æ�®è‡ªå·±ä¸�å�Œçš„需求æ�¥é€‰æ‹©ä¸�å�Œçš„代ç�†IPç±»å�‹ã€‚</p><p>需è¦�了解更多关äº�å�„类代ç�† IP 的详细介ç»�,大家å�¯ä»¥ç›´æ�¥è®¿é—®ï¼š<a href="https://link.segmentfault.com/?enc=WdK4wgLHQmJjK9SvhauxIg%3D%3D.7oLbrUGPr3wFi92tKvzVchCFylKpDbu6bcpl6MSA9AKWUmSMm4HE2xjhB%2FJgxL%2F4j%2FrvuLwM8j%2Fal4Xhw091U3p2hgR5H62Q2jj5aBHTf0bCUSxH9G7Fo%2BCTZgX9kIK6" rel="nofollow"><strong>亮数æ�®å®˜ç½‘</strong></a> 查看。</p><p>说到这,有ä¸�少朋å�‹å°±æœ‰ä¸€ä¸ªç–‘问了,如æ�œæˆ‘ä¸�会写代ç �æ€�么åŠ�?那我如何使用代ç�† IPå�»çˆ¬å�–我们所需的数æ�®å‘¢ï¼Ÿåˆ«æ‹…心,下é�¢æ�¥è§£å†³ä½ 这个问题。</p><h2>自动化工具</h2><p>一个æµ�览器,å®�ç�°æ‰¹é‡�æ•°æ�®æŠ“å�–,é��常强大ï¼�点击<a href="https://link.segmentfault.com/?enc=LfvU8Glgw8yAfO0KuCBRTw%3D%3D.B%2BnIEPQwSL3h%2BBNwbL09fQoFf6BJ%2Fqzh9LyUb8t82rnPOZFRIopo3lcIzQ6uQR%2FOEB1a9vB7GUhe3mHjrIKb8twl8INGyRSt07%2BzxnQC9zXc56T9E5Zare75M83aUVcP" rel="nofollow"><strong>å…�费试用</strong></a>å�³å�¯ã€‚</p><p><img src="/img/remote/1460000044918013" alt="" title=""></p><p>点击查看代ç�†IP产å“�</p><p><img src="/img/remote/1460000044918014" alt="" title=""></p><p>选择亮数æ�®æµ�览器</p><p><img src="/img/remote/1460000044918015" alt="" title=""></p><p>æ·»åŠ æ–°ä»£ç�†ï¼šå��å­—å�¯è‡ªå®šä¹‰ã€‚</p><p><img src="/img/remote/1460000044918016" alt="" title=""></p><p>点击查看代ç �集æˆ�示例</p><p><img src="/img/remote/1460000044918017" alt="" title=""></p><p>è¾“å…¥ç›®æ ‡ç½‘ç«™ï¼Œå’Œå›½å®¶ã€‚</p><p><img src="/img/remote/1460000044918019" alt="" title=""></p><p>å�¯ä»¥çœ‹åˆ°ï¼Œé€‰å¥½è¯­è¨€ Python 模å�—å��,这边自动生æˆ�了对应的脚本,在执行å‰�,这里需è¦�安装一下<a href="https://link.segmentfault.com/?enc=1kgke3H8Jp27RYBVIw6rOw%3D%3D.jNf5v%2BjVzhc2aE7j8Wu3Q8V%2BWYQ3kr1rh0I5oM0%2FWJQI%2BoWgjscZrhXmaCm%2FW1gsNodfiuIG35r8%2BgVH8mKFmlw%2BPgSyBdz5OH3cVlOstCVZdPlSAzH%2FyBKFnOE8kQyz" rel="nofollow"><strong>亮数æ�®</strong></a>的第三方 Python 模å�—。</p><pre><code>pip3 install playwright</code></pre><p><img src="/img/remote/1460000044918020" alt="" title=""></p><p>安装æˆ�功å��,将案例代ç �å¤�制到python编辑器中执行。</p><pre><code>import asyncio from playwright.async_api import async_playwright SBR_WS_CDP = 'wss://brd-customer-hl_4565ddce-zone-scraping_browser1-country-cn:m8qx9grm6h3l@brd.superproxy.io:9222' async def run(pw): print('Connecting to Scraping Browser...') browser = await pw.chromium.connect_over_cdp(SBR_WS_CDP) try: page = await browser.new_page() print('Connected! Navigating to https://baidu.com...') await page.goto('https://baidu.com') # CAPTCHA handling: If you're expecting a CAPTCHA on the target page, use the following code snippet to check the status of Scraping Browser's automatic CAPTCHA solver # client = await page.context.new_cdp_session(page) # print('Waiting captcha to solve...') # solve_res = await client.send('Captcha.waitForSolve', { # 'detectTimeout': 10000, # }) # print('Captcha solve status:', solve_res['status']) print('Navigated! Scraping page content...') html = await page.content() print(html) finally: await browser.close() async def main(): async with async_playwright() as playwright: await run(playwright) if __name__ == '__main__': asyncio.run(main())</code></pre><p><img src="/img/remote/1460000044918021" alt="" title=""></p><h2>æ•°æ�®é›†æœ�务</h2><p>这是该平å�°ä¸€ä¸ªé��常棒的功能,如æ�œä½ ä¸�想费时费力的å�»è�·å�–想è¦�的数æ�®ï¼Œæˆ–者说对代ç �çš„è¿�行ä¸�å¤ªä¸“ï¼Œæˆ‘å»ºè®®ä½ ä¸�妨试一试它。</p><p>访问<a href="https://link.segmentfault.com/?enc=dEFCbaIfR25nD6V8tfnsuw%3D%3D.YdcKFJ2Kb6t%2FgmgI7Q5Fo13DaE%2FrSfkc3diOME%2FSzM9S7NsnX%2BwLeVelYnZTaB4bsjMv7MfskFQO4Ua%2BI1g9BeHcb9kjhQiZVr45KVKoDQpn3k4mIuSkybbDbOihaRR0" rel="nofollow"><strong>亮数æ�®å®˜ç½‘</strong></a>,点击<code>è�œå�•网络数æ�®</code>-<code>æ•°æ�®é›†</code>-<code>è�·å�–å…�è´¹æ ·æœ¬</code>,å�³å�¯ä½“验数æ�®é›†æœ�务了。</p><p><img src="/img/remote/1460000044918022" alt="" title=""></p><p>也å�¯åœ¨ä¹‹å‰�的代ç�†é…�置页é�¢ç›´æ�¥ç‚¹å‡»å·¦ä¾§çš„æ•°æ�®æ”¶é›†å™¨ï¼Œç„¶å��选择定制数æ�®ã€‚</p><p><img src="/img/remote/1460000044918023" alt="" title=""></p><p>下é�¢çš„选项大家å�¯ä»¥æŒ‰éœ€é€‰æ‹©ï¼ˆå·¦ï¼šå…¨æ–¹ä½�,å�³ï¼šå®šåˆ¶åŒ–)</p><p><img src="/img/remote/1460000044918024" alt="" title=""></p><p>开始创建代ç�†ç«¯å�£</p><p><img src="/img/remote/1460000044918025" alt="" title=""></p><p>开始填写所需的数æ�®ï¼Œæ¯”如这里我è¦�爬å�–百度的图片,填写如下:</p><p><img src="/img/remote/1460000044918026" alt="" title=""></p><p>点击下一页之å��,会自动å�»æŠ“å�–内容</p><p><img src="/img/remote/1460000044918027" alt="" title=""></p><p>抓å�–完æˆ�</p><p><img src="/img/remote/1460000044918028" alt="" title=""></p><p>ä½ ä¹Ÿå�¯ä»¥æ ¹æ�®ä½ 的需求进行相关的筛选</p><p><img src="/img/remote/1460000044918029" alt="" title=""></p><p>点击确定筛选</p><p><img src="/img/remote/1460000044918030" alt="" title=""></p><p>我们å�¯ä»¥å¯¹æŠ“å�–到的数æ�®è¿›è¡Œä¸‹è½½ï¼Œå†…ç½®æ��供有JSONå’ŒCSV两ç§�æ•°æ�®ä¿�å­˜æ ¼å¼�。</p><p>更多详细的功能,大家å�¯ä»¥ç™»å½•<a href="https://link.segmentfault.com/?enc=p1EdlcAk%2BUApnUAeTBcY5g%3D%3D.VycNM99EXjhnQrUZnVcnxy1DzcPge%2BZ8aQ3lgtQXfSaYI5UaHZGCCnkbflumL%2B91cNxZVwY5vE4XykKMsh3plNtGkBIqBl2E4y603Kf3lPdtNK%2FXYFHi%2BAONgBtoW17c" rel="nofollow"><strong>亮数æ�®å®˜ç½‘</strong></a>慢慢体验,民工哥我体验一番下æ�¥ï¼Œæ€»ä½“感觉æ“�作é��常简å�•,完全傻瓜å¼�,没有任何难度。</p><p>åœ¨çœ‹çš„ä½ æ˜¯ä¸�是也没有想到,ä¸�写一行代ç �,也能轻æ�¾æ��定爬å�–æ•°æ�®è¿™ä¸€æŠ€æœ¯æ´»ï¼�</p> 全剧终ï¼�æ‰“é€ ä¼�业级 DevOps 自动化è¿�维管ç�†å¹³å�°ï¼ˆ2023最新版)ï¼� https://segmentfault.com/a/1190000044866308 2024-05-09T10:04:39+08:00 2024-05-09T10:04:39+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥ï¼�</p><p>在这之å‰�,我们相继å�·å®Œäº†ï¼šå…³ç³»å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=HJ3c24GvfN42zUByoezeCQ%3D%3D.%2B2LYtiL4C%2FOmrusEmh9w6%2F2u1XlXCEiW1la6MnG6BsfT0zKaFaaTe3v5hMpRdLBMsgX%2FZtL5DADBAFVeJn%2BUNlsBYBsUuTANFq2RRnEBaE1ftc40gmu6Ts7Eaw%2FQIuaKNw3PR4p3cRAZjfeUF%2FdHYWp2JoLggQFm0m9cDCIuQNxQxfG1uEwx%2BSVpYAAp1LnM9JJIv6ls3uQ3%2FDGsHTYNnwojPJ91XfZNzCpf06h5bEHDMalHNZ4Tj2CiCjm%2B%2Br%2FDMC64PltT7EmzzkA%2Fpjs0JVYVotdryDpUr4QOIIBynU8%3D" rel="nofollow"><strong>MySQL</strong></a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=Kqx96%2FVK%2FyyvxRkzA42XdA%3D%3D.OujFVDVwypoHKcz0KU9HU%2FRggpwxYs%2B5a1sUAPkAbGPLhVTV471YnEaXIVUgMITMQEqtWDW0xDqpmFREAvtRv7senE8qvJiaAuCGTZAJeqJD9HB0GGUPqWQ%2FkDPYL11cUHyzqapXkR%2FYN9lWnAmaWkB5KR%2FH1YlwyHdU86KrGJ%2BEfJAT6stzfDixUOgrunmP5maDdZyWvrcQdl5tUqYXtVrRDYyC4S6%2F3RymJQrChpsChjxuhfw%2Fkrnm4KikZvjdbZLbo1rNjGhhir8RK6tMmGDL0Y7ZuCIJc31%2FbZ8x9dw%3D" rel="nofollow"><strong>Redis</strong></a> ã€� <a href="https://link.segmentfault.com/?enc=AGqBPNSJIuCD45pLkTyf8g%3D%3D.7rP3AM5Rl2H%2FqDDWGlm0dnzUDxU%2BbzzUuiI%2B4xqu5vakUMAFNyqcAA%2F8P2PZqskvS8qKNQuCgQzQf3KmNa0VAQnnB2j9j5i2AnFK%2BY2G6u8hBOSnToUtPwHWNlErRpWcfobf6HjWGNpVMcy7HQ2g%2BgFoF4vIATvyoniWcFIVi7YqlGg9EDVrPg4XcSacMtzNUlgPbYMnyfxHe1OMRVQ%2FOqUE6KtngZjBaHhXDOMPgvEs%2FLPjw4%2ByAjdBwYM9n5cHe700q4QZHyWF6ESYuMhRvjvwO2RnuAeWL1SWiNdYjp6IfLm2Conk4gEoOltG%2FB%2BpY7qeUfXh5rqnKLcZM6Y0TA%3D%3D" rel="nofollow"><strong>MongoDB</strong></a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=WBgzWABcD4RKDghsp9j1hg%3D%3D.ay7VT9kv5Vhj9Yod3LVG3As03ZJP6LX%2BDiiy5Fi797wppYG%2B6evMu4xapwm2t8k02EoBGqB4Hucd9IcXIwDzwpT%2Fj%2FjQLfUJO1YYgsDU5G2NgE9JdLao2hwu7YBlK39kxhuuwlwDtbZmYMdtqEQt6SLCWEadhiaOX5rj8Q00NsLFaffHxr8Ef%2BnlzzFAEO2omUYc7Lxtc4g6Lxmdk50Kgcw4GCaVCPqpG8qCQAtjQJbWSiockwhgXXfHw0HSmTB78n4AWPpk%2FKd6YIIXtDw4l7kXzRYzTdAPIdtr52GzkCk%3D" rel="nofollow"><strong>ElasticSearch</strong></a> ã€�<a href="https://link.segmentfault.com/?enc=rDjtaGPhicUrlvtqMXphXQ%3D%3D.MPJO2s6C8mkr53WTUTtvEJqaehDxzwnFaK5X60FMgPx%2FlEbyHYMeMWn38T7SNhl%2FqMiqpwQOgB5CwDpbG6b6l9SCIsx9VDyw%2BACu31cgkVoSWKZk3mRB9GXdtKwqCdrxGXgOOWWBs2rqr1M5nrYcVGvYDZovkEFlxBxZFEsF4zY7qvMpCQomqyRYrfOkjPurnwSNlRLvVv140P9HnYu10ZYmAwCdYXTgtt1YswQPRIO8c%2BWelG22lFfifmOGvmNI9pFqfVfc%2FOfd44433CwDTAl2BYO9rwkzn3822d14rVI%3D" rel="nofollow"><strong>大数æ�®Â Hadoop</strong></a> 框æ�¶ã€�<a href="https://link.segmentfault.com/?enc=m%2Flza%2FjoRjyFj7DQEDr3QA%3D%3D.Azfmpi3nxrfhtMTShvukrDZd%2BHDhyRojq6RKcHDIqrQSW%2F%2FapT%2BemAAUzRoPVoKQBsX6lZ3oTAL5aBVxlNinfeZQcFU6oaC1I3GEyx1YcdcAUTU3F9okPJ4YktvQ9qr%2FwGoGWmb%2FQmXjtZ2YdaXTXvgGpw8HD8L%2FSTrRlkpgh%2Fqjsudiva2x4jS52YMsmLPZHFNedT8hZEHC58UGoaVuLAKY157jyq8Wsqq9gGQhDYFhd%2BmFsbPibkQcU3pSZ75J0Kitq%2BcIEXnwxdjT%2BJ2BZsyRsfezOvXYlcmWgubSjG0%3D" rel="nofollow"><strong>PostgreSQL</strong> 数æ�®åº“</a>ã€�消æ�¯ä¸­é—´ä»¶Â <a href="https://link.segmentfault.com/?enc=huC8qDEV5RLamtErJjLGAA%3D%3D.D4jAEbi36Hg3OaLWYc9pgvbk%2B0UPbxdLZzsXq6y2qyQDtOhGUXB6MBbrjoSKPvOW2RY9VuC2ECUcgNvVfK5K4qXhSIQSoqdpUR3f4ix96pAC2%2BGorLbvPOQN238bK5vdoGlAubvDLETxIiDYyy1vJ0djuGlNHKP6vXTVBJ3ocO4%3D" rel="nofollow"><strong>Kafka</strong></a>ã€�分布å¼�å��调中间件 <a href="https://link.segmentfault.com/?enc=pDdJbeobhx%2FiZLKPqq8flw%3D%3D.9SXnr7mXOD%2BTKspidB7DaSm4rGaEZyHWwiF6ZD5Ja2fZFmdFwKhHukZ%2F15ZEBT%2FTYbRj5tx1LoABCsiwDgXjQ7UvYqUPEz6pmEpvO7JFtu1mTMpDjb0l8Bn4WpZFjXWRjfRIp5sGYtVXhXtz%2FsmVIOOm6xSir2S%2BRulxbklbUde%2FZ5fYAO6l8IL%2FXhJMKcLRMHb8oB01ciLmJqGGcwoO77LkwHq61nCV0OBf3Qrl8SV6zrR%2BIF6ug15IHg2PxOhdbv0Q8y6qaECu7HlKtzSGIYL%2FlaVg%2FCgsi%2FPD4FmVeQYQA1jWPTpwEfEVJQ47SMyKKtrN1C9HB%2BZpScp5chKk0w%3D%3D" rel="nofollow"><strong>Zookeeper</strong></a>ã€�消æ�¯ä¸­é—´ä»¶Â <a href="https://link.segmentfault.com/?enc=LP%2B7sKfqy3GyHJ1SyY6%2BtQ%3D%3D.AErimZ4D2yfWojvqVaN%2FS1QGuw7n0RPUgYppP1fJkwPbIPCp7HtXgVgiOlsPgjEMytg%2BxhYQBsLLPBDJ4oevk8T%2FklM2Yk6NPn1rE7Mh5vUXHF%2FWRdfW8vLy2QVDeDC%2B6gWy%2BpSgqjFDQvV1YPuisVllBDajVRn6Ept5oneKWbR6pHxvPIVOUVJojUOkhBvwf8ZYU8r5Z9mgb%2FkHtz9b2St69uemvpSWDEuDrcubtzNCj0Z69uQVpBeONinMF4MRb%2BFdN2ScweYhrFrS7alP7TGI6js39BI6wOEP9PwvnLSlhSmeSTwo8UZGWNnQKdloBC90OUF7yBqWCIplepYhvQ%3D%3D" rel="nofollow"><strong>RabbitMQ</strong></a>ã€�æ�„建ä¼�业级<a href="https://link.segmentfault.com/?enc=3D2uiGGv6Vf5nr4PJpZS%2FQ%3D%3D.LnzYwfFfG%2FSTymkPxgN6OFvODNRHZzPSO3VzZUnIhsox8ZdkIJ6frPuGoHV9qs8lJnhdBsGzup0VM3VM8dOyEh7CHRSCsCo1WQ3L8O4mTNVdOjPkM2mJmYUXacBZ0y%2FBzMZ%2BKX9JpjRp06tBdxjoVDIoqTsS9yTuuDBUdPCmG1Q6AQd0Oav0XYWZqwv43%2BYa03Vj18Gj39x8KPZ%2B3Tjd4tUD%2BPvvuy4bvmKAGW5aLbtE18ODKWEC8Z16s%2B8kwtHBMJNSkkG3m4Mep6ZoVt3TtAz7%2BxDliMl28Hx0ivxfmjg%3D" rel="nofollow"><strong>监æ�§å¹³å�°</strong></a>ã€�ä¼�业<a href="https://link.segmentfault.com/?enc=SuLQwzux3iwYRfbYLcgGEA%3D%3D.c%2F3iBN59TIDp6Ar76g81E8WtRMu2JeUsyavpTx%2FYRR9oo2LDMNczavuUfVbJ4FctXYyyDGPB7ISWwDOgZyKNGdr%2FRmNm9VOHokuR8YA%2B7P487ZNctJhKGLOFfRRwBlYl5j3JoHw%2FDIzjhMrIigqBejrmgtRbyKAy6cr6MGlilPKUWZ7YXBZBp%2BPMWH309QSRYEY2Ptzg3SfUA%2B%2FN%2BYBiHMN%2F8fUGXIBs%2FgrnH9dzYGrm%2F2F4OuciipES%2BCYZVWcOSkeNOXStXzPKi9swufABH5SqBu%2BZn3Fcc3IiZu3EezS6Na7FZN4nk1psHjpzyWoGdBWU5DuUnh8o%2BGJIdtM2zg%3D%3D" rel="nofollow"><strong>常用应用ä¸�æœ�务</strong></a>ã€�<strong><a href="https://link.segmentfault.com/?enc=KvSQ6dZCNho1zJVvtGh66Q%3D%3D.G7hWLXV72s9woafYJVIux4CIOh7lzZGLRh%2BClydwpdxRzeX6%2BiXy9RYLsXrhay2MV8%2BbUM3waeorklYbT9iQsr37kvAX4J3NV7DNnbfsHhDoKQeiHicY%2BhFULbTBtKFja7WV3vIgW5eiXB6ogwUfcqZAe7K059xenjB6h4fjeJfGxh%2B%2BiOmHSh%2FKcRBHbzqCNQCL9%2Fpb1NSS5OW0wZ9m4H8UdfWJW3gl7trX79n1pUDFjTcYAqPgvYiZczztsikDwGCj2LD5kuJYuv5WwqKkUYqdLP6bc7lMiuUYpuR8BgM%3D" rel="nofollow"><strong>ä¼�业集群è¿�维管ç�†</strong></a> ã€�</strong>ä¼�业<a href="https://link.segmentfault.com/?enc=zTY4dF8tgSYw%2FzSjK3CDVA%3D%3D.yRTrZGa07KPfpnmKaRwWnsa1JelCs4z4J%2BCcMO%2FwCmkejxlQ6D5IcLaevWwKpc%2FxfqRGvCajgupq00FnfM5vOl9LG1j%2F%2BDUaPk4sdwLnCg%2FsbucLL1YmPNFyI%2F2p8oBWbigSM6kVsza%2B%2FSlHLZ%2Feh3T%2Be7q7M0Q%2BjDNlYSRfJcocaHnxljoizAcH1va46C%2FrSDI0X9h2RmQi5xH2xESCA%2BbBg1CQWlaDyzzMYamv%2FauIDvceqLaVbXE7PqYtiUJ4MNonctfGeBhHZe47hXtjbYk%2BYLOa2kp9DLXacDbRvvU%3D" rel="nofollow"><strong>云计算æœ�务 Openstack</strong></a> 等这些系列的知识体系。</p><p>今天,我们å�ˆå�·å®Œäº†å�¦ä¸€ä¸ªç³»åˆ—:<strong>æ‰“é€ ä¼�业级 DevOps 自动化è¿�维管ç�†å¹³å�°</strong>。</p><p><img src="/img/remote/1460000044866310" alt="图片" title="图片"></p><p>DevOpså¹¶ä¸�æ˜¯å‡­ç©ºåˆ›é€ å‡ºæ�¥çš„一个概念,DevOps是Developmentå’ŒOperations的组å�ˆï¼Œæ˜¯ä¸€ç§�方法论,是一组过程ã€�方法ä¸�系统的统称,用äº�促进应用开å�‘ã€�应用è¿�维和质é‡�ä¿�障(QA)部门之间的沟通ã€�å��作ä¸�æ•´å�ˆã€‚ä»¥æœŸæ‰“ç ´ä¼ ç»Ÿå¼€å�‘å’Œè¿�è�¥ä¹‹é—´çš„å£�å�’和鸿沟。<img src="/img/remote/1460000044866311" alt="图片" title="图片">它也是有ç�€å�†å�²çš„å�‘展过程的。</p><p>简而言之,DevOps是继软件开å�‘的瀑布模å�‹ã€�æ•�æ�·æ¨¡å�‹å��的第三ç§�软件开å�‘的方法论,å�¯ä»¥ç�†è§£ä¸ºï¼š</p><ul><li>第一阶段:瀑布模å�‹</li><li>第二阶段:æ•�æ�·æ¨¡å�‹</li><li>第三阶段:DevOps</li></ul><p><a href="https://link.segmentfault.com/?enc=tn%2Boj6xvo8gdMVsI8AoaDw%3D%3D.DYuJb%2F9b1iVVsqU3Do2amdPmvagoDErlI6eAcVqKmBki8KWiRtLGIaoBDaeNq7qF5kK2NMTK3EGu04I8G1HNzcjg2qI4LbIAPNKkujxhue64V3y6UlbC%2FjVfIp%2Fcg0DQjMw38pVZdToiwsu8JCR4%2BHAs0LwztHIGVIwGkYK9IQne1Hru3wzthahwsVPSoXxelc0ZSIoXeqpciRpPwfpzLqJ%2FuM8MUOScTZiTu700S9wEVG99ELA8HuaWf%2BpPRQWbw%2FSR2KPH8qbuxuLCMdnnDNvcTCD%2FIUsQUQfIwOnBVh4%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(一):云å�Ÿç”ŸæŠ€æœ¯åŸºç¡€å…¥é—¨è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=fSoSbKPP%2FXNZl7awkEbZ6Q%3D%3D.QjLt6J5BlEixEliwSj5EZE0gXxm3M9D6eRv13x6G4OOt1I9o7liUknH9elMlbNFT%2FZ8rnamb%2B1Le4MiFO19Z6Wo5MMEn7aZpCW8qLUgv3VVa7TVZkEC8KOB5xrXw%2BQwQBhyVay%2B4oUMBZjQtSv72OeTsLCzRxgpwxHMG1E8MqDujlxptIDay5UwqPasfTgHOjqQbSsIrOF8lQxO%2FXKJikGPpUNN0kCZvsHvWTz4P%2FLpHmHwzB7zYwmFAIdBqQZnudiiLqqfTpeBQIo%2BsPWV6zelKCtNWS9gKtaVQ%2BZYOA74%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(二):DevOpsã€�CIã€�CDã€�CT 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=SbZP4Om1cBl0zzUTbuAPlA%3D%3D.ALQL5JwUS8jLICO74KPoIROzPueAdPAPQTwU%2FDqCIwnpGasD4Pg1jKnGLblQCNs4VmkA4CWZRwGnIbjzLq%2BjPlR%2BP0ri%2B2s8eg0KgeYaegLWLxn62wTO8n7331jX%2Fsw5dmQAWs4AE5%2BgIaeBuf%2FzaRO5rlneGo%2FR%2FPgUoZPcl5G4v9n%2F%2BXR3v2QdMKsper%2F183KoBPrLGnzJiFoAdqEmbGuzc%2BEnzsfM4TMgBy1tyOyvwok5AR3%2BsF2qhmXfIVf0JtEj5KXnt7SOzB5lBbMDzM9KsTnBxV9qj8VSgjj8N%2B0%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(三):DevOps 常用的软件工具</a> </p><p><a href="https://link.segmentfault.com/?enc=ZkM8E9pM8VUSpTBz6DJ4dg%3D%3D.GQwD1JWtX3t6t%2FFvle8wjEUoJorErBI9ZwfX7exHKmQmDM0jMOcFNcXYjJBifZ7ceeuiZC4mQUDo0dCGSQESSE%2BsclNE9UNYkLlXwkiFTUJF3GGHF5ziUd0NBcWeojrtSVpJNVLm8i70Lm8B%2FQwWCiiZJ%2B5B4Qoj4Drjqf%2Bg7mDeYcdBVzw73YuExg3tHUzv5nrFNORkN0rzu1CFlRwVDDTI4Yoh3ks91ffbq%2FBuP5BPT%2F1heaRh5OtPlDm3yWXLt9xfIv8F4Nd%2ByrjH9Xgu%2BtQF14fgKyYPO1lacWFcwho%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(四):Jenkins 基础入门ä¸�安装</a> </p><p><a href="https://link.segmentfault.com/?enc=1CQ6nzClsAM5%2BzHQ3Etq3g%3D%3D.EvhKDxda1qdIwLv7W1RszFX%2Fr8PY3X%2F9YRqafaal0hXzz%2B9K%2FiCBBPmYEwMdAX21HbSVDuQzxEANpqIxHwdEzWPUhRf8vJdoaLGBf%2BBuGqKkpTGgURP%2BxtFo7Jj6AXiONcUIVtAc6ldR1%2B149a8XhUcYmOp0Rls6XAlptSYJpKKPEDwCjjms6GsSmyk1fDMQhR%2BCCVbipUklfHRY%2B1TxcnU79q%2BYXs3njRcAnCLEfYOjhBRBtyQ5NznE7e8TQjBJD1OljLWZEE%2B2PVEJ%2FS8dhN8yoHl62vO0916CvKXQF8I%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(五):Jenkins 基本使用介ç»�</a> </p><p><a href="https://link.segmentfault.com/?enc=5CLUbQV38t549YRIIJ%2FCjA%3D%3D.7WGg9zMeACf%2BWsRCHZRDwfYq6Kl7CMIJijN1brF1JuPR5oDsmF5oNd2nHjMsl2hMR44JiwnHe0kR1e7ctAkId6VXuCnFrmZUitFuNnMSF0p%2F%2B8ViCPCZ3cbbL%2BRQQSljtwSkM8%2FgMyPI1M%2BNM5gOJaWskHVJRtbA5jgAnWJFTp5YWaKz8csapRjHijeKOVI8IDOX8vlywnpIYp1TxYdCON5JEl93gsvohjLDMFtE8Wina5AvzfasBoUtLYicBaly89MSAfY%2FexARRhvmcMpakWBkXDGNLzgJnzaIL4pnUZc%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(六):Jenkins Pipeline 入门å�Šä½¿ç”¨è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=lZPwXhJ3AwUWrmM3JIYJRQ%3D%3D.BG%2Bl1k0NgKwmpufnUJ4aDHRnEwV5ImlNgKYDVWvK%2Bw4IZXmlQK8e9dN%2B46%2BlHch14Q3eHVbxzwtFCgNS4qIH5KeXgX2NcXmyTFMc%2F7ixmlsLgzH%2BRYb7FN%2FRl2VM8U8M8CRPHaDaK66esKApK1Gal20OobxcL4jp1UMuijKOL4v5oipby456mgy0rQ%2FCYlpzPZlVBQXSApwKl4PPk3o%2BYKa4JzUzc2k3qDsZRTzv0EI7fXXi2S7czq4UuvWfBgqKm%2BcSdvmc10pDjgzkdPmyx7Q5dhQzZKK%2BT%2F43AgdAPJI%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(七):Jenkins 部署 Springboot 应用å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=Tp7nnv6Rc2N9w0b2PwYovg%3D%3D.inE%2FQRs%2BFhAfHEAVXsjauaksT4i2mOPIGJ%2Bl%2FG7sYqVHN84epkHLO7tAez04hTWwhFIpqF5VXsDcc4c1tyVhQBM%2BB%2Fj3z1H6wVuKWafPIXp3rCjWsidBU2F1EXqMg0adxci3k95%2FkH9%2FrlPVMv8BdInJzAV8hlD5q342rLNVWSZTCRlRvV9J6mgAZU82LW9qHOC2LlOrDqgxJXs8Z7fbK7ImBwBosRY0bArGSnY2X4ry%2FRv354l%2Fo8RP2W3i83ZH%2BIUYZlkSWFsW%2FGcoHXjeyLDk7qnkrx%2B%2FdGmeHkVCHRY%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(八):Jenkins 部署å‰�å��端分离项目</a> </p><p><a href="https://link.segmentfault.com/?enc=0XaJYQz6RmDvOU%2FWQU5c5w%3D%3D.ouc%2BFg%2FBSEXldQF6PH128WI7E8GBjElvLl7d5G7TNV61ycr6AyhME8ndEhro0WI0HyhYeYTaj5eJRdgnRCegxZBp%2BTnbXcoO1e6Nu1Qvj6qTfoqtcLtatxHBLp4V71y3QMPgbK5E5RMNGv6%2FJV5JQPM%2B3rjlTy4u%2FiO6suSpEHJGLQZIHE5YKRjnjzSgYSOVvizfWokkq2AUloaIO1eJRwD%2Bt0W40S1yWX2SfFEq4B5QVzz23NaRjXOWUS2MYzc7b3ieJtJOiVS7qavvfWJ7k1ljVbVBgf3NQNxnZMNcP04%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(ä¹�):Jenkins 基äº� K8s çš„ DevOps å¹³å�°å®�è·µ</a></p><p><a href="https://link.segmentfault.com/?enc=Iz67ut7G6wbQiN2htM5OAw%3D%3D.RmglMd7swQaDf%2FYNVqZykJyiYC2BwJpZ%2BEWnlDwd40lhJv1EzRl8POV%2Fy5xAmtPJ8YGtk5fHpINMoIQ%2Bn1nhH85LpqpZ7hnSDhUKAbua7w4B9MNFtYuo1Isb5JdpOxci0ND5DQ%2F4RsNOgKyBr52l4mhsvUK1vBWJHVoy3cTBG57wNZBAKctBqPz9xiAMSGatY%2FBKmGxnstAg61tY3IlWmviG3gQGsPrCBkDU7Q5Bab9q0%2BZc3lJjb8YHC%2Fm6egVeqVLGyBmBHW%2Fwtsld1Y64EKT4aAcnDEiVDH3RoiivGpQ%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��):Gitlab Runner å®�ç�° CI/CD 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=51A880G3zVN8fz2LyFFbpA%3D%3D.%2BX0SRmDxpQpBUFFzq9CI%2FnzmBHKWeyWPeLSOjnHKWC8zHZbNJAVT3kd92X%2BeP6i3lYbcXxATzT5lAMLG6z%2BbVpm8RbloBiVor2jVgWlKi%2FJfF3EcCxOXBZTedwgzYn7z2Yqzjb5Dk3Ply%2FVZYn1usIaVYTsjAkEBeEsMHEdUmZ82qzUfFYXojC%2FCQ7cUD1egfyRbCPppKpGkynoeRkoeCjJIF4mnkoa19UGw8DZ5F5rqbeGwKeMybyxMQBVjl4kMtHqCwhWzxn2FbKB9%2BoK1V2Lqgczk9LWuM%2BRL2zzQtr8%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��一):微æœ�务基础入门(概念ä¸�æ�¶æ�„)</a> </p><p><a href="https://link.segmentfault.com/?enc=XD1YCHtNMX0sGLbGhquFaw%3D%3D.TSR7WAmdLczTDEGWzjhDhBJDR0A1a4IYVfb0vsBXSFn6d%2BRDnKv5ObLdKTit%2FSIUA2PFlWBggGfcjKV2c7OZoilIf6oUTmxCQXv%2BSjEh6qyzVzlzZjTp4fpp2zOBmmR6226queMHSQrYYyNc6ovT%2BgiWPTO8%2BzAqptRkJZ4C8P%2BcxGJg35Dxhd8o%2Fztq8bgbUlz70LYP358mfXU1D4FogrRZivgqhCkqn6wp4Qexvn7tkjGUTxjXukdRo1MFF04kEO92mIpokemrHcTY0PqUufkRRHJPz0g27gOm9PTROTU%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��二):æœ�务å�‘ç�°ä¸�é…�置管ç�†å¹³å�° Nacos 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=AAP5bvbEF4hkFPm7BS2qiQ%3D%3D.1uLdhbIKqSUwYsnfjZG2TvzdDGJNfdX%2BwOncuF2KSRtuoq9EmKXO47DtGGGP%2BwwvC%2BqBBiUFiJZ6rde9F89L25ma0TAAwBJldULX8p91RVFo7EKjy61fCkpUS1yZij1jODxJdNe1adJuA4R7TG70wAw%2BtbtO21LsOz2BCNp%2FZyOUYaOkUInfdZ021xXjP65yxVCqFk%2B7bZQGCMHLHF%2FzhiokIinwKPechfGLNX2pRS%2FP%2BObmoH%2BEU98RFMDQOf4JYi%2Fkqv3Jjz5Xb%2BBOIHgrhxvmIErWfGgygBYrxli0k6o%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��三):分布å¼�的对象存储系统 MinIO 详解</a></p><p><a href="https://link.segmentfault.com/?enc=V7DlOd8KBFL1YcnMgmt69A%3D%3D.nCvIzAHJWCDy5JyPqdFBbrS6soJkM0HC9TA%2Fq%2BNKyfseXBgTYCDc1RP2vLjVMfrDvzP3PvP1PEzTsHxCrkmGLcueoo9wqYohxXpWLZGpkCF6EgQENXgvLUJU0vnrk%2F%2FMzNmyFoMEBJ%2Bl8xfDBgNm8rYHQXHUeeiuvMefsYVLRpop4W1PmUQKgFuK7WEixx4KKT5m%2BiA8xwBZNt0vzkmTaE0qWqO0Ug8t6c9O%2FY5h5PBde%2FsynO0WOSQ85RbYcvFA6wVHbCccCr9e7xwaTkPVOGk0vuQoaos2sh%2BZ9xib5qc%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��四):容器管ç�†å·¥å…· Rancher 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=8zJFETsXFe2GsuZyf7vv2A%3D%3D.PcdDPYVCdEayebebSrbZ%2Fr3jwv5LgjijWGfcCyhEhLOelK3qdACpg0176GZosJIfudRHK7FeXxmtbJks7aIQjdCwCV4szuMJSmFyIafyMOOGSsM2QmYOoe%2FT%2BaNnHH1p2n0nYSICZw%2BpsmHJXBZQTf8mjqa%2FRsICwjBDMyWy4%2B%2Fk4NtbvhwYXlzvWQ5xg3Ba53btUn2GqTVQMAMXax7zUfgRIs3P8P8wW4yhhoVFi7IFc5gwTRfVxabSrCMOwdrwPJuUr0WtxYZ%2FyPYKnLW%2FZXYJo9eMCofb9hdjkO7a62Q%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��五):kubernetes 包管ç�†å·¥å…· Helm 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=mVFcaGEmdF76VQGi0b%2FKCg%3D%3D.3uuVep1Flbdo2hICVvi2vAdM8vsLR6wBjIad7iS%2FxrqepPMobA4dkHol3Xy%2FHtROjErEqD8k3vOMSukdJfPJPzET%2BVW4Ec9jNuBOnGL1YN%2F9uLlDxzMrUsCoBX1EC%2Fz6q%2Bp6VIlPAbcRkZduxko29mKNxdEK%2F1jXfoi0kLTBBhwDLtE9p%2FGgPyDemoQaZRN0gPkq1mn9v1y%2B8K41K4ofmHnQxDTLBuQ6cbduAYC8bAENHFth2m1TMyIKHF%2FiH0Pa5C1%2BWWJ3CJLg8ncsmR80HG9t20ghBH%2BXgjCuV%2FI79Qk%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��六):æœ�åŠ¡ç½‘æ ¼ Istio 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=Znh5Orsp0BE1FKR%2Bo2g3EQ%3D%3D.8canNuCveL%2Bxgm4WnFnuEmbtqg3N44PZgpzeXq7DlP1ht%2FQrXEk4zoKOqkKxLnF2t%2BPBjmwUmQZlh6SaD0GX%2FrMt3zx3jrKBB1rxEIcHf8cztq%2F8%2FM8d3S5y6OA%2Bf1ouzdax%2FcbmeFOWfAvGozifNZ3z6QbA7YoGPxXeX2OCuY1M29Kxb2vrMqry1KQqMUXdp86LZXof46oW1hBJ%2Fj%2BBmfDcUc2sglml5eKwnRbXDoRJu4MYH05WbH91nCL26yBebphVykCX60Df74RugJSsSrD4tgnifDQIz%2FWOO4gMmkw%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��七):链路追踪工具 SkyWalking 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=AWvgCIMW9J0iHYMFFPls%2Fw%3D%3D.f850PW1PO450gS0hpjFX%2BRUqMv2g7sfw69GDbLIL6ZPidzUup3OGRwtnoHtQHabUs9idL41upFZxUq9TPxF9rrOhbEszuJbmgGwAxS8LaCwvWUOsRKvUYcPH0QrPikbP8r5WZAPwqr1EpE6KaHJ21nGXev0fTHfcw1lYlaIbVQc2zlcr9W6Z92SILktz7ru1h5cHyeQSaVc5kxIVYwkmBA9fLxPT2xOeJCFO2orzTw679WG1jTDstQh1nHbPajjLTltHWuzQFVBY7680QZJw8honZ%2FSvB4MzM7Ahox3cJzg%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��八):influxDBã€�cAdvisorã€�Grafana</a> </p><p><a href="https://link.segmentfault.com/?enc=jBoPVh7Ffn3VSMBbbDqtQA%3D%3D.p1Ae2TL2txy6BNh%2Ba%2Fq6RpG3RVLTz00oeY%2BtELIJvCCSn%2Fy2e80L8YVeQARqjgF566larHRTQAflSwk7PztniCUH3Sgsl9Rhphma3THcwUx%2BjBp7r3YpRrkGMe4EZl8%2BzB3BNuTSB6tqbloj07jasz9oNqohLnyRiOUu23XMLD4f%2BEUUhSLFNpU5Kk%2BaeDkREblLMGcgeVtO7jSeoEh4IvLyMgHyzkeEwq7s1AIcPVwRxA4bTc17Hb1Ywt1OzL2YDaYbhEon%2FcUuFIZpQnm%2B4Z2lTHCi6UlXAP1qu68AzDk%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(å��ä¹�):云æœ�务器 ECS 入门(é…�ç½®ä¸�使用)</a> </p><p><a href="https://link.segmentfault.com/?enc=wQFqjOjuWavwK0W77gsmrQ%3D%3D.kWjbPOkmmIkRL7oMXGj5kmbItlrqpo%2BAViRIDHzE5qewunyDkK9HUUNLrQ65z%2BbqCh3hX6yI3Dkye0ZjT7MgCXcnuql%2Fo8g3tGDvUHbwkulkGtJamWcE0HI80EiTfQR%2BRHFRVj1CMtLhChfOeV5Z7SwtWP1C%2FqOshbomcBK%2FhL2GsH%2BM96EsQC4u2P8ujjajnbn1OYLRAVe5cQKRys%2Fr%2FcEmhN%2BIh2T%2FDu3OquaKguaLd9f10kMDYSdL2aCHaTlWQlB%2FN4xsQBqw7gFNZf%2FgMosNPcfyRQNWt1Hjn6ydFuQ%3D" rel="nofollow">æ‰“é€ ä¼�业级自动化è¿�ç»´å¹³å�°ç³»åˆ—(二å��):云æœ�务器 ECS 进阶(SLB/弹性伸缩)</a></p> Oracle æ•°æ�®åº“å¾ˆéš¾ä¹ˆï¼Ÿå¸¦ä½ ä»�头到尾æ�‹ä¸€é��,ä¸�ä¿¡ä½ å­¦ä¸�会ï¼�ç« https://segmentfault.com/a/1190000044866193 2024-05-09T10:02:22+08:00 2024-05-09T10:02:22+08:00 民工哥 https://segmentfault.com/u/jishuroad 3 <h2>Oracle 带å�‚数的存储过程</h2><h4>带å�‚数的存储过程</h4><p>存储过程å…�许带有å�‚数,å�‚数的使用将å¢�åŠ å­˜å‚¨è¿‡ç¨‹çš„ç�µæ´»æ€§ï¼Œç»™æ•°æ�®åº“编程带æ�¥æ��大的方便。</p><p>存储过程中如æ�œä½¿ç”¨äº†å�‚数,在执行存储过程时必须为其指定å�‚数。总的æ�¥è¯´ï¼Œå�‚æ•°å�¯ä»¥æ˜¯å¸¸é‡�ã€�å�˜é‡�和表达å¼�等。</p><p>Oracle有三ç§�å�‚数模å¼�:</p><ul><li>IN</li><li>OUT</li><li>IN OUT</li></ul><h4>INå�‚æ•°</h4><p>该类å�‚æ•°å€¼ç”±è°ƒç”¨è€…ä¼ å…¥ï¼Œå¹¶ä¸”å�ªèƒ½å¤Ÿè¢«å­˜å‚¨è¿‡ç¨‹è¯»å�–。这ç§�模å¼�çš„å�‚数是最常用的,也是默认的å�‚数模å¼�。</p><p>示例:创建一个带有输入å�‚数的存储过程,当使用Insert_studentæ·»åŠ å­¦ç”Ÿä¿¡æ�¯æ—¶ï¼Œç”¨æˆ·å�ªéœ€è¦�å�‘è¯¥å­˜å‚¨è¿‡ç¨‹ä¼ å…¥å�‚数值,然å��由存储过程ä»�中读å�–æ•°æ�®ã€‚</p><pre><code class="sql">create or replace procedure Insert_student(SNO IN varchar2,SNAME IN varchar2,SSEX IN char,SAGE IN number,SDEPT IN varchar2) is begin insert into student values(SNO,SNAME,SSEX,SAGE,SDEPT); exception when dup_val_on_index then dbms_output.put_line('é‡�å¤�的学生ID'); when others then dbms_output.put_line('å�‘生其它错误ï¼�'); end Insert_student;</code></pre><p>æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹å¹¶ä¼ é€’å�‚数,共有三ç§�æ–¹å¼�:</p><ul><li>å��ç§°ä¼ é€’ <br><img src="/img/remote/1460000044866195" alt="" title=""></li><li>ä½�ç½®ä¼ é€’ <br><img src="/img/remote/1460000044866196" alt="" title=""></li><li>组å�ˆä¼ 递 <br><img src="/img/remote/1460000044866197" alt="" title=""></li></ul><h4>OUTå�‚æ•°</h4><p>该类å�‚数值由存储过程写入。</p><p>示例:创建一个带有输出å�‚æ•°çš„å­˜å‚¨è¿‡ç¨‹ï¼Œè¯¥å­˜å‚¨è¿‡ç¨‹æ ¹æ�®å­¦ç”Ÿçš„å§“å��è¿”å›�该学生的所å±�学院。</p><pre><code class="sql">create or replace procedure p_getSdept(NAME IN varchar2,DEPT OUT varchar2) is temp varchar(20); begin select s.SDEPT into temp from student s where s.SNAME=NAME; DEPT := temp; end p_getSdept;</code></pre><h3>IN OUTå�‚æ•°</h3><p>==示例:使用IN OUTå�‚数交æ�¢ä¸¤ä¸ªå�˜é‡�的值==</p><pre><code class="sql">create or replace procedure p_swap(value1 in out number,value2 in out number) is temp number; begin temp := value1; value1 := value2; value2 := temp; end p_swap;</code></pre><p>执行:</p><pre><code class="sql">declare var_1 varchar2:=1; var_2 varchar2:=2 begin p_swap(var_1,var_2); dbms_output.put_line('var_1='||var_1); dbms_output.put_line('var_2='||var_2); end;</code></pre><h4>默认值问题</h4><p>创建存储过程的å�Œæ—¶å�¯ä»¥ç»™è¾“å…¥å�‚æ•°æ��供默认值。OUTå’ŒIN OUTå�‚æ•°ä¸�具有默认值。</p><p>ç¤ºä¾‹ï¼šæ ¹æ�®ä¼ å…¥SNO查询学生姓å��,默认查询1å�·å­¦ç”Ÿå§“å��</p><pre><code class="sql">create or replace procedure p_getStudent(s_no in varchar2 default '1') is name varchar2(20); begin select SNAME into name from student where SNO = s_no; dbms_output.put_line('name='||name); end p_getStudent;</code></pre><p>执行: <br><img src="/img/remote/1460000044866198" alt="" title=""><br><img src="/img/remote/1460000044866199" alt="" title=""></p><h2>Oracle å�Œä¹‰è¯�</h2><h4>å�Œä¹‰è¯�</h4><p>å�Œä¹‰è¯�(synonym)是表ã€�索引和视图等模å¼�对象的一个别å��。å�Œä¹‰è¯�å�ªæ˜¯æ•°æ�®åº“对象的替代å��,ä¸�视图类似,å�Œä¹‰è¯�å¹¶ä¸�å� 用å®�际存储空间,å�ªåœ¨æ•°æ�®å­—典中ä¿�å­˜å�Œä¹‰è¯�的定义。在使用å�Œä¹‰è¯�时,Oracle简å�•地将它翻译æˆ�对应方案的å��称。</p><p>通过使用å�Œä¹‰è¯�,一方é�¢å�¯ä»¥ç®€åŒ–对象访问,如数æ�®å­—典视图<strong>USER_INDEXES</strong>çš„å�Œä¹‰è¯�为IND,数æ�®å­—典视图USER_SEQUENCESçš„å�Œä¹‰è¯�为SEQï¼›å�¦ä¸€æ–¹é�¢å�¯ä»¥æ��高对象访问的安全性,如å±�蔽对象所有者ã€�对象å��和数æ�®åº“链æ�¥å��。</p><p>在开å�‘æ•°æ�®åº“应用程åº�时,应当尽é‡�é�¿å…�ç›´æ�¥å¼•用表ã€�视图或其他数æ�®åº“对象打的å��称,而改用这些对象的å�Œä¹‰è¯�ã€‚è¿™æ ·å�¯ä»¥é�¿å…�当管ç�†å‘˜å¯¹æ•°æ�®åº“对象å�šå‡ºä¿®æ”¹å’Œå�˜åЍ之å��,必须é‡�新编译应用程åº�。使用å�Œä¹‰è¯�å��,å�³ä½¿å¼•用的对象å�‘生å�˜åŒ–,也å�ªéœ€è¦�在数æ�®åº“中对å�Œä¹‰è¯�进行修改,而ä¸�必对应用程åº�å�šä»»ä½•改动。</p><p>在Oracle中å�¯ä»¥åˆ›å»ºä¸¤ç§�ç±»å�‹çš„å�Œä¹‰è¯�:</p><ul><li><strong>共用å�Œä¹‰è¯�(public synonym):</strong> 共有å�Œä¹‰è¯�是由PUBLIC用户组所拥有,数æ�®åº“中所有的用户都å�¯ä»¥ä½¿ç”¨å…±æœ‰å�Œä¹‰è¯�。</li><li><strong>ç§�有å�Œä¹‰è¯�(private synonym):</strong> ç§�有å�Œä¹‰è¯�是由创建它的用户(或方案)所拥有,也称方案å�Œä¹‰è¯�(schema synonym)。用户å�¯ä»¥æ�§åˆ¶å…¶ä»–用户是å�¦æœ‰æ�ƒä½¿ç”¨å±�äº�自己的方案å�Œä¹‰è¯�。</li></ul><p>在创建å�Œä¹‰è¯�时,它所基äº�的对象å�¯ä»¥<strong>ä¸�存在</strong>,并且创建å�Œä¹‰è¯�的用户也ä¸�需è¦�对基础对象有任何访问æ�ƒé™�。</p><p>语法如下</p><pre><code class="sql">CREATE [OR REPLACE][PUBLIC] SYNONYM synonym_name FOR [schema.]object;</code></pre><p>为模å¼�TEMP中的表sys_user创建一个共有å�Œä¹‰è¯�public_user,尽管该模å¼�å¹¶ä¸�存在。</p><pre><code class="sql">create public synonym public_user for temp.sys_user;</code></pre><p>如æ�œå�Œä¹‰è¯�所对应的基础对象ä¸�存在,则当用户访问时å�Œä¹‰è¯�å°†é‡�新编译,并验è¯�ä¸ºæ— æ•ˆã€‚</p><p><strong>在æ“�作过程中,ä¸�能修改或改å�˜å�Œä¹‰è¯�,而å�ªèƒ½åˆ 除。</strong> åˆ é™¤åˆšåˆšåˆ›å»ºçš„å�Œä¹‰è¯�</p><pre><code class="sql">drop public synonym public_user;</code></pre><p>Oracle在数æ�®å­—典中将ä¿�存创建å�Œä¹‰è¯�的定义。通过数æ�®å­—典视图<strong>USER_SYNONYMS</strong>,å�¯ä»¥æŸ¥è¯¢æœ‰å…³å�Œä¹‰è¯�的信æ�¯ã€‚</p><h2>Oracle åº�列</h2><h4>åº�列</h4><p>åº�列(sequence)是一ç§�æ•°æ�®åº“对象,å�¯ä»¥ä¸ºè¡¨ä¸­çš„行自动生æˆ�åº�列å�·ï¼Œåˆ©ç”¨å®ƒå�¯ç”Ÿæˆ�唯一的整数,产生一组等间隔的数值(类å�‹ä¸ºæ•°å­—Number),主è¦�用äº�生æˆ�唯一ã€�è¿�ç»­çš„åº�å�·ã€‚åº�列是一ç§�共享å¼�的对象,多个用户å�¯ä»¥å…±å�Œä½¿ç”¨åº�列中的åº�å�·ã€‚一般åº�列所生æˆ�的整数通常å�¯ä»¥ç”¨æ�¥å¡«å……æ•°å­—ç±»å�‹çš„ä¸»é”®åˆ—ï¼Œè¿™æ ·å½“å�‘表中æ�’入数æ�®æ—¶ï¼Œä¸»é”®åˆ—就使用了åº�列中的åº�å�·ï¼Œä»�而ä¿�è¯�主键的列值ä¸�会é‡�å¤�。用这ç§�方法å�¯ä»¥æ›¿ä»£åœ¨åº”用程åº�中产生主键值的方法,å�¯ä»¥è�·å¾—æ›´å�¯é� 的主键值。</p><h4>创建åº�列</h4><p>一个åº�列的是由特殊的Oracle程åº�自动生æˆ�çš„ï¼Œå› æ­¤é�¿å…�了在应用层å®�ç�°åº�列而引起的性能瓶颈。åº�列å�·æ˜¯ä¸€ä¸ªOracle整数,最多å�¯ä»¥æœ‰38个数字。创建åº�列时,需è¦�定义的信æ�¯åŒ…括<strong>åº�列å��ã€�上å�‡æˆ–下é™�ã€�åº�列å�·ä¹‹é—´çš„é—´è·�</strong>和其它信æ�¯ã€‚</p><p>语法如下</p><pre><code class="sql">CREATE SEQUENCE sequence_name [START WITH start_num] [INCREMENT BY increment_num] [{MAXVALUE maximum_num | NOMAXVALUE}] [{MINVALUE minimum_num | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE cache_num | NOCACHE}] [{ORDER | NOORDER}];</code></pre><p>其中å�„语法选项å�«ä¹‰å¦‚下:</p><ul><li><strong>sequnce_name:</strong> 指定åº�列å��</li><li><strong>start_num:</strong> 指定åº�列ä»�哪个整数开始,该值默认为1</li><li><strong>increment_num:</strong> 指定该åº�列æ¯�次å¢�åŠ çš„æ•´æ•°å¢�é‡�,值默认为1。increment_numçš„ç»�对值必须å°�äº�maximum_numä¸�minimum_num之差。</li><li><strong>maximum_num:</strong> 指定该åº�列的最大整数。maximum_num必须大äº�或等äº�start_num,而且maximum_num必须大äº�minimum_num。</li><li><strong>NOMAXVALUE:</strong> 指定å�‡åº�åº�列的最大值为1027,é™�åº�åº�列的最大值为-1。NOMAXVALUE为默认值。</li><li><strong>minimum_num:</strong> 指定该åº�列的最å°�整数。minimum_numå¿…é¡»å°�äº�或等äº�start_num,而且minimum_numå¿…é¡»å°�äº�maximum_num。</li><li><strong>NOMINVALUE:</strong> 指定å�‡åº�åº�列的最å°�值为1,é™�åº�åº�列的最å°�值为-1026。NOMINVALUE为默认值。</li><li><strong>CYCLE:</strong> 指定该åº�列å�³ä½¿å·²ç»�达到最大值或最å°�值也继续生æˆ�整数。当å�‡åº�åº�列达到最大值时,下一个生æˆ�的值是最å°�值。当é™�åº�åº�列达到最å°�值时,下一个生æˆ�的值是最大值。</li><li><strong>NOCYCLE:</strong> 指定该åº�列在达到最大值或最å°�值之å��å°±ä¸�能å†�生æˆ�整数了。NOCYCLE是默认值。</li><li><strong>cache_num:</strong> 指定è¦�ä¿�留在内存中整数的个数。默认è¦�缓存的整数ä½�20个。å�¯ä»¥ç¼“存的整数最少为2个;å�¯ä»¥ç¼“存的整数个数最多为:CELL(maximum_num - minimum_num)/ABS(increment_num)。</li><li><strong>NOCACHE:</strong> 指定ä¸�缓存任何整数。这å�¯ä»¥é˜»æ­¢æ•°æ�®åº“为åº�列预分é…�值,ä»�而é�¿å…�åº�列产生ä¸�è¿�续的情况,但这会é™�ä½�性能。åº�列ä¸�è¿�续的情况之所以会å�‘ç”Ÿï¼Œæ˜¯å› ä¸ºåœ¨å…³é—­æ•°æ�®åº“时所缓存的值将全部丢失。如æ�œçœ�ç•¥CACHEå’ŒNOCACHE,则数æ�®åº“默认缓存的整数ä½�20个。</li><li><strong>ORDER:</strong> ç¡®ä¿�按照请求次åº�生æˆ�整数。当使用Real Application Clusters(RAC)时一般使用ORDER选项,Real Application Clusters由数æ�®åº“管ç�†å‘˜å®‰è£…和管ç�†ã€‚Real Application Clusters是共享相å�Œå†…存的多个数æ�®åº“æœ�务器,它们å�¯ä»¥æ��高性能。</li><li><strong>NOORDER:</strong> ä¸�ç¡®ä¿�按照请求次åº�生æˆ�整数。NOORDER为默认值。</li></ul><p>使用默认值创建一个åº�列s_seq1 <br><img src="/img/remote/1460000044866200" alt="" title=""><br>创建åº�列s_seq2,开始值为100,å¢�幅是2,最大值是1000,åº�列中的åº�å�·ä¸�在内存中进行缓冲 <br><img src="/img/remote/1460000044866201" alt="" title=""><br>åº�列的信æ�¯å�¯ä»¥ä»�æ•°æ�®å­—å…¸user_sequences中è�·å¾—,如下: <br><img src="/img/remote/1460000044866202" alt="" title=""><br>使用SELECT语å�¥æŸ¥çœ‹åº�列s_seq2的最å°�值ã€�最大值ã€�å¢�幅等信æ�¯ï¼š <br><img src="/img/remote/1460000044866203" alt="" title=""></p><h4>修改åº�列</h4><p>ALTER SEQUENCE语å�¥å�¯ä»¥ç”¨æ�¥ä¿®æ”¹åº�列。在修改åº�列时,å�¯ä»¥ä¿®æ”¹çš„åº�列内容有如下é™�制:</p><ul><li>ä¸�能修改åº�列的åˆ�值</li><li>åº�列的最å°�值ä¸�能大äº�当å‰�值</li><li>åº�列的最大值ä¸�能å°�äº�当å‰�值</li></ul><p>修改åº�列S_SEQ2的最å°�值ã€�最大值ã€�å¢�幅,并使其中的åº�å�·å�¯å¾ªç�¯ä½¿ç”¨ï¼š <br><img src="/img/remote/1460000044866204" alt="" title=""></p><h4>åˆ é™¤åº�列</h4><p>对äº�ä¸�å†�使用的åº�列,应该å�Šæ—¶åœ°å°†å…¶åˆ 除。DROP SEQUENCEå�¯ä»¥ç”¨æ�¥åˆ 除åº�列。<br>åˆ é™¤åº�列S_SEQ1<br><img src="/img/remote/1460000044866205" alt="" title=""></p><h4>使用åº�列</h4><p>对用户而言,åº�列中的å�¯ç”¨èµ„æº�是其中包å�«çš„åº�å�·ã€‚用户å�¯ä»¥é€šè¿‡SELECT命令è�·å¾—å�¯ç”¨çš„åº�å�·ï¼Œä¹Ÿå�¯ä»¥å°†åº�å�·åº”用äº�DML语å�¥å’Œè¡¨è¾¾å¼�中。如æ�œè¦�使用其他用户的åº�列å�·ï¼Œåˆ™å¿…须具有对该åº�列的SELECTæ�ƒé™�。</p><p><strong>åº�列æ��供了两个伪列,å�³NEXTVALå’ŒCURRVAL,用æ�¥è®¿é—®åº�列中的åº�å�·</strong></p><ul><li><strong>NEXTVAL:</strong> è¿”å›�åº�列生æˆ�的下一个值。</li><li><strong>CURRVAL:</strong> è¿”å›�åº�列的当å‰�值。</li></ul><p>需è¦�注æ„�的是,在第一次引用CURRVAL之å‰�,必须引用过一个åº�列的NEXTVAL,用äº�åˆ�始化åº�列的值,å�¦åˆ™ä¼šå‡ºç�°é”™è¯¯æ��示。</p><p>使用åº�列S_SEQ1为表sys_user表æ�’入一æ�¡æ•°æ�®ï¼Œä»£ç �如下:</p><pre><code class="sql">create table sys_user( userId number primary key, userName varchar2(20) not null, userPWD varchar2(20) not null );</code></pre><p><img src="/img/remote/1460000044866206" alt="" title=""></p><h2>Oracle 触å�‘器</h2><h4>触å�‘器概述</h4><p>触å�‘器是一ç§�在å�‘生数æ�®åº“事件时能够自动è¿�行的PL/SQL代ç �å�—,它ä¸�特定表或视图上的æ“�作相关è�”。触å�‘器是大å�‹å…³ç³»æ•°æ�®åº“系统都æ��供的一项技术。</p><h4>触å�‘器的类å�‹</h4><ul><li><strong>语å�¥çº§è§¦å�‘器</strong> <br>在指定的æ“�作语å�¥æ“�作之间或之å��执行一次,ä¸�管这æ�¡è¯­å�¥å½±å“�了多少行。</li><li><strong>行级触å�‘器(FOR EACH ROW)</strong> <br>触å�‘语å�¥ä½œç”¨çš„æ¯�一æ�¡è®°å½•都被触å�‘。在行级触å�‘器中使用 :oldå’Œ:new 伪记录å�˜é‡�,识别值的状æ€�。</li></ul><h6>语法</h6><pre><code class="sql">create [or replace] trigger 触å�‘器å�� {before | after} {delete | insert | update [列å��]| on 表å�� [for each row [when(æ�¡ä»¶)]] PLSQLå�—</code></pre><p>示例:在emp表创建触å�‘器,æ�’入数æ�®æ—¶æ‰“å�°â€œæˆ�功æ�’入新员工â€�</p><pre><code class="sql">create trigger firsttrigger after insert on emp declare begin dbms_output.put_line('æˆ�功æ�’入新员工'); end; insert into emp(empno, ename, sal, deptno) values(1001, 'Tom', 3000,10);</code></pre><p><img src="/img/remote/1460000044866207" alt="" title=""></p><h6>触å�‘器å�¯ç”¨äº�</h6><ul><li>æ•°æ�®ç¡®è®¤</li><li>å®�æ–½å¤�æ�‚的安全性检查</li><li>å�šå®¡è®¡ï¼Œè·Ÿè¸ªè¡¨ä¸Šæ‰€å�šçš„æ•°æ�®æ“�作等</li><li>æ•°æ�®çš„备份和å�Œæ­¥</li></ul><p>示例:é™�制é��工作时间å�‘æ•°æ�®åº“æ�’入数æ�®</p><pre><code class="sql">create or replace trigger securityEmp before insert on emp declare begin if to_char(sysdate,'day') in ('星期四','星期六','星期天') or to_number(to_char(sysdate, 'hh24')) not between 8 and 18 then raise_application_error(-200001,'ä¸�能在工作时间æ�’入数æ�®'); end if; end;</code></pre><h5>触å�‘语å�¥ä¸�伪记录å�˜é‡�的值</h5><p><img src="/img/remote/1460000044866208" alt="" title=""><br>示例:检查emp表中sal的修改值ä¸�ä½�äº�å�Ÿå€¼</p><pre><code class="sql">create or replace trigger checkSal before update of sal on emp for each row declare begin if :new.sal &lt; :old.sal then raise_application_error(-20002,'æ›´æ–°å��的薪水比更新å‰�å°�'); end if; end; update emp set sal = 100 where empno = 1001;</code></pre><p><img src="/img/remote/1460000044866209" alt="" title=""></p><h5>查询触å�‘器ã€�过程å�Šå‡½æ•°</h5><pre><code class="sql">select * from user_triggers; select * from user_source;</code></pre><h2>Oracle 管ç�†è§¦å�‘器</h2><h4>查看触å�‘器</h4><p>触å�‘器是一ç§�特殊的存储过程,ä»�被创建之日起,触å�‘器就被存储在数æ�®åº“ä¸­ï¼Œç›´åˆ°è¢«åˆ é™¤ã€‚è§¦å�‘器ä¸�一般存储过程或者存储函数的区别在äº�触å�‘器å�¯ä»¥è‡ªåŠ¨æ‰§è¡Œï¼Œè€Œä¸€èˆ¬çš„å­˜å‚¨è¿‡ç¨‹æˆ–è€…å­˜å‚¨å‡½æ•°éœ€è¦�调用æ‰�能执行。</p><p>Oracleæ��供检索ä¸�触å�‘器相关信æ�¯çš„æ•°æ�®å­—典。ä¸�触å�‘器相关的数æ�®å­—典主è¦�åŒ…æ‹¬ä»¥ä¸‹å‡ ç§�:</p><ul><li><strong>USER_TRIGGERS:</strong> 存储当å‰�用户所拥有的触å�‘器。</li><li><strong>DBA_TRIGGERS:</strong> 存储管ç�†å‘˜æ‰€æ‹¥æœ‰çš„触å�‘器。</li><li><strong>ALL_TRIGGERS:</strong> 存储所有的触å�‘器。</li><li><strong>USER_OBJECTS:</strong> 存储当å‰�用户所拥有的对象,包括触å�‘器。</li><li><strong>DBA_OBJECTS:</strong> 存储管ç�†å‘˜æ‰€æ‹¥æœ‰çš„对象,包括触å�‘器。</li><li><strong>ALL_OBJECTS:</strong> 存储数æ�®åº“中所有的对象,包括触å�‘器。</li></ul><p><img src="/img/remote/1460000044866210" alt="" title=""><br><img src="/img/remote/1460000044866211" alt="" title=""></p><p>USER_TRIGGERS表主è¦�列的说æ˜�如下表:<br><img src="/img/remote/1460000044866212" alt="" title=""></p><h4>å�¯ç”¨å’Œç¦�用触å�‘器</h4><p>Oracleæ��供的ALTER TRIGGER语å�¥ç”¨äº�å�¯ç”¨å’Œç¦�用触å�‘器。ç¦�用触å�‘器就将它挂起,它ä»�然存储在数æ�®åº“中,但是ä¸�会被触å�‘,就好åƒ�æ ¹æœ¬æ²¡æœ‰è§¦å�‘å™¨ä¸€æ ·ã€‚ç¦�用触å�‘器常常用在当DBA有大é‡�记录è¦�导入到数æ�®åº“中时,且DBA知é�“这些数æ�®æ—¶å®‰å…¨å’Œå�¯é� 的。但ç¦�用触å�‘器å��å�¯ä»¥èŠ‚çœ�大é‡�的处ç�†æ—¶é—´ã€‚</p><p>ç¦�用和å�¯ç”¨è§¦å�‘器的语法如下:</p><pre><code class="sql">ALTER TRIGGER [schema.] trigger_name DISABLE | ENABLE;</code></pre><h4>修改触å�‘器</h4><p>当创建的触å�‘器需è¦�修改时å�¯ä»¥ä½¿ç”¨<strong>REPLACE</strong>关键字。如æ�œåœ¨SQL Plus中创建触å�‘器时带上了OR REPLACE关键字,å�¯ä»¥å®Œæˆ�过程的修改,也就是覆盖。</p><h4>åˆ é™¤è§¦å�‘器</h4><p>对应ä¸�用的触å�‘器除了设置ç¦�用å±�性外也å�¯ä»¥ç›´æ�¥å°†å…¶åˆ 除。å�¯ä»¥åˆ©ç”¨å¦‚下两ç§�æ–¹å¼�åˆ é™¤è§¦å�‘器:</p><ul><li><p>第一ç§�æ–¹å¼�利用SQL语å�¥åˆ 除触å�‘器。</p><pre><code class="sql">DROP TRIGGER [schema.]trigger_name;</code></pre></li><li>第二ç§�æ–¹å¼�,利用PL/SQL Developerå·¥å…·åˆ é™¤è§¦å�‘器。选中需è¦�åˆ é™¤çš„è§¦å�‘器,å�³å‡»è§¦å�‘器,在弹出的快æ�·è�œå�•中选择DROPå�³å�¯ã€‚</li></ul><h2>Oracle 系统事件触å�‘器ã€�用户事件触å�‘器</h2><h4>系统事件触å�‘器</h4><p>系统事件触å�‘器是指由数æ�®åº“系统事件触å�‘的数æ�®åº“触å�‘器。数æ�®åº“ç³»ç»Ÿäº‹ä»¶é€šå¸¸åŒ…æ‹¬ä»¥ä¸‹å‡ ç§�:</p><ul><li>æ•°æ�®åº“çš„å�¯åŠ¨ï¼ˆSTARTUP)</li><li>æ•°æ�®åº“的关闭(SHUTDOWN)</li><li>æ•°æ�®åº“æœ�务器出错(SERVERERROR)</li></ul><p>创建一个系统事件触å�‘器,数æ�®åº“å�¯åЍå��记录å�¯åŠ¨æ—¶é—´ã€‚åˆ›å»ºç³»ç»Ÿæ—¶é—´è§¦å�‘器测试表:</p><pre><code class="sql">create table DB_Log (op_date timestamp);</code></pre><p>创建系统事件触å�‘器:</p><pre><code class="sql">create or replace trigger tr_db_sstartup after startup on database begin insert into DB_Log values(sysdate); end tr_db_startup;</code></pre><p>在创建系统事件触å�‘器时,对äº�STARTUPå’ŒSERVERERROR事件,å�ªå�¯ä»¥åˆ›å»ºAFTER STARTUP触å�‘器,而对äº�SHUTDOWN事件,å�ªå�¯ä»¥åˆ›å»ºBEFORE SHUTDOWN触å�‘器。</p><p>SERVERERROR事件的触å�‘器能够ä¸�æ•°æ�®åº“相关è�”,也能够ä¸�特定的模å¼�相关è�”。ä¸�特定模å¼�相关è�”时,表示å�ªæœ‰è¯¥æ¨¡å¼�上的æ“�作所导致的错误æ‰�会触å�‘。</p><h4>用户事件触å�‘器</h4><p>用户事件触å�‘器指ä¸�æ•°æ�®åº“定义语å�¥DDL或用户的登录/注销等事件相关的触å�‘器。这些事件包括以下语å�¥ï¼Œå¹¶ä¸”å�¯ä»¥è§„定触å�‘æ—¶é—´BEFORE或AFTER。</p><ul><li>CREATE</li><li>ALTER</li><li>DROP</li><li>ANALYZE</li><li>ASSOCIATE STATISTICS</li><li>DISASSOCIATE STATISTICS</li><li>AUDIT</li><li>NOTAUDIT</li><li>COMMENT</li><li>GRANT</li><li>REVOKE</li><li>RENAME</li><li>TRUNCATE</li></ul><p>LOGOFF事件å�ªå�¯ä»¥æŒ‡å®šè§¦å�‘时间为BEFORE。SUSPENDå’ŒLOGON事件å�ªå�¯ä»¥è§¦å�‘时间为AFTER。</p><p>创建一个用户事件的触å�‘器,用æ�¥è®°å½•用户SCOTTæ‰€åˆ é™¤çš„æ‰€æœ‰å¯¹è±¡ã€‚</p><p>以用户SCOTT身份è¿�æ�¥åˆ°æ•°æ�®åº“,并创建一个用户存储信æ�¯çš„表:</p><pre><code class="sql">CREATE TABLE SCOTT.DROP_OBJ (object_name varchar2(20), object_type varchar2(20), dropped_date date);</code></pre><p>创建BEFORE DROP触å�‘å™¨ï¼Œä»¥ä¾¿åœ¨ç”¨æˆ·åˆ é™¤å¯¹è±¡ä¹‹å‰�记录到日志信æ�¯è¡¨DROPPED_OBJECTS中:</p><pre><code class="sql">CREATE OR REPLACE TRIGGER SCOTT.TR_DROPPED_OBJ BEFORE DROP ON SCOTT.SCHEMA BEGIN INSERT INTO SCOTT.DROP_OBJ VALUES(ora_dict_obj_name,ora_dict_obj_type,SYSDATE); END TR_DROPPED_OBJ;</code></pre><h2>Oracle 替代触å�‘器</h2><h4>INSTEAD OF触å�‘器</h4><p>INSTEAD OF触å�‘器主è¦�用æ�¥å¯¹å�¦ä¸€ä¸ªè¡¨æˆ–视图进行DMLæ“�作。ä¸�DML触å�‘器ä¸�å�Œï¼Œåœ¨å®šä¹‰æ›¿ä»£è§¦å�‘器å��,用户对表的DMLæ“�作将ä¸�å†�被执行,而是执行触å�‘器主体中的æ“�作。使用替代触å�‘器的一个常用情况是对视图的æ“�作,如æ�œä¸€ä¸ªè¯•图由多个基表è¿�æ�¥è€Œæˆ�,则该视图ä¸�å…�许进行INSERTã€�UPDATEå’ŒDELETEè¿™æ ·çš„DMLæ“�作。当在视图上编写替代触å�‘器å��,用户对视图的DMLæ“�作就ä¸�会执行,而是执行触å�‘器中的PL/SQL语å�¥å�—ï¼Œè¿™æ ·å°±å�¯ä»¥é€šè¿‡åœ¨æ›¿ä»£è§¦å�‘器中编写适当的代ç �,完æˆ�对组æˆ�视图的å�„个表进行æ“�作。</p><p>使用触å�‘器对基äº�多个表建立的视图进行更新。创建一个视图,显示学生信æ�¯ï¼Œè¯¾ç¨‹ä¿¡æ�¯å’Œé€‰è¯¾ä¿¡æ�¯</p><pre><code class="sql">create view stu_course_sc as select s.*,c.*,sc.grade from student s,course c,SC sc where s.Sno=sc.Sno and c.Cno=sc.Cno;</code></pre><p><img src="/img/remote/1460000044866213" alt="" title=""><br>编写触å�‘器:</p><pre><code class="sql">create or replace trigger tr_stu_view instead of update on stu_course_sc for each row begin --æ›´æ–°Student表-- update student set SNAME=:new.SNAME where SNO=:NEW.SNO; --æ›´æ–°course表-- update course set CNAME=:new.CNAME where CNO=:old.CNO; --æ›´æ–°sc表-- update sc set GRADE=:new.GRADE where SNO=:new.SNO and CNO=:old.CNO; end;</code></pre><p>测试:<br><img src="/img/remote/1460000044866214" alt="" title=""><br>查看基表: <br><img src="/img/remote/1460000044866215" alt="" title=""><br>需è¦�注æ„�的是,视图的更新æ“�作<strong>也è¦�é�µå¾ªåŸºè¡¨è‡ªèº«çš„约æ�Ÿæœºåˆ¶ã€‚</strong></p><p>å�¦å¤–,在创建替代触å�‘器时,没有BEFOREå’ŒAFTER关键字,INSTEAD OF总是等å�Œäº�使用AFTER关键字的行级触å�‘器,它会为æ¯�个å�—到影å“�的行触å�‘一次,用户ä¸�能修改其中的:NEW值。</p><h2>Oracle DML触å�‘器</h2><h4>语å�¥çº§è§¦å�‘器</h4><p>创建语å�¥çº§è§¦å�‘å™¨ï¼Œå½“æ·»åŠ å­¦ç”Ÿæ—¶å¼¹å‡ºâ€œç”¨æˆ·æ³¨å†Œçª—å�£â€�。</p><pre><code class="sql">create or replace trigger tr_student before insert on student begin dbms_output.put_line('欢è¿�æ–°å�Œå­¦ï¼�'); end;</code></pre><p>执行:<br><img src="/img/remote/1460000044866216" alt="" title=""><br>利用触å�‘器å®�ç�°æ—¥å¿—管ç�†åŠŸèƒ½ã€‚è¯¥è§¦å�‘器用æ�¥å®�ç�°å½“在Studentè¡¨ä¸­åˆ é™¤ä¸€æ�¡æ•°æ�®æ—¶ï¼Œåœ¨stu_logè¡¨ä¸­æ·»åŠ ä¸€æ�¡åŒ…å�«å½“å‰�æ“�作用户(USER)和当å‰�æ“�作日期(SYSDATE)的记录。</p><p>创建日志表:</p><pre><code class="sql">create table stu_log( WHO varchar2(20), WHEN DATE);</code></pre><p>创建触å�‘器:</p><pre><code class="sql">create or replace trigger tr_stu_log after delete on student begin insert into stu_log values(USER,SYSDATE); end;</code></pre><p>测试: </p><p><img src="/img/remote/1460000044866217" alt="" title=""></p><h4>行级触å�‘器</h4><p>如æ�œåœ¨æŸ�个表上创建了一个触å�‘器,在对这个表进行DMLæ“�作时,æ¯�当影å“�一行数æ�®ï¼Œè¯¥è§¦å�‘器都将被激å�‘执行一次,那么这个触å�‘器就是行级触å�‘器。</p><p>在行级触å�‘器中有一个很é‡�è¦�的特点,当创建BEFORE行级触å�‘器时,å�¯ä»¥åœ¨è§¦å�‘器中引用å�—到影å“�的行值,甚至å�¯ä»¥ç”¨åœ¨è§¦å�‘器中设置它们。</p><p>创建一个简å�•的行级触å�‘器,如æ�œå¯¹è¡¨Student进行DELETEæ“�作,æ¯�åˆ é™¤ä¸€æ�¡ç¬¦å�ˆæ�¡ä»¶çš„记录,就显示一次字符串“1行已ç»�è¢«åˆ é™¤â€�。</p><pre><code class="sql">create or replace trigger tr_stu_del after delete on student for each row declare begin dbms_output.put_line('1行已ç»�è¢«åˆ é™¤!'); end;</code></pre><p>测试: <br><img src="/img/remote/1460000044866218" alt="" title=""><br>需è¦�注æ„�的是,在创建行级触å�‘器时,å�¯ä»¥æŒ‡å®šä¸€äº›æ�¡ä»¶ï¼Œè¿™æ ·å�ªæœ‰å½“特定的数æ�®å�—到DMLå½±å“�时,触å�‘器æ‰�被执行。创建触å�‘器时,å�¯ä»¥åœ¨FOR EACH ROWå­�å�¥ä¹‹å��使用WHENå­�å�¥æŒ‡å®šæ�¡ä»¶ã€‚</p><p>é‡�新编写上é�¢ä¾‹å­�的触å�‘器,è¦�求对SNAMEä¸ºâ€œå¼ ä¸‰â€�进行监视,å�ªæœ‰å½“ä»�表Studentä¸­åˆ é™¤SNAMEåˆ—å€¼ä¸ºâ€˜å¼ ä¸‰â€™çš„è¡Œæ—¶ï¼Œæ‰�æ¿€å�‘触å�‘器。</p><pre><code class="sql">create or replace trigger tr_stu_del after delete on student for each row when(old.SNAME='å¼ ä¸‰') declare begin dbms_output.put_line('1行已ç»�è¢«åˆ é™¤!'); end;</code></pre><p>测试: <br><img src="/img/remote/1460000044866219" alt="" title=""><br>在行级触å�‘器中,å�Œæ ·å�¯ä»¥ä½¿ç”¨æ�¡ä»¶è°“è¯�<strong>INSERTã€�UPDATINGå’ŒDELETING</strong>,以判断当å‰�所进行的DMLæ“�作。行级触å�‘器通常用äº�对用户的DMLæ“�作进行å�ˆæ³•性检查,使得用户修改数æ�®çš„æ“�作必须按照一定的规则进行。</p><p>为了能够比较修改å‰�和修改å��的数æ�®ï¼Œåœ¨è§¦å�‘器的å�¯æ‰§è¡Œä»£ç �中,å�¯ä»¥ä½¿ç”¨ä¸¤ä¸ªå…³è�”行——<strong>NEWå’ŒOLD</strong>。它们为别表示触å�‘器被激å�‘时,当å‰�行的å�Ÿæ•°æ�®å’Œæ–°æ•°æ�®ã€‚:NEW和:OLD也称之为系统å�˜é‡�,由 Oracle 系统管ç�†ï¼Œå­˜å‚¨åœ¨å†…存中,ä¸�å…�许用户直æ�¥å¯¹å…¶è¿›è¡Œä¿®æ”¹ã€‚:NEW和:OLDå�˜é‡�的结æ�„总是ä¸�执行DMLæ“�作的表的结æ�„相å�Œã€‚当触å�‘器工作完æˆ�以å��,这两个å�˜é‡�也éš�之消失。这两个å�˜é‡�的值是å�ªè¯»çš„,å�³ç”¨æˆ·ä¸�能å�‘这两个å�˜é‡�写入内容,但å�¯ä»¥å¼•用å�˜é‡�中的数æ�®ã€‚</p><ul><li><strong>:OLD</strong> å�˜é‡�用äº�DELETEå’ŒUPDATEæ“�作所影å“�的行的副本。当执行DELETE或UPDATEæ“�作时,行ä»�触å�‘è¡¨ä¸­è¢«åˆ é™¤ï¼Œå¹¶ä¼ è¾“åˆ°ï¼šOLDå�˜é‡�中。</li><li><strong>:NEW</strong> å�˜é‡�用户存储INSERTå’ŒUPDATEæ“�作所影å“�的行的副本。当执行INSERT或UPDATEæ“�ä½œæ—¶ï¼Œæ–°è¡Œè¢«æ·»åŠ åˆ°ï¼šNEWå�˜é‡�和触å�‘表中,:NEWå�˜é‡�中的行å�³ä¸ºè§¦å�‘表中新行的副本。</li></ul><p>å�¦å¤–,需è¦�注æ„�的是,在触å�‘器的å�¯æ‰§è¡Œä»£ç �中,如æ�œè¦�通过OLDå’ŒNEW引用æŸ�个列的值,è¦�在å‰�é�¢åŠ ä¸Šâ€œï¼šâ€�,在其他地方ä¸�能使用“:â€�。</p><h2>Oracle 事务</h2><h4>事务</h4><p>事务是一系列的数æ�®åº“æ“�作,是数æ�®åº“应用程åº�的基本逻辑å�•元。</p><h4>概述</h4><p>事务在数æ�®åº“中主è¦�用äº�ä¿�è¯�æ•°æ�®çš„一致性,防止出ç�°é”™è¯¯æ•°æ�®ã€‚在事务内部的语å�¥éƒ½ä¼šè¢«çœ‹æˆ�一个å�•元,一旦有一个失败,那么所有的都会失败。在编程过程中也ç»�常用到事务。</p><p>事务是一组数æ�®åº“æ“�作的逻辑工作å�•元,æ¯�个事物都是一个å�Ÿå­�å�•ä½�。在一个事务中å�¯ä»¥åŒ…å�«ä¸€æ�¡æˆ–多æ�¡DML(数æ�®æ“�纵语言)ã€�DDL(数æ�®å®šä¹‰è¯­è¨€ï¼‰å’ŒDCL(数æ�®æ�§åˆ¶è¯­è¨€ï¼‰è¯­å�¥ï¼Œè¿™äº›è¯­å�¥ç»„æˆ�一个逻辑整体。在事务中包å�«çš„æ•°æ�®åº“æ“�作是ä¸�å�¯åˆ†å‰²çš„æ•´ä½“,è¦�么在一起被执行,è¦�么å›�滚到执行事务之å‰�的状æ€�。对事务的æ“�作有两个:æ��交(COMMIT)和å›�滚(ROLLBACK)。æ��交事务时,对数æ�®åº“所å�šçš„修改便永久写入数æ�®åº“。å›�滚事务时,对数æ�®åº“所å�šçš„修改全部撤销,数æ�®åº“æ�¢å¤�到æ“�作å‰�的状æ€�。事务å�¯ç”¨äº�æ“�作数æ�®åº“的任何场å�ˆï¼ŒåŒ…括应用程åº�ã€�存储过程和触å�‘器等。</p><p>在数æ�®åº“的应用中,ç»�常需è¦�使用到事务的概念。例如:银行账户之间的汇款转账æ“�作。该æ“�作在数æ�®åº“中由以下三步完æˆ�:</p><ul><li>æº�账户å‡�少存储金é¢�,例如å‡�å°‘10000。</li><li>ç›®æ ‡è´¦æˆ·å¢�åŠ å­˜å‚¨é‡‘é¢�,å¢�åŠ 10000。</li><li>在事务日志中记录该事务。</li></ul><p>整个交易过程,我们看å�šä¸€ä¸ªäº‹åŠ¡ï¼Œå¦‚æ�œæ“�作失败,那么该事务就会å›�滚,所有该事务中的æ“�ä½œå°†æ’¤é”€ï¼Œç›®æ ‡è´¦æˆ·å’Œæº�账户上的资金都ä¸�会出ç�°å�˜åŒ–:如æ�œæ“�作æˆ�功,那么将对数æ�®åº“永久修改,å�³ä½¿å­£å€™æœ�务器断点,也ä¸�会影å“�该修改结æ�œã€‚</p><h4>事务的特性</h4><p>事务有4个特性,简称ACIDå±�性:</p><ul><li><strong>å�Ÿå­�性(Atomicity):</strong> 事务是一个完整的æ“�作。事务的å�„æ­¥æ“�作是ä¸�å�¯åˆ†çš„(å�Ÿå­�的);è¦�么都执行,è¦�么都ä¸�执行。</li><li><strong>一致性(Consistency):</strong> 事务把数æ�®åº“ä»�一个一致性状æ€�带入å�¦ä¸€ä¸ªä¸€è‡´æ€§çжæ€�。</li><li><strong>隔离性(Isolation):</strong> 对数æ�®è¿›è¡Œä¿®æ”¹çš„æ‰€æœ‰å¹¶å�‘事务是彼此隔离的,这表æ˜�事务必须是独立的,它ä¸�应该以任何方å¼�ä¾�èµ–äº�或影å“�其他事务。</li><li><strong>永久性(Durability):</strong> 事务完æˆ�å��,它对数æ�®åº“的修改永久有效,事务日志能够ä¿�æŒ�事务的永久性。</li></ul><h4>事务的类å�‹</h4><p>一个事务中å�¯ä»¥åŒ…å�«å¤šæ�¡DML语å�¥ï¼Œæˆ–者包å�«ä¸€æ�¡DDL语å�¥ï¼Œæˆ–者包å�«ä¸€æ�¡DCL语å�¥ã€‚事务开始äº�第一æ�¡SQL语å�¥ï¼Œåœ¨ä¸‹åˆ—之一情况结æ�Ÿï¼š</p><ul><li>é�‡åˆ°COMMIT或ROLLBACK命令。</li><li>é�‡åˆ°ä¸€æ�¡DDL或者DCL命令。</li><li>系统å�‘生错误ã€�退出或者崩溃。</li></ul><p>事务是一系列å�¯ä»¥æŠŠç³»ç»Ÿå¸¦å…¥ä¸€ä¸ªæ–°çš„状æ€�çš„æ“�作,如æ�œäº‹åŠ¡è¢«æ��交,则数æ�®åº“进入一个新的状æ€�,å�¦åˆ™æ•°æ�®åº“æ�¢å¤�到事务以å‰�的状æ€�。在数æ�®åº“中使用事务的好处是首先å�¯ä»¥ç¡®ä¿�æ•°æ�®çš„一致性,其次对数æ�®å�šæ°¸ä¹…ä¿®æ”¹ä¹‹å‰�å�¯ä»¥é¢„览以å‰�的数æ�®æ”¹å�˜ï¼Œè¿˜å�¯ä»¥å°†é€»è¾‘上相关的æ“�作进行分组。</p><p>æ�§åˆ¶äº‹åŠ¡çš„æ–¹å¼�有两ç§�:</p><ul><li>éš�å¼�æ�§åˆ¶</li><li>显示æ�§åˆ¶</li></ul><h6>éš�å¼�æ�§åˆ¶</h6><p>该类å�‹çš„事务没有æ˜�确的开始和结æ�Ÿæ ‡å¿—。它由数æ�®åº“自动开å�¯ï¼Œå½“一个程åº�正常结æ�Ÿæˆ–使用DDL语言时会自动æ��交。如æ�œä»�SQL PLUSé��正常退出或å�‘生系统崩溃,那么系统将自动å›�滚事务。如æ�œè®¾ç½®AUTOCOMMIT为打开状æ€�(默认关闭),则æ¯�次执行DMLæ“�作都会自动æ��交。</p><p>è¯­æ³•æ ¼å¼�如下:</p><pre><code class="sql">SET AUTOCOMMIT ON/OFF</code></pre><h6>显示æ�§åˆ¶</h6><p>显示方å¼�就是利用commitå’Œrollback命令â€�显示“地结æ�Ÿäº‹åŠ¡ã€‚</p><p>Oracle中的事务ä¸�需è¦�è®¾ç½®å¼€å§‹æ ‡è¯†ï¼Œé€šå¸¸é�‡åˆ°ç™»å½•æ•°æ�®åº“å��,第一次执行DML语å�¥æ—¶ï¼›æˆ–者是当事务结æ�Ÿå��,第一次执行DML语å�¥æ—¶ï¼Œäº‹åŠ¡å°±å¼€å§‹äº†ã€‚</p><h4>事务的ä¿�存点</h4><p>在事务中å�¯ä»¥æ ¹æ�®ç”¨æˆ·çš„需è¦�设置ä¿�存点。如æ�œè®©äº‹åŠ¡å›�滚到指定ä½�置,需è¦�在事务中预先设置事务ä¿�存点(Save Point)。所谓ä¿�存点,是指在其所在ä½�置之å‰�的事务语å�¥ä¸�能å›�滚的ä½�置,å›�滚事务å��,ä¿�存点之å��的事务语å�¥è¢«å›�滚,但ä¿�存点之å‰�的语å�¥ä¾�然被有效执行,å�³ä¸�能å›�滚。</p><p>使用SAVEPOINT命令å�¯ä»¥è®¾ç½®äº‹åŠ¡ä¿�存点,其基本语法如下:</p><pre><code class="sql">SAVEPOINT &lt;ä¿�存点å��&gt;;</code></pre><p>需è¦�说æ˜�的是,å�¯ä»¥å°†äº‹åŠ¡çš„è¯­å�¥åˆ†ä¸ºå‡ 个部分,设置多个ä¿�å­˜ç‚¹ï¼Œè¿™æ ·åœ¨å®�施事务å›�滚时,å�¯ä»¥æ ¹æ�®éœ€è¦�å›�滚事务到ä¸�å�Œçš„ä¿�存点ä½�置。</p><h2>Oracle é”�</h2><h4>é”�概述</h4><p>åŠ é”�是å®�ç�°æ•°æ�®åº“å¹¶å�‘æ�§åˆ¶çš„一个é��常é‡�è¦�的技术。当事务在对æŸ�个数æ�®å¯¹è±¡è¿›è¡Œæ“�作å‰�,先å�‘系统å�‘å‡ºè¯·æ±‚ï¼Œå¯¹å…¶åŠ é”�ã€‚åŠ é”�å��事务就对该数æ�®å¯¹è±¡æœ‰äº†ä¸€å®šçš„æ�§åˆ¶ï¼Œåœ¨è¯¥äº‹åŠ¡é‡Šæ”¾é”�之å‰�,其他的事务ä¸�能对此数æ�®å¯¹è±¡è¿›è¡Œæ›´æ–°æ“�作。</p><p>Oracle通过使用é”�(Lock)机制维护数æ�®çš„完整性ã€�å¹¶å�‘性和一致性。</p><p>Oracle在两个ä¸�å�Œçº§åˆ«ä¸Šæ��供读å�–一致性:语å�¥çº§è¯»å�–一致性和事务级读å�–一致性。</p><ul><li><strong>语å�¥çº§è¯»å�–一致性:</strong> Oracle总是å®�施语å�¥çº§è¯»å�–一致性,ä¿�è¯�å�•个查询所返å›�的数æ�®ä¸�该查询开始时ä¿�æŒ�一致。</li><li><strong>事务级读å�–一致性:</strong> 事务级读å�–一致性是指在å�Œä¸€ä¸ªäº‹ç‰©ä¸­çš„æ‰€æœ‰æ•°æ�®å¯¹æ—¶é—´ç‚¹æ˜¯ä¸€è‡´çš„。</li></ul><h4>é”�的分类</h4><p>在数æ�®åº“中有两ç§�基本的é”�ç±»å�‹ï¼š<strong>æ�’ä»–é”�(Exclusive Locks,å�³Xé”�)和共享é”�(Share Locks,å�³Sé”�)。</strong></p><p><strong>æ�’ä»–é”�,</strong> 也称之为写é”�。这ç§�模å¼�çš„é”�防止资æº�的共享,用å�šæ•°æ�®çš„修改。å�‡å¦‚有事务T给数æ�®AåŠ ä¸Šè¯¥é”�,那么其他的事务将ä¸�能对AåŠ ä»»ä½•é”�,所以此时å�ªå…�许T对该数æ�®è¿›è¡Œè¯»å�–和修改,直到事务完æˆ�将该类å�‹çš„é”�释放为止。</p><p><strong>共享é”�,</strong> 也称之为读é”�。该模å¼�é”�下的数æ�®å�ªèƒ½è¢«è¯»å�–,ä¸�能被修改。如æ�œæœ‰äº‹åŠ¡T给数æ�®AåŠ ä¸Šå…±äº«é”�å��,那么其他事务ä¸�èƒ½å¯¹å…¶åŠ æ�’ä»–é”�,å�ªèƒ½åŠ å…±äº«é”�ã€‚åŠ äº†è¯¥é”�的数æ�®å�¯ä»¥è¢«å¹¶å�‘地读å�–。</p><h4>é”�的类å�‹</h4><ul><li><strong>DMLé”�(Data Locks,数æ�®é”�):</strong> 用户ä¿�护数æ�®çš„完整性。</li><li><strong>DDLé”�(Dictionary Locks,字典é”�):</strong> 用äº�ä¿�护数æ�®åº“对象的结æ�„,如表ã€�索引等的结æ�„定义。</li><li><strong>内部所和闩(Internal Locks and Latches):</strong> ä¿�护数æ�®åº“的内部结æ�„。</li></ul><p>DMlé”�的目的在äº�ä¿�è¯�å¹¶å�‘情况下的数æ�®å®Œæ•´æ€§ï¼Œåœ¨Oracleæ•°æ�®åº“中,DMLé”�主è¦�包括<strong>TMé”�å’ŒTXé”�,</strong> 其中TMé”�称为表级é”�,TXé”�称为事物é”�或行级é”�。</p><p>当Oracle执行DML语å�¥æ—¶ï¼Œç³»ç»Ÿè‡ªåŠ¨åœ¨æ‰€è¦�æ“�作的表上申请TMç±»å�‹çš„é”�。当TMé”�è�·å¾—å��,系统å†�自动申请TXç±»å�‹çš„é”�,并将å®�é™…é”�定的数æ�®è¡Œçš„é”�æ ‡å¿—ä½�进行置ä½�ã€‚è¿™æ ·åœ¨äº‹åŠ¡åŠ é”�å‰�检查TXé”�相容性时就ä¸�用å†�é€�行检查é”�æ ‡å¿—äº†ï¼Œå�ªéœ€è¦�检查TMé”�模å¼�的相容性å�³å�¯ï¼Œå¤§å¤§æ��高了系统的效ç�‡ã€‚TMé”�包括了<strong>SSã€�SXã€�Sã€�X等多ç§�模å¼�,</strong> 在数æ�®åº“中用0~6æ�¥è¡¨ç¤ºã€‚</p><p>ä¸�å�Œçš„SQLæ“�作产生ä¸�å�Œç±»å�‹çš„TMé”�,如下表<br><img src="/img/remote/1460000044866220" alt="" title=""><br>在数æ�®è¡Œä¸Šå�ªæœ‰Xé”�(æ�’ä»–é”�)。在Oracleæ•°æ�®åº“中,当一个事务首次å�‘起一个DML语å�¥æ—¶å°±è�·å¾—一个TXé”�,该é”�ä¿�æŒ�到事务被æ��交或å›�滚。当两个或多个会è¯�在表的å�Œä¸€æ�¡è®°å½•上执行DML语å�¥æ—¶ï¼Œç¬¬ä¸€ä¸ªä¼šè¯�在该æ�¡è®°å½•ä¸ŠåŠ é”�,其他的会è¯�处äº�等待状æ€�。当第一个会è¯�æ��交å��,TXé”�被释放,其他会è¯�æ‰�å�¯ä»¥åŠ é”�。</p><p>当Oracleæ•°æ�®åº“å�‘生TXé”�等待时,如æ�œä¸�å�Šæ—¶å¤„ç�†å¸¸å¸¸ä¼šå¼•èµ·Oracleæ•°æ�®åº“挂起,或导致死é”�çš„å�‘生。这些ç�°è±¡éƒ½ä¼šå¯¹å®�际应用产生æ��大的å�±å®³ï¼Œå¦‚长时间未å“�应ã€�大é‡�事务失败等。</p><p>在日常工作中,如æ�œå�‘ç�°æ‰§è¡ŒSQL语å�¥æ—¶ï¼Œæ•°æ�®åº“长时间没有å“�应,很å�¯èƒ½æ˜¯äº§ç”Ÿäº†TXé”�等待的ç�°è±¡ã€‚为了解决这个问题,首先应该找出æŒ�é”�的事务,然å��å†�进行相关的处ç�†ï¼Œå¦‚æ��交事务或强行中断事务。</p><p>Oracle在动æ€�状æ€�表**V$LOCK** 中存储ä¸�æ•°æ�®åº“中的é”�有关的所有信æ�¯ã€‚查看V$LOCK表的结æ�„如下图:<br><img src="/img/remote/1460000044866221" alt="" title=""></p><h2>Oracle åŠ é”�的方法</h2><h4>行共享é”�(Row Share ,RS)</h4><p>对数æ�®è¡¨å®šä¹‰äº†è¡Œå…±äº«é”�å��,如æ�œè¢«äº‹åŠ¡Aè�·å¾—,那么其他事务å�¯ä»¥è¿›è¡Œå¹¶å�‘查询ã€�æ�’å…¥ã€�åˆ é™¤å�ŠåŠ é”�,但ä¸�能以æ�’ä»–æ–¹å¼�å­˜å�–该数æ�®è¡¨ã€‚</p><p>为Studentè¡¨æ·»åŠ è¡Œå…±äº«é”� <br><img src="/img/remote/1460000044866222" alt="" title=""></p><h4>行æ�’ä»–é”�(Row Exclusive,RX)</h4><p>当事务Aè�·å¾—行æ�’ä»–é”�å��,其他事务å�¯ä»¥å¯¹å�Œä¸€æ•°æ�®è¡¨ä¸­çš„å…¶ä»–æ•°æ�®è¡Œè¿›è¡Œå¹¶å�‘查询ã€�æ�’å…¥ã€�修改ã€�åˆ é™¤å�ŠåŠ é”�,但ä¸�能使用行共享é”�ã€�行共享æ�’ä»–é”�和行æ�’ä»–é”�3ç§�æ–¹å¼�åŠ é”�。</p><p>为Studentè¡¨æ·»åŠ è¡Œæ�’ä»–é”� <br><img src="/img/remote/1460000044866223" alt="" title=""></p><h4>共享é”�(Share,S)</h4><p>当事务Aè�·å¾—共享é”�å��,其他事务å�¯ä»¥å¯¹å�Œä¸€æ•°æ�®è¡¨ä¸­çš„å…¶ä»–æ•°æ�®è¡Œè¿›è¡Œå¹¶å�‘查询ã€�åŠ å…±äº«é”�但ä¸�能修改表,ä¸�能使用æ�’ä»–é”�ã€�行共享æ�’ä»–é”�和行æ�’ä»–é”�3ç§�æ–¹å¼�åŠ é”�。</p><p>为Studentè¡¨æ·»åŠ å…±äº«é”�</p><p>第一步:为表Studentæ·»åŠ æ�’ä»–é”� <br><img src="/img/remote/1460000044866224" alt="" title=""><br>第二步:打开一个新的SQL Plus会è¯�,分别执行查询和更新æ“�作 <br><img src="/img/remote/1460000044866225" alt="" title=""><br>此时,新打开的会è¯�å�¯ä»¥æŸ¥è¯¢ï¼Œä½†æ˜¯æ›´æ–°è¯­å�¥ä¸€ç›´å¤„äº�é”�等待的状æ€�。å›�到第一个会è¯�,当解除é”�,例如输入rollbackå›�滚æ“�作å��,新会è¯�会立刻执行完æˆ�。 <br><img src="/img/remote/1460000044866226" alt="" title=""></p><h4>共享行æ�’ä»–é”�(Share Row Exclusive,SRX)</h4><p>当事务Aè�·å¾—共享æ�’ä»–é”�å��,其他事务å�¯ä»¥æ‰§è¡ŒæŸ¥è¯¢å’Œå¯¹å…¶ä»–æ•°æ�®è¡ŒåŠ é”�,但ä¸�能修改表,也ä¸�能å†�æ·»åŠ å…±äº«é”�ã€�共享行æ�’ä»–é”�ã€�行æ�’ä»–é”�å’Œæ�’ä»–é”�。</p><p>为Studentæ·»åŠ å…±äº«è¡Œæ�’ä»–é”�</p><p>第一步:为Studentæ·»åŠ å…±äº«è¡Œæ�’ä»–é”� <br><img src="/img/remote/1460000044866227" alt="" title=""><br>第二步:新会è¯�中为studentæ·»åŠ å…±äº«é”� <br><img src="/img/remote/1460000044866228" alt="" title=""><br>å�‘ç�°ï¼Œæ–°æ‰“开的会è¯�窗å�£ï¼Œä¸ºå·²ç»�æ·»åŠ å…±äº«æ�’ä»–é”�的事务å†�æ¬¡æ·»åŠ å…±äº«é”�时,一直处äº�等待状æ€�,当第一个会è¯�释放资æº�时,第二个会è¯�æ–¹å�¯æ‰§è¡Œã€‚ <br><img src="/img/remote/1460000044866229" alt="" title=""></p><h4>æ�’ä»–é”�(Exclusive,X)</h4><p>æ�’ä»–é”�æ˜¯æœ€ä¸¥æ ¼çš„é”�,当事务Aè�·å¾—æ�’ä»–é”�å��,事务Aå�¯ä»¥æ‰§è¡Œå¯¹æ•°æ�®è¡¨çš„读写æ“�作,其他事务å�¯ä»¥æ‰§è¡ŒæŸ¥è¯¢ä½†ä¸�能执行æ�’å…¥ã€�ä¿®æ”¹å’Œåˆ é™¤æ“�作。</p><p>其他事务å�¯ä»¥æ‰§è¡ŒæŸ¥è¯¢å’Œå¯¹å…¶ä»–æ•°æ�®è¡ŒåŠ é”�,但ä¸�能修改表,也ä¸�能å†�æ·»åŠ å…±äº«é”�ã€�共享行æ�’ä»–é”�,行æ�’ä»–é”�å’Œæ�’ä»–é”�。</p><p>为Studentè¡¨æ·»åŠ æ�’ä»–é”�</p><p>第一步:为表Studentæ·»åŠ æ�’ä»–é”� <br><img src="/img/remote/1460000044866230" alt="" title=""><br>第二步:打开一个新的SQL Plus会è¯�,分别执行查询和更新æ“�作 <br><img src="/img/remote/1460000044866231" alt="" title=""><br>此时,新打开的会è¯�å�¯ä»¥æŸ¥è¯¢ï¼Œä½†æ˜¯æ›´æ–°è¯­å�¥ä¸€ç›´å¤„äº�é”�等待状æ€�。å›�到第一个会è¯�,解除é”�,新会è¯�立刻执行完æˆ�。 <br><img src="/img/remote/1460000044866232" alt="" title=""></p><h2>Oracle 使用DML语å�¥å¤„ç�†æ•°æ�®å�Šæ�§åˆ¶äº‹åŠ¡</h2><h4>æ•°æ�®æ“�作语言</h4><p>DML(Data Manipulation Language - æ•°æ�®æ“�作语言)å�¯ä»¥åœ¨ä¸‹åˆ—æ�¡ä»¶æ‰§è¡Œï¼š</p><ul><li>å�‘表中æ�’入数æ�®</li><li>修改ç�°å­˜æ•°æ�®</li><li>åˆ é™¤ç�°å­˜æ•°æ�®</li></ul><p>事务是由完æˆ�若干项工作的DML语å�¥ç»„æˆ�的。</p><h6>æ�’入数æ�®</h6><p>insert语å�¥è¯­æ³•:</p><pre><code class="sql">insert into table [(column [, column...]}] values (value [, value...]);</code></pre><p>使用这ç§�语法一次å�ªèƒ½å�‘表中æ�’入一æ�¡æ•°æ�®ã€‚</p><ul><li>为æ¯�ä¸€åˆ—æ·»åŠ ä¸€ä¸ªæ–°å€¼ã€‚</li><li>按列的默认顺åº�列出å�„个列的值。</li><li>在insertå­�å�¥ä¸­éš�æ„�列出列å��和它们的值。</li><li>字符和日期å�‹æ•°æ�®åº”包å�«åœ¨å�•引å�·ä¸­ã€‚</li></ul><pre><code class="sql">insert into departments(department_id, department_name, manager_id, location_id) values(17, 'Public Relations', 100, 1700); 1 row created.</code></pre><h6>å�‘表中æ�’入空值</h6><ul><li><p>éš�å¼�æ–¹å¼�:在列å��表中çœ�略该列的值。</p><pre><code class="sql">insert into department (department_id, department_name) values (30, 'Purchasing');</code></pre></li><li><p>row created.</p></li><li><p>显示方å¼�:在VALUESå­�å�¥ä¸­æŒ‡å®šç©ºå€¼ã€‚</p><pre><code class="sql">insert into departments values (100, 'Finance', NULL, NULL);</code></pre></li><li><p>row created.</p></li></ul><h6>æ�’入指定的值</h6><p>SYSDATE记录当å‰�系统的日期和时间</p><pre><code class="sql">insert into employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id) values (113, 'Louis', 'Popp', 'LPOPP', '515.124.4567', SYSDATE, 'AC_ACCOUNT', 6900, NULL, 205,100);</code></pre><p>åŠ å…¥æ–°æˆ�员</p><pre><code class="sql">insert into employees values (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561', TO_DATE('FEB 3,1999', 'MON DD, YYYY'), 'AC_ACCOUNT', 11000, NULL, 100, 30); 1 row created.</code></pre><h6>创建脚本</h6><ul><li>在SQL语å�¥ä¸­ä½¿ç”¨ & å�˜é‡�指定列值。</li><li>& å�˜é‡�放在VALUESå­�å�¥ä¸­ã€‚</li></ul><pre><code class="sql">insert into departments (department_id, department_name, location_id) values(&amp;department_id, '&amp;department_name', &amp;location);</code></pre><h6>ä»�其它表中拷è´�æ•°æ�®</h6><ul><li><p>在INSERT语å�¥ä¸­åŠ å…¥å­�查询。</p><pre><code class="sql">insert into sales_reps(id, name, salary, commission_pct) select employee_id, last_name, salary, commission_pct from employees where job_id like '%REP%';</code></pre></li><li><p>rows created.</p></li><li>ä¸�必书写VALUESå­�å�¥</li><li>å­�查询中的值列表应ä¸�INSERTå­�å�¥ä¸­çš„列å��对应</li></ul><h6>æ›´æ–°æ•°æ�®</h6><ul><li><p>使用UPDATE语å�¥æ›´æ–°æ•°æ�®</p><pre><code class="sql">update table set column = value[, column = value, ...] [where condition];</code></pre></li><li>å�¯ä»¥ä¸€æ¬¡æ›´æ–°å¤šæ�¡æ•°æ�®</li><li><p>使用whereå­�å�¥æŒ‡å®šéœ€è¦�更新的数æ�®</p><pre><code class="sql">update employees set department id = 70 where employee_id = 113;</code></pre></li><li><p>row updated.</p></li><li><p>如æ�œçœ�ç•¥whereå­�å�¥ï¼Œåˆ™è¡¨ä¸­çš„æ‰€æœ‰æ•°æ�®éƒ½å°†è¢«æ›´æ–°</p><pre><code class="sql">update copy_emp set department_id = 110;</code></pre></li><li><p>rows updated.</p></li></ul><h6>在update语å�¥ä½¿ç”¨å­�查询</h6><p>示例:更新114å�·å‘˜å·¥çš„工作和工资使其ä¸�205å�·å‘˜å·¥ç›¸å�Œ</p><pre><code class="sql">update employees set job_id = (select job_id from employees where employee_id = 205), salary = (select salary from employees where employee id = 205) where employee_id = 114; 1 row updated.</code></pre><h6>在update语å�¥ä¸­ä½¿ç”¨å­�查询</h6><ul><li><p>在update中使用å­�查询,使更新基äº�å�¦ä¸€ä¸ªè¡¨ä¸­çš„æ•°æ�®</p><pre><code class="sql">update copy_emp set department_id = (select department_id from employees where employee_id = 100) where job_id = (select job_id from employees where employee_id = 200);</code></pre></li><li><p>row updated.</p></li></ul><h6>更新中的数æ�®å®Œæ•´æ€§é”™è¯¯</h6><pre><code class="sql">update employees set department_id = 55 where department_id = 110;</code></pre><p><img src="/img/remote/1460000044866233" alt="" title=""> <br>ä¸�存在55å�·éƒ¨é—¨</p><h6>使用DELETE语å�¥ä»�è¡¨ä¸­åˆ é™¤æ•°æ�®</h6><pre><code class="sql">delete [from] table [where condition];</code></pre><ul><li><p>使用whereå­�å�¥æŒ‡å®šåˆ 除的记录</p><pre><code class="sql">delete from departments where department_name = 'Finace';</code></pre></li><li><p>row deleted.</p></li><li><p>如æ�œçœ�ç•¥whereå­�å�¥ï¼Œåˆ™è¡¨ä¸­çš„全部数æ�®å°†è¢«åˆ 除</p><pre><code class="sql">delete from copy_emp;</code></pre></li><li><p>rows deleted.</p></li></ul><h6>在DELETE中使用å­�查询</h6><ul><li><p>在delete中使用å­�æŸ¥è¯¢ï¼Œä½¿åˆ é™¤åŸºäº�å�¦ä¸€ä¸ªè¡¨ä¸­çš„æ•°æ�®</p><pre><code class="sql">delete from employees where department_id = (select department_id from departments where department_name like '%Public%');</code></pre></li><li><p>row deleted.</p></li></ul><h6>åˆ é™¤ä¸­çš„æ•°æ�®å®Œæ•´æ€§é”™è¯¯</h6><pre><code class="sql">delete from departments where department_id = 60;</code></pre><p><img src="/img/remote/1460000044866234" alt="" title=""></p><h5>Delete å’Œ Truncate</h5><ul><li>éƒ½æ˜¯åˆ é™¤è¡¨ä¸­çš„æ•°æ�®</li><li>Deleteæ“�作å�¯ä»¥rollback,å�¯ä»¥é—ªå›�</li><li>Deleteæ“�作å�¯èƒ½äº§ç”Ÿç¢�片,并且ä¸�释放空间</li><li>Truncate:清空表</li></ul><h5>æ�§åˆ¶äº‹åŠ¡</h5><p><img src="/img/remote/1460000044866235" alt="" title=""></p><h6>å›�滚到ä¿�留点</h6><ul><li>使用SAVEPOINT 语å�¥åœ¨å½“å‰�事务中创建ä¿�存点</li><li>使用 ROLLBACK TO SAVEPOINT语å�¥å›�滚到创建的ä¿�存点</li></ul><pre><code class="sql">update... savepoint update done; Savepoint created. insert... rollback to update_done; Rollback complete.</code></pre><h6>æ•°æ�®åº“的隔离级别</h6><p>对äº�å�Œæ—¶è¿�行的多个事务,当这些事务访问数æ�®åº“中相å�Œçš„æ•°æ�®æ—¶ï¼Œå¦‚æ�œæ²¡æœ‰é‡‡å�–å¿…è¦�的隔离机制,就会导致å�„ç§�å¹¶å�‘问题:</p><p>è„�读: 对äº�两个事务T1,T2, T1读å�–了已ç»�被T2更新但还没有æ��交的字段。之å��,若T2å›�滚,T1读å�–çš„å†…å®¹å°±æ˜¯ä¸´æ—¶ä¸”æ— æ•ˆçš„ã€‚</p><p>ä¸�å�¯é‡�å¤�读:对äº�两个事务T1, T2, T1读å�–了一个字段,然å��T2更新了该字段。之å��,T1å†�次读å�–å�Œä¸€ä¸ªå­—段,值就ä¸�å�Œäº†ã€‚</p><p>幻读:对äº�两个事务T1,T2,T1ä»�一个表中读å�–了一个字段,然å��T2在该表中æ�’入了一些新的行。之å��,如æ�œT1å†�次读å�–å�Œä¸€ä¸ªè¡¨ï¼Œå°±ä¼šå¤šå‡ºå‡ 行。</p><p>æ•°æ�®åº“事务的隔离性:数æ�®åº“系统必须具有隔离并å�‘è¿�行å�„个事务的能力,是他们ä¸�会相互影å“�,é�¿å…�å�„ç§�å¹¶å�‘问题。</p><p>一个事务ä¸�其它事务隔离的程度称为隔离级别。数æ�®åº“规定了多ç§�事务隔离级别,ä¸�å�Œéš”离级别对应ä¸�å�Œçš„干扰程度,隔离级别越高,数æ�®ä¸€è‡´æ€§è¶Šå¥½ï¼Œä½†å¹¶å�‘性越弱。</p><h6>æ•°æ�®åº“æ��供的4ç§�事务隔离级别</h6><p><img src="/img/remote/1460000044866236" alt="" title=""></p><p>Oracle支æŒ�çš„2ç§�事务隔离级别:</p><ul><li>READ COMMITED</li><li>SERIALIZABLE</li><li>Oracle默认的事务隔离级别为:READ COMMITED</li><li>MySQL默认的事务隔离级别为:REPEATABLE READ</li></ul><h5>总结</h5><p><img src="/img/remote/1460000044866237" alt="" title=""></p><h2>Oracle PL/SQL存储过程ã€�存储函数</h2><h4>存储过程</h4><p>存储过程(Stored Procedure)是在大å�‹æ•°æ�®åº“系统中,一组为了完æˆ�特定功能的SQL语å�¥é›†ï¼Œç»�编译å��存储在数æ�®åº“中,用户通过指定存储过程的å��字并给出å�‚数(如æ�œè¯¥å­˜å‚¨è¿‡ç¨‹å¸¦æœ‰å�‚数)æ�¥æ‰§è¡Œå®ƒã€‚存储过程是数æ�®åº“中的一个é‡�è¦�对象,任何一个设计良好的数æ�®åº“应用程åº�都应该用到存储过程。</p><p>存储过程语法:</p><pre><code class="sql">create [or replace] PROCEDURE 过程å�� [(å�‚æ•°å�� in/out æ•°æ�®ç±»å�‹)] AS begin PLSQLå­�程åº�体; end;</code></pre><p>或者</p><pre><code class="sql">create [or replace] PROCEDURE 过程å�� [(in/out æ•°æ�®ç±»å�‹)] is begin PLSQLå­�程åº�体: end 过程å��;</code></pre><p>示例:打å�°hello world</p><pre><code class="sql">create or replace procedure sayhelloworld as begin dbms_output.put_line('hello world'); end;</code></pre><p>调用:</p><pre><code class="sql">æ–¹å¼�一:直æ�¥è°ƒç”¨ SQL&gt; exec sayhelloworld;</code></pre><p><img src="/img/remote/1460000044866238" alt="" title=""></p><pre><code class="sql">æ–¹å¼�二:在å�¦ä¸€ä¸ªPL/SQL中调用 begin syahelloworld(); end;</code></pre><p><img src="/img/remote/1460000044866239" alt="" title=""></p><h6>带å�‚数的存储过程</h6><p>示例:给指定的员工涨100工资,并打å�°å‡ºæ¶¨å‰�和涨å��的工资</p><pre><code class="sql">create or replace procedure raiseSalary(eno in number) is --定义å�˜é‡�ä¿�存涨å‰�的薪水 psal emp.sal%type; begin --得到涨å‰�的薪水 select sal into psal from emp where empno=eno; --涨100 update emp set sal=sal+100 where empno=eno; --è¦�ä¸�è¦�commit? dbms_output.put_line('涨å‰�:'||psal||' 涨å��:'||(psal+100)); end raiseSalary;</code></pre><p>调用:</p><pre><code class="sql">begin raiseSalary(eno =&gt; 7902); commit; end;</code></pre><p><img src="/img/remote/1460000044866240" alt="" title=""></p><h5>存储函数</h5><p>函数(Function)为一命å��的存储程åº�,å�¯ä»¥å¸¦å�‚数,并返å›�一个计算值。函数和过程的结æ�„类似,但必须有一个RETURNå­�å�¥ï¼Œç”¨äº�è¿”å›�函数值。函数说æ˜�è¦�指定函数å��ã€�结æ�œå€¼çš„ç±»å�‹ï¼Œä»¥å�Šå�‚æ•°ç±»å�‹ç­‰ã€‚</p><p>建立存储函数的语法:</p><pre><code class="sql">CREATE [OR REPLACE] FUNCTION 函数å��(å�‚数列表) RETURN 函数值的类å�‹ AS PLSQLå­�程åº�体; END[函数å��];</code></pre><p>存储过程和存储函数的区别:</p><ul><li>一般æ�¥è®²ï¼Œè¿‡ç¨‹å’Œå‡½æ•°çš„区别在äº�函数å�¯ä»¥æœ‰ä¸€ä¸ªè¿”å›�值;而过程没有返å›�值。</li><li>但过程和函数都å�¯ä»¥é€šè¿‡out指定一个或多个输出å�‚数。我们å�¯ä»¥ç�†ç”¨outå�‚数,在过程和函数中å®�ç�°è¿”å›�多个值。</li></ul><p>示例:查询æŸ�个员工的年薪</p><pre><code class="sql">create or replace function queryEmpIncome(eno in number) return number is --定义å�˜é‡�ä¿�存月薪和奖金 psal emp.sal%type; pcomm emp.comm%type; begin --得到月薪和奖金 select sal,comm into psal,pcomm from emp where empno=eno; --è¿”å›�å¹´æ”¶å…¥ return psal*12+nvl(pcomm,0); end queryEmpIncome;</code></pre><p>调用:</p><pre><code class="sql">begin :result := queryempincome(7839); end;</code></pre><p><img src="/img/remote/1460000044866241" alt="" title=""><br>使用存储过程替æ�¢ä¸Šé�¢çš„示例:</p><pre><code class="sql">create or replace procedure empincomep(eno in emp.empno%type, income out number) is psal emp.sal%type; pcomm emp.comm%type; begin select t.sal, t.comm into psal, pcomm from emp t where t.empno = eno; income := psal*12+nvl(pcomm,0); end empincomep;</code></pre><p>调用:</p><pre><code class="sql">declare income number; begin empincomep(7369, income); dbms_output.put_line(income); end;</code></pre><p><img src="/img/remote/1460000044866242" alt="" title=""></p><h2>Oracle PL/SQL例外</h2><h4>例外</h4><p>例外是程åº�设计语言æ��供的一ç§�功能,用æ�¥å¢�强程åº�çš„å�¥å£®æ€§å’Œå®¹é”™æ€§ã€‚</p><h5>系统定义例外</h5><ul><li>No_data_found:没有找到数æ�®</li><li>Too_many_rows:select …into语å�¥åŒ¹é…�多个行</li><li>Zero_Divide:被零除</li><li>Value_error:算数或转æ�¢é”™è¯¯</li><li>Timeout_on_resource:在等待资æº�æ—¶å�‘生超时</li></ul><p>示例:被0除</p><pre><code class="sql">declare pnum number; begin pnum := 1/0; exception when zero_divide then dbms_output.put_line('1: 0ä¸�能å�šåˆ†æ¯�'); dbms_output.put_line('2: 0ä¸�能å�šåˆ†æ¯�'); when others then dbms_output.put_line('其他例外'); end;</code></pre><p><img src="/img/remote/1460000044866243" alt="" title=""></p><h5>自定义例外</h5><p>用户å�¯ä»¥è‡ªå®šä¹‰å¼‚常,在声æ˜�中æ�¥å®šä¹‰å¼‚常</p><pre><code class="sql">DECLARE 自定义异常å�� exception;</code></pre><pre><code class="sql">DECLARE My_job char(10); v_sal emp.sal%type; No_data exception; cursor c1 is select distinct job from emp order by job;</code></pre><p>示例:查询部门å�·æ˜¯50的员工</p><pre><code class="sql">declare no_emp_found exception; cursor pemp is select t.ename from emp t where t.deptno = 50; pename emp.ename%type; begin open pemp; fetch pemp into pename; if pemp%notfound then raise no_emp_found; end if; close pemp; exception when no_emp_found then dbms_output.put_line('没有找到员工'); when others then dbms_output.put_line('其他错误'); end;</code></pre><p><img src="/img/remote/1460000044866244" alt="" title=""></p><h2>Oracle 使用Java程åº�调用存储过程</h2><h4>创建工程并导入Oracle的驱动jar包</h4><h6>创建一个JDBCUtils工具类</h6><pre><code class="java">package pers.zhang.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static String driver = &quot;oracle.jdbc.OracleDriver&quot;; private static String url = &quot;jdbc:oracle:thin:localhost/orcl&quot;; private static String user = &quot;scott&quot;; private static String password = &quot;123456&quot;; static{ //注册驱动 //DriverManager.registerDriver(driver) try { Class.forName(driver); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection(){ try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } return null; } /* * è¿�行Java: * java -Xms100M -Xmx200M HelloWorld * * 技术方å�‘: * 1ã€�性能优化 * 2ã€�故障诊断:死é”�(JDK: ThreadDump) * Oracle: 自动处ç�† */ public static void release(Connection conn,Statement st,ResultSet rs){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ rs = null; ///-----&gt; å�Ÿå› :Java GC: Javaçš„GCä¸�å�—代ç �çš„æ�§åˆ¶ } } if(st != null){ try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ st = null; } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn = null; } } } }</code></pre><h4>å®�ç�°è¿‡ç¨‹çš„调用</h4><p>过程定义:</p><pre><code class="sql">--统计年薪的过程 create or replace procedure proc_countyearsal(eno in number, esal out number) as begin select sal * 12 + nvl(comm, 0) into esal from emp where empno = eno; end; --调用 declare esal number; begin proc_countyearsal(7839,esal); dbms_output.put_line(esal); end;</code></pre><p>过程调用:</p><pre><code class="java"> @Test public void testProcedure01() { Connection conn = null; CallableStatement callSt = null; try { conn = JDBCUtils.getConnection(); callSt = conn.prepareCall(&quot;{call proc_countyearsal(?,?)}&quot;); //对äº�inå�‚数赋值 callSt.setInt(1, 7839); //对äº�outå�‚数声æ˜� callSt.registerOutParameter(2, OracleTypes.NUMBER); callSt.execute(); System.out.println(callSt.getObject(2)); }catch(Exception e) { e.printStackTrace(); } }</code></pre><p>è¿�行JUnit测试输出:</p><pre><code>60000</code></pre><h4>æ¸¸æ ‡å¼•ç”¨çš„Java测试</h4><p>定义过程,并返å›�引用å�‹æ¸¸æ ‡</p><pre><code class="sql">--定义过程 create or replace procedure proc_cursor_ref (dno in number, empList out sys_refcursor) as begin open empList for select * from emp where deptno = dno; end; --在pl/sql中调用 declare mycursor_c sys_refcursor; myempc emp%rowtype; begin proc_cursor_ref(20,mycursor_c); loop fetch mycursor_c into myempc; exit when mycursor_c%notfound; dbms_output.put_line(myempc.empno || ',' || myempc.ename); end loop; close mycursor_c; end;</code></pre><p><img src="/img/remote/1460000044866245" alt="" title=""></p><p>java代ç �è°ƒç”¨æ¸¸æ ‡ç±»å�‹çš„outå�‚æ•°:</p><pre><code class="java"> @Test public void testFunction01() { Connection conn = null; CallableStatement callSt = null; ResultSet rs = null; try { conn = JDBCUtils.getConnection(); callSt = conn.prepareCall(&quot;{call proc_cursor_ref(?,?)}&quot;); callSt.setInt(1, 20); callSt.registerOutParameter(2, OracleTypes.CURSOR); callSt.execute(); rs = ((OracleCallableStatement)callSt).getCursor(2); while(rs.next()) { System.out.println(rs.getObject(1) + &quot;,&quot; + rs.getObject(2)); } }catch(Exception e) { e.printStackTrace(); } }</code></pre><p>è¿�行JUnit测试输出:</p><pre><code class="java">7369,SMITH 7566,JONES 7788,SCOTT 7876,ADAMS 7902,FORD</code></pre><p>æ�¥æº�:<a href="https://link.segmentfault.com/?enc=ops7dbo8Msei1Th%2BNKjCRQ%3D%3D.fk9Ba%2FRI%2BDA%2FzZUAqNLbgRc%2FPCs1DwxYdEpAJVQANNViLCn50OPHngNd5OLd2CXgANBhJ8zQThGqGilmIKEJJyWrt1aUZSbbKFiPfDYgfYfArJk0yDlAaQmbw1GNlnRRPe1aufm1eVj4qOjsLSiu5XbZRzYTg8t5BgUkogpZBHqf7GsxDepdYOJ8siAwXREAU5%2B2ORTgFwXHT9W4SJhpQRaEvUTjRJcGo7bQ1kGiG42Bi8QvlE7JE4LgIXI%2BbH85dQtHUW6y0M4E5H1PUPSVvkPRJ3%2FYzSLxkobCQt204iY%3D" rel="nofollow">Oracle æ•°æ�®åº“å¾ˆéš¾ä¹ˆï¼Ÿå¸¦ä½ ä»�头到尾æ�‹ä¸€é��,ä¸�ä¿¡ä½ å­¦ä¸�会ï¼�</a></p> å°±å› ä¸ºå¼€å�‘ç�¯å¢ƒç”¨äº† Docker,被开除了。。。 https://segmentfault.com/a/1190000044866157 2024-05-09T09:54:36+08:00 2024-05-09T09:54:36+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>👉<strong>ä½“ç³»åŒ–å­¦ä¹ ï¼š</strong><a href="https://link.segmentfault.com/?enc=%2FL2GQASnwEg7u1sEJk3dFQ%3D%3D.4xdstYFo1xVlykrEI8BZmncp9VpbYXSR8bKOdzwqU3XrOIyYLFOrJ%2F%2BbHQQrz7jFZNLgX3gnaVOb%2B%2FiDN4BOYdbzCORrJ4URaR1BHf3PVrvL2vHzbqQNTp47NlWv3rBEgRw01EVvLcWo%2B3vzHhrBeqJea9wDnS3xap8vrUQpRaTPHRb5ikW2yGDMgNuMuhQeQwOYIJ8ao%2BdBd28OiOVQ84aKn3xXRRpmqpIRnBe6GlNHUmfa1DyE%2F3sSCcUv4EC1pXA9NnQsn5rpXl%2F07YvhDtcjSWQW7DuvmNP8jDiNNPg%3D" rel="nofollow"><strong>è¿�维工程师打怪å�‡çº§è¿›é˜¶ä¹‹è·¯ 4.0</strong></a></p><p>— <strong><em><em>特色专æ �</em></strong></em> —</p><p><a href="https://link.segmentfault.com/?enc=OABsqxPbB6m208qdVfswjw%3D%3D.QSdUD5fMnn2Cx6cAzE1HZTV%2FIgGYHXZNrp4Th6Rm6UBk7HFqA5YDjE4P9JWcF%2FeXCXdLOXPMZCVEYEIBV3EZl%2F4dDv1BNsEbUJn%2B4aI0OB%2FuCdo%2Bu43FcEtHw7kO0GDhQDPIm4jIK92L16xTYR8tcCee1ctPq0eCps%2FJr2xjI0E%3D" rel="nofollow">MySQL</a> / <a href="https://link.segmentfault.com/?enc=x8WSdwZKZXDEtMTtuGvvNw%3D%3D.DxPSuFrVgM4FqJcRcYniG0MOn4q4YMW3mSJFiLEoqCa3yIr31RuaHYGNgGtdIWK5yOFtk4hS54LHM8Oi080LobdtsVN9IfvV%2BEG5YQ2MXG4lbtpxXV%2F%2FkYoHu017esHvfZqdBttTTX%2FXq1UL54JXRR7cnZbVoVoUztSC5MNC%2BgQ%3D" rel="nofollow">PostgreSQL</a> / <a href="https://link.segmentfault.com/?enc=7X%2BaBvnx9muBxj6wXObD9Q%3D%3D.eILRuGqtJE63mj5h6ui5dSbcEToPyQDqb4YXMMwuqnRCBQ1ZNXitIlM7fD%2B%2FO%2FJafSK%2FSHAp3y9sSI3Uu5ooSzw2XruZHMnCVGzENGblpnMrz2eJC6sO1uExH0snJVPIcCnI7s7CVc6HoHzzlQhnK3N3bVXiEIzGWS1LT29Uj0Y%3D" rel="nofollow">MongoDB</a></p><p><a href="https://link.segmentfault.com/?enc=ERdloFqmp5yCZzdeCm5PUQ%3D%3D.e9eFrwY3wb1MV%2BwwZZAS88dMOBPUr73%2FdkrHgg2JsrJ%2F%2FrPFdwDdoQJcqfwK%2FONn5L22%2BktGh5iNms9u4bOZF5RU2vxkPhzP2R0tsW9o2A4jKYRWZpJY9%2BE4QifTfs7xoQgbqJLKGzPmVi7IwCYufgPRXLG1ek8LbOBBplGnGy4%3D" rel="nofollow">ElasticSearch </a>/ <a href="https://link.segmentfault.com/?enc=3IpiUgcNARhKfaojH6MMzw%3D%3D.rczsPcgcwoyvvo5AbHqmnsZAh%2Fz7uRaGKlAn5rw3QC4DHYfggbXvegO1vTZc7AgIVJ5Sm32rLK3LzLtsZO9xPxESh129Sv2MhoaxNe0IGco%2FnyPL2qIeuQlfVPhaCw5WAr%2Fqxfptj7XgXXI28ar7lBZjJB66EYpqe5VAMleyeQg%3D" rel="nofollow">Hadoop </a>/ <a href="https://link.segmentfault.com/?enc=ISR62X%2Buahn1CfYLRzTDOw%3D%3D.2SDYeunGl5Oqv3WgZUnh%2B8mXGeGZCpuUuZTCBCv7PLSNxQrNJKPiSHnggK21NgJsyQTBRVx4W4CNgEFv%2F%2BMCGX4buItDvIa7vfxfNsYjgeT4TSVxTDH%2F7pkkGHmaPPk6PVBFqoZOsIi%2FtOEaKBbjw73D76rBDkvnnIpcmYu6Ovk%3D" rel="nofollow">Redis</a></p><p><a href="https://link.segmentfault.com/?enc=C617JWSA8W5DfczFLzNQXw%3D%3D.y%2B%2FFPa0GQKrKamxDZT5DRos3kewEl0tpuF4q51bqzn%2FhxFDu70VQAFk7Vf97i%2BoMAzyXqEMkeOb5sVSw5si2Ru7uejV5%2BjxjCfyDRELbbrwie8gDz0TZq20yxdIFr%2BTT1zWhbDblxudGLLoUO6wlJ8qrtK9TCaS%2F1ULFnhKNbMA%3D" rel="nofollow">Kubernetes</a> / <a href="https://link.segmentfault.com/?enc=K5LR4dNagCmljVBnuO%2BDEg%3D%3D.53yNTnFUd2AnIWaS0LyL6wLztleeRvuYrVM%2BHyrELGKxiY4WF5pMAdZy5sB0cho%2BFhcsjWcBIHvRop16t9DYphKyiT%2Bs55WbKxwk0fuWqA2M1aKZ7rwH8qbsqEAPe8SIX89n3C0QFxY3GcYIhZnYCjhnFx%2Fo80KyZIE65%2FZLJN0%3D" rel="nofollow">Docker</a> / <a href="https://link.segmentfault.com/?enc=KlfvorOK2shtcu8WFfr41A%3D%3D.NtYKbRpnl11%2BrB4iP75zp746JQnx9Eeq9sXZRGp1BkodHqMZTGpt9ZxBz88EgGkPB1AYI%2BHc5PBSZtAOREm%2F0a07Dvqtx6kUCM0ulnfomT7Y1T41iKn6lXCrTJa0FgZR7lU7z24KBtY4wYvyszl33TDufN3N4sKFF2G4JHOtiSs%3D" rel="nofollow">DevOps</a></p><p><a href="https://link.segmentfault.com/?enc=42TJEjBMAntEV5BqLw2bmQ%3D%3D.aVnBPXwTxn4YDA0nZ6RxcAaFMTV5DLTWvImjBYo5Ey7CqEy2CYOwr0emP01T4CgNX3P5y2DCDwbGzTRGU4ciBJSy1eBnlEMSNel6uFDPKL1mFCiwLZjzOFt8%2Bap%2BSpANNzek4RigNI4078TKk16%2BM46XOoTw%2BsqYMvKfbu6CWp0%3D" rel="nofollow">Kafka</a> / <a href="https://link.segmentfault.com/?enc=liI6IVf6ES020q4O%2FNaXfw%3D%3D.TgJe%2Fcv1ZAdoQa%2Fe4l50OO5HhEtJU%2F9hDgWPd%2Fel0cNWVKGhBlXT7oVLMArvD1zS1KliRhTbpAjUh4ZTBrPE0T6COU5sp2GG9xE0LKO1MPPsQ2ye1T4vA13OOTumiMqxmHUP43VG%2FrlUjYLiSPbhWsYak2mMiA4aISTf0zX7B%2Fw%3D" rel="nofollow">RabbitMQ</a> / <a href="https://link.segmentfault.com/?enc=uFbuQWkJFbgG%2BDbJXl6XYA%3D%3D.L3ugB%2FyTzFrj2w2bSybBEhZoK4w2vABnzQ%2FfIuyu3NOemfsSQk0oRLXGHP958hreMLAwPGi7PNv5M9ISPcpJ2jMay09bsn06i1XnrqjfDkEznNgLE379Bat1zmrfVr5oPQkWbzACtKDXBzaFtg0lNP9ESxnmXZnkTeQLD8YyAqU%3D" rel="nofollow">Zookeeper</a> </p><p><a href="https://link.segmentfault.com/?enc=%2B6DnG6vmIRLEcRr%2BbRHaYg%3D%3D.%2FQjtHvSTISFecsIr1PvvAxPWcc6vTmf3RqvldYf%2BwhaCHV0Lzr8xluXbKvqLUGamQYTk1yn891oujRuwUMyAwxeRY0%2B9oFopoXZ7GtIq74iahIa%2B6DkagFCy%2FijTttL1lO%2BuUOoMaVSHlh4qbRRoPA54dteYVI%2BEeoedRC9EM8A%3D" rel="nofollow">监æ�§å¹³å�°</a> / <a href="https://link.segmentfault.com/?enc=%2BPd2sTIMq66D5IkP02WXGw%3D%3D.KZ7l5mlcIA8bpkvFt4N8d%2FfUYnP96WRNMMXLUAW5e53XQDFptczMhEPJGl8yLyJCm%2FwgF%2B5sNFWrOHXQGM6JhYbLNWVDjpR2frGmj1zJiDbAoW8QfLUOdjk9fh2SWMK0uLAS6trgrlw9fmyKi%2FmWyq92Ie0BiEkss3%2Bmje84BOk%3D" rel="nofollow">应用ä¸�æœ�务</a> / <a href="https://link.segmentfault.com/?enc=xegJd%2FrMdqVtgwRn%2Fr8kpw%3D%3D.2xb%2FJxEwFCnPQ72dHDDV9VqvW0LkQZotqQPf0dPefNPE9jjjjqSrFIa1K53zRy7JAMhFtk8%2FNuVbO%2FDo5%2Bosj0DmBz8iM%2FgjTvS9sMu%2B1qUJD5wr2qTyde6nlql1dV7iKCLBJpwer3q8ohfrABxFpbJ4BvXN%2B%2FHFQNMAVdRaU3c%3D" rel="nofollow">集群管ç�†</a></p><p><a href="https://link.segmentfault.com/?enc=qXYlOWSNXqcC9AXaUv26ew%3D%3D.%2F%2F6OJAaK4ily2M77HnGC84e9noe9LtQK6hjl2by2c%2BlegNs4q6BRhkJYhkwYH08Wj6GNV9sEwJEuWxFrfC4hwG7Zv0Siv99ROqNPvzAqyYpCZm3WPMDBDdrAraoK0n10ba4EWV48p%2Fe2w6P9d%2BifaHRgZ9ODbU8rhTBu6c9aAcE%3D" rel="nofollow">Nginx</a> / <a href="https://link.segmentfault.com/?enc=Sg4KbwyCPJDiJOIEijgr%2BQ%3D%3D.YWCbFt%2BXEIlSgLAxV9XvI71g1In%2B6Iju0c6nBJMrmmuW73N%2FCQwgo0t1MwMsGccm11giY0NTNAITrKxMj2xutxO1SWRg19dSgTSYErMVVxawEIiHAJ3Vkq8I4U5nOCq5LwyzeO23Bi6bE%2FY%2B9JaghB7Zhea7G6nePiYxo68Ma8g%3D" rel="nofollow">Git</a> / <a href="https://link.segmentfault.com/?enc=55J4XrQYYf2xTEmuvhVrSw%3D%3D.Kuib0dEezTT2jO9ENoc2AY%2FdH5gaMvuUiyYOZThbP49jHV%2BPpDzshYHOlaWZ4Af%2BPzUVbUvxB1slvg24vcaaFEtst2zhDpT7eiYyk%2Bko3BmJbofRvN%2F7NV3mczemyMynmdtqveBCFY3SRR%2B3opUE3F%2FqS5eCI9VebNNEwjpSFHg%3D" rel="nofollow">Tools</a> <a href="https://link.segmentfault.com/?enc=Zn4ess%2Fc1POQ%2BVa02r%2FTjg%3D%3D.w8KDExrJh8vLLGbE%2FH4kN0QvKsZsigKEVzMniKe8hwNvz3P56H%2FnrgxVH5qmZFDbIeiglhzi3DvkM%2B1ErrbxcJsEtS9VYyDQNfyQkRDl%2BmZ0CSaDfP1vDvkgBFBK%2BfM3Q9z7pYdq8xGjC1YFLKs9x%2FRALwHecirky4%2B1JKPm7M8%3D" rel="nofollow">/</a> <a href="https://link.segmentfault.com/?enc=keXn9tmW8dEzlwg6gJJLbA%3D%3D.nDrUA%2BUXiDbigYBvEkABUUpKCd5lp%2FcQ8IBoIjoOQYqdm2tNrU3NTAVJWG9tlRcemLUGlGJtLBFpr%2Bntbr0aGLPyIvbq%2BNaHC3KpQJhhmZvNl6MSpbVrkUwrfTzxrhedkwAwp%2BWr8kvPDfeW4wRa5k50X3DkJdeaeLMK39YNNuI%3D" rel="nofollow">OpenStack</a></p><p>大家好,我是民工哥ï¼�</p><p>Docker 技术的å�‘展如日中天,这ä¸�是å�•纯概念性的炒作,而是 Docker 技术的的确确解决了我们å®�际工作(开å�‘ä¸�è¿�ç»´ï¼‰ä¸­ä¼—å¤šçš„ç—›ç‚¹ï¼Œå› æ­¤ï¼Œå®ƒä¹Ÿåœ¨ä¼�业å®�际业务ç�¯å¢ƒä¸­å¾—到了é��常广泛的使用。</p><p><img src="/img/remote/1460000044866159" alt="图片" title="图片"></p><p>我们采用容器æ�¥è¿›è¡Œå¼€å�‘å’Œè¿�行应用程åº�。Docker 自然也æˆ�了该领域功能最丰富且使用最广泛的产å“�之一,Docker 本身也有ç�€å¼ºå¤§çš„生æ€�系统,并æ��供了一个广泛的工具包æ�¥ç®¡ç�†å®¹å™¨åŒ–过程。 </p><p>Docker å¹¶ä¸�是容器的唯一选择,容器还有其他的替代å“�:<a href="https://link.segmentfault.com/?enc=wv1Zd4KCVargVg5NaSF6Rg%3D%3D.4ff2%2F0KYHOVWDInDmRFlvgEeFTEasn%2F7H8O0t4NMTIPvlNd01XGdMAXGe6lyMElUR1gRiVv4oH076suyg3MX54393IJDRiG16tUbNHTvYfxoypJLl16EF0ePXQDCkrLgopKighuFLSoDl%2FoE76RKPL%2BEGtHh89wmd2xUXaXdC1Beedf6oKMa3pphzy4Bija41tSzwHHhyjTY30BrikLLkwt3q5zfeztgCJmPIVCg9u74Lzn5g8QOblwLeczfBnbQV0KApXYIY%2FjA2b2k6ZVqWC5vIvO065c4XMrSvUC6vj6UoBVgxiBkQCRgaC%2FN6dMcVJ97xZDl9CtYNBhRph9TDQ%3D%3D" rel="nofollow">除了 Docker,我们还有哪些选择?</a></p><p>但是,说真的,我们<a href="https://link.segmentfault.com/?enc=T7C0j5SYpzdqyeICDowlVA%3D%3D.o2uezJ0%2F6eTFY9pbYcQddn6wPN2%2F6coi%2FDUo8ns0cBuuNbKQSECvMmseoTwnIT1SrQAbk50ugVVAMeoVsjQZMlqKCh%2BR3CwXMcMl27HeoxRG9PR2auK6QKKPJGZRdPyN%2F3v8q3EdGnnA5O3eqQvZENhuChW0CAP3xkDMohB7ZyStvlafQV7ntAhTLDXVoSC79jCwpYOlzEK1%2B6TAyvTNNkG3yVqatPSFfAyMkZAlI7KrQy4P0pZuUp6eVmPsDmlaLo4uQVMbAodgZXVdXfa9nyiFV6CG1ix7tAU%2ByCVQg1XvMZm5O3bvXJe80yBoKZxzx%2BqzIUjvJydhkOKVfmw0gQ%3D%3D" rel="nofollow">使用 Docker æ�­å»ºæœ¬åœ°å¼€å�‘ç�¯å¢ƒï¼�真心强啊~</a>,使用 Docker 在本地æ�­å»ºå¼€å�‘ç�¯å¢ƒæœ‰ä¸€ç³»åˆ—显而易è§�的优势,比如:ä¸�用ä¾�赖其它资æº�ã€�éš�用éš�å¼€ã€�é™�ä½�安装ç�¯å¢ƒä¸­çš„å�‘ã€�æ��高工作效ç�‡ç­‰ã€‚</p><p><img src="/img/remote/1460000044866160" alt="图片" title="图片"></p><p><strong>这么多的好处,我们为什么ä¸�好好利用呢?è°�说ä¸�是呢ï¼�</strong></p><p>但是,还真有人ä¸�以为然,å‰�段时间网上闲逛,看到一个有æ„�æ€�的事。</p><p>是一ä½�技术管ç�†å�‘的贴å­�,说的是:公å�¸æœ‰ç¨‹åº�员å�‘ä»–å��应开å�‘机器内存ä¸�足,影å“�日常工作了,需è¦�æ�¢ä¸€å�°å¤§å†…存的机器。这ä½�管ç�†è€…就比较诧异了,å�Œæ ·çš„工作,å�Œæ ·çš„è®¾å¤‡ï¼Œä¸ºä»€ä¹ˆä½ å°±ä¸�够用呢?äº�是查看了这ä½�程åº�员的电脑,å�‘ç�°è¿™ä½�程åº�员在本地开å�‘ç�¯å¢ƒä½¿ç”¨äº†Docker,并且å�¯åŠ¨äº†å¾ˆå¤šçš„å®¹å™¨ã€‚è¿™ä½�管ç�†è€…å�´äºŒè¯�ä¸�说,直æ�¥æŠŠè¿™ä½�程åº�员给开除了。</p><p><img src="/img/remote/1460000044866161" alt="图片" title="图片"></p><p>头一次å�¬è¯´è¿™ä¹ˆæ»‘稽的ç�†ç”±ã€‚。。</p><p>也真ä¸�知é�“è¿™ä½�管ç�†è€…是æ€�么想的?脑å­�怕ä¸�是å��æ�‰äº†å�§ã€‚</p><p>å��é�¢å�‘ç�°æœ‰å…¶å®ƒç½‘å�‹çš„评论(我心安了),如下:</p><p><img src="/img/remote/1460000044866162" alt="图片" title="图片"></p><p>æ�®è¯´è¿™ä½�管ç�†è€…自己å�šçš„产å“�被鹅å�‚收购了,ä»�这个信æ�¯ä¹Ÿä¾§é�¢è¯´æ˜�该管ç�†è€…技术能力应该是很ä¸�错的啊,关键是这ç§�作法让人太匪夷所æ€�了。</p><p>我是é��常建议大家使用 Docker æ�¥æ�­å»ºæœ¬åœ°å¼€å�‘ç�¯å¢ƒçš„。</p><p>众所周知,在开å�‘之å‰�,我们需è¦�安装å�„ç§�工具ã€�æœ�务æ�¥æ”¯æŒ�我们的开å�‘ç�¯å¢ƒï¼Œåœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œå�¯èƒ½ä¼šé�‡åˆ°è¯¸å¦‚:ä¾�赖问题ã€�ç�¯å¢ƒå�˜é‡�问题ã€�端å�£é—®é¢˜ã€�编译库问题等等。</p><p>å½“ä½ è§£å†³è¿™ä¸€æ¬¡çš„é—®é¢˜ä¹‹å��,如æ�œé‡�æ–°å¼€å�‘下一个项目的时候,å�ˆå�¯èƒ½é�‡åˆ°å�Œæ ·çš„问题,太费时费力了。</p><p>使用 Docker æ�¥ç»Ÿä¸€æ—¥å¸¸å¼€å�‘ç�¯å¢ƒï¼Œä¸�管开å�‘人员使用的是 Windowsã€�Mac 还是 Ubuntu 系统。如æ�œç”Ÿäº§ç�¯å¢ƒä¹Ÿä½¿ç”¨çš„ Docker çš„è¯�ï¼Œè¿™æ ·ç”šè‡³æˆ‘ä»¬å�¯ä»¥ç›´æ�¥æ‰“包一套ç�¯å¢ƒï¼Œç›´æ�¥ä¸¢ä¸Šå�»å°±å�¯ä»¥è¿�行了,å†�也ä¸�用担心开å�‘到生产ç�¯å¢ƒä¹‹é—´çš„差异了。</p><p><strong>è¿™æ ·çš„æ–¹å¼�简直太强了ï¼�</strong></p><p>如æ�œä½ 需è¦�äº†è§£æˆ–å­¦ä¹ æ›´å¤šçš„å…³äº�Docker技术知识体系,详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=9skYG7NJ2MuifVYAZSnvUQ%3D%3D.3kPtjWXtavkKfaGLCxUpT2JJN1E6Mmr5f0Pkz%2F3VXkK2hxqZ3BX5mlOx1eVVyuSPG7EDfO2nzz4Rp2bUHrE8%2FwhNQSdl4C1zl4FNRFr56mRear3t17cZZPpnzQeqhwfjzbXR3GrSf6rb%2FUDwZxHAqFcUQQevbyvC6EYWtnPnBSA%3D" rel="nofollow">Docker</a></p> 打磨三年ï¼�é‡�é•‘æ›´æ–°ï¼�Linux è¿�维工程师打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路 4.0 ï¼ˆè®©ä½“ç³»åŒ–å­¦ä¹ Linux è¿�ç»´ä¸�å†�难)ï¼� https://segmentfault.com/a/1190000044576014 2024-01-22T09:59:03+08:00 2024-01-22T09:59:03+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥。</p><p><strong>ç»�过近三年的打磨ä¸�总结</strong>,今天《 Linux è¿�维工程师打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路》V4.0 版本å�‘布了。</p><p><img src="/img/remote/1460000044576016" alt="图片" title="图片"></p><p>V 4.0 版本是在å‰�é�¢å‡ ä¸ªç‰ˆæœ¬çš„åŸºç¡€ä¸Šæ›´åŠ ç²¾ç»†åŒ–äº†è¿�ç»´å²—ä½�所需的技能知识点,<strong>更详细ã€�æ›´å…¨é�¢ï¼Œå‡ ä¹�囊括了 Linux 系统è¿�维岗所需的所有技能体系</strong>(如:TCP/IP 网络å��è®®æ ˆã€�Linux 常用命令ã€�ä¼�业常用æœ�务ä¸�应用软件ã€�常用工具软件ã€�Shell 脚本编程ã€�ä¼�业监æ�§å¹³å�°ã€�集群è¿�ç»´ä¸�管ç�†ã€�Nginx æŠ€æœ¯æ ˆã€�MySQLã€�PostgreSQLã€�Redisã€�MongoDBã€�Elasticsearchã€�Gitã€�大数æ�® Hadoopã€�Kafkaã€�RabbitMQã€�Zookeeperã€�Dockerã€�Kubernetesã€�OpenStackã€�DevOpsã€�Java大å��端技术等等)。</p><p><img src="/img/remote/1460000044576017" alt="图片" title="图片"></p><ul><li>è¿�维工程师进阶å�‡çº§ä¹‹è·¯ï¼š<a href="https://link.segmentfault.com/?enc=rtFoTTf7tVosVcOGXOaS0Q%3D%3D.1PxwectIIhdrOHrJm30qGwCPA4MKON7cKMJLjarz5GCkat%2BBqfCXViPIf1%2BHhGK9" rel="nofollow">https://github.com/mingongge/BestSRE</a></li></ul><p>时间过的好快,<a href="https://link.segmentfault.com/?enc=720%2F9wjRIx3raEofh89H6A%3D%3D.j9s4rTgFTnHjpLqhEQWiO34BmlQhvhmx0VD4N%2BiaqbFWrjPsrpNKvb0dDJQJ3b5UTk4VWBCeuGBu%2BbQx5iDKRCo04RZwOco53E%2FmjrVaHxiNDl5RhuiddemGiDNYBA2JCZUGBbazVSPVLbA8zkABbD8kSOfO2%2BPJy0mviHOyf6fXdMWsCNlE4YHza89cbm0QmxlvealeULV2Q6LjeLaonYZTgvi%2BIPkBeC1Jvs2Rwgnz%2FmdBHmjbvoOI2hDDLBPZ6ajFV3aL%2Bz4ktWA6GOQIV%2F9VKYoFIhlDpdaUaj157AE%3D" rel="nofollow">è¿�维工程师打怪å�‡çº§ä¹‹è·¯ 1.0</a> 版本å�‘布至今(第一个版本),已ç»�过å�»å››å¹´å¤šæ—¶é—´äº†ã€‚å‰�一个版本 <a href="https://link.segmentfault.com/?enc=GGAjqV%2FmSPqpfvvhfU5u2w%3D%3D.54eTEnrOoVFF8jHsilqFbs5n5A%2Fw7pWzyyinDkWXtVtCdlXXdjM79p9a0SLdAuPjn8%2BtDgDHiwvICcq7ZSUTTbzYQ7wqVN%2FgLHLfHagDnR3wDbdhRphUVxT4o%2FMKjecIXLCDIwlZkqFmpbhhogaAMh4iqKsnovNO1A%2BGD9sKOGiB6hjFa%2FgMvSm3T6%2FypXu7" rel="nofollow">3.0 版本</a>å�‘布至今也快三年了。</p><p><img src="/img/remote/1460000044576018" alt="图片" title="图片"></p><p>å›�头看看,写公众å�·ä¹Ÿæœ‰å…­å¹´å¤šçš„æ—¶é—´äº†ï¼Œå�šä¸€ä»¶äº‹å¾ˆå®¹æ˜“,但å�šæŒ�å�šä¸€ä»¶äº‹æƒ…六年应该ä¸�是件容易的事。一路走æ�¥ï¼Œæ”¶è�·äº†ä¼—多读者的肯定ä¸�支æŒ�,å�Œæ—¶åœ¨è‡ªå·±çš„知识体系建立ã€�建全上也å�–得了ä¸�å°�çš„æˆ�就。在这期间,我写的书:<a href="https://link.segmentfault.com/?enc=y%2BurS3KzhKhf8Q2ea%2BW8%2FA%3D%3D.08JyZ%2B2J9KJVUOVfCyjg%2FtvP4esJzOkGDCUYC%2Bl397OIN2vgSG35Ys28d0e7Pqyx3M%2Fp0xnCuHfnpOkJjN8Vs%2FA2bWTaFq6l71yUNE%2BxaLWwCha2fONiVrubMi1%2F9l55KrMxPmudfRZf4N5ykmWzlwbJoU%2Bj%2F%2FwmIiQte%2FPCklm%2F58%2BU13%2B1y9b%2BD3YuC%2Bnt" rel="nofollow">Linux系统è¿�维指å�—</a> 出版(2020å¹´4月),å�Œå¹´10月,我拿到了2020年人民邮电出版社/异步社区《<a href="https://link.segmentfault.com/?enc=pKkoDIyps2Uas6VsSiCMKg%3D%3D.7J1ncT%2F2NXE4rC7Lb8HtzT0lWWVOIhCVyuyAdBYUtwypC1eb%2FHkxbrtkkDFGkiTfKsJyVfG4q1P8j30sRfRYZ4szXHqr3Cxi5Xrco5r7O7DX9J0izK%2FWJt127Vp8gvfCt2GuVe4YzZfwSi1tOjp8ZGa3SheZBkcecu0cTiw6mN6vCRanJRXvrRDjvbQSLc8eObVd%2BZjluP61%2BDe5mndJ%2FyzX3AheX0fnkCywpPjocMj0rZI20tIG66HfafTB4IlI%2BaReli0BXHrM29K0IG7T32pLIE%2B%2BHR%2BbHDH7%2F6jcObiOrDFFpYHtl8DEsTCD9II359CqMjRUCxfVEmw2yVVh%2BQ%3D%3D" rel="nofollow">最具影å“�力作者</a>》。除了感谢这个伟大的时代ã€�家人ã€�朋å�‹ï¼Œè¿˜è¦�æ„Ÿè°¢æ— æ•°æ”¯æŒ�æˆ‘çš„è¯»è€…ä»¬ï¼Œè°¢è°¢ä½ ä»¬ã€‚</p><p>å…¶å®�,很多熟悉我的è€�读者都知é�“,我也算是 0 基础起步自学至今的(对äº�民工哥ä¸�是很了解的读者å�¯ä»¥çœ‹çœ‹è¿™ç¯‡æ–‡ç« :<a href="https://link.segmentfault.com/?enc=MFgTt%2FI3sS8HypHMnLOiTg%3D%3D.ZNqIDDKGb8t9ylduDCKffjOUC7xSEHW31znDcmfNya1fYEBWlAGpL0F%2BDFcHkT%2BsV8gcAIQZXqAeBQUUD8Ru2BKVuRUqcpVoSk6XatsW12XRBVDRbTkhB7OEk%2BH0bcssqfQs89W9ye6LVpk7URHShY56fJ8qzYwRT%2FuwsM15lJRfoxooczgkzEDxGRqMtQQp39NbiwOV3wkera3OhJOvCbCcRYP%2BVSEi24D%2Bxhnj8G%2FNBxcwbT0sau%2FS%2FSWTHBvwO7wciRPj3e6aymipRgqZn9oVGOc8xAXkT85Qmg%2Bh9Py8PIFz9JVcaZv9QXg4GEa2mE3dlYauWjbc9OZosKD8Ig%3D%3D" rel="nofollow">æ�­æ¼‚å��年,今撤霸都</a>ï¼�),所以,对äº�自学,我也总结了一些方法,或者说分享一下我的ç»�验:<a href="https://link.segmentfault.com/?enc=1i5uqXQRkh2QH2ov5tzzyg%3D%3D.g3ZWZmiI0MNlvVtRqCyWDcRvTxtmZFC37WyzAc9jgvOMU1QIMZhbo8ft9cyZ8YGCVGVXCmkbH1eouyr1l%2FKMO8Q0mQT79P3g6fAtOeBRjdJWIjkj5UlQb3uWZ8BUe8Fi3Z8A%2F3RRfmHXFQh4fG%2FJsc%2Bb7Fun8Zx2NJxXpyVQB6yZCQrwvdUKQtRsr4ENswTrpPFzupB5RvpxbXDMIqphuq%2FOh3o%2Fim0eOQ8As0XnjblmCSZWcz954vGFc9tF08aKUWcRCvFID3bx%2BMJX1Bou3vGs1yUlSmwRIAf3JSe8jvQ%3D" rel="nofollow">民工哥自学方法</a>。</p><p>å›�首那段自学的苦逼时光,确å®�很痛苦,那时互è�”网没有这么å�‘达,查找资料也没有ç�°åœ¨è¿™ä¹ˆæ–¹ä¾¿ã€�丰富,很多时候å�ªæœ‰é� 自己看官方资料å�»æ…¢æ…¢æ‘¸ç´¢ï¼Œä¸€ä¸ªé”™è¯¯å‡ å°�æ—¶ã€�å‡ å¤©å�¯èƒ½éƒ½éš¾ä»¥è§£å†³ï¼Œç„¶å��通过ä¸�断地总结ã€�å†�å��å¤�ç»ƒä¹ ï¼Œæ–¹èƒ½æ�Œæ�¡ä¸€ä¸ªä¸ªçŸ¥è¯†ç‚¹ã€‚</p><p>è¿�维工程师这个岗ä½�ä¸�å�Œäº�其它的å��端开å�‘å²—ä½�,到底è¿�维工程师平时å�šä»€ä¹ˆï¼Ÿ<a href="https://link.segmentfault.com/?enc=J8U%2BXGUyqqooxq00ilExKg%3D%3D.OwwngqDla05x4Ii0sLWtRC%2BhueT5e9WQYcbXxna2Ed1WOCUZbRDOGKp8rD0fHXl7k3YhgViSqCBUZvePEsQPqkNx2thVpZoggll8VDlIz4Q68vhNvITQWOWMdJ7OEkNj1L5DgQJzDWnQHVDvGwfJeEYpOffhx5ls3XNzLijg3D3A%2BlFXS3NOTbb6tttDHDSRRF8ctSf8w6SCxPrsnIUxDfV6P%2BvSqZ9g3TswgEqO7KghvLVVMSGhICTDRzkh9udMq1BtFoH5REQU%2Ff%2Ff2%2BJ5ugNrcC2KEgTTAG9zN4sneyo%3D" rel="nofollow">è€�å�¸æœºå‘Šè¯‰ä½ :真正的è¿�维工作是什么的?</a>。而且这个岗ä½�对技能è¦�求是越æ�¥è¶Šé«˜ï¼Œä¸�ä»…ä»…è¦�求需è¦�知识的深度,还è¦�求è¦�有一定的广度,深度就是需è¦�ä¸�æ–­å­¦ä¹ è¿�维知识体系的知识,广度就是è¿�ç»´å²—ä½�上下游(测试ä¸�å¼€å�‘)岗ä½�的一些知识体系,至少是需è¦�å�šåˆ°äº†è§£åŸºç¡€çš„æ�Œæ�¡ç¨‹åº¦ã€‚</p><p>å› æ­¤ï¼Œè¿™å°±å¯¹è¿�维工程师们æ��出了更高的è¦�求,首先得有一颗ä¸�æ–­å­¦ä¹ çš„å¿ƒï¼Œå…¶æ¬¡å�šæŒ�的毅力是必须的,然å��就是ä¸�æ–­çš„å®�è·µã€�æ“�作ä¸�总结,é‡�å¤�å†�é‡�å¤�, 时间久了æ‰�能形æˆ�自己的一套知识体系。</p><p>æ­£å› ä¸ºè¿™äº›å�Ÿå› ,æ‰�有了上é�¢çš„《è¿�维工程师打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路》的出ç�°ï¼Œåˆ�衷很简å�•,就是将我的所学ä¸�æ‰€æ€»ç»“çš„å­¦ä¹ è·¯çº¿åˆ†äº«ç»™å¤§å®¶ï¼Œå¸Œæœ›å¯¹å��é�¢çš„爱好者ã€�å­¦ä¹ Linux è¿�维的朋å�‹ä»¬æœ‰æ‰€å¸®åŠ©ã€�æœ‰æ‰€å€Ÿé‰´ã€‚ä»¥ä¾¿ä½ ä»¬æ›´å¥½çš„å­¦ä¹ ä¸�æ�Œæ�¡å…¶ä¸­çš„知识点,然å��也能更轻æ�¾çš„è¿�用到ä¼�业的å®�际工作中å�»ã€‚</p><p>æ³¨ï¼šæ–‡ä¸­çš„çº¢è‰²æ ‡è®°éƒ¨åˆ†éƒ½æ˜¯å�¯ä»¥ç›´æ�¥ç‚¹å‡»è·³è½¬åˆ°ç›¸åº”çš„æ–‡ç« æˆ–å­¦ä¹ ä¸“æ �的。</p><p><strong>è®©ä½ </strong>ä½“ç³»åŒ–å­¦ä¹ <strong> Linux è¿�ç»´ä¸�å†�éš¾ï¼�ï¼�ï¼�ï¼�</strong> </p><p>如有帮助,请点在看ã€�转å�‘朋å�‹åœˆæ”¯æŒ�一下,感谢。所有的体系化的专æ �内容,目å‰�正在é€�步整ç�†æˆ� PDF 文档中,å��期会统一é€�出,大家æŒ�续关注本公众å�·æ¯�天的æ�¨é€�内容å�³å�¯ã€‚<img src="/img/remote/1460000044576019" alt="图片" title="图片"></p><h2>网络基础</h2><p>这是æ¯�一个ITä»�业者必备的基础中的基础,比如:<a href="https://link.segmentfault.com/?enc=boJ%2FqEOtcP0Id7zJNdoqgA%3D%3D.rbJhGD2718HT5Ap6aLfS9kMzUC6TRQdrr1Zvdz%2F43b3XfocoyIjCmRqazA3CQxpa6G8P8GXrPhWPR0dGd%2B70%2BdsdAWUO%2FGKwBtTe0KMpQN3JG2YqJgE1gFoWuiMF0DcuKMlECfdIOOUbIv%2FYakGNTfUxDCAJPMIc%2FmDT0BfIT1s%3D" rel="nofollow"><strong>TCP/IPå��è®®</strong></a>ã€�路由基础。</p><p><img src="/img/remote/1460000044576020" alt="图片" title="图片"></p><p>这些<a href="https://link.segmentfault.com/?enc=tvHSOACSHN2eQGXldhShGQ%3D%3D.9up7fmwvnOIEztZI3hYWQbClDCYLcYnI%2F%2Fp1eLlXXN%2FyfzMyHecQqC5Uj68sDKsAs0A%2FonoM3X0uosLPAmxW8rfnMKFpnMwe9%2BQReGiaBHGUvRPiLvPsDZShQmf4vswctkbagkff595bGCLvj7LX6uaPDEurUG9KxcrECOi1AEzMqplx03YjovROPkv9DIn0SZNRp2cQtdyjk91ZZ%2FitM%2B43G2Crdo9z%2FqgeC601nxeINlSdJWpRCV9PAmLs4%2FqPzpPnVCRn6PxcQFFvB9TdTT1VkvDbizcFRTq4HEy2D0lFgYWSjHd6gJC%2FCpq7n9h604kKva39%2F78jH7FAD%2B57JA%3D%3D" rel="nofollow">必备的 6 大计算机网络基础知识点</a>ï¼�是一定è¦�熟悉ä¸�æ�Œæ�¡çš„,å�¦åˆ™æ— 法展开å��é�¢çš„ç³»ç»Ÿå­¦ä¹ çš„ã€‚ä¸‹é�¢ä¸€å¼ æ¯”è¾ƒå…¨çš„è®¡ç®—ç½‘ç»œåŸºç¡€çš„å­¦ä¹ æ€�维导图:</p><p><img src="/img/remote/1460000044576021" alt="图片" title="图片"></p><p>如æ�œä½ 是有此方é�¢åŸºç¡€çš„å�¯ä¸�å¿…å­¦ä¹ äº†ï¼Œå¦‚æ�œæ˜¯æ²¡æœ‰ç½‘ç»œåŸºç¡€çš„ï¼Œå»ºè®®ä½ å�»çœ‹ä¸€çœ‹æˆ‘很早之å‰�写过的一些关äº�网络方é�¢çš„æ–‡ç« ï¼Œè¿™æ ·ä¹Ÿå�¯ä»¥å¾ˆå¿«çš„熟悉这方é�¢çš„知识点。所以,这å�—的知识点在 4.0 的版本中ä¸�å†�过多的赘述,有需求的自行查找资料ä¸�å­¦ä¹ ã€‚</p><h2>系统基础</h2><p><img src="/img/remote/1460000044576022" alt="图片" title="图片"></p><p>首先就是系统的安装ä¸�基础é…�置:<a href="https://link.segmentfault.com/?enc=D5rBvnL67eUh1vYhdpnBnA%3D%3D.FEPQi56RjDTvUrbVuc3QNXksPHcMMreMZC%2BkGMzCF5wSb0vOfmfQDcaVSAUFw4aSfwyz%2FeydCZBxr%2BN%2B%2BoV%2FAY%2FFApjbS0YyWsp1cE86i95An74%2BzGvPOdEdTHrW8mGxSq2HhlHHscfb6C%2BgwIN%2FVdCg%2FbHNwJ1CkxVXpAIZTlA0y8LQ7b7kyLQMwsAoq8MaxQaRq0fM4peAczphjcYU3EsKBodvKmSdrPCZr6yqXXaUk3nqdBnFo4OSv6FBGsihgbOr4KwkiNxRj4QMwGizvEzHDVSVJiYHiYOy3vYayKVyhtxXf4TlX1UqnLsU3I7xK3Bquu0o09Zz6ImW8exFTA%3D%3D" rel="nofollow">Centos7安装教程</a>,有需求的å�¯ä»¥å�‚考这个教程,安装其å®�是é��常简å�•的。</p><p>对äº�系统目录ã€�文件系统ã€�æ�ƒé™�等内容。å‰�é�¢çš„版本也介ç»�çš„é��常清楚,这里ä¸�å†�一一赘述。å�¯ä»¥å�‚考这里:<strong>Linux 系统基础入门知识点</strong>(<strong>公众å�·è�œå�•-打怪å�‡çº§-打怪基础</strong>)。</p><p><img src="/img/remote/1460000044576023" alt="图片" title="图片"></p><h2>常用命令</h2><p>这一å�—的知识点,在入门阶段是é��常é‡�è¦�的一å�—,æ�Œæ�¡çš„好å��ç›´æ�¥å½±å“�到å��é�¢çš„具体æ“�作ä¸�å­¦ä¹ ï¼Œè€Œä¸”ï¼Œè¿™é‡Œåˆ—ä¸¾çš„è¿™äº›å¸¸ç”¨ç®¡ç�†å‘½ä»¤ï¼Œä¹Ÿæ˜¯æˆ‘们日常工作中è¦�用到的(å±�äº�é‡�点æ�Œæ�¡å†…容之一)。</p><p><img src="/img/remote/1460000044576024" alt="图片" title="图片"></p><p>这部分详细介ç»�<a href="https://link.segmentfault.com/?enc=Rg%2FKzOxwXDFNKZDln0%2BWKA%3D%3D.g8QNTblsxttjVeaRjuF9F%2Fn%2FR5sJAg7ym1jCHp2pliLVCnBhEdq4tVj941DBAsglGFabvIli5z6pUVTeL%2Bt6LkLijKoL4haJko%2Fqy3z%2FUewvWXPAInL3qc53NfEnGqN8Gg1StaypGh1Xr8igRkqnyexQJ%2Bh0KczMt6Lg4aVSZRSZDwmNz51LdlTiZ8aFARJB" rel="nofollow">系统è¿�维常用命令</a>å�Šå…¶å�‚数说æ˜�,并且é…�有应用案例详解,基础必备ï¼�</p><p><img src="/img/remote/1460000044576025" alt="图片" title="图片"></p><ul><li><a href="https://link.segmentfault.com/?enc=JjxiAzBJsbC3LT915TF%2BsQ%3D%3D.2rhwxtNoQENpIh%2BVuHbJAq3bFh4wHp6WodAQq4s7lFua0j2sisSTNOMEUXmg88sThLO29aIxO5KhIh4F3KJp3A%3D%3D" rel="nofollow">https://github.com/mingongge/Learn-a-Linux-command-every-day</a></li></ul><h2>脚本入门ä¸�进阶</h2><p>这部分介ç»�<a href="https://link.segmentfault.com/?enc=eTAqWHq71pSvs%2BM4BlpSHA%3D%3D.XoPeGga0k0sHSK70%2F22HoIn%2FTC2pehzt7UEqEvcI7mb0ftaem%2Ftg%2FqJJ7C%2Bwne8iR9nAAWneYSdkxBTEUScVbCUd5rTU9k2OkRWgOeMCtFk1wZShY3t8ovKKRzhY7vFGYE4SRvzeE44KC%2BN5NGsoFNg2WXiYj50%2BDfB73BwEddywSg4kQEHO2b88Nzrt1HuL" rel="nofollow">Shell脚本编程</a>的基础入门ä¸�进阶知识,包括编写方法分享ã€�案例分享。</p><p><img src="/img/remote/1460000044576026" alt="图片" title="图片"></p><p>虽然说ç�°åœ¨Python在è¿�维工作中已ç»�使用很普é��,但是很多ä¼�业å®�际工作中的时候还是会用到 shell 脚本,它有助äº�ä½ åœ¨å·¥ä½œç�¯å¢ƒä¸­è‡ªåŠ¨å®Œæˆ�很多任务。在å‡�å°‘é‡�å¤�工作é‡�çš„å�Œæ—¶ï¼Œä¹Ÿä¼šæ��高ä¸�少工作效ç�‡ï¼�å› æ­¤ï¼ŒShell脚本编程也是è¿�维工程师必备的工作技能之一ï¼�</p><p>更多详细内容å�¯ä»¥æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=DtPLHwK4zDQ9uBqQbsXruw%3D%3D.cZ0b5Rv0TU0T0rvWt1ap%2FdGl76KgdaDmxXs1M5f%2BnDXnSo%2FlywiXeM3hq%2BspC40Bl3qtyorFZ1VBs1sivjfH4uMBSIOcaurPmEh13ypeRc9ITFvWnPDl5LtlNYEPx3wI9j8ZSP%2BfpFELSFphwWtpe7%2FXWjRTLaIIg56frxVNKsA%3D" rel="nofollow">Shell 脚本编程</a></p><h2>常用æœ�务安装ä¸�é…�ç½®</h2><p>ä¼�业常用æœ�务的安装ã€�é…�ç½®ä¸�优化等,如:<a href="https://link.segmentfault.com/?enc=%2FP8uW30xibajZPsD91nb7w%3D%3D.cKr1%2BYECCXsToJuwVkjL%2F1oZOxy%2Fw2J3FjjwHZSW%2F6naIEtlp1zyjklZJICGnX3bv1AQedJFezY513T5uCei4yBadYGMCJg7nkup8zW1SAP0dxNSVmY7GkEPPi%2BLgZQ6Z5xtWsDO09qoI0jxw3AuMxa2h8RWRn7HHojTIbdfMPZLkz934EvItyTitOFVVjk5tEua4xjr7MKxUoZaq59juwJB5zNhrDPQ07V3SBkZdJ9%2FaeEVXyBojYwtjmqNY61nBWagQiTO3c6rBNfMjiZ3hx7E60dxAWAAOvqeCCyyOR8h7wTrxXnDmdWzx8T9FVKxnj7gvabrjtZ4U%2F8r5SeV0w%3D%3D" rel="nofollow">SSH</a> æœ�务ã€�<code>NFS</code>网络文件系统ã€�<code>DHCP</code>/<code>DNS</code>ã€�æ•°æ�®å�Œæ­¥æœ�务ã€�<code>FTP</code>ã€�代ç�†æœ�务ã€�自动化工具等。</p><p>更多的内容å�¯ä»¥æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=aNIi6keqCCX1bQmrzBcHng%3D%3D.w1Y%2BTXNnADU1AK%2BlOlBhIZOynnAFciVr4FoN%2Fd21kVkUcjDuQEUGmn%2Fjd9wvoODZTIx2HKFeIBL5ZiYxu8Vli6GruRXn0W9tT4q52d0rljvprNrQ1Tl%2B4QJhYED8GETF%2BsaeTW3gN5Tp1uEDiqskVFmbZkncEWCrRJqXwYRE4qU%3D" rel="nofollow">ç�©è½¬ä¼�业常用应用ä¸�æœ�务</a></p><h2>Nginx é…�ç½®ä¸�优化</h2><p>基础的æœ�务安装ã€�é…�置文件介ç»�ã€�虚拟主机é…�ç½®å®�è·µã€�Nginx 优化é…�置详解ã€�LNMP æ�¶æ�„ Nginx å��å�‘代ç�†è´Ÿè½½å�‡è¡¡é…�ç½®ã€�Nginx+Tomcat 多å®�例å�Šè´Ÿè½½å�‡è¡¡é…�ç½®ã€�高å�¯ç”¨ã€�Nginx 版本的平滑å�‡çº§ä¸�å›�滚ã€�Nginx é™�æµ�é…�ç½®ã€�Nginx 日志生产å®�战ã€�Nginx é…�置文件在线生æˆ�工具介ç»�等。</p><p><img src="/img/remote/1460000044576028" alt="图片" title="图片"></p><p>详细内容å�¯ä»¥æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=BJsELZT4iRpU1OjK0PhgJw%3D%3D.4RUn3NbDpVNvoKrFqWPYX7EkK0N7tuW7LVPck%2BwoDVoqVcbSw%2BwkN4buqyc3Lg94O9BY9CFC%2BkomFuqJ%2FFhuzrOdw7jN7BrQt3CVb8gDRuVqWuYHqOUAchidGDincrWMQNgnXEbf2Bjo%2Ft2VMn47r%2BIE%2ByY1JlABIFJEjFZPBHc%3D" rel="nofollow">Nginx å­¦ä¹ ä¸“æ �</a></p><h2>æ•°æ�®åº“</h2><h4>MySQL æ•°æ�®åº“</h4><p>MySQL æ•°æ�®åº“的基础知识,如:数æ�®ç±»å�‹ã€�存储引æ“�ã€�性能优化(软ã€�硬å�Šsql语å�¥ï¼‰ï¼ŒMySQL æ•°æ�®åº“的高å�¯ç”¨æ�¶æ�„的部分,如:主ä»�å�Œæ­¥ã€�读写分离的å�Ÿç�†ä¸�å®�è·µã€�è·¨åŸ�容ç�¾ã€�æ•°æ�®çš„备份ä¸�æ�¢å¤�等,然å��介ç»�了 MySQL 的管ç�†å‘½ä»¤ã€�æ•°æ�®åº“语言的命令ã€�库ä¸�表的管ç�†å·¥å…·ã€�性能分æ��ä¸�工具的使用ã€�MySQL æ•°æ�®åº“æœ�务器的硬件选å�‹ã€�性能监æ�§ã€�å¼€å�‘设计规范等知识。</p><p><img src="/img/remote/1460000044576029" alt="图片" title="图片"></p><p>详细内容å�¯ä»¥æŸ¥é˜…专æ �:《<a href="https://link.segmentfault.com/?enc=tyDKbvrEj5mK91jw1IkzEA%3D%3D.Kd7ZGnZ75YUJGwHZ9%2BhyY3FWSFkeAGkPnbXgId18vzF0WMunllwja7vm8XC8XAg2kkTTOSVAiPSjC%2B3i7I7%2BAv9fF16408pg7BnCUZxKOTRoBTcQC2KYQAhCC60oVlvKuwnNKWEuVjxnmoon7JMche6rmTCeSiIURU1IAohfu4tHNtBGiWSeuitc45SJSm%2B1" rel="nofollow">MySQL 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023 最新版)</a>》,数æ�®åº“的基础知识å�¯ä»¥çœ‹ï¼š<a href="https://link.segmentfault.com/?enc=rasNuZj8W6TshGs%2B34wByQ%3D%3D.rTAHJNUCTTc%2BSyqYhT82hDqxiRbUQNvxI%2FVkXeRwahsh4VZmsxWKkoijHMqx2MU5OT2UVvDplOkupdanxgcjFzhqET4BygePGkgejWJOFSuoV2FwUxW9v4cd9mgnu%2F3W5BVRjWzKYayHQE34zNxLtYYEb83VJqB6Fd8R5OeAjg8%3D" rel="nofollow"><strong>æ•°æ�®åº“基础入门</strong></a> 这个专æ �。</p><h4>PostgreSQL æ•°æ�®åº“</h4><p>PostgreSQL 是一个功能强大的开æº�æ•°æ�®åº“系统。ç»�过长达15年以上的积æ��å¼€å�‘å’Œä¸�断改进,PostgreSQL已在å�¯é� 性ã€�稳定性ã€�æ•°æ�®ä¸€è‡´æ€§ç­‰è�·å¾—了业内æ��高的声誉。目å‰�PostgreSQLå�¯ä»¥è¿�行在所有主æµ�æ“�作系统上,包括Linuxã€�Unixå’ŒWindows。</p><p><img src="/img/remote/1460000044576030" alt="图片" title="图片"></p><p>作为一ç§�ä¼�业级数æ�®åº“,PostgreSQL 以它所具有的å�„ç§�高级功能而自豪,åƒ�多版本并å�‘æ�§åˆ¶( MVCC )ã€�按时间点æ�¢å¤�(PITR)ã€�表空间ã€�异步å¤�制ã€�嵌套事务ã€�在线热备ã€�å¤�æ�‚查询的规划和优化以å�Šä¸ºå®¹é”™è€Œè¿›è¡Œçš„预写日志等。它支æŒ�国际字符集ã€�多字节编ç �并支æŒ�使用当地语言进行æ�’åº�ã€�大å°�写处ç�†å’Œæ ¼å¼�化等æ“�作。它也在所能管ç�†çš„大数æ�®é‡�和所å…�许的大用户é‡�å¹¶å�‘访问时间具有完全的高伸缩性。</p><p>详细内容å�¯ä»¥æŸ¥é˜…专æ �:《<a href="https://link.segmentfault.com/?enc=CdVJWxMLetLjOhlNpuURqw%3D%3D.gun31RC17ag8yoAGN5MeOKEsr3aXVscADkLugn5gToEEbgVwH4TiFS1I%2FeLhAExWygvX7Hyw1wAmcbsiwbLzmDonJCMsyBwt501TAhqBXdZt%2FbhWkFScuo8eM8n0fvAb80oHkDjx31M2e6pCr%2B1VR%2Fl%2B0lmFLUUzCw23GK5jkQo%3D" rel="nofollow">PostgreSQL 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版)</a>》</p><h2>Nosql æ•°æ�®åº“</h2><p>Nosql æ•°æ�®åº“是一ç§�é��关系å�‹æ•°æ�®åº“æœ�务,它能解决常规数æ�®åº“的并å�‘èƒ½åŠ›ï¼Œæ¯”å¦‚ä¼ ç»Ÿçš„æ•°æ�®åº“çš„IOä¸�性能的瓶颈,å�Œæ ·å®ƒæ˜¯å…³ç³»å�‹æ•°æ�®åº“的一个补充,有ç�€æ¯”较好的高效ç�‡ä¸�高性能。专注äº�key-value查询的redisã€�memcachedã€�ttserver。<img src="/img/remote/1460000044576031" alt="图片" title="图片">我们这里会é‡�点介ç»�:<code>Redis</code>ã€�<code>MongoDB</code>ã€�<code>ElasticSearch</code>。</p><h4>Redis</h4><p>Redis 是一款内存高速缓存数æ�®åº“。Redis全称为:Remote Dictionary Server(远程数æ�®æœ�务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支æŒ�丰富的数æ�®ç±»å�‹ï¼Œå¦‚:Stringã€�listã€�setã€�zsetã€�hash。</p><p><img src="/img/remote/1460000044576032" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:《<a href="https://link.segmentfault.com/?enc=gHZu9H5OTu%2BEBoyYxFhy5A%3D%3D.H0BXaqzl0VUqfva0Mdrvg66b3RPpvh%2BysUw%2B%2FEii2muhYuV%2FQhEeYoo2ijLSmCgT4ABgwjLGqZJDwra1jGBHi66kZA%2Bt6Nqy9e5Su9kFdVzUXiHMWiIiec2ixy3JvCfZDXUkNm9uC%2B9IG%2Bx0BMyQAGTHZxMOGsYLFhv54xjn6Vw%3D" rel="nofollow">Redis 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023 最新版)</a>》</p><h4>MongoDB</h4><p>MongoDB 是é�¢å�‘文档的 NoSQL æ•°æ�®åº“,用äº�大é‡�æ•°æ�®å­˜å‚¨ã€‚MongoDB 是一个在 2000 年代中期问世的数æ�®åº“。å±�äº� NoSQL æ•°æ�®åº“的类别。</p><p><img src="/img/remote/1460000044576033" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:《<a href="https://link.segmentfault.com/?enc=t0Wb8ScV7FCecKpTA6xI2g%3D%3D.0uL1o5H7P3Sdm98O4XKiOjfUyzLWDEl87FLgG6or2RGr%2BBBG2cuCPN%2BrrsG54ol7vQcCwoDJke7mTxjvSFRFwVu99JpIp70VhuUN%2B%2FFneyy6Abv1hKp924EloHHHEuBPnaYT1ZDcDKTOTMXaRipJ2k55yyOFMViuYOEjE2KNdiE%3D" rel="nofollow">MongoDB 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023 最新版)</a>》</p><h4>ElasticSearch</h4><p>ElasticSearch是一款é��常强大的ã€�基äº�Lucene的开æº�æ�œç´¢å�Šåˆ†æ��引æ“�;它是一个å®�时的分布å¼�æ�œç´¢åˆ†æ��引æ“�ï¼Œå®ƒèƒ½è®©ä½ ä»¥å‰�所未有的速度和规模,å�»æ�¢ç´¢ä½ 的数æ�®ã€‚</p><p><img src="/img/remote/1460000044576034" alt="图片" title="图片"></p><p>它被用作全文检索ã€�结æ�„化æ�œç´¢ã€�分æ��以å�Šè¿™ä¸‰ä¸ªåŠŸèƒ½çš„ç»„å�ˆã€‚</p><p>详细内容å�¯æŸ¥é˜…专æ �:《 <a href="https://link.segmentfault.com/?enc=ji73S0GZfLwgXJ50nAqziQ%3D%3D.UkZ4s8BOPmYFx6dbgr8eCYAydIZahSNR6fnySJUPrJ9cZr3AcXVGQrORMjSvYNB8AVpUKxFjH4Ff1mRJA2JUaKXy%2FXGHh5r6lxLiJkWWqfAeXtNLsS6ZJJsCwfQTQ7T5hqqxISL32GrxcsFVzL5FwthdV6%2FRzluqKn7AsnsAvj0%3D" rel="nofollow">ElasticSearch 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023 最新版)</a>》</p><h2>Tomcat 技术å®�è·µ</h2><p>Tomcat éš¶å±�äº� Apache 基金会,是开æº�的轻é‡�级 Web 应用æœ�务器,使用é��常广泛。客户端用户点击æµ�览器æœ�务è¿�æ�¥ï¼Œæµ�览器通过客户端底层æœ�åŠ¡é€šè¿‡è·¯ç”±ä¼ é€�æŠ¥æ–‡ï¼Œç›®æ ‡æœ�务器è�·å�–è§£æ��报文,Tomcat监å�¬ç¨‹åº�触å�‘处ç�†è¯·æ±‚。</p><p><img src="/img/remote/1460000044576035" alt="图片" title="图片"></p><p>Tomcat 相关知识点在é�¢è¯•中出ç�°çš„å‡ ç�‡å¹¶ä¸�高,所以,很多人忽略了对 Tomcat 相关技能的æ�Œæ�¡ï¼Œå…¶å®�它也是é��常é‡�è¦�的知识点之一。</p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=itVpf%2FqBIMuc97SncoHxuQ%3D%3D.VtuxV3d81D%2B%2FOplno8wrAUHL4Y5p1OcfmnHhInQsjFDY8OHK%2BNIZAR8fNPM1CyKnF3yZhblcIUuMvUqXLSQ0Ttcph15qvm5CwVfYyZe7bqhP7KLOOyDAheGkYD%2F8fT7RvOdoYcaEO9WtDQohHyFJFBQV5meLzkW7JrqLul8%2F1oo%3D" rel="nofollow">Tomcat web 技术å®�è·µ</a></p><h2>ä¼�业生产项目å®�è·µ</h2><p>一个中å°�ä¼�业生产ç�¯å¢ƒé¡¹ç›®å®�践(将之å‰�的知识è¿�è´¯è¿�用的å®�践):</p><ul><li><a href="https://link.segmentfault.com/?enc=UM%2FNwu8XWwbyDtHl86pS8A%3D%3D.1zVB48iXMWJytGhNfwMby5o26I9aHFfeWgy0zA71aJziysowsld%2FLx4y5Y6C91mpuQbIWGj5gJZ0SGR22Alx2vS%2BkIy8lOZCBE9c3o9kAebxsJzhfu6KuXsgLyizuT7x1v9vf4w9ITvqQGiG3rjpALVFPoOeh7Abcrro7GHgSrkuG%2FzY1GqCfxd0uwhhN1yKMDRxreymfKeQfLItQrJ59hY%2FYABLiU%2BXU41Yye7dn5gxj73WZoJ4wU%2BYdHPbRj67roMCqURtwhOewYZP3WBD6ixXG9NcSrGc2sNWvtmBmME%3D" rel="nofollow">Linux 系统集群æ�¶æ�„线上项目é…�ç½®å®�战(一)</a></li><li><a href="https://link.segmentfault.com/?enc=rdcQX2qp1Abz4JzLY5zy2w%3D%3D.ZBx%2Bns6xxGpmSFAPjid2cxm4YHUIrZeEj%2BYWyjdSuOeI5bkXnnPTEMnBanFnmEPIQvc1k7bOWShx1sqlw0zLdE6dKcCJbPrVINH65ISpO6k1cyjPOi%2F5pS%2B1EbGaN4azPb9%2BiSZa9Y%2FmB7e3Zj6g6al8Tbys3DVYlx6olN5NJFImnGAfNX7%2FL4VnNS2Dgqk2qZ5Fqo5OvamZihXSvkFSRRxvo3XSmg961EbUc2UaZAkZ3fim8S8Lq2RxU2m%2BRJDaW1mzHXGJ3A4j4aszdU1%2F4p91nt%2BldEPPRwVhLbFDHu0%3D" rel="nofollow">Linux 系统集群æ�¶æ�„线上项目é…�ç½®å®�战(二)</a></li><li><a href="https://link.segmentfault.com/?enc=JuIJEOjeVR1X0eNGJGlDAw%3D%3D.WaV1Sj1sIvS4nO1defepC1qW2Yit95kJaWGi9ZaC25%2BpcJ1%2FZhoqKgRWpQaxtbVoHVRizA0XDv4YQdPP8FesQKJxUuqBavae7o68W8M4cyoc3akN9XEYhFRPm%2BRjucso0LwMtvIFPJQ%2FWQYBbZMFKR%2BxF1P%2FI9UfaBasxISCqrUbvbKyhv0OSjozT0erJcOSo4buZ1zneLXw%2FGtBKO0lARupl5jceQgRcK%2Faj67O6hzUmJqTInSu9GVuennemJa70tfxuyh6sfayivdmV1T%2BqQqcQ%2B0BQcRSdIj6Tkh9kuo%3D" rel="nofollow">Linux 系统集群æ�¶æ�„线上项目é…�ç½®å®�战(三)</a></li><li><a href="https://link.segmentfault.com/?enc=EeryX9yA3POh%2B3yTzOxmLA%3D%3D.fwCv0yfMHFnBdPajxBjTsMGBh%2BLVDeyTMgTY9MaaeNb%2FfoPZqhUXDG9XswR8sF1Wzxb7nuAGJQ8lQbraOQwV0pbW6nerssulHQg5XaUwwarsFJyjibEbkv92czjSDPGW3zc%2Fy7hA0I1YM9nuGjF9PxNUY17cyP99ZasqrP9TwcLyi9IhjzH1P%2BNm9k%2BkvooAjyHi9UVJ0wk%2FLfMRhqjxj%2FPTb%2FusvAps9JQJEM3aqGbtv4WSN2RJbWEh%2B7lVgU%2FNyXPdO3dffp5ia%2FAYG68qVt4mFMXsCYUSITv7mh0faGA%3D" rel="nofollow">Linux 系统集群æ�¶æ�„线上项目é…�ç½®å®�战(四)</a></li><li><a href="https://link.segmentfault.com/?enc=43CTFMrMELIKO1M2I9p3dQ%3D%3D.N0qJ9xxf6ovgfgRfGW2NZuwPLQfzrH6wh5RlJv4FZoqk8fmno0ZhTVFJ23WBbpBPDs9NCMw97ICJR%2B9fADAEmX5v1W126av6oNeIYwTnXM6vBbVUvdJBygYEsJsPo7BR7oDH9DcyA%2F%2BJEwF1Igz81DqFlKxD2kp1iY5AE0EPETG00Cnlg%2BaIGcVaIN4PS3duHkfKNJfLMLVWfvPGAL0SJpBUrCmFsuqNlkwyutKWi7BikUfkoG8E%2F2k%2BIbuTTw%2F1Zpwcmwge9VaRYYjbjrRMIinFx0ODhER0uaePCwSfyxE%3D" rel="nofollow">Linux 系统集群æ�¶æ�„线上项目é…�ç½®å®�战(五)</a></li></ul><h2>常用中间件æœ�务</h2><p>介ç»�常用中间件æœ�务(Kafka\Rabbitmq\Zookeeper等)相关的日常è¿�维所需知识体系。</p><h4>Kafka</h4><p>Kafka是一个开æº�消æ�¯ç³»ç»Ÿï¼Œç”±Scala写æˆ�。是由Apache软件基金会开å�‘的一个开æº�消æ�¯ç³»ç»Ÿé¡¹ç›®ï¼Œè¯¥é¡¹ç›®çš„ç›®æ ‡æ˜¯ä¸ºå¤„ç�†å®�æ—¶æ•°æ�®æ��供一个统一ã€�高通é‡�ã€�ä½�等待的平å�°ã€‚</p><p><img src="/img/remote/1460000044576036" alt="图片" title="图片"></p><p>å…³äº�消æ�¯ä¸­é—´ä»¶ Kafka ç³»åˆ—çš„å­¦ä¹ æ–‡ç« ï¼Œè¯·å�‚阅:<a href="https://link.segmentfault.com/?enc=spWt2rccLgsCuwWBivsP1g%3D%3D.zkVlV7qskYGS7X9j7F75jj62UyNz2h0o1YLPPkShZhr6RWoh82Qr7DpTCwZ3RIQMHdPuNZBALkWF20qeZqQLAQpCG0BrKoDDgM%2BpOwYtdpEm59iM0tFYG732T0MuiIx%2Fvw%2BAO1JrzVZ375tC5n3xfRafCrFVz7CPOCKiZCE4glM%3D" rel="nofollow">Kafka 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版)</a>。</p><h4>Rabbitmq</h4><p>RabbitMQ是由erlang语言开å�‘,基äº�AMQPå��è®®å®�ç�°çš„æ¶ˆæ�¯é˜Ÿåˆ—,它是一ç§�应用程åº�之间的通信方法,消æ�¯é˜Ÿåˆ—在分布å¼�系统开å�‘中应用é��常广泛。</p><p><img src="/img/remote/1460000044576037" alt="图片" title="图片"></p><ul><li>官网地å�€ï¼š<a href="https://link.segmentfault.com/?enc=WdbbNnZZ9uF2DbvjyWerVg%3D%3D.lUoYgj7nZAvdbB2WOTWirIRb3fnq%2FAnD%2BVm6lxgzrdw%3D" rel="nofollow">https://www.rabbitmq.com</a></li><li>Git地å�€ï¼š<a href="https://link.segmentfault.com/?enc=tMwqjSGhIe%2BNmqM82xSnJw%3D%3D.%2BPwLAqInj9ESUzeHWWxIBjYHY8sh9Ep%2BnzAS1n12oqc%3D" rel="nofollow">https://github.com/rabbitmq</a></li></ul><p>RabbitMQ 是一个消æ�¯ä¸­é—´ä»¶ï¼šå®ƒæ�¥å�—并转å�‘消æ�¯ã€‚</p><p>更多关äº�消æ�¯ä¸­é—´ä»¶ RabbitMQ ç³»åˆ—çš„å­¦ä¹ æ–‡ç« ï¼Œè¯·å�‚阅: <a href="https://link.segmentfault.com/?enc=JIgbrL0FPKksReajzm6Vxg%3D%3D.Zz3vijrao1Z3qw9AgnwpxDJ0%2Fjg0Lq%2FRr%2FaEpKHGShK4W%2BHWtZtSa19qzvlWfi9UBioUQ2GBI5O8IYWtnxNwttWM8%2F5UIhk3NaghOMnMLjLKnDJOPdiIua1r4d2wb1v63BINSCX6capQi9qcCThg%2FdWS3Tvo%2FDUwsQ9F2UBCbLY%3D" rel="nofollow">RabbitMQ 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版)</a>,本系列æŒ�续更新中。</p><h4>Zookeeper</h4><p>zooKeeper 是一个分布å¼�的,开放æº�ç �的分布å¼�应用程åº�å��è°ƒæœ�务,是Googleçš„Chubby一个开æº�çš„å®�ç�°ï¼Œæ˜¯Hadoopå’ŒHbaseçš„é‡�è¦�组件。</p><p><img src="/img/remote/1460000044576038" alt="图片" title="图片"></p><p>更多关äº� Zookeeper ç³»åˆ—çš„å­¦ä¹ æ–‡ç« ï¼Œè¯·å�‚阅:<a href="https://link.segmentfault.com/?enc=39EGqaYyiSS8SWqxrXKtvg%3D%3D.zvvCa%2FJIkOOB9oexAoTtNW6YOieZjp97YLl1tssSKscX%2BJVwJ7MrJZzmPtemPrFsG9XtxZjfHtVkYFl1W3%2FpxpCHl95dLzz%2FQYmrutmVccsnF3mA9SJj%2FwJs%2B0MTpeRmWdyU3YaHjo2ELrFxDN4iZYynrmkOV7P2IYJ5%2BcXm7nE%3D" rel="nofollow">Zookeeper 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版)</a>。</p><h2>ä¼�业集群管ç�†</h2><p>集群是一组å��å�Œå·¥ä½œçš„æœ�务集å�ˆï¼Œç”¨æ�¥æ��供比å�•一æœ�务更稳定ã€�更高效ã€�更具扩展性的æœ�务平å�°ã€‚当业务体é‡�达到一定的é‡�级的时候,å�•机或者多机的æ�¶æ�„å·²ä¸�能å†�满足ä¼�业的业务需求,这时就需è¦�进行æ�¶æ�„的扩展ä¸�优化。</p><p>此时,我们便会引äº�è´Ÿè½½å�‡è¡¡ã€�高å�¯ç”¨é›†ç¾¤ç®¡ç�†çš„æ�¶æ�„,ä»�而æ�¥æ»¡è¶³æˆ‘们ä¸�æ–­å¢�长的业务需求。</p><p>详细的内容å�¯ä»¥æŸ¥é˜…:<a href="https://link.segmentfault.com/?enc=1wHILNZU1aU1YOPxFADHhQ%3D%3D.FtuHppTwQffaALItq7avAj2%2BjQNAfjbcyO4VuIjtU8o02gOOzKJL93BLUvLBupagqYF3RoTajwwnFiMpl2wipg%2FVRwIBflUo5%2Bl95F0g5YAkgCboUCZoKdMjMEcY7JH8vwaiBemuqAjrc1Yx1rNiao%2FC3p14Pgh%2BmQYEPEMwVVo%3D" rel="nofollow">æ�„建ä¼�业级高å�¯ç”¨é›†ç¾¤æ�¶æ�„å®�è·µ</a></p><h2>Docker 容器技术</h2><p>介ç»� docker入门ã€�安装ã€�常用的命令ã€�三剑客ã€�ç§�有仓库æ�­å»ºä»¥å�Šå®¹å™¨ç›‘æ�§ç­‰æ–¹é�¢çš„æ€»ç»“。</p><p><img src="/img/remote/1460000044576039" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=RZez9K1xXml5ZZnTAIrClA%3D%3D.2WUoLXr9bxk9YM%2FRWOrinnHO0mdCJEENEf95x9%2B4bXcd2G8qGFSrEUjSaDh5NkjH7taF7DXYZ1L2bj%2FDD8NwF%2FZcsQvTmmBBmlKAanCPzlYFpThLBdgJvYEnsbpOR77dPLscu26SsKKIeSb3tE0jjnz%2BCvEnpWK0kOrzAchlMko%3D" rel="nofollow">Docker</a></p><h2>ä¼�业云计算平å�°</h2><p>云计算平å�°ä¹Ÿç§°ä¸ºäº‘å¹³å�°ï¼Œæ˜¯æŒ‡åŸºäº�硬件资æº�和软件资æº�çš„æœ�务,æ��供计算ã€�网络和存储能力。云计算平å�°å�¯ä»¥åˆ’分为3类:以数æ�®å­˜å‚¨ä¸ºä¸»çš„存储å�‹äº‘å¹³å�°ï¼Œä»¥æ•°æ�®å¤„ç�†ä¸ºä¸»çš„计算å�‹äº‘å¹³å�°ä»¥å�Šè®¡ç®—和数æ�®å­˜å‚¨å¤„ç�†å…¼é¡¾çš„综å�ˆäº‘计算平å�°ã€‚</p><p><img src="/img/remote/1460000044576040" alt="图片" title="图片"></p><p>OpenStack 是由一系列具有 RESTful æ�¥å�£çš„Webæœ�务所å®�ç�°çš„,是一系列组件æœ�务集å�ˆã€‚Openstack 是一个云平å�°ç®¡ç�†çš„项目,我们å�¯ä»¥ä½¿ç”¨Openstackæ�¥æ�„建一个ç§�有云æ�¶æ�„,并æ��ä¾›IaaS的云æœ�务。Openstack 包å�«ä¸‰å¤§é¡¹ï¼šè®¡ç®—ã€�网络和存储。其主è¦�ç›®æ ‡æ˜¯ç®€åŒ–èµ„æº�çš„é…�置和管ç�†ï¼ŒæŠŠè®¡ç®—ã€�网络和存储资æº�抽象æˆ�虚拟资æº�æ± ï¼Œå¹¶æ ¹æ�®éœ€è¦�对外æ��ä¾›æœ�务。</p><p>更多关äº�ä¼�业云计算平å�°OpenstackçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ è¯·æŸ¥é˜…ä¸“æ �:<a href="https://link.segmentfault.com/?enc=Xfi3W3GMv%2BqFTPqcE5kdVg%3D%3D.y3xdkxFegjvLywqYwH2aTwnZU7wpKKFh%2FtbpVCH2hudshBuajpnk1Dryr05T%2Fa58sGaJo8eMGMDvss6oGG%2FMayuDhuP%2Bxmsza3FjhWc2XvTQLrih7W9r8%2BybkcCWGFDU8vpzA606a4SlBgznZs0IH752vemD1ugzBZspHQCYft0%3D" rel="nofollow">ä¼�业云计算平å�° Openstack</a></p><h2>Kubernetes 技术å®�è·µ</h2><p>介ç»� Kubernetes 技术å®�践知识体系。ä»�å�Ÿç�†ã€�部署开始,é€�步深入å�»å­¦å�„个知识点,比如:Pod çš„å®�ç�°å�Ÿç�†ã€�YAML语法ã€�Kubectl使用指å�—ã€�资æº�æ�§åˆ¶ã€�æ•°æ�®å­˜å‚¨ã€�Harbor仓库ã€�资æº�清å�•ã€�æœ�务å�‘ç�°ã€�Ingress æœ�务ã€�集群调度ã€�集群管ç�†å·¥å…·ã€�é�¢è¯•题ã€�生产å®�践等。</p><p><img src="/img/remote/1460000044576041" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=P%2BATpYoibPr%2Bs8bAV1SnKw%3D%3D.LAt2hM7eVP89sEW7bC%2Bdwe6vtQTDKzI7adT6IzytQp7bDqCX3to%2F9JccPpXYBNGT%2B%2BgALTmUyI4inA8NQr7Y%2F2yYp%2BrUQwfdqGsqJnyAPGarBa0%2FVEUJS%2BuNfsoUqxQZV04OF%2FhP0Lia%2BJ1eKpwJeVSg94J1249eoC4vT7WQG%2Fs%3D" rel="nofollow">k8s 技术å®�è·µ</a></p><h2>大数æ�®è¿�维体系</h2><h4>大数æ�®æ¦‚è¿°</h4><p>大数æ�®ï¼ˆbig data),指的是在一定时间范围内ä¸�能以常规软件工具处ç�†ï¼ˆå­˜å‚¨å’Œè®¡ç®—)的大而å¤�æ�‚的数æ�®é›†ã€‚说白了大数æ�®å°±æ˜¯ä½¿ç”¨å�•å�°è®¡ç®—机没法在规定时间内处ç�†å®Œï¼Œæˆ–者å�‹æ ¹å°±æ²¡æ³•处ç�†çš„æ•°æ�®é›†ã€‚</p><p><img src="/img/remote/1460000044576042" alt="图片" title="图片"></p><h4>大数æ�®çš„特性</h4><ul><li><code>大é‡� (Volume)</code> :大数æ�®çš„“大â€�首先体ç�°åœ¨æ•°æ�®é‡�上。在å®�际应用中,大数æ�®çš„æ•°æ�®é‡�通常高达数å�� TB,甚至数百 PB。</li><li><code>高速 (Velocity)</code>:大数æ�®çš„“高速â€�指高速æ�¥æ”¶ä¹ƒè‡³å¤„ç�†æ•°æ�® — æ•°æ�®é€šå¸¸ç›´æ�¥æµ�入内存而é��写入ç£�盘。</li><li><code>å¤šæ ·åŒ– (Variety)</code>ï¼šå¤šæ ·åŒ–æ˜¯æŒ‡æ•°æ�®ç±»å�‹ä¼—多。</li></ul><p>Hadoop 是用äº�处ç�†å¤§æ•°æ�®çš„工具之一。Hadoop 和其他软件产å“�通过特定的专有算法和方法æ�¥è§£é‡Šæˆ–è§£æ��大数æ�®æ�œç´¢çš„结æ�œã€‚</p><p><img src="/img/remote/1460000044576043" alt="图片" title="图片"></p><p>在大数æ�®å¤„ç�†ä¸Šï¼ŒHadoopå¹¶é��是唯一的分布å¼�处ç�†æ�¶æ�„,但是对äº�大部分的ä¼�业æ�¥è¯´ï¼ŒåŸºäº�Hadoopå·²ç»�能够满足ç»�大部分的数æ�®éœ€æ±‚ï¼Œå› æ­¤æ‰�会æˆ�为ç�°åœ¨çš„主æµ�选择。</p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=cE%2Bg4gJGsX9DAuuHIrgL9A%3D%3D.mloWSh0Q00MLYg2ZWsSD8PvITYtiRS%2FZFjYZPjluQwWvA11F4Ckv%2FMcc5ocexswPktwwmWlh0BEh5QYjUIi0agdb88FSM0NFBB8FJtmhUtoEGLMcWS2oTzXi6Hbch4Mzj%2FSoTkvNlll8zEz58gxjpcyC%2FiRxjeiKHUW8qzWpcI8%3D" rel="nofollow">大数æ�® Hadoop 系列</a></p><h2>分布å¼�存储</h2><p>分布å¼�文件系统是分布å¼�领域的一个基础应用,其中最著å��çš„æ¯«æ— ç–‘é—®æ˜¯ HDFS/GFS/ceph/MinIO 。如今该领域已ç»�è¶‹å�‘äº�æˆ�熟,但了解它的设计è¦�点和æ€�想,对我们将æ�¥é�¢ä¸´ç±»ä¼¼åœºæ™¯/问题时,具有借鉴æ„�义。</p><p><img src="/img/remote/1460000044576044" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=MBJ4SN30HYaCRzRnxC35lw%3D%3D.CQQX%2FweEElYuBvoTQkqAikLzBvU87ASXSSR%2Fg3mi63NJio6C%2FvMcdQA5DI4Y0MWX6HphGUHw5mKDONcVbXOESjIb7NYv%2FFLQmSE%2F0YuRfiiwXmG4qylHR64iSbtutM%2Bo3cMtZtPG0iEQ0J6W205y1KfF8o3aMmDZ%2B9yHfusUsV4%3D" rel="nofollow">分布å¼�存储技术å®�è·µ</a></p><h2>代ç �管ç�†ï¼ˆGit)</h2><p>作为目å‰�世界上最先进的分布å¼�版本æ�§åˆ¶ç³»ç»Ÿï¼ˆæ²¡æœ‰ä¹‹ä¸€ï¼‰ï¼ŒGit 是一个开æº�的分布å¼�版本æ�§åˆ¶è½¯ä»¶,用以有效ã€�高速的处ç�†ä»�很å°�到é��常大的项目版本管ç�†ã€‚Git 最åˆ�是由Linus Torvalds设计开å�‘的,用äº�管ç�†Linuxå†…æ ¸å¼€å�‘。éš�ç�€æ—¶é—´çš„æ�¨ç§»ï¼ŒGit å�‘展到今天,已ç»�æˆ�为了众多开å�‘者必备的开å�‘工具。</p><p><img src="/img/remote/1460000044576045" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=4AzXkM4plmCLAlN%2B5GqlbQ%3D%3D.bmu81FI%2BI73uFenrk5iYNx%2BsYUERtDb4A0ZJ0qZuk36XKmn1VM8JRLABdRQvuHoLlqufnzdp1HF2NY%2FJe6sXrJ9UnKSRlkdLM3JsuR1Cdf67MzNd%2BZNrKeVH%2BvygKSUobYpf0Z8Uv%2F%2F7vPN%2BCvU9R9VpkwPt8%2BrOyH2joqiM8GI%3D" rel="nofollow">Git 技术</a></p><h2>日志平å�°</h2><p>介ç»�日志平å�°ç›¸å…³çš„æ—¥å¸¸è¿�维所需知识体系,日志管ç�†ä¹Ÿæ˜¯æ—¥å¸¸å·¥ä½œä¸­é��常é‡�è¦�的一项内容。比较主æµ�的是ELK stackå’ŒGraylog。ELKç›®å‰�很多公å�¸éƒ½åœ¨ä½¿ç”¨ï¼Œæ˜¯ä¸€ç§�很ä¸�错的分布å¼�日志解决方案。</p><p><img src="/img/remote/1460000044576046" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=Qg3XgoUxA%2FPAy%2BO7Q%2F3X8w%3D%3D.ZHuY4d6ZESKkfV6V%2BXO6afFgYn%2F%2FuDIfaOqoHhFWkemXX9z%2FEqOeurfb3vxPCgtd5V7P1G5oi1uVQOqtH5FtIx6wrLN9aChJhdg3iZ1MNiQLa0znRV2%2BRIdBP4RNJ%2F9KfpPgh4NNSP0hKV1scIVDf5y4B5xI6glQt1vaD199GXk%3D" rel="nofollow">日志平å�°</a>。</p><h2>自动化系列(DevOps)</h2><p>介ç»�ä¼�业自动化体系建设(DevOps)相关的日常è¿�ç»´æ‰€éœ€çŸ¥è¯†å­¦ä¹ ã€‚æ¯”å¦‚ï¼šJenkinsã€�CI/CDã€�æœ�务å�‘ç�°ã€�é…�ç½®ã€�容器管ç�†ã€�K8S包管ç�†ç­‰å·¥å…·ã€‚</p><p><img src="/img/remote/1460000044576047" alt="图片" title="图片"></p><p>详细内容å�¯æŸ¥é˜…专æ �æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=kBUIW2PvB4%2F7jB8nVAANrg%3D%3D.1Zg84VDrqnUDJiYkfj8dNkKwNZ3qqD4paCCoL9FACjr%2BDO1Dw2mqyvBL0UxVRRbjhRB4Ge%2FPWgPNLluIMQEmk3KeYe6qrSzbYXrmnzezIFS8AUIYGQ4RtgYVvE41rVqrnLKRsqUHgenKBiDGUaW32F%2F80rykREGEfxq2TlfKboc%3D" rel="nofollow">æ�„建ä¼�业DevOps自动化è¿�维管ç�†å¹³å�°</a></p><h2>ä¼�业生产监æ�§</h2><p>监æ�§ç³»ç»Ÿæ˜¯æ•´ä¸ªè¿�ç»´ç�¯èŠ‚ï¼Œä¹ƒè‡³æ•´ä¸ªäº§å“�生命周期中最é‡�è¦�的一ç�¯ï¼Œäº‹å‰�å�Šæ—¶é¢„è­¦å�‘ç�°æ•…障,事å��æ��供翔å®�的数æ�®ç”¨äº�追查定ä½�问题。ä¼�业生产ç�¯å¢ƒç›‘æ�§ç³»ç»Ÿä»‹ç»�,包括但ä¸�é™�äº�å�„类工具(Zabbixã€�Prometheus 等)安装ã€�é…�ç½®ã€�优化ä¸�å®�è·µç»�验总以å�Šæ�’错等,详细的监æ�§å·¥å…·ä½¿ç”¨å�¯æŸ¥é˜…专æ �:<a href="https://link.segmentfault.com/?enc=42X0SD1dazPtAm3nDRYF6g%3D%3D.zM0HxoggjffBJt1%2FUbCSi1yBCFFL2nUBB253K3HDm6Tq0E28TPNZ2JL6x77cIqeq33X4TVg6m7WmH26n3%2Fc%2F12yvorwK6wwzFAtnpzWxhRZ%2FxgiHS6ps2739l3zHb6kdQzTqy%2BOTV6O388aGkZSvSBqQXu0zGvrjx%2FBBOMxENvY%3D" rel="nofollow">监æ�§ç³»ç»Ÿ</a>。</p><p><img src="/img/remote/1460000044576048" alt="图片" title="图片"></p><p>更多关äº�ä¼�业级监æ�§å¹³å�°çš„建设ä¸�è¿�维管ç�†ï¼Œå�¯ä»¥å�‚阅专æ �:<a href="https://link.segmentfault.com/?enc=EVd5y41AXHUCT1SMQ6w0RA%3D%3D.BzI2yv9aMlUGn867isNeH%2FkV%2B7kIh7wSzg9JK3UO3rQFgS%2BYNyaHwERzwY3Sn6F9%2Bgo6LD5K%2BhKMEA8noAEShcqMiHdfsKX2SilmUSF7mt5SkPmV%2BPUpeBrMb8i9F8Urj8v4yf1nB6rble8dc%2FD3GVcYi3aqthUsSCalCmuNwEs%3D" rel="nofollow">ä¼�业级监æ�§å¹³å�°</a></p><h2>常用工具</h2><p>介ç»�常用工具(命令工具ã€�其它工具)相关的日常è¿�维所需知识体系。</p><p><img src="/img/remote/1460000044576049" alt="图片" title="图片"></p><p>å�¯ä»¥å�‚阅专æ �:<a href="https://link.segmentfault.com/?enc=o94SEb3G7A7KNHgszLtEPg%3D%3D.nITSQRZiBQIj854Uwk6bylWiu%2FAPcGJC2jhy7SF2D1CXsKl8bQyunFuqrqylBv4VvfoQTDW1lgp9ZEwC17W3WMN4z4OJSNgBdqpkFNWh2eKgeutjwEdbHpYj8iIOlMudgBHTLkRzcCL0U2y4HFUrqxb7NjiNfaU1YIUXnI30cmo%3D" rel="nofollow">Tools</a> å�»å­¦ä¹ 更多相关工具的å�Ÿç�†ä¸�æ“�作。</p><h2>Java å��ç«¯æŠ€æœ¯æ ˆ</h2><p>还å�¯ä»¥è¿›ä¸€æ­¥å�»äº†è§£ä¸€äº›å��端的基础入门ç�†è®ºçŸ¥è¯†ï¼Œé€šè¿‡ç†Ÿæ‚‰ä¸Šä¸‹æ¸¸çš„çŸ¥è¯†ä½“ç³»ï¼Œè¿™æ ·åœ¨å·¥ä½œä¸­æˆ‘ä»¬ä¹Ÿä¸�会那么容易被动,这就是è¿�维为什么è¦�ä¸�æ–­å­¦ä¹ çš„å�Ÿå› 。</p><p><img src="/img/remote/1460000044576050" alt="图片" title="图片"></p><p>比如:了解一下关äº�<a href="https://link.segmentfault.com/?enc=wb%2FTNF7Ouh00IilZ7m0FLA%3D%3D.W9ylO72raqozWJTlUHLM0iei03ooNkNpFraLN2RIPpFWr6Fwvr2%2BS5IeOtY9EtAiydLHBX4UKwtXBwcdrLiU5Yb9AgQltZMly%2FheN8uZel8puXopcR3RGnIwNXItCKrvVKl%2BOB2e8iN%2FyMmE1nx%2FqEz41Azw6e2R9Li2bNS1CQg%3D" rel="nofollow"><strong>Javaå��端技术</strong></a>ã€�<a href="https://link.segmentfault.com/?enc=G%2BwSKhdjrQYZBqMUDEtuwg%3D%3D.7OOWEzUJ%2FJdln2%2BHf9W5m6a01c9wzDRgKXHGAbcAgfvmwKUIgPDYVd2Yci8KMKLJvX32wsu9DbVH%2FA9MiGptQsrhCtW86tkfo4aR5TXJo4BJMNHZuImTcBY15F2fAwg3vXQ3O4%2BiYMEqF8t97t0ZwQIsUL%2BFaOHFmZmbYp3hdwk%3D" rel="nofollow"><strong>å¾®æœ�务æ�¶æ�„</strong></a>,轻é‡�级 Javaå¼€å�‘框æ�¶<a href="https://link.segmentfault.com/?enc=wxFPzhvY6fJdTCcBHPk4Jg%3D%3D.uVxiLj69KL3WPLWJy1jS5uN4wzZ6%2FUZ8OAzkhgVhOGDyzF%2F9PpEXU%2Fcb%2B8WVUPQGmgIik%2FNkDdcyZMifdt1j1yYD7fm%2B%2FZDH7XbL4CXPnUAsdgg8QUazV2Hma8eBMpjr%2BhfSDBZrbXEA%2F862i4eCI3cjnxMBjjdNNGpB%2FG8%2FDLI%3D" rel="nofollow"><strong>Spring</strong></a> 等。</p><h2>ä¼�业é�¢è¯•</h2><p>介ç»�ä¼�业é�¢è¯•ç»�验ã€�å�„ç±»é�¢è¯•题详解等(é�¢è¯•题ä¸�é�¢è¯•ç»�验总结分享)。å�¯ä»¥å�‚阅专æ �:<a href="https://link.segmentfault.com/?enc=2fNEZxJZgh0UmhlNu%2BfZuA%3D%3D.D1w3bUiUqJ4YPZtdRX%2FzhtL0Qd4RtEAVWRTC8Q3yGVPcqS9dwa3knXda5yirKTTMCwlt3auWctCb4QFDfnlSYTteSxImIH6wCHj7gKeHNOYnNvWHBYkDR4bwVF084p%2FwEcJjwUwYiu9Tsbqe%2FuC1bO7J2hNcFSQB2DTjmeShIXY%3D" rel="nofollow">ä¼�业é�¢è¯•题</a>。</p><p>学完这些内容这å��,å�¯ä»¥è¿™ä¹ˆè¯´ï¼Œè¿˜æ˜¯ä»…仅是开始,更多的还是è¦�将所学的知识结å�ˆå®�际的生产ç�¯å¢ƒï¼Œç„¶å��通过ä¸�æ–­çš„å®�è·µå�»æ€»ç»“,慢慢的一点点å�»è¡¥å……自己的整个知识体系的高墙,ä»�而使之更å�šå›ºã€�æ›´æŒ�ä¹…ã€�更强大。</p><p>如有帮助,请点<strong>在看ã€�转å�‘朋å�‹åœˆæ”¯æŒ�</strong>ï¼�æ„Ÿè°¢ä½ çš„å…³æ³¨ä¸�支æŒ�。 </p><p><strong>路虽远,行则将至ï¼�</strong></p><p><strong>事虽难,å�šåˆ™å¿…æˆ�ï¼�</strong></p> 别å†�傻傻地用 ifconfig 查地å�€äº†ï¼�è¿™æ�¡å‘½ä»¤è¶³ä»¥è®©ä½ 摘æ�‰å°�白工程师的帽å­� https://segmentfault.com/a/1190000044505832 2023-12-26T22:19:03+08:00 2023-12-26T22:19:03+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥。</p><p>别å†�用 ifconfig 啦ï¼� 赶紧试试这个å�§ï¼šiproute2 ï¼�</p><p>众所周知,在 Linux 系统中,ip å’Œ ifconfig 这个两命令的功能å��分相似,ifconfig 是 net-tools 中已被弃用的一个命令,很多年å‰�就已ç»�没有维护了。但是今天我们ä¸�讨论ä¸�å­¦ä¹ è¿™ä¸ªï¼Œæ�¥å­¦ä¹ 一个更强大的命令工具:iproute2。</p><h2>简介</h2><p>Iproute2 是一个在 Linux 下的高级网络管ç�†å·¥å…·è½¯ä»¶ã€‚å®�际上,它是通过 rtnetlink sockets æ–¹å¼�动æ€�é…�ç½®å†…æ ¸çš„ä¸€äº›å°�工具组æˆ�的,ä»� Linux2.2 å†…æ ¸å¼€å§‹ï¼ŒAlexey Kuznetsov å®�ç�°äº†é€šè¿‡ rtnetlink sockets 用æ�¥é…�置网络å��è®®æ ˆï¼Œå®ƒæ˜¯ä¸€ä¸ªç�°ä»£çš„强大的æ�¥å�£ã€‚</p><p>Iproute2 之所以出ç�°ï¼Œæ˜¯å› 为,之å‰�一直以æ�¥ï¼Œäº’è�”网上的一些ä¸�å…³è�”的网络工具都被打包进了 net-tools,éš�ç�€æ—¶é—´çš„æ�¨ç§»ï¼Œå¾ˆå¤šå·¥å…·éƒ½å·²ç»�没有维护了。所以,æ‰�使用了新的å��å­— iproute2 æ�¥æ›¿ä»£net-tools工具包。</p><p>ç›®å‰�iproute2工具包内的工具,它们使用方å¼�都é��常的相似,且统一开å�‘ç»´æŠ¤ï¼Œè¿™æ ·ä¹Ÿä¾¿äº�用户ç�µæ´»çš„è¿�用工具包内的工具。</p><h2>net-tools å’Œ iproute2 的对比</h2><p><img src="/img/remote/1460000044505834" alt="" title=""></p><h2>安装ä¸�使用</h2><h4>安装</h4><p>centos 安装 iproute2 命令</p><pre><code>yum install -y iproute</code></pre><p><img src="/img/remote/1460000044505835" alt="" title=""></p><pre><code>[root@CentOS7-1 ~]# ip -V ip utility, iproute2-ss170501</code></pre><h6>常用命令å�Šå�‚数介ç»�</h6><pre><code>ip link #网络设备é…�置命令,如:å�¯ç”¨/ç¦�用æŸ�个网络设备,改å�˜mtuå�Šmac地å�€ç­‰ ip addr #管ç�†æŸ�个网络设备ä¸�å��è®® (IP或IPv6) 有关的地å�€ï¼Œä¸�ip link类似 ip addrlabe #IPV6的地å�€æ ‡ç­¾ï¼Œ ip route #管ç�†è·¯ç”±Â· å¦‚æ·»åŠ ï¼Œåˆ é™¤ç­‰ ip rule #管ç�†è·¯ç”±ç­–略数æ�®åº“ ip neigh #用äº�neighbor/ARP表的管ç�† ip tunnel #éš§é�“é…�ç½® ip maddr #多播地å�€ç®¡ç�† ip mroute #多播路由管ç�† ip monitor #状æ€�监æ�§ ip xfrm #é…�ç½®xfrm </code></pre><h4>使用</h4><h6>查看arp缓存表</h6><p><img src="/img/remote/1460000044505836" alt="" title=""><br>iproute2çš„æ ¸å¿ƒå‘½ä»¤æ˜¯ip命令,下é�¢ä¸€èµ·æ�¥çœ‹çœ‹å…·ä½“çš„æ“�作。</p><h6>查看网络æ�¥å�£ä¿¡æ�¯</h6><pre><code>[root@CentOS7-1 ~]# ip link show 1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens33: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:25:62:6f brd ff:ff:ff:ff:ff:ff</code></pre><p>上é�¢æ˜¯æŸ¥çœ‹æ‰€æœ‰çš„网络æ�¥å�£ä¿¡æ�¯ï¼Œä¹Ÿå�¯ä»¥æŸ¥çœ‹æŒ‡å®šçš„æ�¥å�£ä¿¡æ�¯ï¼š</p><pre><code>[root@CentOS7-1 ~]# ip link show ens33 2: ens33: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:25:62:6f brd ff:ff:ff:ff:ff:ff</code></pre><h6>é…�置网络æ�¥å�£</h6><p>通过使用以下命令æ�¥æ‰“开或关闭网络æ�¥å�£ï¼š</p><pre><code>ip link set ens33 up ip link set ens33 down</code></pre><p>还å�¯ä»¥ä½¿ç”¨ ip link å­�命令æ�¥é…�置网络æ�¥å�£çš„å±�性。比如,如æ�œä½ 想打开或关闭网络æ�¥å�£çš„å¤šæ’­æ ‡å¿—ï¼š</p><pre><code>ip link set ens33 multicast on ip link set ens33 multicast off</code></pre><p>还å�¯ä»¥é€šè¿‡ä¸‹é�¢çš„命令æ�¥ä¿®æ”¹ MTU 和分组队列的长度:</p><pre><code>ip link set ens33 mtu 1500 ip link set ens33 txqueuelen 1000</code></pre><h6>查看路由表</h6><p><img src="/img/remote/1460000044505837" alt="" title=""><br>linux 系统中,å�¯ä»¥è‡ªå®šä¹‰ä»� 1-252个路由表,其中,linux系统维护了4个路由表:</p><pre><code>0: #系统ä¿�留表 253: #defulte table 没特别指定的默认路由都放在改表 254: #main table 没指æ˜�路由表的所有路由放在该表,**默认表** 255: #locale table ä¿�存本地æ�¥å�£åœ°å�€ï¼Œå¹¿æ’­åœ°å�€ã€�NAT地å�€ 由系统维护,用户ä¸�得更改</code></pre><p>显示所有路由</p><pre><code>[root@CentOS7-1 ~]# ip route default via 192.168.1.1 dev ens33 proto static metric 100 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.100 metric 100</code></pre><p><img src="/img/remote/1460000044505838" alt="" title=""></p><h6>路由策略 ip rule</h6><p>使用语法如下:</p><pre><code>Usage: ip rule [ list | add | del ] SELECTOR ACTION </code></pre><p>查看规则</p><pre><code>ip rule show</code></pre><p><img src="/img/remote/1460000044505839" alt="" title=""><br>上图所显示内容的第一个字段就是优先级别(prio),数字越å°�,代表优先级别越高,也代表这æ�¡è§„则越é� å‰�。比如:在进行对数æ�®åŒ…æ�¡ä»¶åŒ¹é…�时,优先级高的就越早被匹é…�到。ä»�输出的数æ�®ä¸­å�¯ä»¥çœ‹å‡ºï¼Œé»˜è®¤ä¼˜å…ˆçº§åˆ« 0ã€�32766 å�Š 32767 已被å� 用。</p><p>所以,如æ�œåœ¨æ·»åŠ è§„åˆ™æ—¶æ²¡æœ‰ç‰¹åˆ«æŒ‡å®šprio优先,默认就是ä»�32766开始å�‘下递å‡�,也就是说ä»�32765开始,如需指定,å�¯ä»¥ä½¿ç”¨ä¸‹é�¢çš„命令:</p><pre><code>ip rule add xxxxx xxxx table xxxx prio 6666</code></pre><p>æ·»åŠ è§„åˆ™ï¼Œæœ‰ä¸¤ç§�方法:</p><ul><li><p>æ ¹æ�®æº�IP地å�€</p><pre><code>ip rule add from 192.168.100.10 table 10 ip rule add from 192.168.100.0/24 table 20 </code></pre></li><li><p>æ ¹æ�®ç›®æ ‡IP地å�€</p><pre><code>ip rule add to 192.168.100.10 table 10 ip rule add to 192.168.100.0/24 table 20 </code></pre><p>ip route还å�¯ä»¥ç»“å�ˆiptableså�šé«˜çº§è·¯ç”±ç­–略,比如给数æ�®åŒ…æ‰“ä¸Šæ ‡è®°ç­‰ç­‰ã€‚</p></li></ul><p>这个工具包的功能å��分强大,有兴趣的读者å�¯ä»¥è‡ªè¡Œä½“验,也欢è¿�大家积æ��åˆ†äº«ä½ åœ¨å·¥ä½œä¸­æ‰€ä½¿ç”¨çš„å¥½ç”¨ã€�å®�用的工具ã€�命令。</p><p>今天的分享就到这里了,如有帮助,欢è¿�一键三è¿�(<strong>点èµ�ã€�点在看ã€�转å�‘朋å�‹åœˆ</strong>)支æŒ�一下ï¼�</p> å�Ÿä»¥ä¸ºæ˜¯ Xshellã€�Mobaxterm 的平替,没想到是个ç�‹è€…ï¼�这款开æº�跨平å�°ç»ˆç«¯ç®¡ç�†å·¥å…·çœŸé¦™ https://segmentfault.com/a/1190000044480722 2023-12-18T15:20:14+08:00 2023-12-18T15:20:14+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥ï¼�</p><p>å�šä¸ºç¨‹åº�员的我们,ç»�常ä¸�æœ�务器打交é�“,ä¸�å�¯é�¿å…�çš„è¦�通过SSHå�»ç™»å½•æœ�务器进行一系列的æ“�作,比如:登录æœ�务器部署应用ã€�调试APIã€�检查代ç �è¿�行情况等。</p><p>好工具是æ��高工作效ç�‡çš„必备ç¥�器ï¼�民工哥在此之å‰�也介ç»�过ä¸�少的常用工具,以å�Šå®ƒçš„使用ä¸�é…�置,大家å�¯ä»¥ç‚¹å‡»æ–‡ç« 上方的Tools专æ �查阅。</p><p>æ��到SSH工具,大家首先肯定想到的就是Xshell,这个工具ç»�对是多数程åº�员的首选工具,功能比较强大,æ“�作也比较简å�•。但 Xshell å…�费版本ä¸�能在商业ç�¯å¢ƒä¸‹ä½¿ç”¨ï¼ˆä¼�业使用å�¯èƒ½ä¼šæœ‰ç‰ˆæ�ƒé—®é¢˜ï¼‰ï¼Œè¿˜æœ‰å°±æ˜¯ä¸�支æŒ� Mac,如æ�œæƒ³ç”¨ FTP ä¼ è¾“æ–‡ä»¶ï¼Œéœ€è¦�å�•独下载 Xftp。</p><p>今天就给大家æ�¨è��一款超级好用的<strong>跨平å�°SSH终端管ç�†å·¥å…·ï¼šTermiusï¼�</strong></p><h2>Termius 简介</h2><p>Termius 是一款 Python 语言编写的开æº� SSH 客户端工具软件。并且它<strong>支æŒ� macOSã€�Windowsã€�Linuxã€�Androidã€�iPadã€�iPhone 等目å‰�所有的主æµ�å¹³å�°ã€‚</strong><img src="/img/remote/1460000044480724" alt="图片" title="图片"></p><ul><li>官网:<a href="https://link.segmentfault.com/?enc=HvFIcUZj8mXzzJIDGDPByg%3D%3D.ixbuF1HyUFUYpxKK0lrkwbqCIVN57KC6xhldHQHlWc8%3D" rel="nofollow">https://termius.com/</a></li></ul><p>Termius ä¸�仅仅是一个 SSH 客户端工具,而是一个完整的命令行解决方案,它é‡�新定义远程访问。且比 XShellã€�Putty ç­‰ä¼ ç»Ÿ SSH 客户端更ç¾�观,还æ��供账户注册和数æ�®å�Œæ­¥ã€�端å�£è½¬å�‘ã€�命令补全ã€�å¿«æ�·è¾“入等众多å®�用的功能。</p><p><strong>Termius 软件功能å��分强大</strong>,å�¯ä»¥å�Œæ—¶è¿�行多个å��å�°SSHè¿�æ�¥ï¼Œå¤šä»»åŠ¡åˆ†è§†å›¾æ”¯æŒ�,支æŒ�多次è¿�æ�¥å�Œä¸€å�°ä¸»æœºæˆ–è¿�æ�¥å¤šå�°ä¸»æœºï¼Œä½¿ä½ å�¯ä»¥è½»æ�¾çš„管ç�†ä½ çš„ Linux 集群,éš�æ—¶éš�地的è¿�æ�¥æœ�务器。</p><h2>Termius 主è¦�功能介ç»�</h2><p><img src="/img/remote/1460000044480725" alt="图片" title="图片"></p><ul><li>Termius å�¯ç”¨äº�所有主æµ�系统</li><li>内置 RSA / DSA / ECDSA密钥生æˆ�器和Putty密钥导入器</li><li>SSH,Mosh å’Œ Telnet å��议支æŒ�,带 bash 的本地终端</li><li>没有广告</li><li>将密钥和æœ�务器é…�对以便快速访问</li><li>创建组æ�¥å®šä¹‰å…±äº«è®¾ç½®å’Œä¸»é¢˜</li><li>12 ç§�色彩丰富的主题和å�¯è°ƒæ•´çš„字体</li><li>黑暗模å¼�</li><li>ä¸�å�Œä¸€ä¸»æœºå»ºç«‹å¤šä¸ªè¿�æ�¥æˆ–è¿�æ�¥åˆ°å¤šä¸ªä¸»æœº</li><li>端å�£è½¬å�‘</li><li>通过命令行导入桌é�¢çš„~/.ssh/config文件</li><li>SFTP 支æŒ�è½»æ�¾å¤�制文件</li><li>使用 AES-256 ç«¯åˆ°ç«¯åŠ å¯†å�Œæ­¥æ‰€æœ‰è®¾å¤‡çš„é…�ç½®ä¸�密ç �</li><li>使用å�Œé‡�身份验è¯�ä¿�障用户安全</li><li>通过 SSH 代ç�†è½¬å�‘将您的密钥ä¿�存在您的机器上</li></ul><h2>安装使用</h2><p>ç›´æ�¥åœ¨å®˜æ–¹ä¸‹è½½ç³»ç»Ÿå¯¹åº”的安装包å�³å�¯ã€‚<img src="/img/remote/1460000044480726" alt="图片" title="图片">这里下载的Windows版本的(下载地å�€ï¼š<a href="https://link.segmentfault.com/?enc=zQttbl4iLVuA0uwtVKvjig%3D%3D.ZLBEG9o%2FAXlcp3xvovs2PwNOKowCfe7q6db4O2U4HtMuKNfTXwxAATTIwK%2FHcuAV" rel="nofollow">https://www.termius.com/download/windows</a>)。å�Œå‡»è¿�行å�³å�¯ã€‚<img src="/img/remote/1460000044480727" alt="图片" title="图片">登录æˆ�功之å��的界é�¢å¦‚下<img src="/img/remote/1460000044480728" alt="图片" title="图片">æ·»åŠ ä¸»æœº<img src="/img/remote/1460000044480729" alt="图片" title="图片">点击Connect之å��<img src="/img/remote/1460000044480730" alt="图片" title="图片"><img src="/img/remote/1460000044480731" alt="图片" title="图片">æˆ�功登录æœ�务器<img src="/img/remote/1460000044480732" alt="图片" title="图片">SFTP界é�¢<img src="/img/remote/1460000044480733" alt="图片" title="图片">端å�£è½¬å�‘é…�ç½®<img src="/img/remote/1460000044480734" alt="图片" title="图片">切æ�¢<img src="/img/remote/1460000044480735" alt="图片" title="图片">Termius å�¯ä»¥å°†æˆ‘们的终端é…�ç½®å�Œæ­¥åˆ°å…¶å®ƒçš„å¹³å�°ï¼ŒåŒ…括è¿�æ�¥è®¾ç½®ã€�命令使用记录等数æ�®ï¼Œä½¿ç”¨ç«¯åˆ°ç«¯çš„åŠ ç«¯æ�¥ç¡®ä¿�æ•°æ�®å®‰å…¨å¹¶å�Œæ­¥ã€‚<img src="/img/remote/1460000044480736" alt="图片" title="图片"></p><h6>安å�“手机</h6><p><img src="/img/remote/1460000044480737" alt="图片" title="图片"></p><h6>苹æ�œæ‰‹æœº</h6><p><img width="394" height="570" src="/img/bVdaNC2" alt="image.png" title="image.png"></p><p>更多强大的功能,有兴趣的读者å�¯ä»¥ä¸‹è½½å¹¶ä½“验一下,也欢è¿�å‰�æ�¥äº¤æµ�使用心得,或者æ�¨è��其它更好的工具。</p> 今天å�·å®Œäº†ï¼�ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务(2023 最新版)ï¼� https://segmentfault.com/a/1190000044462590 2023-12-11T20:04:02+08:00 2023-12-11T20:04:02+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥ï¼�</p><p>在这之å‰�,我们相继å�·å®Œäº†ï¼šå…³ç³»å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=xU1AehMoxv6UkuGI6WponA%3D%3D.9Q4NKVDhA2mih2iKLn6UjNFN3EEIbdjVZcB4ZoUjx6uD6OrhoNUlbaIfdPcZYmsXhcPOPeOKIlFK10AP7e%2B2sosnxcGwlmGvPIvwvk65ZXfgI%2BcAzSGP9t3zDes3emVhQtmTYtywWti3I5C3ZCQkfODmhY%2FEZPbzHeivzt2CPjam3hzBhZGloZYrI2JQDcGe0vhUkwsJhloibEzWmCAZPhHoEqb5y4t%2BGlkZTFQ3otGsoUg44DmsuQrhqbDeHNXm0lKZwKnGJ0jSAF%2BC5cD%2FHVErfQQccimb76houwS%2FHQ8%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=zUaw2p9Egou1V%2BBGHKsBew%3D%3D.RyI56fo0SXe70IQ3dCXWI8jzDHkYRXCMZHeVMwo6LItu%2FixO%2B2XWPXkluJdMHyQUInNlrjO6pz2WSDmxvt21N1OEwiWJ%2BAuLBcI55tfLVw1EdliImSZD3FabKFrSgG9lEpVvatUygpKJWuETPSy592RLnMcwgi%2F0G%2FvAWQnxAAOAAm%2FSgn5m%2Bbh%2FCLfzUfosoU%2F%2Fev96QTEWBdb6y6MG%2B06Qd8XDJE1zyNrfoSAoIVAYxB%2FrGIzKZfPXldzjkDzgokJgZu2c9Ecp1zAty%2F0hUOr2%2FIDrBay1qCcEgikLWWs%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=qBaqeMZWqXLP4UYyNLCfaA%3D%3D.rNO7kNBCl5QQGemK%2FXc7ZW%2B0YNQY%2BKKKJ%2FV56MSvCD1iJpEK4wfryruTHZe4nUYFHIh4Hxu2NPc29KQXoNOcDRYj7Bd6LIcfPZ3L7yGe7JSUnjVKAQpDSnKKt%2FQJGXTHGy%2FHBeZGiInnR7zvkVwbuWQTpjbgYQrM7%2BJ185wGS%2FeBhD74ou%2FtyFsH094Ox9RnM7Hh0lV22wBIwI38bkUnGtFjfPZRq0d63IdnGh%2FsAXn1EQoaX10ZbtwjK4VQ%2Brh%2BH4H3rdO8VGehoV%2FgAny3%2BFJoKqKAevRFeIV4a2gvoNxIN%2F4kg4GpdVYqB%2F7fD2l2I%2FRdzSpA1iFKH4G%2BUea1Xg%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=3tGRk3umK4dbwkWymBgatg%3D%3D.yKHYDMiihN9s19CuF8reSmLSGgcqexQP0lfr4g8lShILaMcxsq0ouVr9wOh8%2BGULOSjK9hz7QShUk4pDQ6uoBcfuXPtCa801MOvBxaIjl48K8V9QafYTPN8zgQeJJNxcU6ryJj2SR7EJ6rWeMoEusGl8cCn3wUY%2BdkvhAMzs0ULtGNT69fXyFhnhy7Qf292xqU12aqVlpKZ8qholXwVcwST5RRF66ql5FJ07dwahKSYWKKxbvumse67IBiwxPZbHCsDCD325SZwr%2FrA0z9mC4tDiSQaPJ%2FcWjfyINUi1O8Q%3D" rel="nofollow">ElasticSearch</a> ã€�<a href="https://link.segmentfault.com/?enc=L9dvjZEvSvG%2B%2BNbiy89qSA%3D%3D.m%2FpgCUKRpW%2FHe0gI%2B2hs2a4L4%2BglqPuWMQfE8zC7JIvPIRdPfN4QGLHXMWJK490YgcaWYphR9IlWonUDRV9k4jXw5sAyd5kxZurWdGmjdscR%2BWfz8C332X%2BXK4uPk4kVEJ63a%2FQVaayvCUXi3liMSCZKbPeAyVTTHxh3oMWdz%2BGmk3aFaEeKNLDvOJ0tFoeAmbc6MB6UTllhH%2Furgbb0zQO3mlBmnkukxw%2BU7EIDqba%2BIEzQwaHrW6JZ%2BSWGd6NFFUjDKmb4bHrcWa4PUWL2iBHaTzELj9oQwMOhV2PJ4XM%3D" rel="nofollow">大数æ�®Â Hadoop</a> 框æ�¶ã€�<a href="https://link.segmentfault.com/?enc=UEoDH0QRX0HqeZTLFwD8KQ%3D%3D.clr%2Bmd3vbrCi9CDwl8P4Fpq4TY%2FpnIXOksM2uKudDDS16gZLT9K5x0DQABdJt86zWo5dXzBFY80pgwl0UAxXez8hU4XoekWJwpOqjYbH8LcWrntoFCnYRRH9lIstE5be6Lb6sTaDfeDz7DsHUL3UiMOPiMn4WfSA23mRp9UmuTxMrkZ08TdoN6HxMeb%2FnbuvaFFciPephs3aAWcoTXIxns3NaVWK8zqH6xL9TcdFvLHkgpQCsyJloownSs6Taf1HesSvSOkbIq%2FVIJQJNyM7ChwMNNj%2B9aBszqoDKfNElfg%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a>ã€�消æ�¯ä¸­é—´ä»¶Â <a href="https://link.segmentfault.com/?enc=0zBH1u2DoVqDKtvEkta9Zw%3D%3D.95wfeRjizb%2B4%2F9iB5BzqIciQcaxiy%2F1jfQzQYLfr0Jup5sS%2FoJhb17aTyoZWFFJx5T%2BtMbpb7b6JgOH0QtfhfeKlDK9WgrUJVn3UWU%2BlSqAviE1EB99uiO8qnGy%2BIPwxQHm4%2FRiJJi%2FljAJ%2BNiYyl2%2BBbMOciGCYwTwco8QBlRc%3D" rel="nofollow">Kafka</a>ã€�分布å¼�å��调中间件 <a href="https://link.segmentfault.com/?enc=HGcYjjuOPduIQz8RwZxACA%3D%3D.dvXGWEJXoTFipjvdpQW%2BcfKwvpK2laGWZFdSSa3QFmvbQpQEpCtN%2FR8aHBmRQgdeKPVNIjuOK3IXqU68mr8k1yMolZ%2BzVrKrSuDMZybng0h%2Fc3fX0dbtBietjNFNFvTZYFrco2rLU44DkCsEjd7l1P0t248xA3O8RlwRhciJ8MyUwtZnqa1EcS%2FKT46V9JX7j5hFPihPHD2tIBSS%2Ff8%2Fr9Iv04SHPTVNHzSoueVTI9gebs1DxSs56hxBHHDDfMfFnodzw0bXmYajrpiHaDdJgEHrn4UYWStqBreU0eFhyATvu3LfL0Iy0l0cXYquinKRv9OvlZkLxw%2F2Gl0z22JjvQ%3D%3D" rel="nofollow">Zookeeper</a>ã€�消æ�¯ä¸­é—´ä»¶Â <a href="https://link.segmentfault.com/?enc=Lar1YckhoCb4Q1TWJeOZpw%3D%3D.LXkQEcsQWAYKq%2B4avI0QBK2ll8z2CPFbyoebzqGyjXvYpLgOoWgqqQpqKSrwIGwKVN24Cxafyk%2BQ%2FT6NHzjBH%2F2y%2FnuNrKJ8mt1TNXxtH6yDteoJFlHLhg2bTVMKmBpwafGp5B3xRGEaeWJANHlTdcqr3y0LkGmdz03H8LplqjqKV9cVZHX7HguY5z0KB7ZSHGRje3nc76drN8gOFKqZeumov1Sz5iOrbbw%2FFx5p3EbPbd9eV9Rkr7%2F3SyiiV7eVewH7CU5pYYb8bA4aWlNxqkLGsIJWpokh%2BoB17jTA%2B4dRWRRanJ3w%2BWK0JLEMENjgTzABCCF5nxnxKkCZHjWUmg%3D%3D" rel="nofollow">RabbitMQ</a> ã€�æ�„建<a href="https://link.segmentfault.com/?enc=8gO5f8P7BIUC5hFehKfsLQ%3D%3D.TSOEblNUae0xCpPGOoW9GvSBAnMJ900sR9M3eNoLx24rujqHhoGHpNma9kc3D6Yus8xmCKLRQagfkPZVELmQqFSR5BDaUNCc2S9rrHKUl%2BsX82MrePm48frsu871PLPeIhmSRdsN1QuGo5oPANfvEQ4tNGbn8lkOcxzc3wWcDmC0MFJbY%2Fw1V5PUP2Zrf6FVKrvHD5PN6AycjAa96XCqgvHWVlrTMvglaXrTkzzHbxF1deQwrcolzdi4NXNpWOUxdPXaQBfGtkdQfHaPMrWqRmDwlNG4BiQCrQQJJrTFXNw%3D" rel="nofollow">ä¼�业级监æ�§å¹³å�°</a> 这些系列的知识体系。</p><p>今天开始,我们将è¸�上å�¦ä¸€ä¸ªç³»åˆ—çš„å­¦ä¹ ä¹‹è·¯ï¼šä¼�业常用æœ�务软件。 </p><p>这是一个é��å¸¸åŸºç¡€çš„çŸ¥è¯†ç‚¹ï¼Œå­¦ä¹ å®Œç½‘ç»œã€�系统基础,常用命令之å��,就需è¦�完æˆ�è¿™éƒ¨åˆ†å†…å®¹çš„å­¦ä¹ ã€‚</p><p>安装部署å�ªæ˜¯èµ·æ­¥ï¼ŒçœŸæ­£åœ¨ä¼�业å®�é™…ç�¯å¢ƒä¸­è¿�用自如æ‰�是ç�‹é�“。</p><p><img src="/img/remote/1460000044462592" alt="图片" title="图片"></p><p><a href="https://link.segmentfault.com/?enc=30YC%2F1v4jkGSUfcv0EBz0w%3D%3D.d6Ci1RkAuHk4QBYbbJJ9SU%2BtdBzxNoV2LAy7WEViASaOE7ByJBKO50q5SD91yad1knpnuXX7wC8fNqSEyapS1WgbaswvdP1PXjhZJ9ovk8hCIAab46LcrZzEy9E5UnYVJEPTWuZSw%2BZ9Afhxght6e5hPUxqDZBxsYZfBc8qMGLlX7RfSIYuC9InLO1uMzZS0uL5Eol7A4NuXDTQH4lL6WuLg7ScN1TXouzQoABQJkdA7heFWIu5rjGw%2BjFYFkNCqaYv80sEDzjZVnVFw3OvN%2FMk%2FFiJKmEh94ElENpYeJw8%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(一):网络文件系统 NFS å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=Niejc2pVDIJWIdAQjVDHBw%3D%3D.sjbbBEJ4DmfCjEhPjNWrMZoMaYUpcbwV%2F8s8sOzNx%2BZ1QV%2FX1a%2FoJJU7AE6oZsIxh4uW8OoyiD4Dzccp3kCksajIcy0K4FWGnmHpNFegl6BH9lfu25QUZRdPjtQAgLLVPCqYeav05aFVBcp2V%2B%2F%2Fz9m5YZclF2Akx39niLxYk6XBocbcSS8cfCJGEO1Sq5i0gxRuRESh6jIL9Y9J8zJP5tjWBVTtSksaZef%2BCSM0WBZ4ynr8CKJPK%2BjEX88CYD7DPzM%2B7KVuVS359H%2Bv6RfrQVjS%2F0SGdWP84JTkWWqzE3s%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(二):文件共享æœ�务 FTP å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=xf0ETp16942iFIrAC%2FQ32w%3D%3D.rNKlA8o%2BqDXghJnzhYB%2F7U1cNovseKaYn0FXvBW9MCUAqOeFUBBlFh3C1AjRnWj4G7%2FhF1hWSoRe4XI1tnRg0Cjxb335fr2kk%2FlSSuwuRELZaTcBuey5PZ7sdtDdypAwmKsMRsJ%2BjugGOyCgbZ8oGe8jc%2Be%2B7ZVMPWjdPKQ15Ao%2FUG8koWn7n17xeDA5OOUaLNsphHA8kF%2FSzuEBrKkxKvxyg7gkr56EFvHFCR%2BwPdB%2FsytKgr4NSpz4oaSHQSTe2%2BC8moeoMMCQ9uwqyqMS1880tCTKlm6s53teMeWs2KA%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(三):动æ€�主机é…�ç½®å��è®® DHCP å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=ZArnel%2BL2c0QoXqCDWIdxQ%3D%3D.aS7nQwZ%2FDXo%2B10Qqf3fmYwyZN1UiZlC5udfnctCo%2BxqHYj5nn2jHi7ZqbvI%2BISnIj7k%2B1hDrI3tzyVwClWh41xmYqUttawt%2BgCIZfFL2Xji21iJUhvCL%2F2BEa4x8e%2FntCi6mm%2FtkAi73MlNwoLZH4fCvm5QTbPEp4ycUXEj5FwlJ9Yo5t8D1MUVfBMSGJMZ0IGeySKu1CJxnsmxJNqMzk7G5xjgDBt5aD01tLmWaIpNGsavUnqnoc%2Fcce3yHMopUnrhjQ%2FrkrfpT5ysqeTFX5%2FQ9Vqh%2Be3TM7avJMHLkhMs%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(四):域å��系统 DNS æœ�务详解</a> </p><p><a href="https://link.segmentfault.com/?enc=Eb4BWMDYUIgBo%2FRWxQFKDQ%3D%3D.r5gSsqJIji9Gtd5%2FdZGmrpr%2FFU%2FuAOSPhfRZ0cj0csTTaatvwJsanjdHojNWTrXy5miukcxvQ0K2JivV%2BdEmJFTvNRXFS%2B7Zt2OwXlI2izRpzU5Rqo4IOGLa3FJasI59zcllxdrUQVRTAANcTXQxeyRePAdbpLGPgcIEuKwiSYTp2GpgRju%2BaQr875UdZ78Lg7hqrLHhUrfaumHVvp2NRb7AQKmuN4v9i2dXh2%2F0SFyxzOwNHOo2Il4DwJGJ4E9cW0OgAJJVDqORPweTaRCuug0jXfrJVH9gP8EO2M3XYtw%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(五):网络文件共享æœ�务 Samba å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=%2B%2BUA2y3OeeH81Yx31ElOSA%3D%3D.doGq5tghXytDHWV7s0h1jGUw3GmbPe5Y%2BplcClEvfMYBMH0VNMlRpg2x67hN15QMJxoTSFMKi%2Bi0npgfOeIXc6CNOEHL%2B2dBSy9PqL0lG9mf6M%2Bc5peEHo8FZviQLERofg1%2FrqLcI0trRod3iZTVv9v34G%2B8%2BtFqKbZVk4fPFygxnHxivxhoCeH%2Fj3AIwlkZFaAjfp1Qd7NzKzdr300SiO2CUt9MWS1V2ofFfSYe%2FqZfe0Fxr3oUQE4CXMLgJ4qm7isvq3BN%2BhoZADlz%2BJVtkwABtH%2B7nlFbYd1BPfVreJw%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(六):数æ�®å�Œæ­¥æœ�务 lsyncd å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=fpIME40NQlLCWBUsFuN3Tw%3D%3D.uOVXCHCSFvpgkXuq6rdUuxyuN42uXgVkw8Dh%2Bz1QlhdzhQee7xusQhgtZYIR5XkogzIk0%2FQ14tJrRZfQKzYuXaf5qGmO9zFe4b%2BEYiUMMo%2Bk0%2FZNyzKw3rnwDSNVTn%2Fos%2BwCpIF7S1jdLweDe9ounloDc5gclDlWQGJBW0f8KxROvtkIfPWYoXjPjct3I7Zxyydq9saU7YW5%2FVzesrj9yekOJ4nvqzvPt7NhVw7UIDt2wHUNP0CUN6NI5SPKcQsTrewd7fYqNEjHm3Ax6NyzRRPKHNbs9PTfb5sUWRy7s9s%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(七):邮件æœ�务 Postfix å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=xYvQjrdpCCeqtTjQ0MGT6Q%3D%3D.oN6CiaPdmdOT6eJ3oLkRbBg0Zb8B3R%2FQ4o9dmTZHu%2FvhfzcH5spdp%2F%2BtbMK8f2OFV%2BZmt5QwCsSG4LrzaGB4kZmGVeWI5gUwhp29gFHMzt%2FbY7PZrRztd3Q6Esx%2Bpwx%2FSgPKHDiKSlDQZ8nQww6%2Fpz2G5zw2CmGOf3c84bqkd18RKkzkNMlY%2FgjyWGn0EyyTMKSH0oKeLfbAqHhwdzJGgU5abSZ6y4WhDT6g%2BMufow3hYUBDLddwZ5GK38QJmWuT%2FW8SxcTpJ1InQbUoaWLga%2BDC4XbVmovaWL%2FNNsmPawY%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(八):开æº�代ç�†æœ�务软件 Squid 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=9G%2BD6O08kmCK5D5aZNQVhg%3D%3D.wL3lNxJvTMAJ9GB5u2XtMoNbLfE1Zkj6mGpcske08u1UJ5jOKfvfU11mga%2FZjTWrYhQ9KhELJPNfMgUZ1Ta1bznrA7R6meM0ALm7lqxm5o1YAPTBqsQVwOzbThPERs6SkX4o3q3%2BHci3tVG1W%2BAMZJzMdnWlVEy5Q7TvGHZQh7fl1diERfBJAlJiX%2B52JQNyIZNo3lG5uB4EBlK%2FGwimNVlv6xkNZSSVGprt06leoxxA3FrQia4qU6d0YCqgUF8OrwdklrfaAoZFt562Bl6I5Kv7QTZNpa70BQjxrOIgLK4%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(ä¹�):开æº� HTTP åŠ é€Ÿå™¨ Varnish 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=a%2FY5poYlNt%2FDj91geADSCg%3D%3D.IwA%2FEY6ky7eUewpD6Ti1GRbsvHx0hS6lLQBd6zVmjXkFDATUUuu%2BLwLwtHIaxSRBYUxZgjlSVbl6%2FU2lUkkEsnZBpEP4gVQVMEFlvECKZQuy09f3i%2BBIpx1Vsv%2FIRFSRiBITTjnaM%2FmeQpGbD6PrNMAQ4cQVLIh70z1Ki9dbuUcaSElo0u7fFH0Nwdlytckcf7IJLw4rWcFRYds8IuppCNLUWP6%2BDMWBQyM98ICa8DXsSLVGjpnF7ZVqSPGsQXgm3jMREssF816nYT260xwhzUtSPqeU8IT8e%2FcUkak%2BEs8%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(å��):自动应答工具 expect  å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=6Uwxg5%2BhBqX2hnRSOvNwJg%3D%3D.4xzeUKAnSylWQuvcQIbT0j5ECoVq6BEDZDtqlS6mDiW6b55ZMPrfrbm1V%2BPjKxScCkPIQeore2AqC2dbeanXnEVY3PvPbiaoBOWsSj8oyC9dN0iIv5zT%2FkitWfvoVCBHdcSjPf1zX5YcBPSxLUFoC1vNCqIl%2B%2FdO1DkPpD8U807N3FT97N4kT8mfYhAWvxiokCTGsFpcW0Q1ngRLvtwoP8acIatrDPbCzfe9U9pnW%2FgCSlFa6mG4IIpAEHXEhh4eVVFDThpW%2Fhew1Q5DhQrReIZzPPlN5zq7ZmRUwiLYs6Y%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(å��一):进程管ç�†å·¥å…· Supervisor 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=AMRFYUF8cTHEnYoCJNDXPA%3D%3D.OFVu4olJmELHsp45JDeF4LSUheUp%2Fl9WocP%2FvuOiSEv5hXcluTNvZ6JXL1Bwdt2ruT0YmpFvPfcsPO8%2FFSWjCtPopariHVfXL%2BvHgtiiMTSn0wXXcqQE1wgF7BxG7WMf0SOTZqgrW12wBZclS17PQ0w%2B7mQFTfkEEgwHQiz7eZcrZ2jwSosfWS%2BOb3DGmHVmi6YciSvRH0F1uamD3cHJ0lg3Yt3cx61C3QhQS4pg042AOV4Sywd8qKXP2eUwtEbgXe4kySJIwQ0mJd0PReFTr3dBQyV05QTUUKseZSvdfdE%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(å��二):HTTP å�‹åŠ›æµ‹è¯•å·¥å…· wrk 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=Z3LBo2uAk5S1GjhPjrqBHw%3D%3D.DNVnI3js1mrSy6mrWKmvI%2F5Jqk9NYtX2VHKNhHGABImqfOOteV1%2FFS7NKteH3gNZWK54hCzrC3q9AgNLc5GHhCyIwKEOaGNJ1S5FsWguyCPRqWuzxUSq5Zu1DjCNbjqYbyIPdbtnu4QV58F7u8i0vl%2FevOr2fohbIoO9PmuMDXr%2FsJPLe0JsIct%2BoDFPXqBw%2FL5zRl9MTb2Zb7OksQU5kFPKMMJTaH9tWsi9EErtDpEKo37oNK7AyxAOAtzKQIxwgrQec3NAXeBEuUHXNfzh%2BJOiBe3pVEesaj%2BBACzDPcE%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(å��三):自动化安装工具 Cobbler 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=KluzBM37G4YRe3v9aiImvA%3D%3D.dDU1vha1iMab3rA9CvTXT97TXBCEh795HzLGO5aX8qYBJoUswaACWfenxjEapG%2BDo9qrdRhUoXsIPy4sQbpsCdE312yvdmO1ZrIfA6AqeImDORdxnRGvH5%2FktSiLgF%2FCcgI%2B4xFtp9TnTVgYVKybhV%2Fo9v86Xz6%2F02CBZawXYgxii%2BcioWiM2GSTxatFy4arjOBc9KO6Jgiu1UxTPfAn4veTDUQ46bA7MJ9SQARDOa%2BJzcZH0Tq5KhPK43Gp%2B6HdaL%2BBzKMBQxGr3mC9qdSTLUfJBfrq1aTYOHlsTr76T3c%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(å��四):自动化è¿�维工具 Ansible 基础入门</a> </p><p><a href="https://link.segmentfault.com/?enc=aZY3cSdeEP%2FUO8NqI1Cz1A%3D%3D.b7e6gU%2BKcEY%2BEtffKR9AbWmFFosDXdwJq8XHa9J30J6DPSbTyebngajQXRycOd%2BXkP8dlaw%2FvMTmVBTxlbFjDbWA7GnqPPqS97ZlbVv1A2ma9LF2krM6MsAfz0WXGFRcc1iQDgV1PyrEjXgnozq1qPFXi1IJYcdtg2D48aq24%2FsdhRxbbHlkrvK0ccvA2Br71NcbZe8DXMDEPQTe57U4ikLQIi%2FTx1YLY%2BcTCy%2BrZNWLSFg8fgw8A%2BxEklQc2QGDLPF3NdcFm35D%2BcK%2FT%2F2WxTNAEEXV6cYZ6sNqtTCb9BA%3D" rel="nofollow">ç�©è½¬ä¼�业常è§�应用ä¸�æœ�务系列(å��五):Ansible palybook å�Ÿç�†ä¸�å®�è·µ</a> </p><p>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</p><p>如有帮助,请点èµ�支æŒ�一波ï¼�ï¼�ï¼�</p> 终äº�å�·åˆ°ä½�了ï¼�æ�„建ä¼�业级监æ�§è¿�维管ç�†å¹³å�°ï¼ˆ2023 最新版)ï¼� https://segmentfault.com/a/1190000044383235 2023-11-13T10:17:42+08:00 2023-11-13T10:17:42+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=%2F5cEWi0LINoCrwWDxBkSqw%3D%3D.NoGoD9wJrs7aHZWwbyGw%2Bcxi8EUiI86MPgYekf8gxpsZr3fBMp49hS9KvJsCqX2l0GKw6RQtpu77pb%2BqJV6guNMUtJy51haxtBbwTs63n%2BpeDY6DV1DTI8FKDvxxNq4Z%2BJH0V%2B%2BdyxuDptzgPFqPkYdDIzz3JcSaKZVrm%2BLpgLmjsfRG%2BhaKVbh7Txx6Sb%2BJ45grywjEs9aNJahH834mTYCmgHIHEs7S9KrB%2FbV3qDniVL56NXqRps0hilWHKGUgsPOFu%2FTR7BEzgqm8oCMXJbvuo5s6rzVOgPG2%2Bm0sZOg%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=xTX6K3NTtJUDPU1uiHh3sg%3D%3D.z6gioZaE9gEI05zVLN14SmoTTL89Q7eqaMH%2FpzRZJ%2BICad04J9Q%2FJBzfhJdMu%2F1KV4cCwTjK2F3iUSnnWmFpw4l7hBQZA2CLut%2FVYHtY%2BE3HqEz6UG%2FQQs6Vy%2FVetx1Ji4GXQQVlBEWQFZ5B0HimiViLsjitE6iD87Ccev8VyXOXOTwgZ0aSIWMEZnzhBxge0xzZW1h%2Fkg%2BbCljpx73Xc6C3G%2Fq%2FkpePi4Fw%2BZ1vJtZF6FAtQElZG%2BnQeAaA0cgPvW8pWZi%2FWOqOCvd3XHOOGF6qbtpspgfs3Ipvjg8A3mM%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=aobXRhgWOtFOVnHjwdnFXA%3D%3D.usVFTPUCPalb%2FU2BlqUZN%2FvJQf5MpnAQNY%2FeZEhYxQrBmOzaEZ6X4ByqpIzRFZ67%2BZGj7epXy0t0XVP9C1wPZkBCRmM1JGIdcQCyDwyfX50FHd6L2%2Fco3dvLPNyrx8qwD110YSlT%2FeDcZmUyASm2K8LvCqsr7s8hK%2BvOI6Uy4Qkm6%2F%2BwsL%2FlTsLvXpY0mQkewUh6QC%2F4lGC4%2B7VZ%2B0bzhbOzCmbQAjobzODHSKVzD3AgBn941acgcGLm2K3%2BRt4EY5%2F6o%2Fh1lonpxBmwchRN3861yj4zP8fU6yqdcMuIstCWWCPJjWeUmCAD7s2vysu6n7BvvFlphGFzyMVs0I8JXg%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=gfTKYJwNLkg5qzhp2aa1XA%3D%3D.%2Bp3%2FceazP2yaYi%2Fbu1qqVjDw1B%2BHA7Eq4E%2FQj1ts0wXaDLCQ9mpIsLRf1j9%2BJHjQXytoZUf%2BAktZ0MkbqfNt8HcR9%2BzQZilo0mNc7h%2BrabNaBoE%2BWMXL3ld%2FpIi6c5vYMm0GdZ0xb2Uhj6%2F5kRCwo2s6Xoc45n74kWTc%2FfS5%2B9PA0%2BoXOYQmYTzmqBNBIkVs%2BV7FS3PY5pNB1eLW19IfS5xV%2BjsxmEn6FozptV9bmPXIvof8IxmDoiHs15KvtlyAsjA2zPPJfAaGxDP3kB%2BJEzQ2l2qM4rggygLFHEb8zNI%3D" rel="nofollow">ElasticSearch</a> ã€�<a href="https://link.segmentfault.com/?enc=eCy3lL734yoaLFF64m5JsQ%3D%3D.SYMHjf587jxAYFozongUJ8Uq%2Fj%2FMHwIaTvg2t5rFkmOnvmeccNUxP3ulRgTLOgdJCytmAYrAbjCeUZ%2BHBaWcf20HoFy0x64IfrpnzengKbxv4B9WbWeLGI3CX9mR2EanXHsJu1RTi6hg1GE8aAfHqq1w7FIfBhp6zr1oSO%2FdFt68eANMxfAwcIyYWrJdo79SFZ63ORBpJ2%2BcmcNbn4nLayO2J8TygIf8obSTCtR5%2BCZAKcG1xRFoWOZqrRVjpIpjAgMVpuebNO353cNB%2BB4tuwvByFvB7Fp%2FxWyyJ75cb0A%3D" rel="nofollow">大数æ�®Â Hadoop</a> 框æ�¶ã€�<a href="https://link.segmentfault.com/?enc=EoRnGljd%2FQVQzUaERkP3jw%3D%3D.nC5nxGUujMCVXJrMVmHcGr6ILhQxEkQqsWraAa5D0kTovGpedPgJUeJ4O9lqZ4Al1R65bbRYvZmxOhH%2BvFw5ODJ0wjqgBuB6yOif%2BvAxRhi%2FLj6cMRGEZ2UCWtQgokfPBH9oRonS0L1v%2F9XTEj%2F4BwFr63%2FNMYGILHEJF3Ys%2FN2cfeyNhW3iBaBFfCI%2FkSTjLQHShE%2B%2FvNq2ItC6NzQ1BljvKlY7hGLionf%2B2JXRwBw%2FYYv6ZmeDjKCnBS%2BRVVv76HabzE%2BK8TLTzdlrY97Yw8Wu1iLwgVD5h6FmzX5s3qs%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a>ã€�<a href="https://link.segmentfault.com/?enc=meI8sCXOukHSJyitVBVwsw%3D%3D.OwQwFtQAxZCG2dWYmSjNa%2B6R9wz2vjVd0CScOwUmho4HL3jS%2BcBF%2FepH4g0cSksXCIJwlNBkWKW3zdcfEOTZI5eZnU69hWt%2BKMYxsyEZWcUJ4oHbVgDpd5R47dRsQGLp7usJJlXx%2BZys9cRlqUBusYP%2B1Rd5xJN9q2JJOihKK%2BvarTRIBJOBy816GLJ81SLJzTdwQhu84ujOhFKZRee7PiFUQCyFC6kKYaPFrMUGpPGpdvnY0%2BXJY9ITwAT%2FZHdaJ7yp6oRmNYQ9hhnlCB%2BFumrMTu6dv7Cff9rXWMRj0kA%3D" rel="nofollow">消æ�¯ä¸­é—´ä»¶ Kafka</a> <strong>ã€�</strong><a href="https://link.segmentfault.com/?enc=az6tmXx8vN2DDDrzPaiIaw%3D%3D.mzXmWiGBLF%2FzipqoPYos81Ir8CiHFGPVIgNQUIYtRuFpdDrC44pc4OJ%2FvttelsmwwvyfIiCI8ulFp39fUrgYLexGtg7StK0%2Ft2rXEgLLs352A2ZWhaSsiNNqAPSBEW20xs%2FY%2FtJVdkQs5wn%2F9vbBDKQ2O%2FSol%2FW9COygJ2ZfLeU%2FV1Zyp6OhS3Fuo4JghyuqGoz2uv%2FzVW3MOjatwSdkbWAYbCB8c1EJDA727IFMLtyRqWvmDeHnXV7dqFrthdg0nd0wNNgrTpyCrsmyqPDW5HU%2FR7Y25UGGdIWntiy1drY%3D" rel="nofollow">分布å¼�å��调中间件 Zookeeper</a>ã€�消æ�¯ä¸­é—´ä»¶ <a href="https://link.segmentfault.com/?enc=mWx0MZ23urnRdsj6nOOmoQ%3D%3D.vWYpw8Nwqm9hx94fLEMT6FpgtdwiBCg7cdvx0Sszpw8yWzgWaPgPcdeDbWFhl5Me8teuC7V92y2lfa6BdxRswS2nZbvoXo3jrplcuPB4YduD89XWDP06M5DjzbixC4A%2FPmKHEVqRu%2Fmlk6SqZYmJhPAsdAyCkm6gEwAxGDifR4y3lM2fB%2BICVDmBv2g9MKkLHb%2FgJjxqrf9RZZACpBBg45aYDXzNkg1cNB5fQTwZjFb9bzs1p1nyCuY5NXwqSUUJTyEwOALj2MdD9fbsrRQ%2BtFy3oD1x%2B6ZbMTQm7CEmFts%3D" rel="nofollow">RabbitMQ</a> ç­‰çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚截止今天,å�ˆä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼š<strong>æ�„建ä¼�业级监æ�§è¿�维管ç�†å¹³å�°</strong> å�·å®Œäº†<strong>。</strong></p><p><img src="/img/remote/1460000044383237" alt="图片" title="图片"></p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>如有帮助,请点在èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><p>ä¼�业的ITæ�¶æ�„é€�æ­¥ä»�ä¼ ç»Ÿçš„ç‰©ç�†æœ�务器,è¿�移到以虚拟机为主导的 IaaS 云,抑或当å‰�æµ�行的容器云PaaS å¹³å�°ã€‚æ— è®ºåŸºç¡€æ�¶æ�„如何调整,都离ä¸�开监æ�§ç³»ç»Ÿçš„æ”¯æ’‘。</p><p><img src="/img/remote/1460000044383238" alt="图片" title="图片"></p><p>监æ�§ç³»ç»Ÿå¤„ç�†èƒ½æ��ä¾›å®�时监æ�§å’Œå‘Šè­¦ï¼Œè¿˜èƒ½è¾…助决策,所有决策都以数æ�®ä¸ºæ”¯æ’‘,而é��主观臆断。在大数æ�®æ—¶ä»£ï¼Œæ•°æ�®å�˜å¾—è¶Šæ�¥è¶Šé‡�è¦�,监æ�§æ•°æ�®ä¸�仅能æ��ä¾›å®�时状æ€�展ç�°ï¼Œæ›´èƒ½å¸®åŠ©æ•…éšœå›�溯和预测é£�险等。当我们充分了解当å‰�æ•°æ�®ä¸­å¿ƒçš„真å®�资æº�使用情况时,æ‰�能ç»�对是å�¦éœ€è¦�è¿�ç§»æœ�务ã€�é‡�新调度资æº�ã€�清ç�†å�ƒåœ¾æ•°æ�®å�Šé‡‡è´­æ–°çš„æœ�务器。在故障å�‘生å��,通过分æ��å�†å�²ç›‘æ�§æ•°æ�®ï¼Œå�¯ä»¥å‡†ç¡®å®šä½�æ•…éšœæº�,确定故障的å�‘生时间å�ŠæŒ�续时间等,ä»�而é�¿å…�å��续相关故障的å�‘生。</p><ul><li>ä»�监æ�§å¯¹è±¡çš„角度æ�¥çœ‹ï¼Œå�¯ä»¥å°†ç›‘æ�§åˆ†ä¸ºç½‘络监æ�§ã€�存储监æ�§ã€�æœ�务器监æ�§å’Œåº”用监æ�§ç­‰ã€‚</li><li>ä»�程åº�设计的角度æ�¥çœ‹ï¼Œå�¯ä»¥å°†ç›‘æ�§åˆ†ä¸ºåŸºç¡€èµ„æº�监æ�§ã€�中间件监æ�§ã€�应用程åº�监æ�§å’Œæ—¥å¿—监æ�§ã€‚</li></ul><p>ä»�监æ�§å¯¹è±¡çš„角度æ�¥çœ‹ï¼Œå�¯ä»¥å°†åŸºç¡€ç›‘æ�§åˆ†ä¸ºç½‘络监æ�§ã€�存储监æ�§å’Œæœ�务器监æ�§ã€‚更多关äº�ä¼�业级监æ�§å¹³å�°ç³»åˆ—çš„å­¦ä¹ æ–‡ç« ï¼Œè¯·å�‚阅:<a href="https://link.segmentfault.com/?enc=fB7mzi7nhCPpUXzGE5sXjQ%3D%3D.aeYq%2FkJE%2BKs3P6eEvM3qAe8lnFUbMmyWe%2FBG63FfP65vHjSTUfs1ahTQvDBy%2FhnN%2FmR1psKm%2B6bi%2Ffh%2F6PXM9bebmB5S9O5%2Fcvw1JRB%2F9VlsEHNslUuApuZHKUyrHmJmARj2ZjKn0LBPixmVMPE%2BkjZe0VOw%2BtwRkeyQ2T3%2FCMk%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°</a>,本系列æŒ�续更新中。</p><p><a href="https://link.segmentfault.com/?enc=VheRyvw3hSZhyduc23e6zg%3D%3D.hKI8RMYoAFjeIX9qVIh8xeTrtWzNfce5leURmRWSR%2BnQSqE4Leu6iIsQJ0ZUQrjyodF4Qgix7EoD4bLulPbrrS2NlruZZqOU3qeg4pC65x10DUuiBOVPkfwRuecfOF41jWbZFtbLhCPi%2Fzk3oeWCz4XmrnjaJ5nKcELkUkuaDyFh1fg427jeqIGoexya0iQLmhq0HaZvukc%2B%2Bf8SQOnTaLfTJZAOJlAcDbckJKcWHWNRBJ17Dwn%2BW6h06U1kndWnPcMq4a2TZvSRq1R%2BhOzGSde7L8V6jz6%2FMYiJjzJuMO4%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(一):监æ�§ç³»ç»Ÿæ¦‚è¿°å�Šå�‘展趋势</a></p><p><a href="https://link.segmentfault.com/?enc=prDxVlXbuFsiKaS4e82mUA%3D%3D.TpUZy2Z4Esrd%2FYQXQHxFxLNfj0G3k5UFb%2BXQha%2FBoKJ8H1CvEly9TB35cdoKmjBGZ2ygjyN%2B5noNkMi6%2BzO27uMEETeT%2B36EVgWVRfn8vdA9QBgDO%2FcxmFWIOKr6XNqB7I%2FuiNocHnm%2BwQRL4nSPhQ%2BDDd8WVVkj2OA675HXg%2Fj0G0tYZgHUj0DccpLFKWSQArvem83MLcf1rJuDNg5ZrjNz1%2FuHZGJej7co7PegoFSg2I9HjSDXBlmEd5gvUJt6fq9Pc0ADdHZiGyr66SE9go1%2BU0ltOaG5xxEgHutPwsA%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二):如何å�šå¥½ä¼�业监æ�§ç³»ç»Ÿè¿�维管ç�†ï¼Ÿ</a></p><p><a href="https://link.segmentfault.com/?enc=0axnNczT7v9De1ZJeTB4SA%3D%3D.G31tZC5mg%2FwvyGRLC7Sx6KHrMlS0%2FjWJT9lvSukfN6W8VCdV4MsbDC7PgNKfoITnt4DirwXbQEYv22X0ikRhIXhpjs8eid7e%2BCqcXOe%2BmMw2weIMaJR7bL3UW%2FTL4kes8Kq5F6buE7ZZNUWWDZ9tomKxhHnOgYTOtAx%2FwkPMnfoG1wynD8ouaN1KmmZOx5eydR6tRFuWm2hXaDclllp4PJttA187rnlE82hE5EsbhuuXduDlZo8rwwgYO9ExeThXewqwy2AgJCJR%2B%2Bl6AUJXVHwlzImf3oA6v%2FeVrxLraok%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(三):ä¼�业常用监æ�§å·¥å…·ä»‹ç»�</a></p><p><a href="https://link.segmentfault.com/?enc=31HjfHwKK5r2dMXI0yG0FA%3D%3D.Mm1WOzF1sQEgdHETeGxoMAbJalWZmm6rWA5IclSm7iobCur4fOwhAcgPnhPTUYLGALcJyomBdLMpJrIzYimEh6KB1XIsdvT1xNgzqXADnKcMT6Cp0eTulFEmsEcHPHr3oZcQtI6T0GaoUP8Qzl8r1aWkVoEBOwV7OEkbcceaGnfP0QgWxz6BPBsavGa%2BIzFJslt6QinFn8eiAe6H2sX29V70K6LuCSC5m%2FrX9B56%2Fi0embtHmGxOrE260X7YjzYVjdlAirj8nnIChzJlpbXE9gVUL74cdUTllLe9HLPnN7g%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(四):ä¼�业数æ�®åº“监æ�§è¯¦è§£</a></p><p><a href="https://link.segmentfault.com/?enc=O026ybVsC9v15gQB9SBUEA%3D%3D.mnTtuT8KXb9FQ0MZrM5pW8HhUI5im2GFwgwt1LiSCswTdL%2BKa8GnYG5%2B2CjET3oUo9qAHT5WT8xz4A0glY%2FJMGxFJr2NJsB40HPNfayK4Fkk19%2FoEjNYSWOJstDLaxLrQY5u1LzunX543bSqArLWnze9MX0ppXI8jZaaZ5NH%2FCcH01GFLz8r8ZPt1E0ofDoryQ9cEG48p%2Bh2acPv3nrkHihoo5Tu5J0IJkRAHVVHVKShK1fhoSiGRymybSdQColC0xVqPKydEfxQULXgkECWaEch%2BWTstsCFFGyNbtYWQpg%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(五):Zabbixã€�Prometheus 等开æº�监æ�§ç³»ç»Ÿå¯¹æ¯”分æ��</a> </p><p><a href="https://link.segmentfault.com/?enc=YYXrHnLqzSgs0zxsF3c9vQ%3D%3D.aF3pQxJGYylVTQ6sle8lqFbDjrvji5BCBPtI3Kv%2BJemRrcjG5HecyxwDVaOaT8qFiRS1YQ2zIP3LwCRbXyY1LIVUlQ07tP2wC8LrxE4DfY9TPGa9ZODaT1oimh6FEymIQjDfbc67US%2BP6iE%2BFVvbsOixWoofgGHvepE39VQP5IOUy19MqLp%2FVxfc90RKOGzHtpKNSnmYldpgtgyIKgkszF6y0FVFYRzPPSvc3owLZ5djDA3yewY0MBN6bU7LSo5q4yzmz%2BpEyu54xYJt%2BJgzJHYIXjh6NCzkzEezXk3GQ64%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(六):Zabbix 简介ä¸�安装部署</a> </p><p><a href="https://link.segmentfault.com/?enc=6%2BOrLtBmP8i0VGK9FmwDWQ%3D%3D.Tem80nhOBk8LHIZc9dKYKHDAAiRGOFFem3pI7lZZ%2FsIH3uZ%2FUDXCPwXZ0g1bGm3Z74eNL2lB2chWA5J3cvmTkOCJK6fS2WKVD6TWfYH0fqn%2BBXFCPIaVUFY6vjlBIHF2si4lvoRrvZ2Nl3Gv308z45IrMgWgX08kUP1gj1Z0Rb9irIPZFb4QR0ujy2kPGGhHzrD4zzqWoGKFagQiGRiqSkuVWQ2p37FAflmfRwbnUJ97d9N8yQWrpdSkbJLCM42JJxeUV3ZS0GEZXGS5kK73oIH%2FTzESns4dU4cYMjlKsbs%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(七):Zabbix 基础é…�置介ç»�</a> </p><p><a href="https://link.segmentfault.com/?enc=rPMEN6mTXWusptHCgQu68g%3D%3D.%2B3uolyDE0qKq3bYaiBGU8EZGjpbIWZoNdY8cHokctRFund5rLhhrxFgvI6nh%2BoQWZ2xTv7huUZcNKOlyzUQYCy9T3o5%2B3MENW%2BOGsv%2Fal1k1ObyfZLs2Tz3OAItVuyvSdRWGFXXTfuaECV52QQVD9bOLnjUkLfyjEQ0ya%2FeI91pHkhKSEe507Wj2e8jyIvgZvfdqxMf65R8Yr7XQmeXMBLzhZFy2miqog3fcnsr4AhZ4pp1ELf06ro%2FZQFBjvD4%2BK0ZxpuScNehXMVuO2gOjD8%2FiLeQwUQerYXmTcLGVurs%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(八):Zabbix API 使用介ç»�</a> </p><p><a href="https://link.segmentfault.com/?enc=C71W9Rl9EMnzy9QGP7K1Sg%3D%3D.mRqcZD4UThcouKSRsJxVaJwfrU0iL7L8bBT5x5aKyQGXrQ0DjRnISthjPMr36Zk5aXBrIwtfOqkzCTUtg%2Fp11i%2B0XCInGIBGpsV8qkaJPAgJtuNByJNYm9H310AJ73tDUFz11b%2FPDq5qhYVQwiv6fpd%2BEkF6NFnl6eO%2F80sI%2BWbb1PwUsQvczAKZ3whudROgG36XnPnxkKfZWV47TZTxOd3xTxkzKHyxYrGFG7V2tkdBEcRxEOy76E%2FznV1f8UKRPJuZ%2FZ8J7WXj7JmVBdtQYcz9VTIRqtdH3E0BVekUpis%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(ä¹�):Zabbix 自动å�‘ç�°ä¸�自动注册</a> </p><p><a href="https://link.segmentfault.com/?enc=srGw3iwgjyul5xc8VX5rqw%3D%3D.Djt96aWnz01aZE%2BLjxBORDIgm%2FTIWYm%2FGSKMoSj9WPIA5ndo1SaudkRS35%2BYG3e1ubC1faLBNA5YHXt0zGJHWYcZN%2Fruzx%2BVqOvYqZDcOcTnyy8c8%2BtFIEFaKWoSa7bjll2KCyDvBSjEc14Ok9n1%2BWwfLL2VywrXg0nDIJZF7C02Dp6%2Bj1yN6DPuERkU25PYOyEbIJ2X8B28haRvj1MW7dFfMqbSdOVZM64d2IdNoAmVUwbsvtRY5p2y8lLZnQOwNIS617qMkkuBbdGhhzLqXUoN4YDiDj%2Bk4CtSlKaT9ec%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��):Zabbix Proxy å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=PWMeupLwe%2F8Aum8gNdFKrQ%3D%3D.jx6hKlQOVLzV%2Fc2rW7xDXzV1kYfQATEKWBytaH60YgMEJIwGDTgTHUAB%2BEB%2BWNaaLAme7WAcXXLk8ND1i76WH60lXImh3T%2BqF5I6MUsW9gEMPp%2B4zKtCI9Y3yXrydvbVuUvJmBS%2B5NZDsEWGwtloos1Y4jMekSN0x89UhE7fnR%2FL0bnhpHKHftmlLEBr%2BqHlQRVKHsENNaXRtTW8jer8iVXK%2Fk6xEHv%2FBzSPNfOZKrtMmkzJLpOqSgAEfl74GntTnrYyi%2Bok%2B6jhroyoMNI0wysJShWRnISOmuvy3ISlMew%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��一):Zabbix é…�置监æ�§ Nginxã€�MySQL 等常è§�应用</a> </p><p><a href="https://link.segmentfault.com/?enc=XkVuYcMScnBcvUzZeNnKFw%3D%3D.hld1gCscLXJNCdBPfXuLqgi0Ql4jv04lhh0aq%2FoWAZLZVpRF3Mh9iYZ5T1vqtMyzWgcdl%2Bmn5jL46FAJm2Zvl%2Fwb6e8%2BUsGPCIyXPmWYW7Ubb9ezeB4XJfJ36HnxehjjbAIFu%2FI6yTCRcheXhZssGXi6qNUUVUkumCxowf5mj3BQHlly6z9ASWLzIiDO3M9QTbikFq%2Bw%2BioXCYjPjz4%2Bus3Hk2m0hWuRL9YtkMmuVJQJnnZJHFYOXAPtPl4jp%2FsC6WOkKoQvsq3V5p287p%2FD7x%2F69Hh6Ewwia52exbcaOE8%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��二):Prometheus 入门ä¸�安装</a> </p><p><a href="https://link.segmentfault.com/?enc=VRB9IOF7T4n9Cw84AiNhOA%3D%3D.kXEW%2F6sw9t0rI7vw%2FEqOuMtpaKbKxh5j1rsNfErVJFrXUwLstPyiaXZjY7LpmkMPXB1r8AA9oAK4TvdVPio49Hedr4Wi05Koj%2BqIOSH3uWal5PnhaY1aM2Tx98%2BxUz15iVeo%2FI183HOhG0QbVdKSIlowtSYa3IYlWepH1V2eTX1taFupmSglb5ZA9RKWFnlRNczNZUCAwmLDxjuqI%2FjXF9Om4xXEb5K%2FSacW4MFTZbhK7fihn2wMgIFMGkDJXuwVbxW2qycdFtNvX7V9PC5pBLBQGTkQoNutxjq%2BFRrbZSM%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��三):Prometheus Server é…�置详解</a> </p><p><a href="https://link.segmentfault.com/?enc=GxmehUwOPzGA2TRL6%2BRBfw%3D%3D.QcvBtzhOzDWrX%2FmsMjY8GNaqmhf4gYeKc2UsGyJjOOWJt6%2FVPSeMsUVm3uMAi1zTfszj0LBRNbZs8Vmlp01gNipJqG8xL7Dh%2BFIyW074syO%2FwZcNGMYaASzOpIaGa1xV2uBTLRY6s7aIKagAR2wjauH9yHcC%2Bve9SoPkxV1A%2Fmc1NZboCwb8A1JsE%2BOum95DE2chjjDJZ9bhwZXi4Qy8w8LJDNHDe5LjQWodxWE2rYXFEcNN2rYtYo3Fr4vhR3PkcgohQoyktLs7J3AaqEdhVtxFTSZFy%2BtQ6ctRm%2BhZW74%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��四):Prometheus Operator å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=vkyT0T%2BwtoHgupIWl%2ByF6Q%3D%3D.9bcXHQtJUsGm0%2BK0%2Bh514DIfClsvDlT8%2BJYmrhicL6HWyX2y0yVuMFU7o7mM%2F32%2FF%2BvcL2vFQLbxaqhwWgh4LdFY%2F28KN0mb4RLu42IUCLLovDR4amtxTChluyFzmV6C7qDqUYJzx1grmag7PTQUhjgcIqBECUAWpinWLuefMENyP%2FLPzwd7%2B4Zhl45M4X0%2FnPnzUweiPhx%2B%2B8EZLSC9pXJqo3l3rpNodV%2FPAzc08QT92wcOncQBQSFSOOTxNPFbxG4ngkkBtM1ebZJ9LLSgDRe94Gfk6ApikSVM2Dpn0GA%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��五):Prometheus Exporter å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=meaxjFdxvNXp%2B2UjVrDmgA%3D%3D.E9WEM23lqm%2FMcxa0NS2nZDD1iHW2ZyKBB4XtkFNeNRzthCr35qEt0D9Mhb6X0hlH5R8r%2FQvzID1mR9zPEURSqYqh8vOuKHtF%2BmxFWQDsP7BMi8N%2BnVrDbXo1eRrMILK6uWINzFUxZ7jTKIcydNLQqW5lDS2rcPaNia3qdhB25Z9lUbj%2BLk%2FeLFK%2B%2F9xx5a0xGHDF41HS97Bu6k1mNOs5Ld5Mlaawm6ZwJUiJ0OM3SG1%2B97uHMAcIrRJEiUbi5IP2DD3gJ%2FFDY0Sp0P6VIiTKxV4eHE07wrAKSZa9s1rRlBA%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��六):Prometheus Node Exporter 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=pKJJdwDCxq1SXdmUP1OL%2FA%3D%3D.5nikHoKLlVDrnj7CDpYf9msaHrXWChV%2FwjIyqRtRqQRHb8wLywtt%2BjSNdXvaBCxmC6nujw1N572SOL7xeGukn0g3Hsr8CIuhSg96nkTStYw4OSbPNabavKIEcdSZL1Pk0pEJy2F4uONmZyMmfr0ocdnobNRnJBVXKmAmd7vA%2FOgc8dIW3EGYgxwkyp%2BTtYbRsB4JX8JFgiIzuaSzRHVXA1NAKVtGOdAKSELf6jCFxPr%2BdR6%2FhDY2pk0RMIW3RJ9da4APb8W6mW6D2AI0UwMBdxbfGc5HvsKojxpwVc%2BHv84%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��七):Prometheus Label å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=sYqZPckP2oZEHnloG%2FaWFw%3D%3D.hCTmu1UrkYuwxstrkp%2Be%2F3fg30QQAN50iNXns7qjiH%2BMzLEjPE4IoEP%2B%2FVFrL50BOLN%2BuVaUuPMkXxReSBjhjJSYOaWUs2XFonDhSX8O5PVCgvRO5OidlTe4ZTawZbd5F1SFwQaQTGDJhKtulQ%2Ba9JLlYILWeKuPqAHeHSYYGyTZdSR4MwANlp66lt%2FlTwjvBe3LjvTFAJDhIhUQ%2BtazQuqEY%2BeGuLzj8XXZWfP%2FZyFfpljpsv4peplQ1KzXkuvZFJ8E%2Fx4Bg48kW9flow6KvHvlMK4LvFI0Y6yaWi0MYak%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��八):Prometheus æ•°æ�®æŸ¥è¯¢è¯­è¨€ PromQL</a> </p><p><a href="https://link.segmentfault.com/?enc=j7GaesB%2FGBvBJQKJcJo2bw%3D%3D.YAGZBbqOWa%2B9LS5oB6gK9aBQSpBQrvPIt%2B73uiUzofgBfTRa8S9%2FURh4oadTUNj4kIOfXzijkDkXMxLQYOaBO9hbfhuWDrkJBakIfHy4xfrfl1GVmMUxUDWqXacLSS71ldHaimdpo8Bf2gjd4Ix%2F3%2BsbK0zRj1%2FWV2gRnNu%2ByA4lhIFfjGdZH%2BXp1hCW%2Fab89e4jmOlW8xAxnd9rXODIadNPovz6lhmoSQ1jHRXDIfDrEENsx28PLD7m%2Fv%2BZplaomx3UhquzdipeCv2uCW2KCo2oz1XGL042C9E246sz0nI%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(å��ä¹�):Prometheus 报警模å�— AlertManager</a> </p><p><a href="https://link.segmentfault.com/?enc=CDzsLANuwPCQlafujhvyMA%3D%3D.3TduhIwZpdd0gCuveqb9ecx2DhGB5H%2FhVMlLGvVvZnr4aqvZV%2Fb7X0rdWOV11UxGmvXsbdavhw2x1%2BaXoFZGS9AduXTq%2BPDIWcqq9MN1W2EnVKtVj%2FTURO6da4HTMP02VaEyo0puyWVZQOefPGISCB97nN2%2Bh1dFXJaaG2xRW2p0JEat4WE3xu1N7jc2qKnrgHPo56L8We%2FdPt0Kwi4nGWFGU%2BPJYMaBg1vRq%2B8o5vyvo3pPKRwHYfpAq1cBE1oN2b0qytFiR6qGkKXTrtyXmNiqpYWhhD5bDqsnOqYZ%2BZM%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��):Prometheus Alertmanager é…�ç½®å®�ç�°é’‰é’‰å‘Šè­¦</a></p><p><a href="https://link.segmentfault.com/?enc=etidOQ0pM9zFLe%2BlW%2BS%2FBw%3D%3D.79w%2FxUj9nruB7F1V6Dj5TI%2BPZG94Bi331AowfRtxtpanx1jFcaW2kLSv8rswzv5VOQPCCkeAFGmxHbSwfQRsIInMrXjdsbZCawKJOPQk313OWOfqm9OdHykuQRh%2FS1905H3KZCKV8hLMLeYODH8ZjLytXKPnRyO8ohDh7u3UWCGMJ5eFPUuTaWfRV8aOd65pifBkgmCh%2BkEXOl0a9e5TQpv04AVfxfvgLWjWmKzlOMIpMUam0K0jF3QU8PpN8qCg3tekDNEMU4dI%2F9aYk0C37Py5p1dWQHGTWV1kkpqYzzQ%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��一):Prometheus Pushgateway 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=3NcTKffFRuEPky1Fw2Ld6Q%3D%3D.ghBZbaBNPnf1gDThy6LOwdnypc1%2FqpNlheJHVCBTcQkzyaBdehlnj4xO8rywdvFN6zfIj0mVf%2BMKUu8Mat97KoSQ48hSIvYLU0QMSxVialJU28XmtTncys8rUuvXZC4uv%2FMztLGR9etQHI4eudyP9MrtKLKrh39chAajGkrL2%2F5G5F1FBONsoUCoESP9OzIbSgr3gTzKIPALcLtTEWt0n552Yr712RdVF9a3Kt%2BVgTjtZmn8aJkV%2FsFV5W4MPipPc7ux0CBjTL0psW4Rt%2BEZRml0k6FWpPIsBYriRJIaS%2FY%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��二):Prometheus 基äº� K8S æœ�务å�‘ç�°è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=9qa%2BgGfTDRwVbLTIkHZY5A%3D%3D.Xh%2BgcXBQ9ESL6P8W0XXPn0T2sYznlUFXGjb1ahjtZwyzl4WUnilbjPLy0wfVEn0fH2PtOdaOIGmRX3ruMLmEAqCJnMFkGYg%2FKrmrqhTyLgA8kIb8GQLVgMqJcHuKjZyvHh8%2BxBw30V1ZnF1O3WvINZrqYtU5IlTe%2BzgBgwK5Dba3wgGHA7BWJRYaVd0FS8FEETd1eO%2BRgLNY%2BwvYh%2FvpIX1bHsG7tr1sgTdLMSzxbJbioyZZoYo%2FLB8iHLhonfQI7ampUCDQ2jEIZ2okPSqZdGHSk2pqZb8534XwA3yi3Y0%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��三):Prometheus é…�置监æ�§å¸¸ç”¨æœ�务å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=DG2XYlYXnAIUyezM61Bvww%3D%3D.QOi8zXq8pUjpHLNRB33hKUdAr6VycpmVdYvKMyaL7R6iEtkhdubVzNjeajCxYSo5BHnmg%2FdBfObuFQyZNAGGCKmGmlcoLottb5Nyvhe8nLjJwfd1PC30Pi0ofkNKRPRWvsTXYx0El68Dt0sOCLyXfnu9Jkiz%2B5LQ678sa5kMn6TWk2KFgX12Eh0FoWRJd%2FtTTOYubNGvi7l5%2FykR%2BG0od1alF468mCHTrSqyjZiAxIV9qmN7a7XMNSkcD0BlWg%2BDmQWrR4pc6BHwzikvuzt7td%2FDK8Hrt7%2BKzQoBFBrnVsk%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��四):Prometheus é…�ç½® Grafana 展示ä¸�报警</a> </p><p><a href="https://link.segmentfault.com/?enc=WnoTgpmDuaZehT3yzaxirg%3D%3D.0AxKgv5ke2e2LAwJjH64t4kfByTO9fF1j2qyjbEnE9ykfJn2CGHr5SrGe2uB09CieVzxh%2BA%2BYS3yh008MEwN3753hVhh%2F7v6EOVOPysh3ICDioBU7foxH08Ingoq%2FOXyFDgaQdcGzt%2BHAh%2BQNOHgQxCtlW4TQ5fwwrBahCOKGJlDBFN3LOGvccuv1nrFk9XO8SfgsjzZGmCOevFSdHE21OYve2CasRdmoVssIWpZLm7cinSCNVxHzZrDmTfUsQIGKu1CiXqJ0VUFcRkRdmRx2JVUBBdVWs4HHl%2FlasyF5z0%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��五):Prometheus 高å�¯ç”¨é›†ç¾¤æ–¹æ¡ˆ</a> </p><p><a href="https://link.segmentfault.com/?enc=Y7u0Yo5NlT%2BVjEmrM3l6hQ%3D%3D.eDihtuhBqd1bCqwcQCEdkuUtgjY5DXxQn4HrNo7MUAdX0AqQvOid9qyJLy3jzm7x50Nvn%2B2c3J2N%2FdAdi70cWlOLU1yNnYKEboJXUp8V93GtSY0qqnd878MgmSccub0b506U9MU4KyvQIi2hgAiX4toOdW2P75aGhuS7RouPuSjK2BpDzsEvFs2pOrgUgiEz3g4W9ePx%2BcXCJLHjpJiNQbrMr6lHcYsDxHPgP%2F2L8mIomKe9zG5mxVPvg6fGxQalzJOpu8AQe5Pwtjc36tecd6jhtpZOIcUNXbOLYgzmppU%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��六):Prometheus 高å�¯ç”¨æ�¶æ�„ Thanos å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=MV6o5GX46vvPjHTT6jF2Iw%3D%3D.iT78liNaT3hDk1gsB5Gw2ps88U7QnVGx3caoBXnMrd5Tbzv8Sb1UVle7SzqVjSLrIjUAPQ%2FSqL2OiMDxj4u0J2zn0qejIfZsdKYt0G3BLUF%2BOcI4m5wcEMuOIf9mmulSo2XzCdZLxZ7vpi9a4iP1Wo60oTmAzx2vBBdiyUOwB4aBqPbpiHawBFo%2FF1TJ2Y%2FFoJKuFJvBrO3F0pxr1DvN%2Blnt7qQJtBX0zjapjgBQSGscUsVbSkus8Vydzl1ug2c%2FnoJaNAJPDB7z1v9TtVMszRGC6tbe8K9Jnn%2BQhSRDGNM%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��七):Grafana 基础入门ä¸�部署</a> </p><p><a href="https://link.segmentfault.com/?enc=K9KuhhdoYnjC9A1y%2FIUPiA%3D%3D.PfY%2FQpTfIrvXYjiE2PJcmkvWfS8KopQIpoqSA6Syd543jngd0rnAYAFHXuVZS004pJrD6Klv%2FMQ7hW0cgJDGL7l0jqV03hu0qDAnY99fjnNzCiUW%2F9h5W5LUGA8TScykT3Huso%2FslgAOmv4C3Qu2cR7tGeo5g9RXWWErmVpSqlIcU386t4DO7noVSDX5wGrIN2gUabUZAbVCUzoOJxDdbOOAR%2BfN4qxe70xnoyBPjefiwyHMqX0Li3DeFbXb5BM0Z87qmSJpuPyO5rtP8vtVdDA5Jk%2BpmU5wrfgHa0sSC90%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��八):Grafana 仪表盘 DashBoard</a> </p><p><a href="https://link.segmentfault.com/?enc=T3oqYyhiwVdhS0vvCDQbZw%3D%3D.FiRHixdogAlCcu65EGTMyFiaec9pWUnWQdhMa%2BenY19JpTRI%2Brsmus%2Fc8Pc51ho0tGc6s0pG2%2Bvog1Feh%2F52MU4c7RQQy3gYdCg0pQMAy3kR5nG1IujAN3brJLqUKtmhRuXvr8qYiQzLmcj491lnnKIzPqhHNt4NtnDNntCRuMMpyh63vaCrFQu3iJBmDyKaxdZHmWCaZvNa9mjK5zRTyyPHIQP%2Fi%2BYG13%2BjMQcn2wWeKcwXgyZFD8FJLTyYl93VfK3PpXiWuDjFjo3qKoctgqeDhrIINyX8mcRdk0zXVFg%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(二å��ä¹�):Grafana Dashboard å�˜é‡�</a> </p><p><a href="https://link.segmentfault.com/?enc=u6mJzOmgZFh6QEdb6oSXeQ%3D%3D.svxPUoPCNmh2xcIYRgh9t2QyW4QZsZXd4BdbV1nsFjphxSqUWERRtGm%2Fh0%2B09Wp5JGqdPgfjNSiF0NonidXK2Zmw7%2F50L3gBYhPJ24qqAvTSHdXxfJyJaPRNAhSVRswl%2FzeZv7vkfd17aVM3nCMyq4MxxJBKrWuo5iaFFHG2Q6DRk999wAJ5YC1lMZvW%2B7gsIJPMsFXCPUo8KTLr1IEI6AVDct%2FLlldGINyv7nAQ76WpI4a10LwApqUXO1%2FNE8TiIn9lFbqH8ff7ZreiNIGMw3AUdlUTWoOgg380k3tsMoo%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(三å��):Grafana Panel é�¢æ�¿å’Œ Time series æ—¶é—´åº�列</a></p><p><a href="https://link.segmentfault.com/?enc=LQABWI8nXelk63ylA87HOw%3D%3D.tBIU8H4%2FCr6IJOrBSqrYhLnxEB6VF4R%2BhaauuzJvnVodZy2WkkzZxz5yth9ltxYq38A60xspDTC9nsDQGTAyWKp07WwYhVW8XRTNzGW7FjZLTEWcBUoD56u2Mq2GCcWr5wT%2BHHWEDRIjQ7gNq6k3NuCBKQN5OEYpoMHwyoFoCzP2s4a3vKN9cFVLT2eWZA1qoXTTiRpB%2FVrBgepl5GY4clU6QWowQ7zsYet8FkWqYQKKicRce2b1T41GaFzR3EIziaRnskBa0Yl78CdbwNfiHLDMEDrclsCokbPBZn3rrY8%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(三å��一):Grafana æ·»åŠ åŠ¨æ€�å�‚数详解</a> </p><p><a href="https://link.segmentfault.com/?enc=Zs6fASeklXT3DeW%2BfFyB8A%3D%3D.VIMRrOyjqnlnQOxiq%2FWvbDPuvoyqaN2HFuPzQ2mfxKYL6arn%2FfJbukgecSusmLI30RetPNyUbm2k0zRCtWXELy7ihTcgN%2FzxooVYqL19l2vliwjQ2aT5robCrTMMkGYRhBl%2BXKEO4x%2FjIZWrLMNxuw9btvTuKFSP3QiZGds4%2FThvQ9vliivqBmvrKTkFPjg1It%2Btg9usZvjftutTybO4luajSbOYrwn5OuD6EjCvdKcwd4BZTzPrlBkngpOHjyhLprbKX%2BIMLHwnMaMQMAybqQqeuS%2BXEnS%2B2HNWpRLiH%2FU%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(三å��二):Grafana å�¯è§†åŒ–é�¢æ�¿ Heatmap ä¸� Gauge</a> </p><p><a href="https://link.segmentfault.com/?enc=ixi1JhDJgo3XfxTxG%2B%2BRcA%3D%3D.h%2F2FdBZdWm1Hsl%2BQwktjaJX%2FAX6soOx1QmGTlF%2F9T3z1uE6xTB606cux9aMuKuDw4QS77egurbP5TX%2FBOVSf%2FVWAHUf4oFU49x5G%2F30P%2FYIrXPaethIC4lmuci7p517ZsKn3xIiqqVClZgsl0A8XWTw2ddf%2BSah%2B4%2BMVaIFZwFzW3MJvtxhlF%2FcKCvqYyBVUhnhiQcNn%2F8HcbUZQV5As4xwIdOhDtFXA2JzzH3louXg0ig8Ji9wLNtnNq%2BwdxG3%2FAsEKQatrMUkLKx0NqCj0ejPIoN2oLkpRrtWaLgix0dk%3D" rel="nofollow">æ�„建ä¼�业级监æ�§å¹³å�°ç³»åˆ—(三å��四):Grafana æ•°æ�®å�¯è§†åŒ–工具安装ä¸�应用</a> </p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>如有帮助,请点在èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p> 一款超牛逼的组网ç¥�器ï¼�å�Šæ‰“市é�¢å…¶å®ƒå·¥å…·~ https://segmentfault.com/a/1190000044369501 2023-11-07T13:03:24+08:00 2023-11-07T13:03:24+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <h2>NetBird简介</h2><p>NetBird 是一个建立在WireGuard之上的开æº�网络管ç�†å¹³å�°ï¼Œå®ƒå…�许计算机ã€�设备和æœ�åŠ¡å™¨é€šè¿‡å¿«é€ŸåŠ å¯†éš§é�“ç›´æ�¥è¿�æ�¥ï¼Œæ— 需é…�置或中央VPNæœ�务器。它使专用网络å�˜å¾—安全,并创建了一个专用网络,在没有手动é…�置和专家的情况下应用安全å®�践。NetBird网络普é��适用äº�云ã€�本地ã€�边缘和容器ç�¯å¢ƒï¼Œçœ�å�»äº†æ‰“开端å�£ã€�å¤�æ�‚防ç�«å¢™è§„则和VPN网关的麻烦。</p><p><img src="/img/remote/1460000044369503" alt="图片" title="图片"></p><p>NetBird 没有集中å¼� VPN æœ�务器,您的计算机ã€�设备ã€�机器和æœ�务器直æ�¥é€šè¿‡å¿«é€ŸåŠ å¯†éš§é�“相互è¿�æ�¥ã€‚NetBirdå�ªéœ€ç‚¹å‡»å‡ 下å�³å�¯è¿�æ�¥åœ¨ä»»ä½•地方è¿�行的机器。使用NetBird部署安全的点对点VPNå�ªéœ€ä¸�到5分钟。</p><h2>NetBird æ�¶æ�„</h2><p><img src="/img/remote/1460000044369504" alt="图片" title="图片"></p><p>NetBird æœ�务端有 Management,Signal,Stun,Turn 四个å��ç«¯ç»„ä»¶å¤–åŠ ä¸€ä¸ªå‰�端。</p><p>ä¼ ç»ŸVPNä¸�NetBird对比:</p><p><img src="/img/remote/1460000044369505" alt="图片" title="图片"></p><p><img src="/img/remote/1460000044369506" alt="图片" title="图片"></p><h2>NetBird 部署使用</h2><h4>部署è¦�求</h4><ul><li>A Linux VM with at least 1CPU and 2GB of memory.</li><li>The VM should be publicly accessible on TCP ports 80 and 443 and UDP ports: 3478, 49152-65535.</li><li>Public domain name pointing to the VM.</li></ul><h4>安装</h4><h6>Linux</h6><pre><code>sudo tee /etc/yum.repos.d/netbird.repo &lt;&lt;EOF [netbird] name=netbird baseurl=https://pkgs.netbird.io/yum/ enabled=1 gpgcheck=0 gpgkey=https://pkgs.netbird.io/yum/repodata/repomd.xml.key repo_gpgcheck=1 EOF</code></pre><pre><code># for CLI only sudo yum install netbird # for GUI package sudo yum install libappindicator-gtk3 libappindicator netbird-ui</code></pre><p>脚本一键安装</p><pre><code>curl -OLs https://raw.githubusercontent.com/physk/netbird-installer/main/install.sh &amp;&amp; sudo bash install.sh --quiet --install-ui --setup-key=77C9F991-DC68-46FA-B06C-E02FC102697F</code></pre><p><img src="/img/remote/1460000044369507" alt="图片" title="图片"></p><h6>macOS</h6><pre><code>curl -fsSL https://pkgs.netbird.io/install.sh | sh</code></pre><pre><code># for CLI only brew install netbirdio/tap/netbird  # for GUI package  brew install --cask netbirdio/tap/netbird-ui</code></pre><p>详细的安装说æ˜�:<a href="https://link.segmentfault.com/?enc=H1TR6OkMBWypAkiIa7kD9g%3D%3D.BAmNrHLoesNk4cQDLXO9jUMKKfxtw%2BwIOdCPNn43nxWJhZ2BQ%2B8%2BnIQK3Ug4sKH2" rel="nofollow">https://docs.netbird.io/how-to/installation</a></p><h4>使用</h4><p><img src="/img/remote/1460000044369508" alt="图片" title="图片"></p><p><img src="/img/remote/1460000044369509" alt="图片" title="图片"></p><p>刷新就å�¯ä»¥çœ‹æ–°å¢�的设备了</p><p><img src="/img/remote/1460000044369510" alt="图片" title="图片"></p><p>å�‚考:<a href="https://link.segmentfault.com/?enc=shnVDI%2B%2FiyblwIgljMIvYg%3D%3D.mrlFk%2FDnilhpe8aKm3bi%2BLNYNwpM643GZkKfEhoGQsO1keCG%2F%2Fp0cTEBz%2FjrIr4yhUivRfmeB5pbkOeRKeqctg%3D%3D" rel="nofollow">https://docs.netbird.io/how-to/add-machines-to-your-network</a></p><p>更多的功能介ç»�ä¸�具体æ“�作å�¯ä»¥è®¿é—®å®˜ç½‘或者 <a href="https://link.segmentfault.com/?enc=8gBmXJsro4caf5Q0p6kBPQ%3D%3D.Rg0TjiZxy4Tq2%2BMIdbCWvDxmW13LbV65QyhSbno1cvsbLgR2UglLEUQTPeJNCx1L" rel="nofollow">https://github.com/netbirdio/netbird</a> 查看详细的说æ˜�。</p> å¾…é�‡æœ€å¥½çš„ 10 家央国ä¼�å��å�•ï¼� https://segmentfault.com/a/1190000044369474 2023-11-07T12:58:58+08:00 2023-11-07T12:58:58+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>大家好,我是民工哥ï¼�</p><p>今年和朋å�‹è�Šå¤©ï¼Œè�Šçš„æœ€å¤šçš„就是找工作,都说找工作太难了,公å�¸æŸ�æŸ�部门å�ˆè£�员了,身边很多å‰�å�Œäº‹ã€�朋å�‹éƒ½é™�è–ªæ‰¾å·¥ä½œï¼Œç”šè‡³æœ‰çš„å¾ˆé•¿ä¸€æ®µæ—¶é—´éƒ½æ˜¯ç©ºçª—æœŸï¼ŒçœŸçš„ï¼Œè¿™å‡ å¹´ï¼Œå¤§å®¶éƒ½éš¾ï¼Œæ— è®ºæ˜¯ä¼�业还是个人求è�Œè€…。</p><p>è¿›ä½“åˆ¶å†…ï¼Œä¸€ç›´æ˜¯è¿™å‡ å¹´æ¯”è¾ƒç�«çš„一个è�Œåœºè¯�题,其中的å�Ÿå› 也很简å�•,大家出æ�¥ä¸Šç�­ï¼Œç¬¬ä¸€å°±æ˜¯å›¾ä¸ªå·¥èµ„é«˜ï¼Œç¬¬äºŒå·¥ä½œç¨³å®šå•Šï¼Œæ— é��就这两点。</p><p>这两点也æˆ�了时下年轻人比较追崇的,å‰�å‡ å¹´ï¼Œå¤§å®¶éƒ½æ¯”è¾ƒå�‘往互è�”网大å�‚,ç¦�利好ã€�工资高ã€�牛人多ã€�ç�¯å¢ƒé«˜å¤§ä¸Šç­‰ã€‚</p><p>ä½†æ˜¯ï¼Œè¿™å‡ å¹´ï¼Œç”»é£�çª�ç„¶å�˜å�‘了,大家都在求稳定,åƒ�国家电网ã€�烟è�‰å±€ã€�银行等众多央国ä¼�业都为了大家的首选。</p><p>å‰�äº›å¤©ï¼Œåœ¨ç½‘ä¸Šçœ‹åˆ°è¿™æ ·ä¸€ä»½æ¦œå�•:<strong>å¾…é�‡æœ€å¥½çš„ 10 家央国ä¼�å��å�•</strong>。其中烟è�‰ã€�电网和五大银行ä½�列å‰�三。</p><p>å¾…é�‡æœ€å¥½çš„10家央国ä¼�到底是哪些呢?看下图:</p><p><img src="/img/remote/1460000044369476" alt="图片" title="图片"></p><h2>中国烟è�‰æ€»å…¬å�¸</h2><p><img src="/img/remote/1460000044369477" alt="图片" title="图片"></p><p>å�»å¹´å‡€åˆ©æ¶¦ 1.06 万亿元人民å¸�,也是世界 500 强ä¼�业榜å�•中唯一一家å®�ç�°å‡€åˆ©æ¶¦ç ´ä¸‡äº¿çš„中国ä¼�业。æ�®ä¸­å›½çƒŸè�‰å…¬å�¸å®˜ç½‘的数æ�®æ˜¾ç¤ºï¼š2020年度中国烟è�‰æ€»å…¬å�¸åœ¨å²—è�Œå·¥å¹´å¹³å�‡äººæ•°51.3万人,在岗è�Œå·¥å¹´å¹³å�‡å·¥èµ„19.67万元。</p><p><img src="/img/remote/1460000044369478" alt="图片" title="图片"></p><p>ç¦�利待é�‡ç›¸å½“好(五险二金ã€�ä½�房补贴和å�„ç§�节å�‡æ—¥ç¦�利),工作稳定,就是难考进å�»ã€‚</p><h2>国家电网</h2><p>也是世界 500 强ä¼�业,å‰�段时间 <a href="https://link.segmentfault.com/?enc=Qgl53nSVnCrX8s2WfOiseA%3D%3D.hpXWOTUI5DCfl%2F1EwC6aOfW9m2PoQGOnzodlN68yyeiGLVW0NHYAP2c0odcNrGG9dB0TUKgO6%2BzKAreR1sAScak6noSELp%2FDZXb7Y66qx6bTPzoRE%2BEQi8tCfpaUyRYiPt1by8ZLgJg6QYp1H%2BPm8cmAbFTqC3BgU5F0toI%2F9c3VDoXDNej46O4SMPCPYrGAWjgxxV0230PjWIbj029uKyJ8QPS6LqMuddO2qXu5scWGrgtkMt%2BFJmFztfxGJVwIkXhtQt9A0K4m6ecp52Ee7yo1mBCebUv4WssoRvFLs%2FM%3D" rel="nofollow">国家电网工资待é�‡æ›�å…‰ï¼�</a> ,让多数人羡慕ä¸�已啊。国家电网的业务范围é��常广泛,而且在å�„个å�¿çº§ã€�乡镇都有相应的岗ä½�,真的能å®�ç�°é’±å¤šï¼Œäº‹å°‘ï¼Œç¦»å®¶è¿‘çš„ç›®æ ‡ã€‚</p><p><img src="/img/remote/1460000044369479" alt="图片" title="图片"></p><p>需è¦�网上申请笔试,通过了还会有é�¢è¯•ç­‰ç�¯èŠ‚ã€‚</p><h2>五大银行</h2><p>这个ä¸�用讲,大家都知é�“指的是:中ã€�农ã€�å·¥ã€�建ã€�交。</p><p><img src="/img/remote/1460000044369480" alt="图片" title="图片"></p><p>应届生的月薪转正å��一般在7000å·¦å�³ï¼ˆä¸€ã€�二线åŸ�市行情),还有房补和其他ç¦�利。比如:五险一金都是ä¸�错的,而且æ¯�年都有涨薪。</p><h2>中石油/石化</h2><p>大家å�£ä¸­çš„两桶油ä¼�业。</p><p><img src="/img/remote/1460000044369481" alt="图片" title="图片"></p><p>中国石化也是世界 500 强ä¼�业之一,æ�®ç§°å‘˜å·¥æœ€ä½�月薪 6000 èµ·æ­¥ï¼ŒåŠ ä¸Šå�„æ–¹é�¢çš„å¾…é�‡ï¼ˆå…­é™©äºŒé‡‘ã€�车补ã€�é¤�è¡¥ã€�采暖é™�温费等等),年薪 15万一般å±�äº�中下水平,æ¯�年都有岗ä½�æ‹›è�˜ã€‚</p><h2>中国邮政</h2><p><img src="/img/remote/1460000044369482" alt="图片" title="图片"></p><p>中国邮政涉å�Šçš„业务范围也相当的广泛,工作稳定,ç¦�利待é�‡ä¹Ÿä¸�错,ä¸�过全国å�„个地方ç»�æµ�ä¸�å�Œï¼Œè–ªèµ„å¾…é�‡å·®åˆ«å¾ˆå¤§ï¼Œæœ‰åœ°æ–¹æ�¡ä»¶ä¹Ÿæ¯”较艰苦,特别是一些高海拔地区的é…�é€�äººå‘˜ç‰¹åˆ«è¾›è‹¦ã€‚æ™®é€šå‘˜å·¥åŠ å¥–é‡‘ï¼Œå¹´è–ªè¿‡20万ä¸�是问题(年终奖都会比较高)。</p><h2>三大è¿�è�¥å•†</h2><p><img src="/img/remote/1460000044369483" alt="图片" title="图片"></p><p>三大è¿�è�¥å•†æ¯�å¹´æ‹›è�˜äººæ•°é��常多,一般è¦�求本科以上学å�†ï¼Œé‡�点是招è�˜é€šä¿¡ï¼Œç½‘络,计算机,互è�”网,信æ�¯æŠ€æœ¯å’Œå…¶ä»–专业的毕业生。正å¼�工的ç¦�利待é�‡æ˜¯ç›¸å½“ä¸�错的(五险二金ã€�车补ã€�è¯�è¡¥ã€�é¤�è¡¥ã€�ä½�房补贴等等),哪怕是è€�å®¶å�¿åŸ�ã€�甚至农æ�‘乡下。</p><h2>中国é“�è·¯</h2><p><img src="/img/remote/1460000044369484" alt="图片" title="图片"></p><p>ç›®å‰�å·²ç»�改é�©æˆ�中国é“�路公å�¸ï¼Œå’Œé‚®æ”¿å·®ä¸�多,ä¸�å�Œçš„地区ã€�å²—ä½�之间的薪资ç¦�利差别还是很大的。æ�®ç§°å·¥èµ„æ°´å¹³ä¸�是很高,但ç¦�利还是ä¸�错的(å�„类津贴å�Šäº”险一金)。</p><h2>国家电力投资集团</h2><p>五大å�‘电集团(中国å��能集团公å�¸ã€�中国大å”�集团公å�¸ã€�中国å��电集团公å�¸ã€�中国国电集团公å�¸ã€�国家电力投资集团有é™�å…¬å�¸ï¼‰ä¹‹ä¸€ï¼Œæ˜¯å›½å®¶ä¸‰å¤§æ ¸ç”µå¼€å�‘建设è¿�è�¥å•†ä¹‹ä¸€ã€‚</p><p><img width="526" height="300" src="/img/bVdakGO" alt="image.png" title="image.png"></p><p>工作比较辛苦,进入门槛较高,薪资待é�‡åŒºé—´è¾ƒå¤§ï¼Œå¹´è–ªæ�®ç§°åŒºé—´åœ¨7-50万之间,ç¦�利ä¸�错(五险二金ã€�ä½�宿ã€�é¤�è¡¥ã€�交通补贴ã€�体检等等)。</p><h2>中国建筑集团</h2><p><img src="/img/remote/1460000044369485" alt="图片" title="图片"></p><p>业务广泛,涉å�Šå…¨ç�ƒï¼Œå·¥ä½œè¾›è‹¦ï¼ˆå·¥åœ°ä¸Šè·‘~~ï¼‰ï¼Œå»ºç­‘ç±»é™¢æ ¡æ¯•ä¸šç”Ÿçš„é¦–é€‰ä¹‹åœ°ã€‚å›½å­—å�·å�•ä½�,待é�‡è‚¯å®šä¹Ÿæ˜¯ä¸�错的。一线åŸ�市月薪å�¯è¿‡ä¸‡ï¼ŒäºŒçº¿åŸ�市多在6-8k,六险二金ã€�优秀人æ‰�解决户å�£ã€�通讯补贴ã€�é¤�è¡¥ã€�交补ã€�节日礼å“�等。</p><h2>中国航天科技集团</h2><p><img src="/img/remote/1460000044369486" alt="图片" title="图片"></p><p>世界500强ä¼�业,我国航天科技工业的主导力é‡�。员工ç¦�利待é�‡ä¸�错,区间较大,年薪5万-30万之间。</p><h2>å…³äº�央国ä¼�æ‹›è�˜</h2><p>一般社招较少,这个大家都懂的。所以,央国ä¼�æ‹›è�˜ä¸»è¦�æ¸ é�“分为以下四ç§�:</p><ul><li>1ã€�æ ¡æ‹›ï¼ˆç§‹æ‹›ï¼Œæ˜¥æ‹›è¾ƒå°‘ï¼‰</li><li>2ã€�定å�‘æ‹›è�˜</li><li>3ã€�定å�‘安置招è�˜</li><li>4ã€�å°‘é‡�的社招</li></ul><p>一般的岗ä½�æ‹›è�˜ç¨‹åº�æœ‰ä»¥ä¸‹å‡ æ­¥ï¼š</p><ul><li>网上报å��,åˆ�ç­›</li><li>线上或ç�°åœºç¬”试</li><li>é�¢è¯•</li><li>录å�–</li><li>签定å��è®®</li><li>培训上岗</li></ul><p>最å��æ��é†’å¤§å®¶ä¸€ç‚¹ï¼Œæ— è®ºæ˜¯å›½å­—å�·ï¼Œè¿˜æ˜¯ç§�ä¼�,<strong>好的岗ä½�肯定都ä¸�æ€�么招è�˜ï¼Œå¤§é‡�招人的è¦�么待é�‡ä¸�好,è¦�么岗ä½�æµ�失ç�‡ä¸¥é‡�</strong>,稳定ã€�å¾…é�‡å¥½çš„工作岗ä½�ä»�æ�¥éƒ½æ˜¯ç¨€ç¼ºçš„。</p><p><strong>大家求è�Œä¸€å®šè¦�擦亮眼ç�›ï¼Œä¸�è¦�被æŸ�些景象蒙蔽了。</strong></p> 硬å�·å®Œäº†ï¼�RabbitMQ 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版) https://segmentfault.com/a/1190000044325296 2023-10-22T20:37:14+08:00 2023-10-22T20:37:14+08:00 民工哥 https://segmentfault.com/u/jishuroad 9 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=zO48cnkA6yNJ7mKSd2uOgg%3D%3D.ipEscLdMZSbyR9XdiGhzAdJq2qDM51rIlb1L36%2BFHRG4WN7331oHJKjlAe%2BggKe%2BnqUJTMorrAcYFW7JUcLhEBQWYFKHhNMj6qTsQ%2FO2GwbiSxcJxXsoPiku93QDkC5plHW5mHV5LRyjSQHFBkY%2FVXu4nDvFqPZ%2F4qpjYLEGjpjKxPhMyJK7Tb0VIDG1N%2Fs6On81787DDPns8Kow7T4AWp1oZGN0sk5HdEToOTrek0hLMKiUnOrjXca1hAV5pIXPdtHnkltj621b1PT2Pl9M2ApZpU5kr4kJkAcJUhB85AU%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=0Ww8FnROlf6uu4LmpveDyg%3D%3D.IGTeRYrhkwUG9e1qcoOZ9JOmz7TA34eH8BnmzsDtxUVmhNWjMjlyOcnolKFxohnqChOlQCyAQKSzXS9Zrp%2Fci124EKYNw3Yrb%2FuEj6azzfJrVOpRlInzFv58%2FgpJExWjN%2FB0C1tvqFsq4Z4qEBUAHUrHm%2F1o6wsLd9FBH1oZSV6XY7tXEJV0LaArb4sPw4LbLu1pizjSGWo9UF2TTtLh7N150kh48iR6KlsHOM5Heu2XicV8s6xAffbI1Bf7umxxOMhhF0xUjuvSufqX6n24%2FfUseMpOWyUZI9ekfLzsONw%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=Gn0DKSgEkaRi%2Flh8HfHp6w%3D%3D.pj7dfc3MhIQiEeloR6%2B8ZPQ%2FP%2FsgD8L%2FPFCFoiG5HeXb7zfq3Q9589ryVdh1Wf2swvkzaHq2N67462h6HbEBkk7FiIDB5XJAqwq0LMnHWCNXOGuUAg86bRosHesGXQGD2UuBxgXqyGS22Ibxvvad5tRo9EaPXNDPf5E%2B98K7UBkelSU%2FV9RMQvvATidy4lWARMk6rEtaLJbjhK0K6Rf2B%2FaZxH5hhPrM8F%2FhWMhwcKah%2Fen%2BWMqEv%2FuliWkGWL3xr%2BvuDiuvgTQmdpZj1sZsZLMbX0xDjWmZpAF0CIFBpcrqLcU400uQYjwqi0ETuVBEtSyVhUJS8z4DcGSVkIr27Q%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=ksuDeN2KBlCkItrO6mbW%2Bg%3D%3D.EUc0cGBJZ2PDgUy8lgMsNhmVuQVHGD%2FwXSzbETFNzBmjkt8g49FsZ8dZ7Scn4Ec1Oe%2BjHRY%2FDXnhsjxT0oIK6c5hgUk8eG83B3pMhX28j1FwX4uE75E78T7ZOJPuvRIS4A1NFEXnqfqtx38GD%2FgL6htd7p%2F0nCEhoG%2Bdsd%2Fs1Ud7368WojXrSCUUanf7kbcBu7PZPtowq3bpMuh6ckAKvt1uJSj702J7EyPxQQPxuP%2BEF7yEd9u1Pf%2BMbeBc1KiTKZdqQh8Rk7JVrUdnXA373D2mqwrKTeBgdf5pNrPPl%2Fg%3D" rel="nofollow">ElasticSearch</a> ã€�<a href="https://link.segmentfault.com/?enc=Bt1oFJAp2phf2bSE2mVDKg%3D%3D.J86teFsQ7MHy8TePT7rsrHez%2BR5%2Baul%2F66yJED0dTSVNPyVX%2F%2Fnrk3e1j4aQJMMiL%2BQkNP%2BvfKXCPcN3AK0e27hjCyg7UkT6J4ltIf%2Fny1TGGaYZC6%2FUNoC9yCIJMWoTCVF%2Ff1GLVK7uKzEtY%2Bz8ZcVvb7kPM1329XKoWP93Grend312pLpqUOHHUjsd6VDFC4PhmWz7jT4UJLhtS%2FWBFr0Har7JLcvwbDkgc4F0DaaxDZqPPLSmKKmWkLdzEIOgbMl%2FAWrT4hpk0wsVpaLckBRKIZLJBPKhjFh%2Fp%2F0blbs%3D" rel="nofollow">大数æ�®Â Hadoop</a> 框æ�¶ã€�<a href="https://link.segmentfault.com/?enc=ytxOeQ85iIFWC8HEFeLlZA%3D%3D.kLcWcqKHqn%2BsN9oW6Irpp%2Fr73qrhnTrXYESPteXUoznck5w7nK20xhtOKqjo09%2BRXWxnI1QRh9xdW2Dl38uw%2BVV%2Bc05lFra%2Bybp8E%2BaWSzshzM91fawQIb%2BSYKhHSJKW9dj8SC6blIK8NqpVfGsCTA13tCkqvVIdPAqElsxgoceLd4QIeKJQIDB4AzcDLUDd4pR5o5oqnm6DX9MzxXZiIEwh5nvs5VhTjYfur2%2FAeiCwU%2BI2FOJFI1iA3SnoVzfzBuAtxwYRbs1L1opXKpSaBagvrI4FLypWTMVdIr0fFek%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a>ã€�<a href="https://link.segmentfault.com/?enc=nS5T9u7T7NW9TIrL%2BSoTjA%3D%3D.u8BvlIeNwtSVXa4BoKbhfjgiqBTkddGFirermMK1Btq%2BCkq%2BtocgPOd8IfT2WHIOxa75yrNXPhH6mgTdgmwz0bIs2ac6uFG4mQdwKxL0r6kpeIms3def9A%2F2QsbrzW%2F6AT%2B%2FayVtuMEMIbTeBTP0HAoH%2FkZT%2Fbt9Qlz7iEzFFF31CMTG7XD9hvRdzhz1h5pksrvpX7vbJfJNhc3qfvnK%2FQwOsNCnDQBsXkr2z56WtITQoeLg1dyF9TQnm07K%2BhOrHHqXmTAMjfOUc2hq65pAcuHqOe7MjPasqzzENyqeh38%3D" rel="nofollow">消æ�¯ä¸­é—´ä»¶ Kafka</a> <strong>ã€�</strong><a href="https://link.segmentfault.com/?enc=zEVG4LsdOm5XI5Dc1f%2FO9w%3D%3D.VN4urCH6bwGjhqyGTxQEgSIw9Fh%2FeU%2FLPWhsiSJxlD4ZP6rGkKzfBChpfbsDThTrwAsyfvj6c5ZYeuXjF4gwE3trXUD6nj8aGzxnQZtlxRfWWDrJ8j8C3QOByhW5We4dr4ooqTMutHkh9m1aBJgnqPNqvxkx0Yq%2BGfTIKZL%2FrAHb94DaiGZGXElH25wdw%2FqDLGUnnbUAeYq1RDcxe9GicOl9mniUvlRqEPUSsEcs0xsgP1SeMQePKGLYNjC4ew1V6UVStihEZJGfOPJLoQG1j%2FOgDxINH%2F0wFeO0GNK%2B67c%3D" rel="nofollow">分布å¼�å��调中间件 Zookeeper</a>ç­‰çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚截止今天,å�ˆä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼š <strong>消æ�¯ä¸­é—´ä»¶ RabbitMQ</strong> å�·å®Œäº†<strong>。</strong></p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><h2>RabbitMQ 简介</h2><p>RabbitMQ是由erlang语言开å�‘,基äº�AMQPå��è®®å®�ç�°çš„æ¶ˆæ�¯é˜Ÿåˆ—,它是一ç§�应用程åº�之间的通信方法,消æ�¯é˜Ÿåˆ—在分布å¼�系统开å�‘中应用é��常广泛。</p><p><img src="/img/remote/1460000044325298" alt="图片" title="图片"></p><ul><li>官网地å�€ï¼š<a href="https://link.segmentfault.com/?enc=UyLdyjoDmwwhCI8rAS3%2Few%3D%3D.ZAq40QeBotDyx637JBHT1%2BWDuuSAIbSa1VNCViZePHs%3D" rel="nofollow">https://www.rabbitmq.com</a></li><li>Git地å�€ï¼š<a href="https://link.segmentfault.com/?enc=5Esop1nnscSNOqd4Y4xaXQ%3D%3D.W2NKnf7G7gVghvexf6qmdSysdl252QsfcsAs1ytSqWw%3D" rel="nofollow">https://github.com/rabbitmq</a></li></ul><p>RabbitMQ 是一个消æ�¯ä¸­é—´ä»¶ï¼šå®ƒæ�¥å�—并转å�‘消æ�¯ã€‚</p><p>ä½ å�¯ä»¥æŠŠå®ƒå½“å�šä¸€ä¸ªå¿«é€’ç«™ç‚¹ï¼Œå½“ä½ è¦�å�‘é€�ä¸€ä¸ªåŒ…è£¹æ—¶ï¼Œä½ æŠŠä½ çš„åŒ…è£¹æ”¾åˆ°å¿«é€’ç«™ï¼Œå¿«é€’å‘˜æœ€ç»ˆä¼šæŠŠä½ çš„å¿«é€’é€�到收件人那里,按照这ç§�逻辑 RabbitMQ 是 ä¸€ä¸ªå¿«é€’ç«™ï¼Œä¸€ä¸ªå¿«é€’å‘˜å¸®ä½ ä¼ é€’å¿«ä»¶ã€‚</p><p>RabbitMQ ä¸�快递站的主è¦�区别在äº�,它ä¸�处ç�†å¿«ä»¶è€Œæ˜¯æ�¥æ”¶ï¼Œ 存储和转å�‘消æ�¯æ•°æ�®ã€‚<img src="/img/remote/1460000044325299" alt="图片" title="图片"></p><p><a href="https://link.segmentfault.com/?enc=xxwIKDj43kLXrtupdvQ%2FRA%3D%3D.hgdSCV1Kq6XAQPChUPWP4izNwBsKiaje%2FEDygcZwEKBo3GLilPpr%2FtqmYZ%2Fdv7LgeOO%2F1JWBjwiw6NrquuZs23fWCo9ZUXtNIDbv1ItoLRbkmwkPWS%2BX6GKoCR2D%2BwfvtjSi1tT9gxDLcm%2BpjpoAoGvEdYBo%2FiMeAuydphdNKDNgcMf8VvIwnri1e%2FuH4v%2FGwoJlsM%2FUSjHCjieaAwKI2l2ER28XF%2BPjaa8KojZprVT6DMfszBAgm9bOQ0cBv%2F15BoWNxHNklGyUnFgHSk0YOaGAFpRFstUZ3XXkb5yqnjw%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(一):RabbitMQ å…¥é—¨ï¼ˆæ ¸å¿ƒæ¦‚å¿µä¸�æ�¶æ�„)</a> </p><p><a href="https://link.segmentfault.com/?enc=84PDTus%2FT2npsI8BrJp8cQ%3D%3D.l%2BVWsSDw6tCH3H5EEpoX%2B1R9k7yYO45nJo7u3ogdkav7I3bQrng21P8RSNM8RLFT9t0bGEBRbitAH2bpx4%2FtDm%2BUv7oBRaQGbFgKiq725WhxAhyvd5DC%2BAwfsBKa2969NVKqgDt0wG04Qx%2BtFyLRc79A%2FvTHteXy4ruz4f4FIEuNLPuYCTcf%2BjlOol2UvLhwxnVQfFsWdqMkZ%2BJfHx578tn8hTC6uAolOfHtF9XGu81xZsO75Yj7c4lqfpA8%2FYNHdM5tP52LufRC767Z2Y72kChOPel6l413ky7NW9JMzWQ%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(二):RabbitMQ 安装ä¸�简å�•使用</a> </p><p><a href="https://link.segmentfault.com/?enc=8DA7NawzVZNDeIv9zUoiqw%3D%3D.WJNo9YLtMT3kQYmxw80vAPTvBMpI6zW8WBC9WA7VnEwTFfUz%2B3t8A0EACyQAzTIDuHu9Dy5C7GSI23N%2B%2FpzfCNu4KBysu0Zkz1t0AtM9HKp8fcSw2Wpvhk98vCnZ9adWENpU08hi2QG9wexm1vlztbOyurpPQ%2FjulTH8fjV3yZEWa4FYPd5vptxJZTqJ9tHw8ilPM%2Fe3oQzMzVDiYzUOQPGnRFR%2FGlRcFpi%2Bc%2FOpVcfpISd42tCtpuNyX9Z1kxt9lCtyeO5z4SNKaFj0qbs8dI02kw9pZi16EAfu89Gjw%2FY%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(三):RabbitMQ 基础é…�ç½®</a> </p><p><a href="https://link.segmentfault.com/?enc=GTbASBXLc63ISJMqN%2FlJBQ%3D%3D.4RCwLXC%2FEo9Raq2V8C1KZnXt0JvGSm%2BajMeda%2F%2F8TMQtjj8J4cMkUZxXk5Yrcn48ACTEUpE4wnFJ7JG00EDoxrkRp5seUunzZZmg9XI4Zy6n7f9lJi1F3w5FMdhjkWByVhyIt99p5IxI8NWw8nxqAPNZSII9tbNu3KFG%2FpDRqHerGLvpKqENaEv9kPvPkhK%2FfMco1mevVNML4yGyZ4yuSqB5m4A2Mlxly9pa%2B3rMdjk5OUduDa1u%2BBkrfwDUQMYolHiXrKc92dqbf6gD%2B7VyccQgz55wVsysAmHYLaMMOBA%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(四):RabbitMQ 管ç�†ç•Œé�¢è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=NPc5JWMXGgSvMusmxWu5IQ%3D%3D.GX9F6w5%2FgRAzM9%2B1bPn1Z0OySZAblvAR6LK5fmaM90VzvGSpVsK0eqfsRGL0mREeLaQuTwGUCfhnKLiAjQrwB9%2FOxKnjet6bJNrAwyz1ew4PsUgPZNvQQZOYJ8W9dXB2FMLjtOfREHdferfO0Uup%2FkZyOHdso4dRr%2FB410S1Z7uwgn6B94mtn6YDyXHshBxYQH3ndR4TcMemlzcXFq2Qge%2BUDr%2F8zhfOiGgOZLqryxqlZpmTX9u7akSRixbs9Mih5ZMXfLppcGyGbwFbut9RgEwX5TVTT4eu7gNIhNBFHMs%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(五):RabbitMQ 常用 API</a> </p><p><a href="https://link.segmentfault.com/?enc=2dyBEv%2BBzbk4B9BxGyq02A%3D%3D.r7UA08QzRPf9lnlm1EJZ34EMo8D%2BseTc7n3tSrAHwz3xENuE6281HsMnlEC6veWV9Yt4m2qt3rLVgexk23GroTwJeOLVJao%2FMtkFolMxqjOCUK%2BLFg19ONUWx03pROvMdMKXlxb6GCFzOaoWdB6VG61EFg89B8atDckiUB9%2F7DtciFDXqI6tN4kTXSwpabhoKRPyTFMhdLkpKi5hNwkDC4urHuKMI34RkFZSSafoMUU%2BMt%2FlelAqEsj0ati0ecpxCFfz0phf2A%2FTqFRVMwl2eDcH0G6EJ8akSAFTBoM3lPE%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(六):RabbitMQ 消æ�¯æ”¶å�‘ä¸�交æ�¢æœºè¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=47s7AK%2Bp9q7JFpxgAfsaCw%3D%3D.SZSlz4U7mHpt0BDDDlbMJPC7kf10Vvp8L8WoZEBH6D8MUlKP4HlCSIghmLG1S%2BHeiBgP7O6DlOyXG%2BdfYGV9BOkyz8b8ham6xNjXsqxW%2FPKdM%2Bn9JsgIdTJZ%2F5DYY2eP1itHcDT4E5c3o50Qw%2BWaSizXyJ1bYDpxQ54fIL0kqwDFz9MDdpBeEUwxzxnYxdsYqKaiTyz5mwxc79xy9XOU5j5HpvU6PTg7yp%2B%2F5B5BV7K0E8ooZ9bkosUJui4zBGSdJtQLjURdSkkRCSIx6KrOZc6k14f1PMnQ4mQYVsnUhrI%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(七):RabbitMQ 消æ�¯ç¡®è®¤æœºåˆ¶è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=iZpuUwzdj%2FOf2njNYMviyg%3D%3D.isq8Bg75v12ailqGhQx0AHznT3tg7Wl0EQfja%2FODi%2BZpz2yKL8dSWkCTFa3Io%2BtBlB7KQ5SaOLp7NqT040Lvuk1T2WM9qACzKfL8Z3AsD%2F2ET36qcjUPG0gNpwiaM8QeyhDpOR2EDbVZOrRq%2BtHHytr9Yg84d%2BQvSvt7G8tsxdLkYUQXqhnTtEscJbVS3ai03nWLk6vz4NVdzFb5F24Yjin2Bg2zVj2xl0hDXbwQT%2ByZlUolBCqY72Qy%2Bl%2Bd%2Bu7tdjzk2czfdVUKH8DYFAwUbZYu2GPFoYE9nRiqZ8sXImM%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(八):RabbitMQ é‡�试机制详解</a> </p><p><a href="https://link.segmentfault.com/?enc=nocLGs0PJ%2FvNPZXoTal5Mw%3D%3D.R2pPIiZcs2MXDb6f%2B5pbJHgKYAPMu5qyLbTZrojdXsfXjmVpUyOpi9g1e80lCWr9XDh7h0wJOySunFvTygpS0MrvbbkrhJtOJo46tdsuLacb4U9Tm%2BXq8w5X%2Bbbq81QOfm33R%2B6y83JKO%2BnY8h8DU3Ox2ziA%2B8YWn8DV2%2FUqkh0ROBoEUUlNPLrnaTjBQ0tt35iWINmQstNh6OWnDwKj%2FSis0axJXsvv2bkrhl7rGFxfvm6vk3hUEKHTNtLlNPAHg9Q0%2FzJCuI3HOM1dMvicmSunGDBd2CVvGB6uNZ8%2Fb4U%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(ä¹�):RabbitMQ 队列ä¸�消æ�¯è¿‡æœŸ</a> </p><p><a href="https://link.segmentfault.com/?enc=jZe0M8CqGW7xcgDjWxbO%2Fw%3D%3D.G8C1%2BSwad0HCQOazOkdkYddCwQ6ygWi9WT10mcxsYafypBxoFEq1m%2F4hE83I%2BNwFuAlmsRi7c%2Bxm3PicOtBNcTyAu21zj4cBK7kLqwjBAL1x4ZrFtwLG%2B6rKhhfj8uQQALlaSgbysTaGSC69V9fjwWLW2%2F70qTlP1X0aqvjh16pzZVxB1j%2ByC9iTCQixXc3MCnK97M9dCCqx235I6hVdyw%2Bmb86R8nc8aZPIzXJF0wN8aRo%2BZXLddgp%2FNKd0svJk9B38Hgz3DrDo6Zbb1ht0WkeNB%2FuJ6z4GjMyT6K4iOZo%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��):RabbitMQ æŒ�久化ã€�存储ä¸�内存管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=23%2F%2BesebmpadTyRrIGboiQ%3D%3D.aw39omZlvP37qxm%2Ff%2ByTT2kVkcyiZJT9PHaoNuTzDlpbcLFdWweA23%2BjpkhSml8usgo90A6flxA5qkjs2FnAqkkFv4uhTPPuM3bQAY9%2FLaW8GBn3wqrPNVL9gQCk%2FCAqZRZSZSdW9zMezMbAauvkTBthw4jnm6YpkV%2BybUAGHYbjcw7w7qbBPlYpn17rxCOJJsaWMaSTJMn%2BYim0KoC%2B6nQCFnID1hSUnKwvRdQNyqYwHM3MtNV2QhtiG6n8KHUGRXDnIlpMY883Use9Ga9umthujsBFFKQl7gHtrB44%2FXE%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��一):RabbitMQ æµ�æ�§ã€�镜åƒ�队列ã€�网络分区</a> </p><p><a href="https://link.segmentfault.com/?enc=JCivoD%2B4cNBxJ6AyEWin0w%3D%3D.96O2qxLeuNmvSHkFUNiKGEdoHh3HI%2FAMR7KZdTlLcNTUm4b7b5u3smW3pB3PxDerRHBDctKSaMuD%2Bafktyu8JrN4MWVY%2BzSYwO35MzsT8r5p7ovIZnsNiHy00%2B7oYcvfFWiDjsxLEzyvYGgjrJjuMuLgWCo6DmC%2Btt2t5WAp6qOn9c84VoOwxbOlX9ZS3eCh90RIYqnsOlxFxZ6DC6s2gexvG1iOWkfzKc76nnQvSKQ88Fhib5iet42CwYmpnMdTd880PKhM27YPONRanMJa90XSZ3Ns5mlq9SvFpMWjLrI%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��二):RabbitMQ å�•机多节点ã€�多机集群部署</a></p><p><a href="https://link.segmentfault.com/?enc=GmqxARB8C1Ui7T6KJ6%2Blyw%3D%3D.E5XfbBP6CjEOkBX2yBFdmNo1BmfKfKOd9c%2BiVLG1DOsJVZ4RxMjsEEMPeh47vERMd3nFCPboaEVYLWbjpfU0IdtFXeUYTYnlRsQ9DnGRZ8NwRl2ZWVOvaIaVECNJNPwHVLKs80gwrWkpRDETY4vm2vU8vJSL3yTNFx8p3w5NlobzyJD09hX6qBI2g9OUxcQN%2B9dTiKH7h3RSBlpT2cauEl1%2FTuSCtMppl1D1ECrmIus0pwykboS5w0Bwk7VmXFPg6Uw827Q4x86mIEudqjs1lWzjCxpjxMvWiD6CQa%2BrKlQ%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��三):RabbitMQ 高å�¯ç”¨é›†ç¾¤éƒ¨ç½²</a> </p><p><a href="https://link.segmentfault.com/?enc=2CKQAZguUnNTw7xdnqCowg%3D%3D.GgLixSgo%2FxyBeKOBii46ArcoJJMURMBA0xxQZOEUYwSeOJMVBAs8y5LcNTzQVsftTlwX1oaTk%2B%2BkbasMuCcJqIElphFoyt4XZYgpJb%2B723yc4mWcf6PrsfhYs61qNMcyFRHbtbSx2Ys%2BXTNCA4wHB0oE%2F%2B%2FHhFq%2FtTgDWv3u0ktc%2BXWJSqGq2MpKqNrKjjLdg1AjbjcLHYhCeaFqnnG2vIN8N5jorcxEeTf4eyrlR9U15Q5dt0RJbrApIgP8PBVhTezTRqLJhfiglmXpMKNK1OqV%2FcLBDg59BkiNC3EfbRA%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��四):RabbitMQ 集群è¿�维管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=PmZlzweL6qW5ZXppZkZ81A%3D%3D.%2Ftyqf9j%2Bu0ZElfBytvI1wMxj1wgbP%2Fzpeu67nQtgLH5A%2FJKjBWxZHHdeipYFD5iaIDyMfDCmQaoVCyBNOYsq9rD%2FHu6ggCQ%2B1SK5SSg8glye9DP7KHwiEW721PCDIlvDx58ckmGsYe4I%2BfEhemxU%2F9eopi%2ByI8BOxerJ2C9bkILdqziSXyNFHaQUdbMhS0Ug84w1GYRtYApWKRPg7FkrCMl4EdDbUvyiSL24kPAmSBDh0CTBD44d42wJoxFytE6zhCrDZk1fsMMEmfBJPP4E%2FupQtLoqw2X%2FWdcx8NHW2cE%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��五):RabbitMQ 之 Java 调用的三ç§�æ–¹å¼�</a> </p><p><a href="https://link.segmentfault.com/?enc=0%2BeaIDJYiazlS%2F7z%2FD1z%2FA%3D%3D.ccRQhTqZuH66PW3Mh4PgXTC1brUCh2GAe8OhzGLs%2F%2B%2BOLM3KaJuAzCXBjDlHE898esN%2BTNFeV2OHspzY7nVp%2FoFDVKHm5xy3lF4VZN3ez4Lt8VjPn0vv%2BYqnRqTDRMt%2BRaYzVDrB8Zap4zPwYpbSqWmi3FdxW5iStAy%2B%2BrexDf9TIZt5GNq5DQhnZejYnGNWu%2BL28zlaF1IhxOu8goDu%2BU6PRMI3RxLD2SnGE3TDt7ng3xOuEOXASQjL8qMXGQDNfSfxJujUSgxsjqOzawZl4mCvh7BlbnJSA08c%2Fv%2BdiwM%3D" rel="nofollow">硬å�·æ¶ˆæ�¯ä¸­é—´ä»¶ç³»åˆ—(å��六):RabbitMQ è¿�维监æ�§</a></p> å†�è§� MySQL 5.7 ï¼�ï¼�ï¼� https://segmentfault.com/a/1190000044194426 2023-09-08T10:03:17+08:00 2023-09-08T10:03:17+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>对ä»�事互è�”网 IT 技术岗ä½�çš„æ�¥è¯´ï¼Œæ•°æ�®åº“也是我们日常必备的技能之一,而 MySQL æ•°æ�®åº“更是常è§�ã€�常用的数æ�®åº“之一。</p><p><img src="/img/remote/1460000044194428" alt="图片" title="图片"></p><p>æ ¹æ�® DB-Engines 的数æ�®æ˜¾ç¤ºï¼ŒMySQL 是全ç�ƒæœ€æµ�行的开æº�æ•°æ�®åº“,并且在过å�»å��多年中一直æ�’å��第二。<img src="/img/remote/1460000044194429" alt="图片" title="图片">æ•°æ�®æ�¥æº�:DB-Engines 官方网站截图,详细数æ�®ï¼š<a href="https://link.segmentfault.com/?enc=OZ%2BenqKsCYU5pnyHbFaBpg%3D%3D.ebT8sszTOMsepAgRwRpNg80xn66rWWTYTKQBzsb5ldwrue4mQYiz3aMgU8MseQrL" rel="nofollow">https://db-engines.com/en/ranking</a></p><h2>MySQL çš„å�‘展å�²</h2><p>MySQL çš„å�†å�²å�¯ä»¥è¿½æº¯åˆ°1979年,它的创始人å�«ä½œMichael Widenius,他在开å�‘一个报表工具的时候,设计了一套API,å��æ�¥ä»–的客户è¦�求他的API支æŒ�sql语å�¥ï¼Œä»–ç›´æ�¥å€ŸåŠ©äº� mSQL 的代ç �,将它集æˆ�到自己的存储引æ“�中。但是他总是感觉ä¸�满æ„�,故è�Œç”Ÿäº†è¦�自己å�šä¸€å¥—æ•°æ�®åº“的想法。<img src="/img/remote/1460000044194430" alt="图片" title="图片">1996 å¹´ MySQL 1.0å�‘布,å�Œå¹´ 10 月 MySQL 3.11.1 å�‘布了 Solaris 的版本,一个月å��,Linux 版本å�‘布,ä»�那时候开始,MySQL 慢慢的被大众所æ�¥å�—。</p><p>1999 年,Michael Widenius æˆ�立了 MySQL AB å…¬å�¸ï¼ŒMySQL 由个人开å�‘转å�˜ä¸ºå›¢é˜Ÿå¼€å�‘,2000 年使用 GPL å��议开æº�。</p><p>2010 å¹´ 12 月,MySQL 5.5 å�‘布,Oracle 也把 InnoDB å�šæˆ�了 MySQL 默认的存储引æ“�,MySQL ä»�此进入了辉煌å�‘展的时期。</p><p>2015å¹´10月,MySQL 5.7 版本å�‘布,它带æ�¥å¾ˆå¤šæ–°çš„特性,比如:默认引æ“�改æˆ�了InnoDB,更新了安全策略,性能方é�¢çš„æ��å�‡ï¼Œæ–°å¢�JSONæ•°æ�®ç±»å�‹ï¼Œå¢�强了sql模å¼�å�Šç”¨æˆ·æ�ƒé™�ç­‰ç­‰å¼ºå¤§çš„åŠŸèƒ½ã€‚å› æ­¤ï¼Œè¿™ä¸ªç‰ˆæœ¬è‡ªä»�å�‘布之å��一直å�—到业界的欢è¿�,也æˆ�为了众多开å�‘者的首选数æ�®åº“版本。</p><p>2018å¹´4月,MySQL 8.0 æ­£å¼�å�‘布。 </p><p>下é�¢æˆ‘们一å�Œå›�顾一下å�„大版本的生命周期,é‡�温一下这些ç»�典的版本。</p><h2>MySQL 大版本生命周期</h2><p>下é�¢æ˜¯å�„个版本的生命周期时间范围:</p><pre><code>Release        Release Date            End of life  MySQL 8.0      April 19, 2018       MySQL 5.7      October 21, 2015       October 21, 2023  MySQL 5.6      February 5, 2013       February 5, 2021  MySQL 5.5      December 3, 2010       December 3, 2018  MySQL 5.1      November 14, 2008      December 31, 2013 MySQL 5.0                             January 9, 2012</code></pre><p>下é�¢æ˜¯æ�¥è‡ªå®˜æ–¹ç»™å‡ºçš„一份生命周期数æ�®ï¼š<img src="/img/remote/1460000044194431" alt="图片" title="图片">在 2023 å¹´ 10 月 21 日,MySQL 5.7 将达到其生命周期的终点(EOL,End of Life)。这æ„�味ç�€ Oracle å°†ä¸�å†�为 MySQL 5.7 æ��供官方更新ã€�错误修å¤�或安全补ä¸�。</p><p>å› æ­¤ï¼Œéš�ç�€ MySQL 5.7 EOL 到æ�¥ï¼Œæˆ‘们å�‡çº§åˆ°ä¸€ä¸ªæ›´é«˜çš„æ–°ç‰ˆæœ¬ï¼Œè¿™æ ·ä¾¿äº�得到官方更好的更新支æŒ�,应该æ�¥è¯´æ˜¯ä¸€ä¸ªæœ€ç®€å�•ã€�最直æ�¥çš„æ–¹æ¡ˆã€‚</p><p>但是,我们是å�¦æœ‰å…¶ä»–选择呢?å�¯ä»¥å¯»æ‰¾ä¸€ä¸ªæ›´åŠ å®Œç¾�的替代方案呢?我想,还是需è¦�å�»å®�际的生产需求出å�‘,对äº�æ•°æ�®åº“æ�¥è¯´ï¼Œå®‰å…¨æ˜¯ç¬¬ä¸€è¦�务。ä¸�èƒ½å› ä¸ºè¿�移导致数æ�®å®‰å…¨äº‹æ•…,这就得ä¸�å�¿å¤±äº†ã€‚</p><h4>MySQL å�„个版本使用å� 比</h4><p><img src="/img/remote/1460000044194432" alt="图片" title="图片"></p><p>æƒ³å­¦ä¹ æ›´å¤šçš„MySQLæ•°æ�®åº“的知识体系å�¯ä»¥æ�¥ä¸“æ �:<a href="https://link.segmentfault.com/?enc=3JsMcOeVdJZj8kUHefyvqw%3D%3D.oylDxwNFyvxQORwlV0C78dPrHIu6L7Yn0bgyXzapR8Fi4IZ7sOnIXpxLZvKF1MAZOWCeo6LB7F2vXwwBOwuvhFdfl0HW74CXemybafMP8RTt89sW8bkKprtsPesVgpj%2Bg9WszwToRt8mB3T%2B3Tx0n9z5rFhCvyJXjDOqdvFeM8qS9WtdII3Pg%2BQWA6%2FGwGbayTxmA%2BWPheVlQ3Vjnt3JfD40wnQ0K3Cy5MYk66GdCYCmMGet87gJGX3hu6SBy%2FG25K1hdMrn3Ia5WocUvPFkA4IHqpYom1eSsQqVGRpJs2rl%2BMQ3if8wbU8cDgm4DQ5Mv2XsfkS6zmSiChgA5th93Q%3D%3D" rel="nofollow">MySQL 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023 最新版)</a>ï¼�ä»�ç¬¬ä¸€ç¯‡æ–‡ç« å¼€å§‹ï¼Œæˆ‘ä»¬é€�步详细介ç»�了 MySQL æ•°æ�®åº“的基础知识,如:数æ�®ç±»å�‹ã€�存储引æ“�ã€�性能优化(软ã€�硬å�Šsql语å�¥ï¼‰ï¼ŒMySQL æ•°æ�®åº“的高å�¯ç”¨æ�¶æ�„的部分,如:主ä»�å�Œæ­¥ã€�读写分离的å�Ÿç�†ä¸�å®�è·µã€�è·¨åŸ�容ç�¾ã€�æ•°æ�®çš„备份ä¸�æ�¢å¤�等,然å��介ç»�了 MySQL 的管ç�†å‘½ä»¤ã€�æ•°æ�®åº“语言的命令ã€�库ä¸�表的管ç�†å·¥å…·ã€�性能分æ��ä¸�工具的使用ã€�MySQL æ•°æ�®åº“æœ�务器的硬件选å�‹ã€�性能监æ�§ã€�å¼€å�‘设计规范等知识。</p><h2>å�‡çº§ Or è¿�移?</h2><h4>å�‡çº§åˆ°8.0版本</h4><p>上é�¢ä¹Ÿæ��到了,这是最直æ�¥ã€�最安全ã€�最方便的一ç§�方案。å�‡çº§ä¹‹å‰�想è¦�了解8.0版本特性的å�¯ä»¥å�‚阅:<a href="https://link.segmentfault.com/?enc=NlvXlLZOwXXAspz72d6sGw%3D%3D.%2FiisgoQ3veA4eEN61T3nyqP4L7yG9d4BE2%2BEpi51Cv5%2BjTjhp3DP3cNOmGxU92gWnugPpBltDuHq5PrHmjxamluWSw84jT7opOoJ%2F%2FOvSgsxY0%2FM6ESqA2kezQt7RNzO40slOrTSj%2B%2F7F98z1k7%2F5%2BU0kxnUZWqbNqFDZZ6DnjeNvWyTFI7%2B7rCOONFISJGVxCynq8pzmiUYjX5dUqTiPr79h7BbzuYOTCWlkX5pyPgyFdCGEURXSn1dJoz0VxntIW4mfWHNm1rvHZiToLNCoRfX8VuJSUnzcuBqy0LvyLgNs6NtZTHNfSeKs2YQKlN%2B58CElaIolI9sHRqHzJXReQ%3D%3D" rel="nofollow">MySQL 8.0 çš„ 5 个新特性,太å®�用了</a>ï¼�MySQL ä»�版本 5.7 开始æ��供了 NoSQL 存储的功能,在 8.0 中这部分功能也得到了一些改进(<a href="https://link.segmentfault.com/?enc=W6p3CQodLc1OSgmcAHe6Ww%3D%3D.n9tBWDi124J7NNpovgd6M5bwQgRAzoyT7zYZAXsqRq33z%2BKOCQFPiF1%2Bii6yRJMiPAKim1gZv2Xh4eJI80QrnimnzxI2cOOYGu6M4nRGt2Ac288oqyAlFMwz5EhllSNi5E7VU0jdH%2F%2FqvVQoRynclpKaidNJ12UB9dNUCU6mPTQIvg4c6dBfeWDsV86GO6Gyhi1Pcau%2Ful2njgTPsmZsNLaNhGf%2F0FvxXQoELPyYR3rzhIlX6Gi7E4ubO%2FSt0sNtYpQ9FuQFdyHjiOTo2HW1LXYePc6Yck8sSeT9yCz2sv4%3D" rel="nofollow">MySQL 5.7 vs 8.0,哪个性能更牛?</a>)。</p><p>å�‡çº§è¿‡ç¨‹å¤§æ¦‚如下:</p><h6>下载安装包</h6><p>下载地å�€ï¼š<a href="https://link.segmentfault.com/?enc=gTZSdAPWGJDEa47pPIw4vg%3D%3D.vcrTt0HWbpFW%2BbEKGYMjw5Bfg%2BrUBUScr3J9Pwawk8k7TQlur%2FpTbV48RJEStrWl" rel="nofollow">https://downloads.mysql.com/archives/community/</a>,注:如æ�œæ˜¯é›†ç¾¤é«˜å�¯ç”¨æ�¶æ�„,先å�‡çº§ä»�库。</p><h6>备份数æ�®</h6><p>这是必须è¦�å�šçš„,一定è¦�备份数æ�®ï¼Œå¤‡ä»½å®Œæˆ�å��一定è¦�检查数æ�®çš„完整性。</p><h6>å�‡çº§</h6><p>建议先在测试ç�¯å¢ƒè¿›è¡Œå�‡çº§ç‰ˆæœ¬æµ‹è¯•,测试完æˆ�之å��å†�进行生产ç�¯å¢ƒçš„版本å�‡çº§æ“�作。</p><pre><code>#下载安装包 [root@localhost] wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar #è§£å�‹æ–‡ä»¶ [root@localhost] tar zxvf mysql-8.0.30-el7-x86_64.tar.gz -C /usr/local/mysql8.0/ #更改目录å±�性 [root@localhost] chown -R mysql.mysql /usr/local/mysql8.0/</code></pre><p>修改é…�置文件</p><pre><code># 编辑é…�置文件 [root@localhost] vim /etc/my.cnf [client] port=3306 socket=/tmp/mysql.sock [mysqld] log-bin=mysql-bin server-id=100 character_set_server=utf8 init_connect='SET NAMES utf8' socket=/tmp/mysql.sock log-error=/var/log/mysqld.log pid-file=/run/mysqld/mysqld.pid #ä¸�区分大å°�写 lower_case_table_names =1 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=5000 default-time_zone = '+8:00' max_allowed_packet = 32M #mysql8.0 collation-server=utf8_general_ci basedir=/usr/local/mysql8.0 datadir=/usr/local/mysql/data skip_ssl default_authentication_plugin=mysql_native_password</code></pre><p>å�‡çº§</p><pre><code>#登录旧版本的数æ�®åº“ [root@localhost] mysql -uroot -p'123456' #查看mysql版本 mysql&gt; select version(); +------------+ | version() | +------------+ | 5.7.23-log | +------------+ 1 row in set (0.00 sec) mysql&gt; show variables like 'innodb_fast_shutdown'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | innodb_fast_shutdown | 1 | +----------------------+-------+ 1 row in set (0.00 sec) #ç¡®ä¿�æ•°æ�®éƒ½åˆ·åˆ°ç¡¬ç›˜ä¸Šï¼Œæ›´æ”¹æˆ�0 mysql&gt; set global innodb_fast_shutdown=0; Query OK, 0 rows affected (0.00 sec) mysql&gt; shutdown; Query OK, 0 rows affected (0.00 sec) mysql&gt; exit; Bye</code></pre><p>使用安全模å¼�å�¯åЍMySQL 8.0</p><pre><code>#å�¯åŠ¨æ–°ç‰ˆæœ¬æ•°æ�®åº“ [root@localhost] /usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &amp; #登录新版本数æ�®åº“ [root@localhost] mysql -uroot -p'123456' mysql&gt; select version(); +-----------+ | version() | +-----------+ | 8.0.33 | +-----------+ 1 row in set (0.00 sec) mysql&gt; exit; Bye</code></pre><p>é…�ç½®ç�¯å¢ƒå�˜é‡�</p><pre><code>[root@localhost] vim /etc/profile #å¢�åŠ ä¸‹é�¢çš„内写export PATH=$PATH:/usr/local/mysql8/bin [root@localhost] source /etc/profile</code></pre><p>查看客户端版本</p><pre><code>[root@localhost] which mysql /usr/local/mysql8/bin/mysql [root@localhost] mysql -V mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)</code></pre><p>å�‡çº§è¿‡ç¨‹ä¸­è‚¯å®šä¼šå‡ºç�°ä¸€äº›é”™è¯¯ï¼Œé�‡åˆ°é”™è¯¯å°±æ ¹æ�®æ��示æ�¥è§£å†³å°±å�¯ä»¥ã€‚æ¯�一次的安装ã€�å�‡çº§éƒ½æ˜¯ä¸€ä¸ªå­¦ä¹ 进步的过程。å�‡çº§å®Œæˆ�之å��,导入数æ�®ï¼Œè®°å¾—修改数æ�®åº“的密ç �。</p><pre><code>mysql&gt; ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'xxxxx';</code></pre><h4>è¿�ç§»</h4><p>近此年æ�¥ï¼Œè¶Šæ�¥è¶Šå¤šçš„å¼€å�‘人员倾å�‘äº�为他们正在开å�‘的应用程åº�选择 PostgreSQL。ä»�相关的数æ�®æ�¥çœ‹ï¼ŒPostgreSQL ä»� 2014 年开始进入高速å¢�长状æ€�,而 MySQL 自 2016 年以æ�¥å¼€å§‹ç¼“慢下é™�。</p><p>ç›®å‰� PostgreSQL å�¯ä»¥è¿�行在所有主æµ�æ“�作系统上,包括 Linuxã€�Unix å’Œ Windows。所以,有ä¸�å°‘ä¼�业会选择将 MySQL è¿�移到 PostgreSQL 。</p><p>相较äº� MySQL,PostgreSQL 还有一些æ˜�显的特点,比如,支æŒ�更广泛的高级数æ�®ç±»å�‹ï¼Œæ›´ç²¾ç»†çš„索引系统,支æŒ�用å�„ç§�语言编写的存储过程,也确å®�能够满足ç»�大多数ä¼�业级应用的需求。</p><p>MySQL ä¸� PostgreSQL 比较,<a href="https://link.segmentfault.com/?enc=0yRiyYPryl7vYkz0yagQAQ%3D%3D.Ur2Nvgrz0sEENXvpShgGpf80sqasbILhRg%2Fvpk4pfzrwDJcdTmdCnqKgKm%2FVwUHqfBNUczRVLmMkzdIJ8EYPzSOMxYz3t7%2Fa7NOFcpuMh%2FtVnE9y80MlBf7qGUlp0ZfESbPlrFe2YgCN0YdXDlKOWCFN5v84Fliywjmrc8X19ie3ZOuO6q6%2F%2FxWXsqHeVss1ZrNH7kDg%2FIn3GrqUmBsBl8zMEbY08DlZ7%2BjbWpoTCUKH2N1M3ggup%2Bg7xV48T2AgwLmf2gNeDqa4IMEGavPjZ%2FLu9HjFKv3cvwW1p686VS1ys2TYoRPYxNpgYrhjSZZBhC0mjM04p%2BF%2BweV6oUyApA%3D%3D" rel="nofollow">哪个更好ã€�我们该选用哪个</a>?å�¯ä»¥å�‚阅这篇之å‰�æ�¨é€�è¿‡çš„æ–‡ç« ã€‚å�Œæ · PostgreSQ 也有它ä¸�适用的场景,所以,是å�¦èƒ½å¤Ÿæ»¡è¶³ä½ çš„è¿�移需求,ä¸�能一概而论,而是è¦�ä»�å®�际的业务场景出å�‘。</p><p>更多关äº� PostgreSQL ç³»åˆ—çš„å­¦ä¹ æ–‡ç« ï¼Œè¯·å�‚阅:<a href="https://link.segmentfault.com/?enc=MxGACmXUMZMjh%2FQzfTjc8Q%3D%3D.6Txh5eW%2BDjlPyrDEx1U%2BWLSwLOl7GlJZVJvT8uuHum2CtaPezmUv5DpM%2B0dz6%2BuSaNmozQWgEnz1yMW8uZBYG9YYgwyL9AmdW%2BH58m7DbwOa%2BTdgSkRrO%2B%2B05IqpNVbYoF3Lr3PVoDPIiuggnFN2z9C3tDz6RR3E40W%2FtpCxElo%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a> 这个专æ �。官网地å�€: <a href="https://link.segmentfault.com/?enc=PNog8bfiOFEkROISbN6%2BiA%3D%3D.ZlU37QqHKQ84d2buezcwH8e4N67666hBT%2BnCW0%2BW6rI%3D" rel="nofollow">https://www.postgresql.org</a>。</p><p>æ— è®ºä½ æœ€ç»ˆæ˜¯é€‰æ‹©å�‡çº§ç‰ˆæœ¬ï¼Œè¿˜æ˜¯å¯»æ±‚替代方案,我ä¸�å¾—ä¸�å†�次æ��é†’ä½ ï¼ŒMySQL5.7 在 2023 å¹´ 10 月将结æ�Ÿæ”¯æŒ�,之å��官方将ä¸�会æ��供任何补ä¸�更新,为了数æ�®å®‰å…¨ä¸�æ•°æ�®åº“的稳定,请æ��å‰�å�šå¥½é¢„备方案。</p><p>我们也<strong>是时候和 MySQL 5.7 说å†�è§�了ï¼�ï¼�ï¼�ï¼�</strong></p> 终äº�产完了ï¼�Zookeeper 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版) https://segmentfault.com/a/1190000044190161 2023-09-07T09:18:19+08:00 2023-09-07T09:18:19+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=I%2BnWLXnu9kl4VaJGvCRPjg%3D%3D.Xx8e4yzIbnz3mtQvjZ2vMJ2OsOS43cXDxyfJ8NZ0XIWllEba7ftXHd7tbGOJohCUjVr9G9u85nWG0FCS3dzzsR9Zufz8Ky2whx9Sqigl6AeV7ZlUcKEBxcDK%2FtiwlcNS4nsfC61Qj70p9okTCjMa%2BjtJA5X2aXSMkQN%2BAM7RacGPwvzeeXUHyc8wm3zHM0SL3ed%2Fq6eM%2BreZ2jtOQcp9hZYX8qSwLlOwAowDLqDt2ZqpURWv%2BIUxmpDsp3FIqLqSmschnu%2FBXjFq%2BqPEBtYDa08Po2giqsbZqxL9Qg8dEIM%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=G59is5iTBKNzNf6q94n28Q%3D%3D.8Z5%2FX%2F1GoLiiiL4VtaRH9gZ%2FK3gdYENF5f0YJ4dUosuq7DZ3NqTLP6ZBxhWtLWoozT9cG5gIpW6HP%2F6WNpRqW0Qj4UlANECkgGTY3Y4ECiTx1jN06ebewEM%2B%2Ffr4EZ9OR%2BxB4q9NjCQXuqaBC2LH6li%2BUbWljByMVAqGGBclhqMBQofjYOdliSZ8whWUFAE98E%2FUwWvGgJqs2AG%2BAHqtobKytXggUEBUs%2FF71rhqCNGqKpc1m0r4hqk%2FlPbKfIMagdUjXEHLQObH3QAWzrPc0j4Z8nmK6DVG7pQDr70ISIE%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=sNOM1zA289WfPK2QL29UgQ%3D%3D.jRpSHKUyp0qtGBB628feq09iTTDDyBdDgzqGwavOIBwpcXas1cf7M1b4y0dtVgTAMm8yALm9DK6Oz5NGjeMz8ZMYiBoQBJBh3NA%2Fe7LewFo3eszuWN2mudL6O%2BVmqHkk%2FPZ6Fwe9jzihmd%2Bv%2FL6AXwE40t5RXM6MffSu6pUMO%2FvgbfdTMl%2Bh4KU5lom3loXCXEIcShdoKmVgWKttaV4ENJ3B0BIV%2BIVy6eYNpIFYskHOCIukutZOwHtmO3k%2FVWm%2Fa8G%2BWEbnn3k3iuoDoyGjr6M3X%2FDq4X8xb6bdEfQDouQ7cwH%2BCiwUpXEsBUd5vNL%2BiB4wZ2j0QYo3OZ78BabmNw%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=VKEXzsCeHbCPMLFGgToiKw%3D%3D.WZhrZZQ6Z66r2ehr0NeJQfCIBQw7jCT73g6cTQbEI3c2l8tD%2FMi%2F1IWa9EnobJRZx57nBnPyhGJ4%2B%2FGDwgo8AArNTow55qnZSYUZw%2BoCtbi4AQDErBzjkKz2KFe7H3PQlf0iJ5RfabfrnFdBlCMqKZYLI6eV0j0ko9wqGTCBDvgVxPYqwYT1aWLDRWnbRH94lNyN1NL3BQZ4w4aJD%2BPKQtPvbBdd4bMC3%2BuYMpS4zp1%2FsMg9tPEVDpJFCmADCI4udrrqYjKTdwQvZdiwVKnBpSrqEz3kdvmP%2Bzn6REixIj4%3D" rel="nofollow">ElasticSearch</a> ã€�<a href="https://link.segmentfault.com/?enc=UDBWyHSCqpom3yZ0LwIjzQ%3D%3D.a7gISvwxzBP6EcYy%2FNFVTKWYp%2FBlR%2FTBTIrKQtkqi7KMVIBacrfOp5xzdxiTZtwyAqRk4dlv4heCAdmEcP53K3VDb0snDBusU9SZLUNM1qFvBkCQRIJCDVfWOjc1%2BSV7P1zcVF8DArAfhDDBph5cIOtOSr%2F7Zb%2FZkrTtumgLkzmskNlMe2rreQFNPdC8ylfo6Mo4jXVnbFwoxA77ysyj%2BJJTPz6vLwvcvmvMZnrcRqKBA2T7XF29GTbQ6rdX1B3VSmm4309OWbEtZbqXIJPx%2FwODTukS6rXti4pQjC4AhDc%3D" rel="nofollow">大数æ�®Â Hadoop</a> 框æ�¶ã€�<a href="https://link.segmentfault.com/?enc=%2FmntGjUqOSJ9vUARiQ18QQ%3D%3D.KlwVlD9ieQHHxyqthiE1l4PQSoTVFm5qXxfwFbAHWDIxlqtsBOXmMyNKJFBDwpt4H1zicDsus5v%2F8Nc9tzxQ8BHV0K0K8u1rkNdrf2qk7%2BgbppNMtP49gGHiOxaWLnh4thvvFSb3BZ5BhFg2A0P6jTxsZbMnZjBVLKPNpemMwa%2F%2B4u%2FLsSFVJhFZQCowM6FresYqgOjzqbjyKgai%2BfpJwvOySbFdKgIagHsprKqWV93Gn9uMy2%2Fj%2BjGKFAin1Oozfq9j5p%2FXKN9a9i5H85JtcG86%2BZ0mxkaAlo7HtQuwAEY%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a>ã€�<a href="https://link.segmentfault.com/?enc=GQiELFcIORsF5G3QaCc3Lg%3D%3D.pRQPJqFUl3ddOT11UGfFswjWiPZS4BmMBbGpu2r8YNzjZUxWkK%2Fvnm7tpFdadl7sSdkKzI%2FZip5jzx8DImGJEaGsL7AbvcGgUrlJNNniJYZOwYSWYB9cWYGYjZG0tEaD4vM6iHSOj%2FkkKVn%2BnS2bUPkhFMrkIyhE8Ly2jMYmSlWLjTO1E%2FSS68E3RxAJsuejaStT0OXGjc%2FDjMazmH9uIHCavb1JWPyfTJS67spZ%2Fln%2FWfPDUqzlKennqeLmx3GoUG4%2FGOerBbRSimX2NnlxSByVBSgLnBS6jjaxaHBp8rA%3D" rel="nofollow">消æ�¯ä¸­é—´ä»¶ Kafka</a> ç­‰çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚截止今天,å�ˆä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼š <strong>分布å¼�å��调中间件 Zookeeper 系列</strong> å�·å®Œäº†<strong>。</strong></p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>如有帮助,请点在èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><h2>什么是 Zookeeper</h2><p>zooKeeper 是一个分布å¼�的,开放æº�ç �的分布å¼�应用程åº�å��è°ƒæœ�务,是Googleçš„Chubby一个开æº�çš„å®�ç�°ï¼Œæ˜¯Hadoopå’ŒHbaseçš„é‡�è¦�组件。<img src="/img/remote/1460000044190163" alt="图片" title="图片">官方文档上这么解释zookeeper,它是一个分布å¼�å��调框æ�¶ï¼Œæ˜¯ Apache Hadoop 的一个å­�项目,它主è¦�是用æ�¥è§£å†³åˆ†å¸ƒå¼�应用中ç»�常é�‡åˆ°çš„一些数æ�®ç®¡ç�†é—®é¢˜ï¼Œå¦‚:统一命å��æœ�务ã€�状æ€�å�Œæ­¥æœ�务ã€�集群管ç�†ã€�分布å¼�应用é…�置项的管ç�†ç­‰ã€‚是一个为分布å¼�应用æ��供一致性æœ�务的软件。<img src="/img/remote/1460000044190164" alt="图片" title="图片">zooKeeperçš„ç›®æ ‡å°±æ˜¯å°�装好å¤�æ�‚易出错的关键æœ�务,将简å�•易用的æ�¥å�£å’Œæ€§èƒ½é«˜æ•ˆã€�功能稳定的系统æ��供给用户。</p><p>官网:<a href="https://link.segmentfault.com/?enc=71ieOMt8ghxKsCsIY%2Fhang%3D%3D.f317R8iXImx7sh3tzp19Ocxm4%2FxhyBAmQO7e%2B%2BCtrBo%3D" rel="nofollow">https://zookeeper.apache.org/</a></p><h2>为什么è¦�使用Zookeeper</h2><p>在大å�‹ä¼�业的开å�‘中,æœ�务的数é‡�是å��分åº�大的。如æ�œæˆ‘们想è¦�æ·»åŠ ä¸€ä¸ªæœ�务的è¯�,那么就需è¦�对文件进行é‡�新覆盖,把整个容器é‡�å�¯ã€‚è¿™æ ·å¯¼è‡´çš„ç»“æ�œæ˜¯å°±æ˜¯ï¼šæ³¢å�Šå½±å“�太大,维护å��分困难。</p><p>此时,便需è¦�一个能够动æ€�注册æœ�务和è�·å�–æœ�务信æ�¯çš„地方,æ�¥ç»Ÿä¸€ç®¡ç�†æœ�务,这个地方便称为称为æœ�务é…�置中心。而zookeeperä¸�ä»…å®�ç�°äº†å¯¹cusumerå’Œproviderçš„ç�µæ´»ç®¡ç�†ï¼Œå¹³æ»‘过渡功能,而且还内置了负载å�‡è¡¡ã€�ä¸»åŠ¨é€šçŸ¥ç­‰åŠŸèƒ½ï¼Œä½¿æˆ‘ä»¬èƒ½å¤Ÿå‡ ä¹�å®�时的感应到æœ�务的状æ€�。能够很好的帮我们解决分布å¼�相关的问题,至今ä»�是市é�¢ä¸Šä¸»æµ�的分布å¼�æœ�务注册中心技术之一。<img src="/img/remote/1460000044190165" alt="图片" title="图片"></p><p><a href="https://link.segmentfault.com/?enc=T1w8%2FmnHu79iSjXsaRBClw%3D%3D.aOoxF8nJwVI%2F9TLlsqLTk5M1Z%2BifpSF8Y3YfvvW7ET6JDYzJFHgWDlIoN8fO0JMfJp6Hzj2yow7quQtfZ0Okb5c6qUIDa0cUsokWTCrcU527o%2BcgJcYR4Oi2gSxkVZUMmYcAqFjcIhcl6kQs6pepaI8rf09KyijfjlkxvaSCEplft5C%2BeFMAdDRoKo5zjsm%2F5CmVQx4gJ%2FbjnKNyy6v%2F8pqZVJDplYklQoGSU0aaZ2FEKLqq4gTuTrs91pJp7YsJItDHrTw3Wkm5cobbsR338lm%2FStkzLMZdl2RMdnb1K7U%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(一):Zookeeper 基础概念ã€�功能ä¸�应用场景</a> </p><p><a href="https://link.segmentfault.com/?enc=1HnTZVxHnGmhKiaopoOz4w%3D%3D.uNL5T%2Bg%2B4Rh2faLvc%2FQrV0PmVMD1oS085kVo%2BB5xr08iCOpkNYJZ6BV8VJgZPQR%2BxDbOll1sKEdJmC7B9y6yU1K9a3Oebg0HKmo5279O32IuQUe1UY3jWmj67HCDEC8jcjf8le%2FpZQTGSJdPzKeDamMc871g3XqvYjZ7JBUqYSRYwuIhPxo3DecvIEZ1kieHK6to3JgSNNTCEleLuVOHleY%2BxoIPAgGNOSYSVn676%2FSHuf%2BzIzH6Ofs7WDuaTx7BzA03mpskqfrRfXXZMkXOBG2TiEYo3jDe2lXkZM1%2BSOo%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(二):Zookeeper å…¸å�‹åº”用场景详解</a> </p><p><a href="https://link.segmentfault.com/?enc=TKZKJ9hMIfX2F7d6mpbujg%3D%3D.i%2BWYw9TcwTI6A1hsegdpMj22t7eDLH6PpYmx4MYemd8%2BAir9wpvNfAdeWx5wcmpkBohrKgl0L2uHTrW6DqrCIJECCLhDNXepB16Ep6MWhM7IBlQbKrwY84ZhUdZE%2BVE9E5vjYGnqG7ut2X2bcdbgCCtlSgaLK4%2BMt%2FBQEbs7wZqe0b0R4v8H5qUDX9ZFwaxwITqMxqNeMb4rsZcL0ZrpL9uNC%2FKkdFtlTX%2B5bgfXMwZP4Bn2RJQVLZT%2FdQlXZMl47eSdQwjTzhC7nqyAxUaVEDItWF9VLivaYV%2BsYPwqYKU%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(三):Zookeeper 部署(å�•机ä¸�集群)å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=k9LOQnNp2Yp33LA%2BWO4Wdg%3D%3D.G4RaiWQ5bS36Gk81%2FrXETGTh%2FqBSdysyCiYGrhWVS%2FN7DxpX0r84pMCYmi1GDjk%2FndInHQ2FwLiLfkRbBOplDFoukiCKOLn6yEx8dWoGzPFXw7zoFTKSaH276ASiEHRKHjte41IgaWumsK4FqiLd4fv8VCjkj1odShEKjOmji8%2BRlON1ivm4jkbOecAed4LjMoq6LSHldn37AmEkqkbFVs1LWK5k7%2FVRKK6J1rZ3DYDQ95yLZgkWhVMT6zjxTbIapxYwBFmKHtbYjep53DwJXLyxvZSyPU0tzR3%2BOAb%2BLO4%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(四):Zookeeper 常用管ç�†å‘½ä»¤</a> </p><p><a href="https://link.segmentfault.com/?enc=SAIDFqrHhqdk8wLfobXQ2A%3D%3D.RgQuPmgUFXstBdd9nS8tRwKNbF%2BHPciRPWHHRjC1HbY6vuxUcYn32LVOJ%2B65BPGbz353gwQeAhUq0gBHx2X2yvRbNxvh%2FaGhbk6R4qlsOKDo4IWH5tb6ClJmxX%2BxHR28SOee7KCMq20Tg%2FvDtSlJ%2Fmm8Ni7XdE%2F9V596j%2FcyJGL%2BlzZtedsHu7ZfJj1psk4y8L%2BOs64JryFt%2Fhtzw3jPU1fzQlJ96g%2F5b43mYC42yAHno2JyyteubnwH1tjAcSMwDWlNNsE27pvVJg9gx1wBqSUFIdpkShSSs%2FbSO8wtIiQ%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(五):Zookeeper 节点(znode)详解</a> </p><p><a href="https://link.segmentfault.com/?enc=xwAMiftHGSFPuwU%2FPLA6nw%3D%3D.TesZeBIT0nj29X4XOge8oWlgupcUQB91f%2F8LKugeCfZygh%2BMbSVjq8%2FW%2BKpRuDDgWuR%2BHrkP4MskgC0r%2FSFQehCP%2BCnum2FSsnQv1vdQ3CPSzMGu3A8g%2Byc3iwQJ5zHSxYEc0eTaybvIphDopMrsGyn%2B6a5J0hJ4ACZB0kaKu3wGBzu02YTQyYBoyGEpS2pm%2B6qZCTaG%2BjFxuDS9tnwiSljW0ANS2v%2FImmgfVxi0QzXbLw7u%2BoXNmsTMEAJ7udutwr1MESIdKZMwmK8o6uwaO3aAEBtvrHb1x21S97Y8qwo%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(六):Zookeeper 选举机制</a> </p><p><a href="https://link.segmentfault.com/?enc=zqvWL0L4A5qyQhmHoYvE%2Bg%3D%3D.FFJKUjfKfUz35mulaQPToWuv2Dmc9ZUv08Xkv42PXwNNnOdSbwK582IFUQfMSdLJNWVssDfO8cAIZpes1TiDhB8lUGB9TwP9eV9wKLLq98l9%2BWSeFtDqn4hMXTjq3HoWWMcuyKY6hrz9VNOgp6Li71JX4xzt5k%2BOkp8Zh%2FDGoICUnP2qNO4C7P1k8jESTrvsXtVy8looA1Z9YErA6UY%2FNwOaTGMdeziVZMr1uGT%2BjnL6LCblfmGtG0ALjLfhm7OYoKxSLiP%2FX5vU1iIJsZoN13iK2cUawtyIUPv4YtgJQaQ%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(七):Zookeeper 监å�¬æœºåˆ¶</a> </p><p><a href="https://link.segmentfault.com/?enc=sSs%2BoYZuC%2BglvvdLKDZ2aA%3D%3D.JmP2Q1gr6%2FlmcrRZfW5YK%2Fy3m1Yr77BQGld8%2FgGSct5e%2BU5wUmTJgNO%2F%2Bx6QuLP%2BokmRkIvIPadW%2FKk%2FmTS%2Ft6yEOvHhvGASLNluHaKieaxe9KaSyxUZ7583%2FStDZqDzTJiBO1tZsYjjtmFGmTIuKRdCdhVIBrOGe6Xkjc%2BUMQKM5b1Z65LlaW9%2FjciXdQqjmcJwnmGrjvrMG8qc9lQ85rxHnBVaXjJLeszVfIyv%2FBh666iTtdT3kuY4PN5jwZXlgDptRuLmo9kwBhp07hfiYZsvxW1RUSyOAmPbz83cDwM%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(八):Zookeeper 集群 ZAB å��è®®</a> </p><p><a href="https://link.segmentfault.com/?enc=RSjLL7qDzhN8UL9s9XwIfg%3D%3D.X%2Bz298ttn1MpYAVywMf0W1fYekWxUCCY6vEiuQP72D8JL38TEk1DvIznKpb3NNTPOSZ8Ftna8e2f0EYzv41W9afgfzrRyxxB9XkUoBxeprJHoU2Vqqzsze55gnREXnT3OCiyMk0nzkkRzvgOdUJ8Q1z5Fvf2wWF4Kt8b%2FgEDAFmuCf7n7zDFIDu1arteEf1KXmC%2FVwXr4hyfc8Dhrp2pCRwTq2cYefOO%2Fz8kePDF905UzRoiEZeQH1qYKHRtEiSeVN5abzorswEAwIJZr7sI0m44WPP5ogNgUgnPIxF%2FXaI%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(ä¹�):Zookeeper é…�置中心</a> </p><p><a href="https://link.segmentfault.com/?enc=iJ7ySZJBH3SmMfbYeDgsEA%3D%3D.B%2FcBONxNYcUa%2BxvBS7Mx9di7ooLGomCnG94wvutptNAJ%2BG%2Bob2eNpXQFhyYRTWNieWKokoe6zsGLjFnTy0vaegh8YqIuTpkOqeX%2FWV0AKwDntBIlo3MqFgrCc66miBvlSLbKZyHBiqAjD5HYtLKk62N7bT%2BiO4jrQtTqcNYclIi6C61N1pn8tRQV5uh1E89MCRTkkQZExIOrG18IoiH%2BsuTayGY6VbxQ4WjvBcepgDDq2eHcKJVPO2otTEbquPaWhhxeI5qy12mRPiK0JzfunnphIgw9VBTYsZVIu%2B3h3lY%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��):Zookeeper 注册中心</a> </p><p><a href="https://link.segmentfault.com/?enc=%2FbpjJNlf3xR%2BdkkgkBrdMQ%3D%3D.25s8auG1c1r%2FgC09VgeGzR7eZBkasr%2FuN0NNVbgDP%2BoPy3pZuSRoAQnLAeWEaju1iOPquoPGl%2BoCQS1nJU8epG4B4CArzgog04UbV57JHnPb25ta0cMQ7ZcZ1CJ9FJqLxI6FDXNHqsHOJswA7oy2wuArEtzTE2EEhs5UFZ48%2B%2FdsXWnbqIbpm5AxktaAlQxcrQIdzE5FrvE%2B9dk%2BAW9VmdVi25gi01HpDAQTwR1CunttJHSCYYuLp%2FVaTi8bTf2Hg2jNcOjQB5jfYey7xBFz5SmPPIs3%2FXy%2Btl8xAHDqEsA%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��一):Zookeeper æ•°æ�®ä¸�存储管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=%2FM8saP0Ju%2BPSc830nwzc7g%3D%3D.dHEHka4MU1H7nfBR1eG1w%2BaUAOcWQBtHeXTiQsJZaMl4krAV3GxTTf0w1wKpemXbWqXaJHLmRu%2Fg5dljr1KH58lDU%2F0l%2BII%2B1OMhY%2BuVzvhvj4I0nY4HIsaCBkeDQVZj5umIe6gOROdZojX%2BXFgETcP%2BLK5%2FhKakA4injUGRUhYE1ldLtmq12g3z1MFwkRDF3j70pTskcELHv4aD%2BRavM2nWORwi%2B1HXVYjwc8xewHdAub3hd7%2FWqsR8t4BGC5vRKeH5FXNf3%2BxDzeuw2h6hzvMJYXxporx43bnRrC0EbOE%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��二):Zookeeper 会è¯�ä¸�事务管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=%2B3VFOWjIri9PU9kfn%2FwurQ%3D%3D.fCaWsAvHJxZ0wRxpkqAj73v8U9TiW5m1Lecku63pbNACRnNkcucZw5dvXhrMJcsCgjZLL0Z9sc8h86srJquhxHdATWtQx0gfjQazaYAZ36zWr%2F25LvlZC8Pc8xhoV6cIC8%2F6wOKGRa%2FJgMMY3nx544Vi%2BnNJ5IqCT44EtBKIS8%2Ba1aD8sTO68s41y%2FJSyHJ6Y2zj8Nd6JmdnAx071vAUQUbv8vmKxJyp1C1%2B2%2FZ6YDUuBiXGDpO7OnmedFBwaxahnb%2FcB9iaEjXRt4UrEQ3tcm6vo449katLTurUtp1o2RY%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��三):Zookeeper 分布å¼�é”�å�Ÿç�†ä¸�å®�ç�°</a> </p><p><a href="https://link.segmentfault.com/?enc=Lf0GMBdCq8ADraeF%2FyAymQ%3D%3D.gKNFu6PJ7tncH1m2ieQupzzj91RY99%2BdBDH7CfPw4ln1fqsflwliVwofjI7na8QDGhAQezOzSKbfuaF%2Fxy%2FLqIECI74HdlmK2EQiUbM4k%2BXNqMec%2BEzvOdQTjmLBkkuLTa4N7FX%2BgHlz001fTnpmHhYdficor%2BsbqVHnNrxWkySaO%2FCY87oXxMQ3t2ItnaI4lbu17ZH3RCtZUmHW%2Fav1vTqZF34SGv0JvaOP4Id4aeOs6N3Ou60Re0euYt43X5YLoL2XzzYz75VqQZXpSVmFGrsujXCmjS0RwEtaKCbojDM%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��四):Zookeeper å¼€æº�客户端工具</a> </p><p><a href="https://link.segmentfault.com/?enc=1Er8p149g2ltAxTUP9NYPQ%3D%3D.Ev%2Fd9pYBiupjcuxi1XdsbExEDlICK6eRGEFjDsCcXP7CXYKYPpY0wb3WDen5s%2FbJFirJ2%2FJsR31dVJMhBemBJWOvM4EsR953hYZ0dqiRjcwPkiaSGXhcrAE3hYWPg0DAH8v4weQ5gNaYvcQX0rbDLfC8Fdrc8daFoGMBiCP%2BzX1LTD3TcC23ti4Is%2BFnhy8Spc3XN8hbuRwrTq0RSmyU7NfLqOfz4BHbeOQBKnxgEvZc6owTrhb3MUcDDQI1CMbU2iajC%2B5MHUa2gEUfMT0xltg9Rs0KcIq%2BNvDzAr1N%2BsY%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��五):Zookeeper å�¯è§†åŒ–工具</a> </p><p><a href="https://link.segmentfault.com/?enc=wdEk2pAxNVQ0U2%2FAl%2BMOlA%3D%3D.qetTEzKqH1L6o%2FlGUwKs29PWAqPDzeT9IRlNDkBP4VEOo4ePz4vAjbEitwLwTkD6OdyP9BG0hx8CHVuDIRINV61dsIhQxEdohD0Mn5auCv9r14ArLeoheDgrAyCboZtGh4JfPWuk8Ccrp9whBGRyc%2F3IB9xHBmbebTeGRDb%2Be0T81n9KQDQs79aPY5zEl8t%2F7wnRZm9nIHt59yVRcS6cBdufTb8fKZb%2BwPDa8sFhAHKz19bsTVAhKuNUpw9Hkigs%2FrIfSkm%2FYoApVhcXQqsI77nC6bBw7z21r%2BUHZEAt4RE%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��六):Zookeeper å®�战(基äº� kafka å®�ç�°çš„æ—¥å¿—收集平å�°ï¼‰</a> </p><p><a href="https://link.segmentfault.com/?enc=OEZ4onM921qpTf5e8JrIxw%3D%3D.aNJqRW6TFKCyPFKfakxdvE4iMqZ9oVFm0L%2FVffVmD8WHVjxEQstdTHBQ8leswBKJ3TNXdBmVukn3h4MSGYIz0E9egbOuenkQyf3w0l1AnWQ6bT4njpgrKUBQIQCnx0EFKOA%2FB0S3HMU3H4Ffe8G0FaOC5K4oa7uRbWSN2G0%2Fb9ssrJV6TQRWnZ35L20ovQ9Eys2%2B2ZgRC7whtuat634IDHbcHcSbHMsRNR88iDBRGXg%2FQGRtke7V2bojrhaa8iUv%2BbCHjo7L51ca31V7cKkzJo3MZSQOZzxgPg7TipzZLPc%3D" rel="nofollow">进阶分布å¼�系统æ�¶æ�„系列(å��七):Zookeeper è¿�ç»´å®�è·µç»�验总结</a> </p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p> 别å†�东奔西找了ï¼�æ�¥è¯•试这款超牛 X 的手机端 SSH 工具,å�¹çˆ†ï¼� https://segmentfault.com/a/1190000044146410 2023-08-24T15:57:55+08:00 2023-08-24T15:57:55+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>工欲善其事必先利其器,我们在日常工作中需è¦�登录æœ�务器。PC 端工具比较丰富,如 Xshellã€�WindTermã€�electerm ç­‰ã€‚ä½ æ˜¯ä¸�是也在寻找这么一款好用ã€�å®�用的手机端 SSH 工具呢?</p><p>今天,就给大家介ç»�一款手机端 SSH 工具:flutter_server_box。</p><p><img src="/img/remote/1460000044146412" alt="图片" title="图片"></p><h2>flutter_server_box 简介</h2><p>flutter_server_box一个 Flutter 项目,使用 Flutter å¼€å�‘çš„ Linux æœ�务器工具箱,æ��ä¾›æœ�务器状æ€�图表和管ç�†å·¥å…·ã€‚支æŒ�SSH 终端ã€�SFTPã€�Docker 管ç�†ã€�包管ç�†ã€�进程管ç�†ã€�代ç �编辑器ã€�代ç �片段ã€�远程Pingã€�ç¼–ç �转æ�¢ç­‰åŠŸèƒ½ã€‚</p><p><img src="/img/remote/1460000044146413" alt="图片" title="图片">支æŒ�安å�“ä¸�IOS<img src="/img/remote/1460000044146414" alt="图片" title="图片"><img src="/img/remote/1460000044146415" alt="图片" title="图片"></p><ul><li>å¼€æº�地å�€ï¼š<a href="https://link.segmentfault.com/?enc=Znf3flRTBT9X1FuQ4u0Sdw%3D%3D.l%2B8p3mnWJocXqvgyO7AJpO7Q7tXkc1m8rlnoszml8G4bPFGair%2Br838N20I5oJM%2Bq3%2BU5zWHavN3jFWt5bBZkw%3D%3D" rel="nofollow">https://github.com/lollipopkit/flutter_server_box</a></li></ul><h4>功能特点</h4><ul><li>支æŒ�SSH终端和SFTP。</li><li>Dockerå�Šè¿›ç¨‹ç®¡ç�†å™¨</li><li>支æŒ�状æ€�图表</li><li>支æŒ�代ç �编辑器</li><li>Ping工具</li></ul><h2>使用相关</h2><p>ç›´æ�¥ä¸‹è½½ç›¸åº”该的安装包安装å�³å�¯ï¼Œé¦–页登录界é�¢å¦‚下:<img src="/img/remote/1460000044146416" alt="图片" title="图片"></p><h6>系统信æ�¯ç•Œé�¢</h6><p><img src="/img/remote/1460000044146417" alt="图片" title="图片"><img src="/img/remote/1460000044146418" alt="图片" title="图片"></p><h6>SFTP界é�¢</h6><p><img src="/img/remote/1460000044146419" alt="图片" title="图片"><img src="/img/remote/1460000044146420" alt="图片" title="图片"></p><h6>Ping的界é�¢</h6><p><img src="/img/remote/1460000044146421" alt="图片" title="图片"></p><h6>在线终端界é�¢</h6><p><img src="/img/remote/1460000044146422" alt="图片" title="图片"></p><h6>Docker容器管ç�†</h6><p><img src="/img/remote/1460000044146423" alt="图片" title="图片"></p><h6>转ç �功能</h6><p><img src="/img/remote/1460000044146425" alt="图片" title="图片"></p><p>更多相关的功能å�¯ä»¥ä¸‹è½½è‡ªè¡Œä½“验一下。今天的分享就到这了,如有帮助,请点在看ä¸�转å�‘分享朋å�‹åœˆæ”¯æŒ�一下哦。</p><blockquote>注:如需转载,必须ä¿�ç•™æ–‡ç« å‡ºè‡ªï¼š<a href="https://link.segmentfault.com/?enc=JBR%2Bb2qiy7oxox8ukhCdGg%3D%3D.xk48P%2F8OvMzvrVfnZex3LT1uT%2FPi6gstMUO4tBJBTsiUrbeOzuuebZEm1WxdQnzhMJKHZdUhKRZifjrzko0xK826Lh1OPV02Adp1zbOeXZK69QWI787pX3FQQhVl6jR3S5rzOU4Oa6VB%2BynZw8oQKDWRRAqy8p29VL8GmdL%2BuQhS3KUlxRcBgXLMYUE0DMz4i0A4b9jDMOP6J4trUzSLc5G1Yo82zItZS9bFZEC1CIE7TvgMoELYUViUHC1X03QRdVsn1nMpt6yaiwgJejQMMwzU%2B3S6K3p%2BnmfxL%2FHaLTA%3D" rel="nofollow">一款牛X的手机端SSH 工具</a>,其它都视为é��æ�ˆæ�ƒè½¬è½½è¡Œä¸ºã€‚</blockquote> 国内用户访问 Github 速度慢æ€�么åŠ�?别慌ï¼�ä¸€æ‹›å¸®ä½ è§£å†³ï¼Œçœ‹è¿™ https://segmentfault.com/a/1190000044135253 2023-08-21T19:59:33+08:00 2023-08-21T19:59:33+08:00 民工哥 https://segmentfault.com/u/jishuroad 5 <p>对äº�我们ä»�事 IT 行业的技术人员æ�¥è¯´ï¼Œå¯¹äº� Github 肯定是é��常熟悉的。日常工作中必备的工具之一,由äº�时常é�‡åˆ°æ— 法访问ã€�或者访问速度很慢的问题,导致使用起æ�¥é��常的ä¸�便。<img src="/img/remote/1460000044135255" alt="图片" title="图片">所以,今天给大家介ç»�一款软件:fetch-github-hosts。<img src="/img/remote/1460000044135256" alt="图片" title="图片"></p><h2>简介</h2><p>fetch-github-hosts 它是一款å�Œæ­¥ github hosts 的工具,å�¯ä»¥è§£å†³å›½å†…æ— æ³•è®¿é—® GitHub 的问题。功能é��常强大,跨平å�°ï¼Œæ”¯æŒ� Windowsã€�Macå’Œ Linux 端,UI é��常漂亮ï¼�<img src="/img/remote/1460000044135257" alt="图片" title="图片">此项目是通过部署此项目本身的æœ�务器æ�¥è�·å�– github.com çš„ hosts,而ä¸�是通过第三方ip地å�€æ�¥å�£æ�¥è¿›è¡Œè�·å�–,例如 ipaddress.com 等。</p><p>时隔一年大更新 v2.6 å�‘布,将 fetch-github-hosts çš„ä¾�èµ–å�Š UI 界é�¢è¿›è¡Œäº†å¤§æ›´æ–°ï¼Œå¢�åŠ äº†ä¸€äº›é��常å®�用的功能。</p><ul><li>å¼€æº�地å�€ï¼š<a href="https://link.segmentfault.com/?enc=UstaDjKZs5KjrxKUCpBndw%3D%3D.DXvdG5Fx2focZYSvNm1TbHjeyiTEpBEzMCZ3JohpOn%2B%2FAA7CKPoF6V7hR4hUDAEZ" rel="nofollow">https://github.com/Licoy/fetch-github-hosts</a></li></ul><h2>安装ä¸�使用</h2><p>安装ä¸�使用都é��常的简å�•ã€�易用。</p><ul><li>下载地å�€ï¼š<a href="https://link.segmentfault.com/?enc=3y2eOLLr5qo%2BE34o2XIviQ%3D%3D.QtEFIkQzvn8z%2FKYZ8SV1avs7eyX5vx3zcff0I3EKn6QiRPH7so07%2BdLuVfet74Lo9kkG83WmAc96ZSQI5eKtRQ%3D%3D" rel="nofollow">https://github.com/Licoy/fetch-github-hosts/releases</a><img src="/img/remote/1460000044135258" alt="图片" title="图片"></li></ul><h4>Windows 端</h4><p>下载相应的安装包</p><p><img src="/img/remote/1460000044135260" alt="图片" title="图片"></p><p>å�Œå‡»è¿�行之å��的界é�¢å¦‚下:<img src="/img/remote/1460000044135261" alt="图片" title="图片">点击å�¯åЍ之å��显示如下:<img src="/img/remote/1460000044135262" alt="图片" title="图片">è¿™æ—¶ä½ å†�访问Githubå°±ä¸�会出ç�°ä¹‹å‰�的超时ç�°è±¡äº†ã€‚</p><p><img src="/img/remote/1460000044135264" alt="图片" title="图片"></p><p>选择客户端的主机æº�:<img src="/img/remote/1460000044135265" alt="图片" title="图片">ä½ ä¹Ÿå�¯ä»¥è‡ªå®šä¹‰ä¸»æœºæº�:<img src="/img/remote/1460000044135266" alt="图片" title="图片"></p><p>æœ�务端模å¼�:<img src="/img/remote/1460000044135267" alt="图片" title="图片"><img src="/img/remote/1460000044135268" alt="图片" title="图片"></p><h4>命令行终端</h4><p>ç›®å‰�支æŒ� Windows/Linux/MacOS 。<img src="/img/remote/1460000044135269" alt="图片" title="图片">具体的使用å�¯ä»¥å�‚考:<a href="https://link.segmentfault.com/?enc=efuMWD4nuvLmAzxHQeBJUg%3D%3D.lyn9HnwR3ZZy0JYSxHnbd8EO3DPJbshLpHgYU28%2BbraYY8%2FxzcLPFv%2FbbUqQqIpDwfZv6G3DUV%2BCGSIGWKxaRA%3D%3D" rel="nofollow">https://github.com/Licoy/fetch-github-hosts/blob/main/README.md</a> 官方文档介ç»�,这里就ä¸�å†�赘述了,é��常简å�•。</p><h6>æ‰‹åŠ¨æ·»åŠ Hosts 文件</h6><p>需è¦�我们手动访问 <a href="https://link.segmentfault.com/?enc=gj%2Fu%2FtZ6PqBYQs9nopgnCA%3D%3D.Mzh5N%2B9o6QssjW7H3tk%2Bz8ucgueCGmbZP7Xl6%2B5cPF2iSd%2Ffttmuo9mS6uwJPC8i" rel="nofollow">https://hosts.gitcdn.top/hosts.txt</a>,然å��将下é�¢çš„å…¨éƒ¨å†…å®¹ç²˜è´´åˆ°ä½ çš„ hosts 文件中å�³å�¯ã€‚</p><pre><code># fetch-github-hosts begin 140.82.113.26 alive.github.com 140.82.113.26 live.github.com 185.199.108.154 github.githubassets.com 140.82.114.21 central.github.com 185.199.110.133 desktop.githubusercontent.com 2606:50c0:8001::153 assets-cdn.github.com 185.199.110.133 camo.githubusercontent.com 185.199.109.133 github.map.fastly.net 146.75.105.194 github.global.ssl.fastly.net 140.82.113.3 gist.github.com 185.199.111.153 github.io 140.82.113.3 github.com 192.0.66.2 github.blog 140.82.112.5 api.github.com 2606:50c0:8002::154 raw.githubusercontent.com 2606:50c0:8002::154 user-images.githubusercontent.com 185.199.109.133 favicons.githubusercontent.com 185.199.109.133 avatars5.githubusercontent.com 185.199.108.133 avatars4.githubusercontent.com 185.199.109.133 avatars3.githubusercontent.com 185.199.108.133 avatars2.githubusercontent.com 185.199.111.133 avatars1.githubusercontent.com 185.199.109.133 avatars0.githubusercontent.com 2606:50c0:8001::154 avatars.githubusercontent.com 140.82.114.9 codeload.github.com 54.231.163.161 github-cloud.s3.amazonaws.com 52.216.54.233 github-com.s3.amazonaws.com 54.231.133.153 github-production-release-asset-2e65be.s3.amazonaws.com 52.216.104.235 github-production-user-asset-6210df.s3.amazonaws.com 3.5.16.126 github-production-repository-file-5c1aeb.s3.amazonaws.com 185.199.109.153 githubstatus.com 140.82.114.18 github.community 52.224.38.193 github.dev 140.82.114.22 collector.github.com 2620:1ec:21::16 pipelines.actions.githubusercontent.com 2606:50c0:8001::154 media.githubusercontent.com 185.199.111.133 cloud.githubusercontent.com 185.199.111.133 objects.githubusercontent.com # last fetch time: 2023-08-20 11:42:51 # update url: https://hosts.gitcdn.top/hosts.txt # fetch-github-hosts end</code></pre><ul><li>Linux / MacOS 系统 hosts 文件目录:/etc/hosts</li><li>Windows hosts文件目录:C:\Windows\System32\drivers\etc\hosts</li></ul><p>注:上é�¢çš„æ–‡ä»¶å†…容是动æ€�更新的(last fetch time: 2023-08-20 11:42:51ï¼‰ï¼Œä½ å�¯ä»¥ä½¿ç”¨å®šæ—¶ä»»åŠ¡å�»æ›´æ–°å�³å�¯ã€‚</p><p>æ·»åŠ å®Œæ–‡ä»¶ä¹‹å��,我们需è¦�进行手动刷新动作,æ‰�能是使之生效,具体æ“�作如下:</p><pre><code># Linux /etc/init.d/network restart # Windows ipconfig /flushdns # Macos sudo killall -HUP mDNSResponder</code></pre><p>Unix/Linux 系统,我们还å�¯ä»¥ä½¿ç”¨ä¸‹é�¢çš„命令完æˆ�è‡ªåŠ¨æ·»åŠ ã€�自动刷新,一键å�¯åЍä¸�使用。</p><pre><code>sed -i &quot;/# fetch-github-hosts begin/Q&quot; /etc/hosts &amp;&amp; curl https://hosts.gitcdn.top/hosts.txt &gt;&gt; /etc/hosts</code></pre><p>图形界é�¢çš„使用还是é��常简å�•ã€�方便的,总体使用下æ�¥ï¼Œä¸ªäººæ„Ÿè§‰è¿˜æ˜¯ä¸€æ¬¾é��常ä¸�é”™çš„è½¯ä»¶ï¼ŒåŠ é€Ÿæ•ˆæ�œé��常æ˜�显。</p><p>有兴趣的朋å�‹å�¯ä»¥ä¸‹è½½ä½“验,如æ�œä½ æœ‰æ›´å¥½çš„åŠ é€Ÿå·¥å…·ï¼Œä¹Ÿæ¬¢è¿�ä½ åœ¨è¯„è®ºåŒºåˆ†äº«ä¸€ä¸‹ï¼Œå¤§å®¶ä¸€èµ·å­¦ä¹ ï¼Œå…±å�Œè¿›æ­¥ã€‚</p> 终äº�产完了ï¼�Kafka 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版) https://segmentfault.com/a/1190000044122087 2023-08-17T11:13:06+08:00 2023-08-17T11:13:06+08:00 民工哥 https://segmentfault.com/u/jishuroad 2 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=TWVnQLoNom%2BO0hJRAUB9nw%3D%3D.asj6zjPzmMB%2B7VhV8AmdHJDVVFP9BcnNE%2FznWjK8BHBIsb%2FdypfszhtPWvTYQc7ileB9vP5UyeZercy6n2AteOxwHciNY7Jcq4KGnekCwHx2xdpUphfnuyh3wr2jEgrJkRX9UiAM9XaEcx%2B2yCmtBO37n8jdpg%2Frzii3ho2nP04btj3gZUMsrKKS7gykHRtUIxz0T4zi8Xy2a85A6TNWP3w2OGagFbDX2aj1PzlzkoeQTYD9LA1GPBOAOn%2FxbAif4MB7zogo7kfI5F2ZDeT4g2fpBu%2FEsFNnQ6tePhZZNMg%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=NGU8dWekJ2aOudO6%2Bbe%2BbQ%3D%3D.QEj1y52nx%2B3njwn8xDU9ApBrb0v7GahHftRvZUR1ICWb5hK4nzlKcZ62G8Wcqj3fBS1yiosLLl0c%2FuyNNA0VXDCPoA4vCfDC9Z1YrnKv6o3sU5zgyLGG5RsryD3pQo8bn%2FseP0anOMk%2BCx22ds68vrFSlSmyg8LO9jfsogLVB4mY6wyqc02XDkPlXO2UJMYb7efcOYx0CXD6Z47%2FdEU%2BZKlxUY6KlbRVcVo%2BcNCFAKWOi9gBpoX4WmIWTgrl2%2FgECtuAxqa5H6KULAoAtvPF1ssejy9UZeQVHzMAKontMEw%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=CFmuUUENw8r0dSHVevFPCA%3D%3D.iRS9l7qwOe6oTItczraKPoJel8hb04Ngh5Xs2NumQOiTLberiEJJCwytHPM7nem7i9VJHFN7RCSIhmuPTwOm6T6lape%2BVlkz5UF2GIUhxWOUFbmco8Vh4APSR0WWm88m1Gq5bTueulD%2BfQL720n8LEqt%2BTlkEoWXVQdRlWeoIYEzA42f%2BsC37k27wg47DJAJoJDNbpuWLWqNGLoktheNhgjqXft1%2BqgUjCHe5fPOKEFO8Vmv%2FqUQwhTZazIXE%2BdXy%2Bo0NYSl%2Fh43uTQ823WzDKxAHIDk2TNnkcrtXLnZLsDKKGTGTEOAftcILLBvSvc09oHQuWKOCbWu3BAyQt1Ugg%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=1nXfmxxdHFwrg2dMEfDfyA%3D%3D.HdJ3DIcowYYJT8aJhhK%2FtR2jliONsKdXP4YfQBfzCAPmncudwjn8GguU8%2BK1Chtj7EiglD045Py1xSUvcr%2BALliGi1XCyfX0WQBAZNtq5PIC0eTJgAMbxqGc1ECnfBmZEGjTuqQ9WOh%2B0ArINiTGNHo3spKhmTZ4zEBXBMp1berh5g5yTJDp2SDqckVHBoYRfkQgtf6%2FrhJPxoEal8UJhsBLMzmOj2TVwrHEsOuSw2CXE%2BOTC3lX0%2F5Xdy1c85ZTpcOvdkp6sZLP3kMD2iOPjS0Q%2BSyLbwEGXon2xy%2FK7mI%3D" rel="nofollow">ElasticSearch</a> ã€�<a href="https://link.segmentfault.com/?enc=gqBohQs4RsPviZCOc%2F5edQ%3D%3D.4b5CPCscArvQ8Zw2pnnAeB5yjJvwHcd6m1QuFprTsfPX2%2BEE6BH7VLvlbBhFbeeKG9PfC3hlOcL6j%2BH0Sqp%2BNssostcvNgqNHnotgJ8gJAV24StcAHrUVS7%2BghUbC3tHVZHIcb%2B2Qwr4D469YvU8X5eLjN9dRRb%2FB57l8KH4fiWloahOZYR0vRnWzKq%2BL4g00ydrC5oUu54R8XTTdTbzjYKnRRqxtaVl%2FEGARNf6evIH5l4mwUKICBOEmv9ubDgzC5mFtq5kZ6c%2FoSamlvSIO%2BhqZTsAr0bw1u2MSf0Ndng%3D" rel="nofollow">大数æ�®Â Hadoop</a>框æ�¶ã€�<a href="https://link.segmentfault.com/?enc=GaRAbECxIYjAk8wkqqdYCA%3D%3D.bm6Y7IWTd90kWM%2Fku5Z%2BG1DyNK3HKRpXTCLAC4oYVMRW4RQYx5C3qwlHrxe31F8ff1UqFn3i7etr2Zsq%2BieCsHuGTrBec3Gi38IMAOXms7Tz5l8usoU7G4EXrcHcrzQzMi%2BJmskg2rDz1nJ%2Ff7Av81CPDNi7ZorW41ZRCojpnAMt5WGIFfH7uuFuzVNgXvd%2FYgjG7%2FO%2B14he1jx7O11tdERMes8bRzYJbVUWISwutHa6Kv9gspTqiqzphcFegnDXZsgXj4cv%2F0IzdWiUxWYtb8uMol41uwNnoRXxwdFFbdw%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a>ç­‰çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚截止今天,å�ˆä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼š <strong>消æ�¯ä¸­é—´ä»¶ Kafka 系列</strong>å�·å®Œäº†<strong>。</strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点<strong>在看</strong>ã€�<strong>转å�‘支æŒ�</strong>一波ï¼�ï¼�ï¼�</p><h2>什么是 Kafka</h2><p>Kafka是一个开æº�消æ�¯ç³»ç»Ÿï¼Œç”±Scala写æˆ�。是由Apache软件基金会开å�‘的一个开æº�消æ�¯ç³»ç»Ÿé¡¹ç›®ï¼Œè¯¥é¡¹ç›®çš„ç›®æ ‡æ˜¯ä¸ºå¤„ç�†å®�æ—¶æ•°æ�®æ��供一个统一ã€�高通é‡�ã€�ä½�等待的平å�°ã€‚</p><p><img src="/img/remote/1460000044122089" alt="图片" title="图片"></p><p>Kafka是一个分布å¼�消æ�¯é˜Ÿåˆ—:生产者ã€�消费者的功能。它æ��供了类似äº�JMS的特性,但是在设计å®�ç�°ä¸Šå®Œå…¨ä¸�å�Œï¼Œæ­¤å¤–它并ä¸�是JMS规范的å®�ç�°ã€‚</p><p>Kafka对消æ�¯ä¿�å­˜æ—¶æ ¹æ�®Topic进行归类,å�‘é€�消æ�¯è€…称为Producer,消æ�¯æ�¥å�—者称为Consumer,此外kafka集群有多个kafkaå®�例组æˆ�,æ¯�个å®�例(server)æˆ�为brokerã€‚æ— è®ºæ˜¯kafka集群,还是producerå’Œconsumer都ä¾�èµ–äº�zookeeper集群ä¿�存一些metaä¿¡æ�¯ï¼Œæ�¥ä¿�è¯�系统å�¯ç”¨æ€§ã€‚</p><h2>Kafka六大特点</h2><ul><li>1ã€�高å��å��é‡�ã€�ä½�延迟:å�¯ä»¥æ»¡è¶³æ¯�秒百万级别消æ�¯çš„生产和消费。它的延迟最ä½�å�ªæœ‰å‡ 毫秒,topicå�¯ä»¥åˆ†å¤šä¸ªpartition, consumer group 对partition进行consumeræ“�作。</li><li>2ã€�æŒ�久性ã€�å�¯é� 性:有一套完善的消æ�¯å­˜å‚¨æœºåˆ¶ï¼Œç¡®ä¿�æ•°æ�®é«˜æ•ˆå®‰å…¨ä¸”æŒ�久化。消æ�¯è¢«æŒ�久化到本地ç£�盘,并且支æŒ�æ•°æ�®å¤‡ä»½é˜²æ­¢æ•°æ�®ä¸¢å¤± 。</li><li>3ã€�分布å¼�:基äº�分布å¼�的扩展;Kafka的数æ�®éƒ½ä¼šå¤�åˆ¶åˆ°å‡ å�°æœ�务器上,当æŸ�å�°æ•…障失效时,生产者和消费者转而使用其它的Kafka。</li><li>4ã€�å�¯æ‰©å±•性:kafka集群支æŒ�热扩展 。</li><li>5ã€�容错性:å…�许集群中节点失败(若副本数é‡�为n,则å…�许n-1个节点失败)。</li><li>6ã€�高并å�‘:支æŒ�æ•°å�ƒä¸ªå®¢æˆ·ç«¯å�Œæ—¶è¯»å†™ã€‚</li></ul><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><p><a href="https://link.segmentfault.com/?enc=1scMfUjVA5KxCdIRNnkIyg%3D%3D.J%2FXOIqNIGC9ZAeUXF5lzG9rqFnq18%2B7%2FSiFDGYRLnxwJjdWuICWOME3q75tyMZTIURQIaH471ZPdZ%2BkYVfWfHZcCvNKCMzx2MW4mebifekrG8pufqUNvhIAnfgbnsfw1MPJFJLSa2pnNYGd%2BVq7wfXPyN8Aj2yHeC2FFbVwdUUYSBYRIB1bw%2FK5Tf8IgvlM7PdejIrpVQYCOvhKonDrSULsDYGPl3btuGAI%2F6KQbmBfe7I4dRDqS5IGvxuZyUb0Kt%2Bs4V1KPqJLZoMty4wM6NdB%2FGHBk05xmp%2Fgk2g6nA04%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(一):Kafka 入门(基本概念ä¸�æ�¶æ�„)</a> </p><p><a href="https://link.segmentfault.com/?enc=zHFw9lcXjdJZAnUtZoPGYg%3D%3D.tDjTQaJ4QCb2END9uzJEXMCUT6ooo7wwozhVsNLOQQ%2BUAxL8mGSsquygOF36k2ehYaEabcESv3bhaKdl75jBh31FaFvhb8gULjfjkYGG3z%2BI993PNa%2BhfEHyQSaa02a8Ly88KW0CDhS5ZvNxkBcLCks%2BVyaYz6eDgtLxUlZqBonIoAFytOFDUqnBswDN9uD89MF3mEKbMv%2F6a2NS7ewbeBCaJp8TPv5Uxb6ZZckOKbfWe8U6YntlQCsQJ%2F68NjwYYksD6CRPQsSAw3RQxTYI79P5183ar6S36uJZ1gDiYgY%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(二):Kafka å�•机ä¸�集群部署å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=OnOpBDL%2FQbO%2FgPyEU3hT6w%3D%3D.S4cpFNry7fyQGLFXZsfi1kzw9PjoaICuG2vjpSdnIlxWYVRwcDYdbWJIwVgPQ2Ft5Rz4nfX7%2Fr722mFyr%2BynUNhUYJxE8bkU4Q6D5f0vw7jDv%2FsFaQKTimFJHt%2BrtbDnxW7hV8qVXEm1nnVfnwom5AfWZwRmFsvna9smvbS706UW7lgfQcwqRhtqCpA%2B8tYFBZ2Q5CeVlv6FUY5Ku%2Fw1aWvSMTzCbv%2BTbBaxR0rxrmcug6PLDczeqzKHavAWg7FVEaMiiCH589abRJiFlZojqcXwMpgUgZ86xsH%2Ffx09EWU%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(三):Kafka 中 shell 命令使用</a> </p><p><a href="https://link.segmentfault.com/?enc=b2oMeGaaBDC0lxTnkl0lqg%3D%3D.S0%2BEWnq7j%2BhSearu9Rufko2icau2o9OAPMz01EuSoO82sRobOJGGPd%2B6x00QvsQb4nJLZ92KE381td%2BE%2BFlypcLr0K9vaC%2F0ZboFJ4yEMKDzpQrpnhYZiAVzu0Y0AQ%2FCzUiMS0%2FO%2FM3t162TJyMbuPEAjXCNI2AWGi%2FMv273gskhG31ffbzOsZW62MH3qwuBbWxgTvveen%2FsydDLtlADmtZsrqNxmj5Iw2K00K7x%2FPLraPHhOVtYsLF%2FQYFbEO21eH4vFKeNh8zYMyPJeoi5pDcFSyYjXRcjM8YtfUhxJP4%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(四):Kafka æœ�务器 Broker</a> </p><p><a href="https://link.segmentfault.com/?enc=1M9pTtoZHnzy4TEnT%2Bf5Yg%3D%3D.oJQqFKGZrYhwLtSUHo7z2a%2BaG6RceC94S3fjqGF1J6SHzcCV4yHH6x5nAfOiA5bE8rzLHSNM7Vbq4KlnjRrAc5LzFkW6ffvJ1G5YEVZmKD0x8Vrux3LiHoNz9fuCzOY%2Ffs7oKDZtybUoYP82QX%2BWfQzoun96DUxvwnJXyMl2z8%2Fx9RjTu39ThnsV9Gcguvlms2j0IYE8RwHLaqQuBIbccSsLMu1jEwbxamrsQIt2Gd96%2Buq4hsyGfB461jxuJkI5dMxnI%2FMSkVbpU2nmx%2Fk9pANnr%2Fa8dJvj95uFXE2Am7A%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(五):Kafka 生产者 Producer</a> </p><p><a href="https://link.segmentfault.com/?enc=jHzYFxMoRaQ0DDZxPbIPag%3D%3D.oFMnhg4qKtVkyD5uBKDw6OgdUB0dzhShwrYWLTzh01xgiOOnCedL8s%2FkICTPGwz1V0M5i3BxHMOVQ2eHSoeGPFYiD951bJD0hlZj6akmdHKYwzXg5yfWjtMTXXe1jr24qXVkuF5DQ1axLpM9NvH%2B%2B9zV%2FkZvdaRGGWKTlz3pCvQQ7S7nOYIK3B5D8cQ6ee1uXhJ1YFtHh2apvb7VP6Au4PxMEg3lL3qGuUoN6OqFBX2cnverGKBc%2F5I8OuuJC3i4nlO5FRiaxL9gjTbwhpz%2BnP4wSpn4Lpm%2BCY0Se9x9gw8%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(六):Kafka 消费者Consumer</a> </p><p><a href="https://link.segmentfault.com/?enc=1d65V61lPRX7mY3bWBQuqg%3D%3D.8UQEIrnUBjePCDuuO%2Bw%2FcCQIA1tdsC0xcxrHoyFJPneOG05DalwMzvm8HjAzFzCyo23fL5HUT9Ub20yeBeoD1HQrTg7pgyKfxhPR90pI3gRU4zHs9zoeSFJZmRUTWShqhQ1QMiaQWhv8TjYpaZHYb6n4FOkppVz8HwamV9NCKH6mRZyX9h2sbJFKC%2BirlTFfkTBm%2BOGeE8s8qB9iMZnBNTm0wv87hd7U%2B9B6y7d5crtsjrzB1XkWJDr6VPlqU69tAfv3XM6NVodkAWamJXEGjq%2FHkS3y29MGR5el2k0TaJk%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(七):Kafka æ�§åˆ¶å™¨ Controller</a> </p><p><a href="https://link.segmentfault.com/?enc=XQQUvLfl60UwlvWPIdZAQA%3D%3D.1%2F8pnkGPpD3psHv20LisXTxH%2F0bevioA9kJKbdiARSPVooJWt0R2OHHrV9eq8AToW0E21nJpMI%2B5ngXMiJ0fs%2FR0zf%2BZoQ0LFR3HTi43oMPXjmGCdCc3pWd92ql%2FKSgw7tz44c9MdfHE9wINI68kkuOcYp2yyZcZKT%2FXjqxCubZO0YXKQUqaqCMjZ5z%2BT%2FI8Aj23WlhlhjIbgBjB7QGoScO7AUxgUOkTmBhAZoHxGK9fOZRV8vhyVVwHcgc0w%2FE0EZMdUnvwH7IZjOjpUiPYcocnYrI4dj5j02V7g8u0rNs%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(八):Kafka 主题ä¸�分区</a> </p><p><a href="https://link.segmentfault.com/?enc=r%2Fdy%2BCAfu4lpIsVuHSrIQw%3D%3D.x50JJYFlcW53%2BhQ5NJZYZ2Xogl2pu012tOdrJ7eAV6vbdoFt3jm%2FyVxCyY571fEhcqNR5T1%2F9bRjYsNipeh8xqmTJbLxGqkrO87zBZzzsTVZm1RjepsiAryxHkgGNow%2Fi7SYJ53hAULCMur73FYC8rg6LBYC8HISqFKlyegWtcN6PyxYWMckAopW%2FR9I9UbinXzq2IDeemBUPuNzFS0aV8tJMM7mRXl7Yxk2ElATA5jUbbp3dPbrkUdw6u1zfcU2%2BmGo4xSUtxGggXlZ8iHxUgomcUnxz%2B9HgJRJZIYQMOc%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(ä¹�):Kafka å�„ç±» API 使用</a> </p><p><a href="https://link.segmentfault.com/?enc=G%2FZbRkV9DEkMwJzHtmb2Fg%3D%3D.v4t7NLdmthHioDEAnyuGgZvHiXORlGh6BxYKou3bpzb04gZU%2FGO6pR%2B8NxTI30wog4bHRUfXg6XbNGcfQEqEKZBi5EC49U44LqYvOq3j3Nwg0xEUzov9UH3OsnqIXcXHL%2FQpLuCtFbpTP49IogtCaPZbxD21uQ87T3%2F5z1AZLPOz1Er0UuX2AKY%2FBmiSgc6uEf81W8ze533ng3e2ipTYte4ucVaKs%2BV3UiRucUHsSwepHWiFHemHHuh15VuMdjxMM%2BqIK6alXC4tvS4q6jx0l4Ob6QDEkqWnCoH0VqklU44%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��):Kafka 副本(Replication)机制</a> </p><p><a href="https://link.segmentfault.com/?enc=5mmAT3C6uzqXeIJcUE0xTA%3D%3D.HUIZg6dCEiYGjbvXfy56GbFT4rx6j7uiiiXiYukoeZEw8rIySzpzL0Y7A5XW1nkq%2FVR%2BHNrACGygxrHAziY7kSxDKq8qBvXRmc6odGnn1Y1Qwg%2FpAvquye0IqZNL0%2FYfdjZoviZuVKAdrul4Af%2BccDRJkXdvOHUM2U4Y%2FR6f%2B3k0L1L%2BhKCL0Lov89m9yw0EUSM1VQCaonXPyHw%2FF3y1Hd4mz43b%2FCDI%2FSxiI%2BV6F6AULh9QUbuw13oKfyaCl61kT9horFTZwulh%2FdRYu3qTLvTubWy9iVQwu7Jnai7hJR4%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��一):Kafka 存储机制</a> </p><p><a href="https://link.segmentfault.com/?enc=wrSjObFq8fBYVMg37k%2BU1A%3D%3D.ghKnV%2B9t4MyVbZHwYXiUHk2KsbZLbrtgo1U9qsfknvFQSm127GeuWRxuJiRZSbbwSXkrkjAL%2BpEH3YOfT4vDepNNuCl0LkGEjkI76Fpfthop0hThtENNBSaJgTvgoelevzE4oGgc0ipX%2BdqPV0lRRxXZBlZhFfh10xDPlLbcCe92ba2nr4I%2B31%2FXEeZ%2FrH2EhAY4H%2BYkeMw1OoDJsWEndpvdFVB1VRWZynuHdGmxxN070NpzpIU0xqfJ5TpoOil7fsttKi278V7x0bv7y7%2Fa8fYA4Jn%2FIl%2Bj2tHOJRGEejk%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��二):Kafka 事务机制</a> </p><p><a href="https://link.segmentfault.com/?enc=fKqh6cpWCIh1Iizp97q3cQ%3D%3D.ZjcCul9xJ8CFJgyz0HG6k62Sxua9%2F51Gfv5fPOBdUGt50xSNNC%2BR6%2FVO9wy5Z%2FxAKJcr6jhoqEK01fKyDENyhazVzgsWgmKGkhy9PIv5UhRnprnLv5WcqDswQE9s9BIe2TdHbH4n1ReGU1hywFXb9x95cn1v7L601nhO8svw74uOiAxnotMeNBX1Dk%2B94Kv1AG98ZbCbNDhfaRC1h7yoJyW60ZnPZ08u3qnVLuCY3iQ1j9bSPqs3lOa7CLqhzf4VUQ6txZJKvp5%2FoXHFGYOsO%2FUxcGIgLFi%2BmUjMPuQY%2BV4%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��三):Kafka 高å�¯ç”¨ä¸�生产消费过程</a> </p><p><a href="https://link.segmentfault.com/?enc=O3x4mc4gZU0LQvADyGH80w%3D%3D.6e4UFKniTq%2BvUoARcpkt0O6wNuh32KGNlvKhwzn1bkGowZTouRbBcGbg27QzT9JSxkiUZwnOdaUN9ifbCp77pK5CPc6sop%2FR2LUCGLBw6FQNoojG3nNDtNPPK2J2ZpN%2FQ0KStWPpP1KijpHA5LZryDDRasufKxOEtZLTSgvlvn%2FZU1JbyqKMHrb8a3G1zFwwFxp0nOtwtFL9cgQ4kOgChwdnlzlxsZva131Xe%2BdmWIndnRLDzAEuFEspvlOrBiXezhjaZcwSkT0uBcUcDY%2FobQ%2F5FXD5y12B6G9lJKl%2FDbk%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��四):Kafka æµ�å¼� SQL 引æ“� KSQL</a></p><p><a href="https://link.segmentfault.com/?enc=B6qZH4TSrk9Ci6TLpcgIsg%3D%3D.onqiwtJz286BU73lvHM5g%2B8GZXmUde6ULGT16odY6s6sXP1bzTdGm6p8Erw0fwjeFyvQ8Hf1Ha8rMp3NxIhfC6vw1ZhRMzC0UcdsQ1l7C1B4FujA3qT9nYg4VdQNP7F%2BbdSU9MT6pyMNMxciKYuN%2FwnOHUJxEn9NhwHOpLz0unp4OX6ydDyGTq3pgbg7qjAkCMjD%2Bbb6vR0kvFglaYlJTboOYbXuSAlzjAggqTyChWVCFC5ZT37R6ASIEf9D%2BY42yk7UFgOAeG%2Bc4Qjs4QcwPXipL4vfgWlQxn5ufi2fokE%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��五):Kafka 日志存储ä¸�清除策略</a> </p><p><a href="https://link.segmentfault.com/?enc=lUsTHRHt2vLP%2FVdKHoFsAg%3D%3D.uA4A%2FhFg6%2Bgdds9H7w6D1FbpJbCONyHo4iKwo3hg7Y4b60Yr7iXA4fun2DEYbGhkzNprtukioZPOkcQfTJqT2eaT3EuKS7UUzro49FIqhP2n3pnzEeoBkMIUgdiytQdXhlkznSM1xTswJ5lsi8pWQgsiQGLDh9c1piD%2BkLKLFOZ5Z6%2BfEjzKLEP1dQxh3AvIs353poO1UUUopAC1cg3iejOvaKl%2FHAu59jCYz1NO4O8%2BvCUF5IaE6HgCIvRitS7RhbwqumC4DcE3Po7csjeEeArrCLpQM%2B8cHaJrt3cgYXA%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��六):Kafka æ•°æ�®å¤‡ä»½ä¸�æ�¢å¤�</a> </p><p><a href="https://link.segmentfault.com/?enc=DyCPa8SKNQF1qaoY03Bn%2Fw%3D%3D.HcfgKSEjady%2BHdavg51%2FgZKrPg7HYfNxNrrnL%2Bo7a3kiDLuSbAUr8fbna8ZrpRxRv6PRgqEIZ%2F%2BfxKEPoVbNhRRQxlCg8RNOD%2B4rm3vhnCLMKnJ5vHu5TUc5%2FWLy5j%2BrnRx0qlS8zBNYpQKEu07rl7Tdz2S1FralL2N9OdL0nbP6r25i1mES2%2B8PcWpKsAyd08Ge%2BZxpgwQbvIusKIHHTiUUcrbcPdIBFW%2FUTuLSMWu3Jz8T07r5Evbio3amNYGjjoTOCOi2hT7Ue9GAkiA7dunogpaT7dr9GMz3%2F1ycMDE%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��七):Kafka 集群管ç�†å·¥å…· CMAK</a> </p><p><a href="https://link.segmentfault.com/?enc=g804ycERk9sElXj97vFszw%3D%3D.QdemxZO08Zs4nnJE7VpaJTcK49Hwi4J6EZTUJL%2Brbo%2FUjvPacaryW5%2Fg46Nlkvoq4PTwggM69MKGVKpFh4Ovb4TX%2BSwRtDA%2FUkrV%2Fjii%2FCADHfjQZykPE858PNcJQlJ0O32gExoFbcMfPXVCfmLWOMlQzIEPqLPRg1%2Br82RH%2BReN%2BBkeQm5ghV43DlWbAUg8lCu%2F7wtbgE9CERgjwWZfotXfVOOc0IkaNYz%2BAOUXIgK7hre%2B8TNkEP6pWNfC6DxmmuuYPsOwrRfy07CZpA2o6IQ9c5riJgdzw%2FwucwPOiyY%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��八):Kafka å�¯è§†åŒ–管ç�†å¹³å�°EFAK</a> </p><p><a href="https://link.segmentfault.com/?enc=GqjaiPmbblrqzeSNWnRT6Q%3D%3D.d9HCp1xVEH6kt1Wj6YClUvABhTMxfDRuHB9%2FkejSjlusuCWQk4jXDE8NR%2FfQxfuMpGMJfBZEtiJrSHNOCC348A2%2Bx6BlxvE1YBXBxJcLaVtWZsexovPGVQN8TfXwqd1tAv38v6pQbzmvocxKa8uAZa6PogqvC3%2FL40aVQ6DKruVRiZiQ9I7tcqIpBZpcgCX5AEnEBxCpPv41b1JqoemZsOJygHEBQeYlfAH59tGeDhvMAl1BEQhAshS%2BHPcA7N3uUQOdjOp7HEDeqLtnowqAd%2BatE0i00b9S1UFzOfVTmdo%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(å��ä¹�):Kafka 安全é…�置最佳å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=xNm7YiDYpb9jI1e%2Fqk%2BQCQ%3D%3D.hd4kfNoimK0%2FJGM%2FEnQLMfK%2BGwKfahMV8Z3rB9IG6%2FQz2hGZZwAJgH894Aqz31y%2BekZ%2BUGReLhc0obcujoPvQ1DIbco49zOed3vKb1D%2FsWAUotLKQwzexeDXVXyxzbHa6nhBD0zn2g%2BSAkk7SAFTDyqAnqNy3bPkw8R9%2FR%2B0Kq5hGc5jXPlDTY%2Fr5cAIzBucEwXE13vb%2BBy7pZFDkOrs5smUvy4M%2BLrmaNJt5xLT%2FgmKNC%2F7uE%2BK%2Fu3iw7KXlyQsOBmfzREYb6mtjNz4qLt30vLdPqU%2B5qhHnUdXIvXKeNA%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(二å��):Kafka 生产调优最佳å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=HerHOkeqY0vYomyAZmo7fg%3D%3D.aBRzCbcOz9e1pfPxNsrPcyaz%2F3u%2BZZybqDXOyHn%2FElBPp4FgNYrc4Cd4nHQ4XNtTxQZGo0zgtZACQa6L%2F8h6feQokiRHjllfxsE7Rh0%2BVZ8NBsiEeviJUirPvEjMoxX9gQpQ0DYjzSfQ%2BIgbsT9GyJphguUpXEWp%2B6XoEx8UaD77SsZ20XaeU0z2u%2BKek8COf5nbcp99szDGJn28D8JuYgE5TQERiydwpwE3FyraU33P5H56C0wjrJ9zWOZ8uGSeFvCS6%2FA%2BFt3f9A3b4ESPvc5WHpPxMXM69zEyXi6ixAM%3D" rel="nofollow">进击消æ�¯ä¸­é—´ä»¶ç³»åˆ—(二å��一):Kafka 监æ�§æœ€ä½³å®�è·µ</a></p><p>终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</p><p>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</p> å�·åˆ°ä½�了ï¼�PostgreSQL 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023最新版) https://segmentfault.com/a/1190000044048598 2023-07-25T21:24:51+08:00 2023-07-25T21:24:51+08:00 民工哥 https://segmentfault.com/u/jishuroad 21 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=ect9NJSOoUH8Tao0lZrBdg%3D%3D.GTtS6L8TH0QYnIx7pMOir5lez2z%2BO4r9QPjBXpP8cC2obkbRWWVfgunJdKjZZECgI55jacPY1O7IIzBqf1HQwTJ6lVRhi%2FGkIS9cUsvzvjegInFkwWNu%2BQlq7omI%2FMOixroZVYzVLU3cn5ki7exHCKoUV599tBn4kyFKZJLpzTGG0hbE%2BK1yDbIixs1nDxmz77T4Algk%2FFHHrtBY8%2F%2B%2B9R4A9wZf9A5TAnIFfBTGdTcNRDzO8ao7VGzNlJCSGI2R%2Btpppnl1qnPgvNsKYOP4y4OoHDZ%2B70MaVpHYPUwIYjs%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=q9MUwYP8rxiZGO%2B2KGVzwQ%3D%3D.NUTbEbA6cejztMaz9kD0lc9H1i9byVK8kwhU4i0JrCyRAGR26l8DgHIHotVqOQPBTdTvDYaR0E8DRBI3ltO5IDx%2FTOmK8Udu4buDGwaSs57Sy8edZNJ9G5K1cxxcCvxfM0hw%2FItQ7SpoOPpVRZZq%2BDoXRXUxtIhrdzw7z2gp%2B0cZuXQFvB21mAJ8msxGRSoyaX0jJvElHYQgHGQ5ui2CBtUW4Jal29hP3R5GBsgTVRNa8%2B1qzKBlieNj4rxXX57buEhV27rX3MWGX3P81za59TfZ5UFiN4ZhEjX1LW%2Fw4rs%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=7kZK2QDDyygFiRQOsfLE9g%3D%3D.hS%2FvSn2wjSh%2BtoQ7OGc%2BmDJLu%2BsF8dIezGL0oySzEXbZyq5hSrXXkVn7DIzECjbjA4hUUoKHKDQ%2FqPHVr78Cut2lmw3sG4%2BcfAB%2F9oMPeWZxg55Fa%2BxVHc1rzYCudu9kczVeCcBXxCG6wgfS3zMJi0uXqKp%2FzHEzUTj5lGVDyu7nFHCt9eqZRjECVxWWwrmXITnwr3MhC1hAIIy0X67dmMOhSs4NYWbGKbnjjZz53VjmKHP3Fy%2BtMZ0AU%2BBLlKRBVrFs8OZwiLJAuD4Neo4EQ5UZb0XvSkq8qtkLyY3sqKnOaxRx1g7iFUCgqtBYFevCLhkJU7%2FAINXXz4pWwVJC8A%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=zn3fEH%2FXWT1inEVthA9jbw%3D%3D.3BQrWouB9lKyzk%2BlB6r7pzxPi4Y1nTHMfG6NElQluvyR7crvxg6NSy%2Fu8ZOkBXJEUkGftj2ClGxcKLwjeA%2BRklKEm0%2Fzfj0uiUXJhyLFZPy7nOifWuFHcX4Dzvqh%2BLmbJ0RDbb8Vv7JyKVVeTiTzg8JIzm3unnndMRRXp%2FHtFgsJ5f3E9adRgUunR4SP%2BJOmtajs58OFbeav1xFT9jjuKp3tN0K2e3uFlte%2B0Y4YyqxnisXZprRRteM4QJ7uYsTbipanCVkdnQEPNbAg2br9Tlb0FmbaWwxbamoPBiC4dio%3D" rel="nofollow">ElasticSearch</a> ã€�<a href="https://link.segmentfault.com/?enc=ZBQO%2BypOytkEyYD1pvTubw%3D%3D.OWL%2F4WAbgRzl56sI9XZbUWvtxoTI6CYJkO0B0M1TknbjLPZ32X8sK0KRs0nNqF3IEKbSlmKMmJMf%2FbsGKx7C4%2Fb8OX8jvX6DNTPf%2BiQ7CocRk7NZYGEwJpQTHBnUjhX96v73qkZqnaU0aPo2%2FUeLt%2BT74Nrc2I3j673O1F0nHUlbDmOSKs81sBzL2FUYhL0x%2FQ8NnlIZE4yG5cSb6RikanfRfVcIkGDUdCflpjFYWARqU27ohR0EP1in3o6Ehn2Li2UdhG3RauJ%2BN3w92zpuOXzxynEumMK69J8ftk0PHuk%3D" rel="nofollow">大数æ�®Â Hadoop</a> 框æ�¶ç­‰çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚截止今天,å�ˆä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼šPostgreSQL å�·å®Œäº†<strong>。</strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点<strong>在看</strong>ã€�<strong>转å�‘支æŒ�</strong>一波ï¼�ï¼�ï¼�</p><p>过å�»å‡ 年,MySQL 一直霸å� ç�€æ•°æ�®åº“æµ�行榜的榜首。但是,éš�ç�€æ—¶é—´çš„æ�¨ç§»ï¼ŒPostgreSQL 以 46.5% 的使用ç�‡ç¬¬ä¸€æ¬¡è¶…过 MySQL ä½�居第一,而 MySQL 以 45.7% 的使用ç�‡é™�至第二å��。å�Œä¸ºæ³›ç”¨æ€§æœ€å¥½çš„å¼€æº�关系å�‹æ•°æ�®åº“,æ�’å��第一第二的 PGSQL ä¸� MySQL ,ä¸�其他的数æ�®åº“远远拉开了è·�离。<img src="/img/remote/1460000044048600" alt="图片" title="图片">所以,ä»�ä»Šå¤©å¼€å§‹ï¼Œæˆ‘ä»¬è¿›å…¥ä¸‹ä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ï¼š<strong>PostgreSQL æ•°æ�®åº“</strong>。</p><h2>PostgreSQL 简介</h2><p>PostgreSQL 是一个功能强大的开æº�æ•°æ�®åº“系统。ç»�过长达15年以上的积æ��å¼€å�‘å’Œä¸�断改进,PostgreSQL已在å�¯é� 性ã€�稳定性ã€�æ•°æ�®ä¸€è‡´æ€§ç­‰è�·å¾—了业内æ��高的声誉。目å‰�PostgreSQLå�¯ä»¥è¿�行在所有主æµ�æ“�作系统上,包括Linuxã€�Unixå’ŒWindows。</p><p><img src="/img/remote/1460000044048601" alt="图片" title="图片"></p><p>PostgreSQL 是完全的事务安全性数æ�®åº“,支æŒ�丰富的数æ�®ç±»å�‹ï¼ˆå¦‚JSONå’ŒJSONBç±»å�‹ã€�数组类å�‹ï¼‰å’Œè‡ªå®šä¹‰ç±»å�‹ã€‚PostgreSQLæ•°æ�®åº“æ��供了丰富的æ�¥å�£ï¼Œå�¯ä»¥å¾ˆæ–¹ä¾¿åœ°æ‰©å±•它的功能,如å�¯ä»¥åœ¨GiST框æ�¶ä¸‹å®�ç�°è‡ªå·±çš„索引类å�‹ï¼Œæ”¯æŒ�使用C语言写自定义函数ã€�触å�‘器,也支æŒ�使用æµ�行的编程语言写自定义函数。PL/Perlæ��供了使用Perl语言写自定义函数的功能,当然还有PL/Pythonã€�PL/Javaã€�PL/Tcl等。</p><p>作为一ç§�ä¼�业级数æ�®åº“,PostgreSQL以它所具有的å�„ç§�高级功能而自豪,åƒ�多版本并å�‘æ�§åˆ¶( MVCC )ã€�按时间点æ�¢å¤�(PITR)ã€�表空间ã€�异步å¤�制ã€�嵌套事务ã€�在线热备ã€�å¤�æ�‚查询的规划和优化以å�Šä¸ºå®¹é”™è€Œè¿›è¡Œçš„预写日志等。它支æŒ�国际字符集ã€�多字节编ç �并支æŒ�使用当地语言进行æ�’åº�ã€�大å°�写处ç�†å’Œæ ¼å¼�化等æ“�作。它也在所能管ç�†çš„大数æ�®é‡�和所å…�许的大用户é‡�å¹¶å�‘访问时间具有完全的高伸缩性。</p><p>更多关äº� PostgreSQL ç³»åˆ—çš„å­¦ä¹ æ–‡ç« ï¼Œè¯·å�‚阅:<a href="https://link.segmentfault.com/?enc=ThEVOXsD2K3fhSOtrektDQ%3D%3D.gpm0M9t7W3Zqw2aQZzevomp5Vq4bqmmobz91FWH2kjHzV3FtfINJiynr75nQCf0BqzksCgpkCECDGi5m4FvSupRYbZZXVjMs1QgMwfSCm4SPhMjHO9AiUH0K8v4jv5R0R67VYnSpWLwdNdV6w9D0zaO0NXLWt4w%2FP9GLeMhuEsU%3D" rel="nofollow">PostgreSQL æ•°æ�®åº“</a>,本系列æŒ�续更新中。</p><h4>官网</h4><ul><li>官网地å�€: <a href="https://link.segmentfault.com/?enc=Dn97VzD%2BRJOMcqtYjBgCzA%3D%3D.pwjFI0vjOyC8VL9GsSUqdWbxThT39Ni2c7AHtE874yg%3D" rel="nofollow">https://www.postgresql.org</a></li><li>下载地å�€ï¼š <a href="https://link.segmentfault.com/?enc=1hudxqnCYXWL8J9HuZeWyA%3D%3D.5S6NF7dLs2XnsIkUwQRaVzjjFiYD4JugnkLCIZ4avaAEwUGekoIApfpbU88%2FSA5W" rel="nofollow">https://www.postgresql.org/download/</a></li><li>安装工具: <a href="https://link.segmentfault.com/?enc=JSumwxiPMjzOWPqOEeUwnQ%3D%3D.583Az8lobthpogvzZmTEmJDtNvHGp%2B9dMh6veszkOCNXAdmaSHTWLtr44GMsTIHf" rel="nofollow">https://www.pgadmin.org/download/</a></li></ul><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><p><a href="https://link.segmentfault.com/?enc=7l5rQe%2Fjd3%2BhwaSGHBieVw%3D%3D.5wWtWWsKb4YTFB7mT6FUj5Ax5tAqkoJ81Y2vMo3Lxoy9v5BNNMyg9ped7Cmpk%2BbI%2FJ0By1djlYVFGc0qATlQU2a%2FwU00EVIOFfNxL%2BSLQOIGNYtDV%2Bmm8QTgGCdKPJ9NA7bg5jSKL8iadHJAYzMExbc1BZelI2%2BPVreY88Cx2MwFO3kRTfba3%2FiyjjZEONGVC7lo0POcafVxPvmkVxeUIWfj5TPTqPot11qSzssP%2FRFdVUlMpBU67j03gaFr2pdWJBNFqvyNJkEDE9iM45ZK9kgsj%2FbuZdEIPA8oFDToBWU%3D" rel="nofollow">进阶数æ�®åº“系列(一):PostgreSQL 基础入门ä¸�安装</a> </p><p><a href="https://link.segmentfault.com/?enc=a3Z%2B1XkYCB4Cjri0FD0oqQ%3D%3D.vfjGNLBviJPdHLdDPZ7M7nlQ5%2FZorbY5jPiBaedyvX2aZsKj5mXnUH%2FGTlaMhBozIAfzIfgNz3BT5Eb4uBRO5x1LTxIRSbEogVFcerr3V0aEJENvbfhmV%2BM8WVaEyznSJAiND%2B4ZXz80Edj%2F4hPBlK19Gvufteky%2FUZ4oi1uQwVgH%2FbmWD9gJRgbPkPQEKM4IjXLlVVGz4AtrPOP1PKHTg6JTxutZp4XBO5WV4HruPy13OGcu2lbVqNYGJnmDKxwdJn78mmWLq9xcZWq18v1l4loShTFFEOnc2LvfOSEERw%3D" rel="nofollow">进阶数æ�®åº“系列(二):PostgreSQL 目录结æ�„ä¸�é…�置文件 postgresql.conf 详解</a> </p><p><a href="https://link.segmentfault.com/?enc=d4sJqTfq8N0OQj33AOXzlw%3D%3D.bKX1v%2BWsj95ftA2BpOxx7BX%2FWfDaAX%2B0zomwPuWZ3QGBnX%2FvEOXjJNVZPOBQISvDno00F%2FNm9rlV%2B1ChO9tZLTAB6CE4UHVkGyQ0liX3%2BTJKPVLYr%2FQAx%2F1IZe8keukOcdT5Z8Ku5KcXDETsyurS59SKA6V%2FZpXZ2mlITsZTHmooJKdGISOZzsuiXsEDhw%2BJEJau9ujtJQM6ZlZY%2F5Hc31AwE9%2B6T9B5%2F8xwp8v5AmlmzONQGhvfK6iou%2B8%2Bs58YzKLtFDlWxvRda7wkuB7%2FY9T4Nvh%2BJOOrScnWzAm06U0%3D" rel="nofollow">进阶数æ�®åº“系列(三):PostgreSQL 常用管ç�†å‘½ä»¤</a> </p><p><a href="https://link.segmentfault.com/?enc=DW%2BrrznldIOjUgevgUQs1w%3D%3D.EpeOjyMIxd8XgXQZfQgUqUFM4EMvnOD0U3CELSqp3%2B8aerjFQHyb5i8%2ByJtyRnuEelHlcCNkeSsYYcZMBtQY%2BtUO4BaJ%2FyZLH%2FFyM5fzJ%2FOFP70J0peYBQrVEtaltLIOUuO4wv3LHt8p4lLWt5T4ACj4AgLFK6FAbJYd3VFiBz3jx1OOZjR3qJWZbgJQBm6SHH3033r4DpnPRy6MVxl0XCuEdZlJWHQxd3c8rUL9op66Snhncc9DFuJwoHPt05nEiZtZcVudD2wlEcMIiiQhAGpKKjiklimNYc0YqCHruws%3D" rel="nofollow">进阶数æ�®åº“系列(四):PostgreSQL 访问æ�§åˆ¶ä¸�认è¯�管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=56heHem%2BwpOM6pA%2B7h4Pqg%3D%3D.SE8DpjCCRrQ65lwo7ZvufwjMSXUfCAxFft9G2Iu8jWKVLZUvBBIaHQ%2Fhf0XBvftsJYC0zqdSJAKUrUGDeji52BfyB0h6oEXsqkMCjE4cojQaos%2FA7%2Flj8BTV3M0bIkPgsdVdEa1Iwx181HPfVikDWsBi2Un1C55sWm5Tksbh0fOPyHQq%2BI4IB%2Fh1q6F98orU%2FJodwskkvYkQVJ77Lxe6RDvjHhQMetyoMvzPiwX3IwQCKT5zS4XzY58wCog9lnBeHtF7n0bCSK22vAATuV4v90Gm5LddvV2istno1R6qURA%3D" rel="nofollow">进阶数æ�®åº“系列(五):PostgreSQL 语法详解</a> </p><p><a href="https://link.segmentfault.com/?enc=jiAMjIU6F3VlLUMANfxrIw%3D%3D.k0Iid2ofK9AphrwWN3u%2Fnk0tiQV%2FdiA4e1l7AiRKEny9w%2FDAYT%2BpPtNKaxCLmrWumWxoWQl2hzd7zHHb3e3gNaaWuHPb3Eng%2FiK55cS4t%2FbGISYftgf8cY%2BjknHNDYytRZyh0bsW2goI6Kauh8yqxmnMfr0Iltc2%2BlHckOa8%2FDq8T2S6qPu661OvS0b2obDjYVRRZxbNTHmoAk5J7UPNdL1cKnno3fSq5kn48hqjv3xKsZitRi66vvHAC%2FKZP9AqKN4rgthbFEOXG0y5EvOR0%2BM1s9tBmxPDjpmzpEwuRqw%3D" rel="nofollow">进阶数æ�®åº“系列(六):PostgreSQL æ•°æ�®ç±»å�‹ä¸�è¿�算符</a> </p><p><a href="https://link.segmentfault.com/?enc=15p8ghwo9EbrpiCjRoqjuA%3D%3D.qjlXQbz6NlysAZ%2FGYe%2FhRWI8oYiQWJMqXl0H%2BKwWdj9O7uXNIEfOSimudtxK%2Bei%2BdU%2F7W4eawZO5sRi1HqXi8Ius49pcqx%2B%2F%2B5r6jEZYh%2FaE%2FT9BScxPoVm%2FypbyD3JE6mA3ZSI8njoOnFB8wJWGVn7AIblZFSYwqAKAdIXugWNGaFRKC5%2BXaksZpjKSR1mtD0mP7CX7Wtonke0zl1D5%2BN6kgWoP70S2OJxB1vXLBWP4EIJEkam1CsFg2llKQP9ZRHpqj909q3U3CPrNszcbuNKTGc15701Ta60KJLYeF1Q%3D" rel="nofollow">进阶数æ�®åº“系列(七):PostgreSQL 常用函数介ç»�</a> </p><p><a href="https://link.segmentfault.com/?enc=D9VzprvdkbeLsMv5dGNISA%3D%3D.NGBsdJRgKAZhn3kvdDuzgCHeKqiKIplMM55LLtM9%2BfxwJpQ%2FxHk4heZGQRaz%2F62HdjWiADe2HA%2FMuyPhVm%2FnR9LNwWmDzIAb0x2b6EkYo94YLpCVPtvnkzkMTQV5%2ByaFU0Fnj%2FOTMRyUSnlPIvJIKQDTBi0yrwlBA4FVr5QcWcQv46w5O4FGQAkQX1hwhl3IwDS85RzMz7zRZKTtcNGq%2FhmAUDmyqaB3xSK24BPF1%2BrY5PfnxloRolkiiV6x9N4WNx1V7f3%2FcBcr5qFZJlFZw4KkayU23ijWDa0y04t5DI0%3D" rel="nofollow">进阶数æ�®åº“系列(八):PostgreSQL é”�机制</a> </p><p><a href="https://link.segmentfault.com/?enc=%2FXQ3%2Fz3zL4oop84v7PwXZA%3D%3D.%2Bs6Y6myJfs51vvRgI3Bl9urqMzaTCX%2FgBJ21HrrznZE4dQArFgg7ciUbgaHWIt4KPl6WKoMaIlHJkAu7V8l5W9NUyZclGJSUuN8Vde1SGb9oXv2ed6YLLWyFFJzFbhNtgJHa1bnbphjt6Biwq4yMwTApY9bbbAd%2Fyk1o0jRsGrt3ucS3SrWhSr41%2B8pLUZbNIn1mUa2ebA9SLrgJtYZvSRMoAt2EJQhjuSiFmeBAgB9KLMZhKxan9mJsBAxpCaGmzV5PFiY%2FClOxRnpF31a1aNvajKAfbnEtfVJ6MyxGJro%3D" rel="nofollow">进阶数æ�®åº“系列(ä¹�):PostgreSQL 执行计划</a> </p><p><a href="https://link.segmentfault.com/?enc=fvcsYnWQoLMkvfXtt%2BUsXA%3D%3D.OE4t1p8oKAU4IxW4lCaOy7lkdEBvtBPy7Kbj1fVqKbvcJmtSFDQ%2B1mX%2F3pdnz0ZFfoUPHGxj7OfAoywRwkVgS8zJAZyU4%2BhiK5MvarG3V1k2ggRV0mWDIZ0HmJs6gaRG3lrna2cedS3tjR7etBAc2oTDNv9C7l%2B%2ByhH8nUHfCKoOJ0gMWwMtwaHqdMPbzX%2BArSBqu3o0UTb%2BgyP6g5rhaNvi%2FR5SLUzpu97T6ITH4H0UlbJTMCDkICWUCRydZJRv3D49DvqrCXtvPHYn%2FJlyUbe4RtEaTSidqvvEtRiNAug%3D" rel="nofollow">进阶数æ�®åº“系列(å��):PostgreSQL 视图ä¸�触å�‘器</a> </p><p><a href="https://link.segmentfault.com/?enc=iGu78SRQN7JN83ZscmCNAw%3D%3D.xA0IwfRYTT5rR6%2FVxLWRUZbWoQw4gqCvlHeIPQk4cA59gcdI64%2F6WCWoT2QpUdZ%2FQhngQQBAi1kw%2Fb89NRVgQN3zeQJpTNKj6krykmnPGbbzfF3ZJ29dxlrVmwH6PNBPQfRqjTidr7RdvNq4%2BQNP6%2BDpahg7DWDW3sZJ1cmqOdMBwn2Wme5lUPsX2Xhkyvv%2Fom47y7a2yb7qlJSMGg7s6OCjlWgDXnRIcoERiAA3O6Qg7JcFnw5OndL6ZCDrJWfJnt6b0E90Cfm1PBEXDPFm2P4fpbQLwUgE2PW203q9%2FCs%3D" rel="nofollow">进阶数æ�®åº“系列(å��一):PostgreSQL 存储过程</a> </p><p><a href="https://link.segmentfault.com/?enc=ynUivt9X2yXkGqTPwOaPMQ%3D%3D.B5dJ8D987T4EKfo3asPTLpq6OYQ%2Fdx8H83VdVn5IGiohuVKKLJok9qa0GRToFfgUG5kcfO7IOPLp79sQbbp8wyc%2F13LfbssazYeh8SK7ZxvTx1TzIWgwyLSm90TPZLHZ9TgvgOGCEXDsOA7YN2S8EPQ7eYi8mviE2mo3%2FaITgbDrvpXoMYPQd%2FRGRNH90wsYzFuigAHuh%2Fd9lNovMyM99gRb0PbaivuGpnuevjpBo3ODA9qWRwWF%2FOff4P2fS9%2BJLOuITz%2F8b4djpSTy3V4bWn%2Fwd3JiNRwf4dFUMKLeexs%3D" rel="nofollow">进阶数æ�®åº“系列(å��二):PostgreSQL 索引技术详解</a> </p><p><a href="https://link.segmentfault.com/?enc=t%2BIxl7Z7W5teTNUCWB9x7A%3D%3D.dyqZK5fM9rmhEHpV8mo40UP2QflViyHcctdQTTEoVyr30VP8KFK599EVtZ%2BYc4XtwkJRmNnTLf9451I%2BaKmmPDjLshwCDPh4KxgQMkPVxf7o%2BaMo3ypLVCaBI09zbT8IFjV7f9gNtt0odZqYWFb587fK4v3hVGzrx0Iz6C4BGCqOP2r84jx81M5oRcmfJk8xTWt%2F9EoS%2FxfeNNAfBx1kpbBu1G4X12SdDYmT0iw8ukyKW5SzruFcC94RL3Z5SToGPrGCt6vFiddmP928xGHmvBtnZKSn7NorRh4XWYSFJ3Y%3D" rel="nofollow">进阶数æ�®åº“系列(å��三):PostgreSQL 分区分表</a> </p><p><a href="https://link.segmentfault.com/?enc=La%2B2IVxDhA0tagCCOdGFog%3D%3D.pVd6Ll53Ol55vjw3Iba%2BBYjVjrfs%2BfEQbouHv0QaJMlnGvd34RlWCQ36HaBKmD6TThvWST%2FT7sbG1G98yMtqKIIes64qU0EplFqzf3zcTdv%2BkZBBgdgbm6VLhh5zRfY1l%2Fl%2FkgnqDd2iEj8Flvvwh5%2FrC%2FTXEOxguQvtAXoNbuj4x8fjAb3Nf7fXW6X0qeYiaasaCkF0de6LgpjVrQ3Oxa06yak%2FMsFDIkuq3hGI7oY3fDWmxUzvKgzDwmp7wWQkIvmqQPmSfo8pJIYwaSgcMPbTAGcT6Y0xS8eiGgnFgs4%3D" rel="nofollow">进阶数æ�®åº“系列(å��四):PostgreSQL 事务ä¸�å¹¶å�‘æ�§åˆ¶</a> </p><p><a href="https://link.segmentfault.com/?enc=y6q48lir9kPm5An6qxJATw%3D%3D.xP1Lbda5cLDKP5wcVX6Xq0DuTTFkXxaz1PDFS%2BvPXjShBKdHrVEeXt3UnWk9yFsXDeCpARRNyHLcMBxjtIJc2ttYixaecbYaEL3QrhErK%2BFeBkiIf004wYXGWBWN45iybzyQb5FbCHARqsbSNn958YQDXOnrjh%2FGsuCh%2Fv%2FMncycNU7UTxdqf2YHzsj4gTmW22HXqALfGhPvVwaWL3QDvhY2YAAcqy3YAvyhV74WUQwiC6flmYChpfeC1XfxUY%2FfVolmlx%2BXvw%2BlgABvPhFFzn1FdY2C9yXHCZ51lGqRpoA%3D" rel="nofollow">进阶数æ�®åº“系列(å��五):PostgreSQL 主ä»�å�Œæ­¥å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=vlUjb3Ou85AX9uQ%2B0x8%2BRA%3D%3D.%2FRVfyxLR4vcDxnMIwGvUZfEkRbOCxemzAO7p77UFviAnbxJQ46hdU5b5Bulppk%2FIs2r6ork662ersRFwbEwUKyWritz9N4PtieeWT9vCHZjxtas8Dfn1bmsFuv08Dr4JEHMJ3Sxd81pYUjnXRWakf45fxCkzqvfLp9pPKeKE%2F0zif0Csi3j7m6Grmd%2FcEGk5Jngb4HhCYpPDcxvgphbSWk0ufdsX%2FIfrcHGymN3bfIrZf8PMfx%2FYFP33GhMQ2tse8C48W%2Fj6pEc%2FNlpPFjSDYGG1qoPsqFL%2Bah3tZSRb7LE%3D" rel="nofollow">进阶数æ�®åº“系列(å��六):PostgreSQL æ•°æ�®åº“高å�¯ç”¨æ–¹æ¡ˆ</a> </p><p><a href="https://link.segmentfault.com/?enc=HfquM3vgPyQ%2F62AeM0VXLw%3D%3D.JQ2gbzVnwvW5Av6a%2Bh6V6k%2FA639J1cGOccBEKpfTCW%2F1YgKDwryHovZYTrxhI84qHkPfs%2FqMSC7rXm9r8JLGUJeeHVHaz6ertqy9d3hSX9iKW67bwqcxhrZwDOdXzci7P6wTBrUWJ08jtJAYhE6f7olpwt9HowuGZb8TF3naxIt5zZneQ3eJFYc1kgU9411SCZ549h3f9AEV4WTEQe6tqDQFlNokcvOYRJrvnfXON4ReuZsUZw4Jaiy0UDIAmt8KpT6mQUu2%2BXFFCzVNTJD%2B9TgjldUTisSHSSx%2FJC450aw%3D" rel="nofollow">进阶数æ�®åº“系列(å��七):PostgreSQL 基äº� Patroni 高å�¯ç”¨æ�¶æ�„部署å�Šæ•…障切æ�¢</a> </p><p><a href="https://link.segmentfault.com/?enc=HCLtkZ8p9ro8BAiGXbHRCA%3D%3D.vscRIC0I1VCAFL0eW5MCcgEmSR%2BbXVxkTT7NBQXaBsY5Q5h41BSRgLv8T5x%2BckLdNazCxzZE6wtv%2FvyH0f4GJAyinSGgocURjKMZVIP7rL3T%2FyJAWNObj%2BteoSYYhp3JNC2XRBLhKFe37YJNXRmQzqh8lKCOgYz8kehLsX4U1tnbq7O4FajlSXyHhjwdKeKcy%2Bz6dBbiGCNZVSjY%2FThgCmf7EMuA5WwEveqbeQgujX7OMJyNzKH7%2BIxtkVf8gM5S1PBHA112IoVRj4rWv5ZI0oaCurBoqns78XVHyAQZnSw%3D" rel="nofollow">进阶数æ�®åº“系列(å��八):PostgreSQL 基äº� repmgr 高å�¯ç”¨æ�¶æ�„å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=IUsV4YMb5FYD1V6nRVjW%2Fg%3D%3D.BlzpGu9rO98P583FXrOoWY%2BEqbN7VmrD%2FQbtBWnr3uZuup%2B%2FTrWRAdUDYykPJSXVgSmX8UESstVge9DMJZXDiMWZfbdcB5rbjJ9nbRnaTYd2X9VjAmxOlCUBfkZmRpf4Y38%2BKz9hMDbVziua3gBjuHwE%2B7BUYvwyZ2zsC4h42he4rgBGbqzBsxD3MQCPdDNXVziIGTBxsb4JUce8Nyn7WASjJcvRC%2BpBHTvaO%2FbIHo1bITv%2F%2FsG9oaPv9GMYtUh91SONBikNI%2BMiosiLBa%2FoioY5DiIcOtrq%2FbnjjXHgFd4%3D" rel="nofollow">进阶数æ�®åº“系列(å��ä¹�):PostgreSQL 基äº� Pgpool å®�ç�°è¯»å†™åˆ†ç¦»</a> </p><p><a href="https://link.segmentfault.com/?enc=rmbaYs1OgBA%2FFam4PR10ow%3D%3D.B%2B%2B0gHIhQ5M2GajTUi%2BF1GubZzpFp18%2FBbsICj8oqOiROqCIDtAPyPq2GrIgRcqLjSWtG9tv7765rrZWMsjDx%2BC4DBBS9JeXTywKkpLTtIPacmMZD0XdQSJ7kjxopMAUSh%2B6ZCJcjD14TxJP2%2BLDEavPj0AIWBL0UHA6WUhmdvZXEuAHbQcO%2BnyjNDT%2FD%2Fk94vbZOAeIRo7HommgoKX1AQgMd1O7uyTPOP6a3YWnIljs79Te5qA7w4qy9NQPL0jFKTvtMhvJ9aT0I7abdMDwoH6HHCiI82PTpicv%2FsgNs8s%3D" rel="nofollow">进阶数æ�®åº“系列(二å��):PostgreSQL æ•°æ�®åº“备份ä¸�æ�¢å¤�</a> </p><p><a href="https://link.segmentfault.com/?enc=1gjeBS7M64jbopJynqWn6g%3D%3D.lw7TzuNhMzZnM23glETsHo%2B0HGxZKgyDajDMmfJEmrdV1t2XAEmeFp0UiPXMTBkkZkygrz5kPu9nnmqhdNeaD32j06%2FACgREyORO%2BLycpXwmO00dZuvk9PpxUEL7RK2hCX40fb1JoajmLY6DOhgh%2Bm5H%2BIuH0f2F9FoXK2Ap1cGQEtqIPjqh2nKrRKCewEIbvkcUQdhflEw0XrlZBb2vTXJygJQMROvr7b10mBLRY8gn6k%2FYZgoN0OB%2F0nTt9a9OYffmPKSWR%2FjfBgBx6kh809Wybysk2%2BUbEYZJB0t7lFc%3D" rel="nofollow">进阶数æ�®åº“系列(二å��一):PostgreSQL æ•°æ�®ç›®å½•å�Œæ­¥å·¥å…· pg\_rewind</a> </p><p><a href="https://link.segmentfault.com/?enc=8F2DVSKtYpE1559SLfnCZg%3D%3D.tZ4hrFtZ9u%2Bpb4MKl07OTACd8XC0cUD7%2FoIaiL2spCw3E6zHaa6LpwLhjJpaloMsDA3C%2FFdyAgD7zG6mJndWR14Ry3fSOYVUwRDihiFyWzYcIKFKCTj1TfweB0RxAJ5WWhfxA2RwHjDd6lTtE2cqfVsxF0%2Bf9TB6IynZilcF7xjbwwWtmeKTdMDi8urmfVMqIsNVSvDeVlkuzuPe0wbvbZlPHHaLk82D5KEolmUa2j%2FX%2B0RfUXAyghThM%2FGOF4KdLw3kKWANZI5TmYV7qUHzjNEXNmVEPxqDWH%2FmxzGAj7s%3D" rel="nofollow">进阶数æ�®åº“系列(二å��二):PostgreSQL æ•°æ�®åº“作业调度工具 pgAgent</a> </p><p><a href="https://link.segmentfault.com/?enc=WYLNbILucpKnTUuqsHY3lA%3D%3D.yUuNdXrM%2BWDAxguBluXk3qkQ3OXJ0Xal8zzMlZ%2F5CRIZYdPhkzFIfs79VMqOzohkpVC35NaOba3ZIRMGzIIRtMeRnvxhYAtqXRGYFZPj2OBfhMg%2B%2F5W9A9MGaXimiE8fFyfm7O8Mtrfpf%2BZ%2F6MY12k8jicQu2s1zi5e5y17Ehl5XBi1l0u0QKv4GJMu2rfTPZKI6BX4HDTb1vwBDoYNwvFor5F5rZ62JmnHRU9kjHs3T3fdBYSTKO7%2BZES7AGkJGKBuzO%2FJfc2Yx59PuVgt1PpebmcOLWSQGOv77fKcMafY%3D" rel="nofollow">进阶数æ�®åº“系列(二å��三):PostgreSQL 性能优化</a> </p><p><a href="https://link.segmentfault.com/?enc=stJ3qXdhs4MnQHl3ks3K%2BA%3D%3D.WOxVvETd1wZI%2BDLz8OVgScA0txTroxoizQrNlhv%2BcRujHyGV4haxG%2F6JhQQ9CwUD37dxo2KaS0xzazh55sMCJ4kb9UjQpNnSVdZMbdpKUWh3ISwmxkDgdFcjjP0ZIJ4Q%2B2GsrbpwHVHuP3dHx6EQWig0s%2Fcbb70zTI%2BbPCYL%2F73Yz9vpQDygtW4%2BH8ml9TyIuIl8NkR7%2FCrS%2Bmh%2BAmEUTcItOcc9eTPiz%2BHuuxwpBMvsdhFn4a4gQn0Qjz8nB2yidnjZ7ZhpHP8J%2FJ3WDbjL%2BU5KpM%2Biv4EmSYtfKBQpI0A%3D" rel="nofollow">进阶数æ�®åº“系列(二å��四):PostgreSQL æ•°æ�®åº“日志ä¸�日常巡检</a> </p><p><a href="https://link.segmentfault.com/?enc=rsHvAbomZN%2BolQYw3TRaBg%3D%3D.7gYWOgTEa0DNDK7cUUBqKRLGktyEa5JUQ%2BcH71w5ua5fO28aBF3aHna8XdCShGEJELLA5V%2Fqd6o67aBrFlkdurs6WnTJsihTVjCTTPMQiXQvTdtNAQhZAldNAFaJWBeicnC8t2K1HH3G%2BTmTz10S99pCzxkQCe%2BlQ5D6l9UV2HhU44BvZPsjK2UfuRDBX7%2BIDP1Tol4QPVCuwH%2FldL7Y%2Bil3yFAY4MwEuk8yhCM8a4NbNPXM6fdYyf01EsX%2FnWdjakxI0OstXNrZIAMNz%2B7yyc%2F36DxZwgGep10IFDcJscI%3D" rel="nofollow">进阶数æ�®åº“系列(二å��五):PostgreSQL æ•°æ�®åº“日常è¿�维管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=tkMMzM7EhZnFBfyteUnp0g%3D%3D.DsAz4CNoeTBOX0a%2BimmH0oc7WJE%2B2Eu3Wrmy7B3Slvbxu2eQ%2BGoVg1ikT%2BxBmiHVCbQEODoCx20xzkpQ%2BIOpUEisiJjTLG%2B%2FfV4wCaeAYnt4x3mrbUJgiHVjMBXEqDr3%2F8XvmxRl9kefbAJWOjWZcx8aheqPX3VaMxSmsuz3v6FAusC8uuxcgvlrkB2AcQeBRbrKLFVh3VZ%2BaEaXKtUd2vRiOnzu5hLK2IplS2XnzYN7KqW3zdXKxdRe778TLkNDn6hQcTPy9bXkoXApe1xHVMISI9%2Bwc9aDcXJuzIEMKqA%3D" rel="nofollow">进阶数æ�®åº“系列(二å��六):PostgreSQL æ•°æ�®åº“监æ�§ç®¡ç�†</a> </p><p><strong>终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p> 终äº�è‚�完了ï¼�全网最全ã€�最详细ã€�最全é�¢çš„ Hadoop大数æ�®å­¦ä¹ 教程( 2023最新版 ) https://segmentfault.com/a/1190000043945295 2023-06-28T15:59:04+08:00 2023-06-28T15:59:04+08:00 民工哥 https://segmentfault.com/u/jishuroad 7 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=sRD6xgCsffRY2xiyugSZzw%3D%3D.68eaSIQq6YA1JEnrBY9W%2F9f8sz81Oo9%2FoLzecbzxFB1%2FjibydVl75ceyegdIKWmPI%2F1VBlj%2BVueI15j7VstMdoB8EQpA1rq4PymwxEVFmx9MzKJEda8vgrzHeZpQTcKBWxFUfBITXlNMSvCk%2FMV%2F5MNzHFWUNfYtB94eh8pX3MY8FpEjUYeE8QHTQCgvsAAjYVXzt7GV%2FFf0lA7Aj6C31vRTY6zOUMMcOY%2Ba9q6XXcQyia5q%2BeqpFjATAK4XqRUvlIyTnV5t%2BupqXnmJU0x8O%2FTuIhL31bX7i3aBErxlrIo%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=miuQrdigvB7nGmh42UIZ5Q%3D%3D.LnYuHVlR%2Fbm9QlTnOQG3x69ZUhqN2TydG2YJE8rDRY5LjUTAxciCldByfZ46yWqCryeAUbP7w%2FmUTrmL0s8YQOfpNKX8LtPIep6h6FVcAQMdTcnFxNQ6AX%2B7FbfG21CzUdA6oI5tOpkFDgWSwi3bisbdYwPSibFmel2h6zLlt1%2FkA1LHPLLjeO41Bm9ZbQkXh%2B%2B5Z0OYmTXLCbvOgFpiFORBdUt4xYVT3rBemVE0mqmsrkdWpqu5jYauaY1yFiSkmS%2FEwTavRY%2Fw2A34%2FAQEd5lxMgykXDbS8v68HspM3QY%3D" rel="nofollow">Redis</a> ã€� <a href="https://link.segmentfault.com/?enc=HVbyPmJMvqZSTWDOPO3RmA%3D%3D.IiAcHKndw6dChzD0FnJYfGmyTyb5W9G3%2BuuDpgiRqAGZMcfpB%2B2CSISD%2BaNzz18IwkZ9UeFRL2P%2F%2BxY3ZQnCj8L2vg5aTvRNML2r%2FMdoqqjXxNWW5OANZsMyl%2Fm5d6sry3brjbEGd773uU%2BfgGjMT2G0FCKnS%2BEBIxj0kCOz5%2BEbX%2FjWk573pRUZVWVfID6NnNKHvks9vVbGyFy5z9S0t8tibsb8jP3BIJlDvF19x6UsXG0RWtjT%2FLx0c7seHWhX%2BZ97VWlVIHe9FGVWW0qIAbdKWcP3D3Lg7HdsVGMTjRCaw1lYVdNJBUN2v3S4E6AySCknGWpliKOwcXeOO%2FRacA%3D%3D" rel="nofollow">MongoDB</a> ã€�æ�œç´¢å¼•æ“� <a href="https://link.segmentfault.com/?enc=BKLskCjNonOXiO6csKS%2Blg%3D%3D.64fEWHY%2FYRcwoLFR4NordWQLhh12IOeHqhIHC3htouiEvzrKor%2BxsMfRGGcIE2%2BBOD8KcZM3YW1ZOam8iKYTGwHcUd4llOcW%2FNbfCLjI%2FxqIFfFdZgxN60jYq7bhuAByhuhTZ15wEcnmMziZSVLPlarsCzqbJMndFYrhlA4NQc%2B2k6IttuTwytmda%2BvVtqYaa8lqcXgkqRnCj5U3BHpVoDFYosy7Raq1ZB1HOw4TNSBu3GJzrYUT1GuH%2FOb78aX4LRwoYAbA5zwWFbg3gTbHhprcUoDRS6ezxiXXx4Membw%3D" rel="nofollow">ElasticSearch</a>Â ç­‰çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚截止今天,å�ˆä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼š<strong>大数æ�® Hadoop 框æ�¶</strong> å�·å®Œäº†<strong>。</strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点<strong>在看</strong>ã€�<strong>转å�‘支æŒ�</strong>一波ï¼�ï¼�ï¼�</p><h2>大数æ�®æ¦‚è¿°</h2><p>大数æ�®ï¼ˆbig data),指的是在一定时间范围内ä¸�能以常规软件工具处ç�†ï¼ˆå­˜å‚¨å’Œè®¡ç®—)的大而å¤�æ�‚的数æ�®é›†ã€‚说白了大数æ�®å°±æ˜¯ä½¿ç”¨å�•å�°è®¡ç®—机没法在规定时间内处ç�†å®Œï¼Œæˆ–者å�‹æ ¹å°±æ²¡æ³•处ç�†çš„æ•°æ�®é›†ã€‚<img src="/img/remote/1460000043945297" alt="图片" title="图片"></p><p>Hadoop 是用äº�处ç�†å¤§æ•°æ�®çš„工具之一。Hadoop 和其他软件产å“�通过特定的专有算法和方法æ�¥è§£é‡Šæˆ–è§£æ��大数æ�®æ�œç´¢çš„结æ�œã€‚<img src="/img/remote/1460000043945298" alt="图片" title="图片">在大数æ�®å¤„ç�†ä¸Šï¼ŒHadoopå¹¶é��是唯一的分布å¼�处ç�†æ�¶æ�„,但是对äº�大部分的ä¼�业æ�¥è¯´ï¼ŒåŸºäº�Hadoopå·²ç»�能够满足ç»�大部分的数æ�®éœ€æ±‚ï¼Œå› æ­¤æ‰�会æˆ�为ç�°åœ¨çš„主æµ�选择。</p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><p><a href="https://link.segmentfault.com/?enc=qW90%2FQiNdo0XuAMz7zPaeA%3D%3D.%2BO9tQATGTCOv7%2FUOLhBm6dKaxWP9R5KAFlQogT8aY%2B1msOTEs5nkRKuTKXuMCbUNyCUhCIKtOOYHnLNRF%2BDQy9vr4%2FaGR1RGorVY8rkfiEcXsYvVwgTgPNCHQ2Bs%2B%2F9eO2LuPiSHCIrvqKK38FUUTnFhrhPoC%2FaBHY9MPuUFbGJoTDYYkoSAuxckxlN2mTyhi%2BXtRYdG9ks%2FsPQxTJhYw7GyVImYEQtLs8g3tPPvx4R%2F1Xlp3DY9qRN3%2Ftkq6KE%2FEIm23bsltTo1qzrCFl6O%2Bw1%2FP48q2rn99ZOjJRmLHTU%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(一):Hadoop 基本概念ä¸�生æ€�介ç»�</a> </p><p><a href="https://link.segmentfault.com/?enc=GUSndt4mXydzcFC%2Bvbb1tQ%3D%3D.ULNWDRJN%2FqB2UvceDja06hvlAFfl9jAxfPrfOCzKc3DJqxhFtVxAhTy%2FU4945JuzezIpQDM6aTS6CMyFdFlLS4O%2BXHJ81IRpXPu458624JfgDrSKQyg6np6XV%2FORyOaUqrHBDNKSTtNq9D4o3%2Bjn05r%2B%2BbSUcQQHSGBFqjpMfiYsXFD7%2BSK13KqxROUzcqI4exTWHOtznyqQu2%2F7NMnpejzOb1JAaZQH%2BzveeLEvhnxhIYwEKRcJDRoP0Kz7vHaLG1d3Vt2gbWxEX1SDCnwRhbXX8zECR8JNwt7WflLXuzY%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(二):Hadoop 安装(HDFS+YARN+MapReduce)å®�战æ“�作</a> </p><p><a href="https://link.segmentfault.com/?enc=%2Bbi4uL5T6N8msvR2woyVqA%3D%3D.r%2Fbl%2B8EFDLZ5rkHFD02I8puRRkFOhMFUiep3ZFrVP4ENauNqnB%2BwzuY6MeNPiV%2FjQ1bsnLR4L%2BuFmORGJCEHH9b6%2Bz8sWSxhal5MbzqhkZhga3ReX6Sm4txfErMlP3U1FLUtn%2BXkADaajdCAhkbx5T57tMLr%2FJfJNwXmjM2Rbnf8Tbm%2B2UM%2FCkuFP5%2B5Yb7uQqnw2A5bhx6hGCeamcdA4p5jhWBrTVcYmK%2FO%2BFISE4ibLPufUPuruldYHQrFmjf%2FFo6RO6Q99ahhuWia6DtqZS4ORDiCCpUlfE0pHC1vX6M%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(三):Hadoop 常用命令介ç»�</a> </p><p><a href="https://link.segmentfault.com/?enc=2TNFEApyM1IBm8u5HcWCxw%3D%3D.x39bFuGVfmu0uAWP5hY%2FPoRnFH7pUYf1e0xWFBkFbGK6iPs55QCRc5EcPUMQlwI1mlaOBr517v9IMOmp%2FRJ6NcsOTGYLMX4co%2FnpWPX2ZddmpYrRxTWLF9b7RvIdTsTXSRKoid%2FOPXJG%2BefG%2F7Vq4xRyS7Qng5v2R5X7%2BSqKhUTh%2FDsqCvhvXr%2Bt%2BdQlVAkM5%2FOj2jLNzMvnROrVBChHU%2BfBvdbk2z3I5zniHZnjEDUZf3dIfPoXixo7q4QlC8yvPslZl8vjNM%2BGK%2BVsRJ2%2BZiOlNUg6AFPTwxSfdjpzbW4%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(四):Hadoop æ�¶æ�„基石分布å¼�文件系统 HDFS</a> </p><p><a href="https://link.segmentfault.com/?enc=lfFKvgHfOZbhSDvlMpKqaw%3D%3D.zwyYC%2Fsm6IUcKEPzdf1%2BK3q1nR3KVpbmP%2Ffh%2F6khRfjHiSPR5Y3ZAjRfxl1ZptM%2FkSllokaALkFFj2L6Vwmu5Wt8hSi4rXXpW6xPDRJ1FW5mAZwxhOxpaS%2Fg3pwahhEOBlBLMHEbaXGtZTcjBREoY4%2Fd86%2FlTmZ7oQv0%2FHcWcktMeEIQU3SkEcVW%2BQtGj0sa1neHYXH3sld3EwE71FXQWZg0oldCGuDVQL%2B4fDVyauxo9fgTtFTOXC6D6hJjg%2FuDS3iWg0EMW2sV%2BRbDpFn0gXwTtv3UngqB3HTKv9QoyLY%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(五):Hadoop 统一资æº�管ç�†å’Œè°ƒåº¦å¹³å�° YARN</a> </p><p><a href="https://link.segmentfault.com/?enc=a6kXqwO1NIHVX%2FN00UrD%2BA%3D%3D.DWrz6nEAjWqnqMEMsht4xWtVF9sIxIJRHJwg84fn58GcOXcM%2F1lCit20Pab1RxB79Rz%2FW8Uj14ej%2FDoknwmIxGXHnRcTqKfICGGmSjwGFckxErinJsQeepzBpYU4wGhvjMZqITNHye%2BMknvVP%2FkCWYk%2FW50zKeY1ONfCNVflJn6qTMZZ6d3thzg4Hu%2BoTVqWilcTSK3grKdhDjdAzJKD1ErlCRZnsPkUIbekr8m2MgEs5BoXJnDQ8UBCMF0tk16xUKAPakTogHTt0QslxCwTxygKv1z0xOTDuOPci%2F%2Beq4c%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(六):Hadoop 分布å¼�计算框æ�¶ MapReduce</a> </p><p><a href="https://link.segmentfault.com/?enc=3%2BgbYCcmx4PwDeJi0qlPJQ%3D%3D.pFsQUbQHA%2FmNJ5vQQmOfztHJrIpzeQUyBJTlfX2g3EeaT%2BdeU9NtjshJepQq4I6vpjU00zJWzB4XnL5HVoul%2Fzb88WQ7z%2FuV0hBxjrkFhUQUB5uJbOi69IMTFX6v8zOvvd18EqseJWKPCk4bfeJQQTsMSCt19XidMJCwozGgBaNkPq4ZiBAgs9FqRfSN85aqXpT1eJaDxWYp%2BMbbWCy5FADafjsCYFQ%2FPnqz35YeQmQwP%2BRV%2Bwd6vJoZ68lq%2B4iKnpohwYx6aoJNp5m93XOczTYUEDFBFOq8e8N%2BYeu7Lfc%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(七):Hadoop æ•°æ�®ä»“库 Hive</a> </p><p><a href="https://link.segmentfault.com/?enc=%2FzZGJf0nlFZnNnBrVyZIPg%3D%3D.dYhhdUkW27GlROeA%2FbNusiCKJxr7iFgP503E3GpH%2BG1ENnfbab4Cx5HL%2BG6Zx1dosvzTFhtOnuqP%2BMp2ev0vNKnvaqpjQ3mBPCW5B4tpS%2FtH1nOm5RXmya3xB91XJmI2TacOwUp8bDBRo1XD6jEfaTP5IahQTYX0ThryKSv9R993iTm10xVPFdE7mCttvgIP5EL3rJ%2FhBBeXEvLysfpmjMaKB3%2FLC9X9ydmJPXmTzMGHRpi4mJTMl7lwUHfZn0z7CIQnbNR5dTDJb0ABUWtV2pEIZHbL0UdtfqbJUD9eHP0%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(八)Hadoop 通用计算引æ“� Spark</a> </p><p><a href="https://link.segmentfault.com/?enc=PvhYZ3U6R%2Fbss0mcrsY9Wg%3D%3D.tlKcvGPvv8Yan%2FmI%2BXBXJAhfb6OrP0jaLvMxjZTKbM6W0e3xT2slTTl%2BQNSah8ZCHOnqrtwz%2BVWOywzwZj4fXQlE5IjxR3fjkPnmdb2rhg7Y7eO0re62VBk8HL%2BWAglRk3aNc%2Fb5xb2WZS0VxqVnREDAnZtK7NhAqLZYXtS6LXIKGKzZb3EMJ9c5EMlnML5ETTJAEeV%2BLNYPjilgQBM6LDd1cpoj2ZKVqU%2BKCMOoxf6%2BozCT8OUVPJGaY56TSbgXE8lPeB8NdPLwS9Tznq50CCKOtVVtiXtpc3R8AF4Rlpg%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(ä¹�)Hadoop å®�时计算æµ�计算引æ“� Flink</a> </p><p><a href="https://link.segmentfault.com/?enc=df0MaV%2FF9LOMuzUx1EfiRA%3D%3D.RUdekSpgtzMrRywrI1E6q8gFZHQvpiWnBhE%2BbTnPuOKkXrv2lVrDXTFR%2BUyrf%2B6AgJdzrQ1uXKghQk0oqJEpX3lieOcqSul2RNqzpkDYp68mt5Sifo8TgQbkEf8gmXYlnPcdSANPVEGK6j5spQVlAkaLnlvJCu2ujtVotsFwDpIWfr1IIbJ9tB4mnO9pDwagvgylLiI7eW%2Bqg7A%2F%2FzG%2B4nX4W47zjF6Xu4CyNjc9nqKFTooMn0v%2FRbZbpS%2FOn%2BlmML635XkTghFXigM3EQzaIpOE9B%2BnXvmTQloS53LQeTY%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��)Hadoop æ�¶æ�„æ•°æ�®åº“ Hbase</a> </p><p><a href="https://link.segmentfault.com/?enc=%2BeLrwDQIhOBJqdV1LfCHFg%3D%3D.UB18AHZw5WQytcw06tR%2B1c4EFJx5evfSvUiztVqwexArSjqMaftuKfajYRgM5%2BM4ZgusN9YHcoTKlwvh2RzSjWlkmFqrixP%2B2tuTSl7tc5jfpJJRn2UrRXi5DEi%2FQuFMI2MDhxU64mOMbVGYLHfOl7pdm16H%2Fq5l10bd%2BAA%2Fc5SYTYwy%2F7jiFhwPOogjCYP5Pwr2a2vnSLqqY4cZFDEqBEk%2FRWty6WqcRrp2vLS1ebX1iwuhhvb6FYItS7fEjq%2BwFotEUHicYBJdtxuLGX%2Bpq21J%2Fd7lr0A4JNR7EUWPOvg%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��一)Hadoop 任务调度框æ�¶ Oozie</a> </p><p><a href="https://link.segmentfault.com/?enc=GIc2EIna39965HgVNKtTxg%3D%3D.Xu%2BAAAbUdadJfzAdLadUKUhVmLzN%2Bk9%2FLK11Q4Zdxv0wLjxD%2BGyIY72IWKkznGclGE2fUacWJDwVqH0jNGpgkZjlpW6EYkCITunzrlTW5gXbpujJ2YA5DpI2BraBY9qqBrkksPjpAxK6mEb%2FmM4HJUIf4vROHbIHla85leLkJ%2FucaGft%2Fdz0q6hWkvIjlMaobqRni3uo63uFCd3zw4PfLO64thLuCY5Orh%2FB7Pdu2rJWBZcdj3kDByVXGo65zaGT%2BP8%2FejB2wvBHcs3kE0gAdhwcHl5DqtBStfF%2F%2FxksSo0%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��二)Hadoop æ•°æ�®å�Œæ­¥å·¥å…· Sqoop</a> </p><p><a href="https://link.segmentfault.com/?enc=NC6%2B5%2FlG0LJxdagtm9CU2Q%3D%3D.Ytu3j%2BRmCTE9gBUiM7l0uKr1%2BXkYoIwg22D4qyw1orjR6S%2BS5oHIkhS7PU%2FD8ECLBp4e1SW%2B0llLaJsNRGDFe4L8WlW7s0zT8p3elONlNQ6bbAFUUbTLot3Iw0sS701denzN6EuzWKeQpTKfjsKuteWfwGhnT%2Ft2tAAS5F%2BTuEsY48o1uGCXODoWNAAPajQVtdlyCneAKyqKZOgOTt21hRoykVNskn2Wd9HyuRBHWWZHGNE7U5ZolRZvs0qo8Yddkqd5quHfACJlryEEVDhCfdPh6G6y1S5egp6edg1ax7E%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��三)Hadoop 分布å¼�日志采集系统 Flume</a> </p><p><a href="https://link.segmentfault.com/?enc=cubCnr%2BzIAajuEpJbq0%2Bnw%3D%3D.xaeS%2B6Y7uOyOp5S8tcXSDfZJCMlyGqse0%2BHJ2%2Fwqdsyu8UUTQ9KIiuwKUsBUJlphVfX9BkHA5ss%2FBvCA1t%2Fgu%2FzWaHdB35yihf3sQDfF%2BSr7JTm1vUrM%2FWjGY1Yp0wjlHLy1mV0zHS59DetdtcOvfaVRm6QAZfF1wXbCHtLPZKG4D8dV8zgsYqG0DZMi5kLMmOix0lq5bhkrQ81av6OcRpzkLq1rxHGaneP03KQouz496VdbZnAjdPNAqDMhcNd%2FL5jyiIYGNipPmOxpic1E%2FjaNB%2FgYXvkiEG4QubgynGY%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��四)Hadoop æ•°æ�®åˆ†æ��引æ“� Apache Pig</a> </p><p><a href="https://link.segmentfault.com/?enc=a2OJLo8aYdil%2BF23JwBJNQ%3D%3D.GG9ZugA%2Fs6iXEjNqak80JXGjiw8PDdArpsxOcqG1%2Fbgl5mfdz6P1esFXJLE2MxSRXCdOareoNZWZ1FJ8doEYASxRmnliagnP4amx3h9T280PfHCS2rQQJ1qt5Uvbm7xlP90c3RbF3S%2FVpeqWwGFj7dyb7E3BqzLzW0xNhXv88bpC1puh84s%2BXt%2FP32DfPykBvvaFGyTn6sCEOATUv%2BhemWOeKQ3JZDwakWcEz9RjVeeftsQC0f6glnekefDEQw%2BOQp86os%2FZ6oXwOgh9YRKjydLcpzOC2%2F2aRq2pyGG6S%2Fk%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��五)Hadoop 图形化管ç�†ç³»ç»Ÿ Hue</a> </p><p><a href="https://link.segmentfault.com/?enc=jgKpbnjQZRg9tU%2FyvFAo7Q%3D%3D.dwRZfHE1GhhVqdSJQseZ0a0NEAWSDbdUE1OQDZyLNm%2FMul8JHvqPCsYIfg8oHdKXxoos1GM4Fdn%2BRm2LtbUvfDwh%2FwwY0v%2F2zIOHBSf1hUiuA4GKz6l5P5oT%2BOZGIpxH3tnliiuwO2ZzxJWe9NAJLqFFOpTPZLcYAsZAVUUazF0qBO7TM%2BZhHsG8L0jafyIZq00xPBtAZwATPUKJ9qyqLJLNVzn8nblwZwadfcdd4JrZwS69o%2Bx%2BEgI9fXMBRFpAAMYP1pdoDXXl7N3A5JsyAcZIfuAjGXDG9B9n3l0XpSw%3D" rel="nofollow">进击大数æ�®ç³»åˆ—(å��六)Hadoop 性能优化ä¸�è¿�ç»´</a> </p><p><strong>如æ�œæœ¬æ–‡å¯¹ä½ 有帮助的è¯�,欢è¿�点èµ�&转å�‘,这对我继续分享&åˆ›ä½œä¼˜è´¨æ–‡ç« é��常é‡�è¦�。感谢</strong></p><p><strong>如有错误或其它问题,欢è¿�å°�伙伴留言评论ã€�指正。如有帮助,欢è¿�点èµ�+转å�‘分享。</strong> <br>更多相关开æº�æŠ€æœ¯æ–‡ç« ï¼Œè¯·æŒ�续关注:<strong><a href="https://link.segmentfault.com/?enc=UpcLCTothrJzJBJnFZLK5Q%3D%3D.3Ro1aZdeyZ2nxrzJ1smjGrqKIDpanHRKCpCEna2dryxQ1ldDXMvSJ91axgjeKg32080kHD%2BsZkpm8nzJMkv70oLwL%2FLX7JQmQQSJd3q5ry54GIrLzVFQ5rSg9hn1eFTi%2FIIb1SK5ZA7m5SeYkk6q79NFMcXu%2FYGjY52Lx4Uv5ZueIDPeh3ioStsiVcinbK1dWT5a2LaEflRSn3A7scFQYlPWDjSduAGyzzivK5z6mSoPojRoIPiR3KYut9bSfCr6s44cI8fr5lgp04m0hy0gbA%3D%3D" rel="nofollow">民工哥技术专æ �</a></strong></p> 终äº�å�·å®Œäº†ï¼� ElasticSearch 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路( 2023最新版 ) https://segmentfault.com/a/1190000043886875 2023-06-11T13:50:31+08:00 2023-06-11T13:50:31+08:00 民工哥 https://segmentfault.com/u/jishuroad 11 <p>大家好,我是民工哥ï¼�</p><p>å‰�é�¢ç»™å¤§å®¶ä»‹ç»�了:关系å�‹æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=6zfiFPgYFZa1jJTmXaweCg%3D%3D.CpUrxULY7ABx4C%2B97EXXeran49bCm8qCl5%2BBWG4NyEnZKkTHldA%2Fnk19mI2iAxShX8KlEVuJPkuzSGkaVW1r5xNL2wRREGqugM%2B2advA%2BstSTyUaxuHKLsR0qEey9aHFnsFicMuTZB2AjMXig1F1UuHC5D9sTW7q4SuAlwEy4rRVQusDTqqzQjKIYrqqcQQGvLJd3ApAesI6Y7viStg0tEG6nwvksNfo5DKECEcmrthkdBLrMu5GFFipNZyPKJOtqRFO1p0QFKeRxmPDVrdXtQ9oerfTLFBGiwmYrOn00c4%3D" rel="nofollow">MySQL</a> ã€� NoSQL æ•°æ�®åº“ <a href="https://link.segmentfault.com/?enc=QYuomvr8%2Bnk07xmYEsHaDA%3D%3D.KTByyPkjo6qJJPECX7z7vRC%2BtxbgERh5aWAiNICSDWYpBdtHazPKDnVbFTcCthU9x1S8hVu4dQM3vhzCPNxqeo38kBoBn0YpMsQFDs0YCTgA7PKRKEbPhnykKGuI%2FlQ5LTtmBCYexcXBApIY7%2BRGp%2FgkwudiLEh1T6baa5fCdcGpjqJGxiBKru59Go4htQIsyAexDAES%2BCcgOUjOWMkC%2FXMNrm4iA7fwtXqNczrZBz2rBbOTZ7ZbiEnuPXsGQZZ%2FRQUiBl%2Faa6YVRW8z6XvYtgcW8lJ2HF1cGzATVH0jfnI%3D" rel="nofollow">Redis</a> ä¸� <a href="https://link.segmentfault.com/?enc=tSA9V2Iyt3RbjZGxXYLLeQ%3D%3D.OELH%2BPBTzN1GXTY%2BtiovFb%2B7uw3jhuV4zsJbuk9bHIGu3FbmFjYk7PmC2RyG2cXMpsaN15FbiTyvgYXznNo33ex4OI880nMaA6QgptSoegRkwH8h89sh%2BQM2OM%2BsptuXheBUumxaAQIiv%2F8CflaKE8%2BcUe7xkFEQZmqnjz%2F9JuwcJjRVzOGWJY1rwAg1w1StyDP1dcgiqGQ2wgSt12Hxm2reNCEwByMYBASsjROYla2SzNX2bnbaOXSS1UaAhRWX6b3%2FaDL%2BzsTnIT%2B3MBqgc%2B%2FU9Gu9l1TpGjemQuVNtFIAUmsPXUPARqswgffSFILxflmldG08CDcyeog%2B1F%2BO7g%3D%3D" rel="nofollow">MongoDB</a>Â çŸ¥è¯†ä½“ç³»å­¦ä¹ çš„æ–‡ç« ã€‚</p><p>åœ¨å½“ä»Šè¿™æ ·çš„å°±ä¸šå¤§èƒŒæ™¯ä¸‹ï¼Œ<strong>å�·æ˜¯è‚¯å®šçš„,强大自己也是必须的</strong>ã€‚æ‰€ä»¥ï¼Œå­¦ä¹ ä¸�能å�œï¼Œå¿…须一直å�·ä¸‹å�»ã€‚所以,ä»�今天开始,让我们一起å�·ä¸‹ä¸€ä¸ªçŸ¥è¯†ä½“ç³»çš„å­¦ä¹ ä¹‹æ—…ï¼š<strong>æ�œç´¢å¼•æ“� ElasticSearch</strong> 。希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点<strong>在看</strong>ã€�<strong>转å�‘支æŒ�</strong>一波ï¼�ï¼�ï¼�</p><p><strong>边学边å®�战系列之æ�œç´¢å¼•æ“� ElasticSearch ï¼�</strong></p><h2>为什么需è¦�å­¦ä¹ ElasticSearch</h2><p>æ ¹æ�® DB Engine çš„æ�’å��显示,ElasticSearch 是最å�—欢è¿�çš„ä¼�业级æ�œç´¢å¼•æ“�。下图红色勾选的是我们å‰�é�¢çš„ç³»åˆ—è¯¦è§£çš„ï¼Œé™¤æ­¤ä¹‹å¤–ä½ å�¯ä»¥çœ‹åˆ°æ�œç´¢åº“ElasticSearch在å‰�å��å��内:<img src="/img/remote/1460000043886877" alt="图片" title="图片"></p><h4>所以为什么è¦�å­¦ä¹ ElasticSearch 呢?</h4><p>1ã€�在当å‰�软件行业中,æ�œç´¢æ˜¯ä¸€ä¸ªè½¯ä»¶ç³»ç»Ÿæˆ–å¹³å�°çš„基本功能, å­¦ä¹ ElasticSearchå°±å�¯ä»¥ä¸ºç›¸åº”çš„è½¯ä»¶æ‰“é€ å‡ºè‰¯å¥½çš„æ�œç´¢ä½“验。</p><p>2ã€�其次,ElasticSearch具备é��常强的大数æ�®åˆ†æ��能力。虽然Hadoop也å�¯ä»¥å�šå¤§æ•°æ�®åˆ†æ��,但是ElasticSearch的分æ��能力é��常高,具备Hadoopä¸�具备的能力。比如有时候用Hadoop分æ��一个结æ�œï¼Œå�¯èƒ½ç­‰å¾…的时间比较长。</p><p>3ã€�ElasticSearchå�¯ä»¥å¾ˆæ–¹ä¾¿çš„进行使用,å�¯ä»¥å°†å…¶å®‰è£…在个人的笔记本电脑,也å�¯ä»¥åœ¨ç”Ÿäº§ç�¯å¢ƒä¸­ï¼Œå°†å…¶è¿›è¡Œæ°´å¹³æ‰©å±•。</p><p>4ã€�国内比较大的互è�”网公å�¸éƒ½åœ¨ä½¿ç”¨ï¼Œæ¯”如å°�ç±³ã€�æ»´æ»´ã€�æ�ºç¨‹ç­‰å…¬å�¸ã€‚å�¦å¤–,在腾讯云ã€�阿里云的云平å�°ä¸Šï¼Œä¹Ÿéƒ½æœ‰ç›¸åº”çš„ElasticSearch云产å“�å�¯ä»¥ä½¿ç”¨ã€‚</p><p>5ã€�在当今大数æ�®æ—¶ä»£ï¼Œæ�Œæ�¡è¿‘å®�æ—¶çš„æ�œç´¢å’Œåˆ†æ��能力,æ‰�能æ�Œæ�¡æ ¸å¿ƒç«�争力,æ´�è§�未æ�¥ã€‚</p><p><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></p><p><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点在看ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></p><p><a href="https://link.segmentfault.com/?enc=pM4LZSx23wsBslT0b1wfBA%3D%3D.m0FJgAzmoH%2BV2rkrh%2BFTvQaL9%2BWm8EIABB2Q8isCVAjXs1dt3k3Lw2wvujWIbhiJ%2FIX1%2FS6%2B5ugXqHAGvw%2BV4o54LvuQL46wXO1i2nMGlZ75foCAZ5GqfIaCxwSrJUaF%2BNrEbTXEdTjAVIsOYfGx3n%2BJkNL3vKtuOkCw0Vea1DjmjVqqBY6JT7d9pyXJMBooJrvtBYEH%2FZRmkvv4KEkPqks2uvOZdLaALLqYk%2Blqomime%2Ff9DCB9bCFyBGs7Yz2BDFw4eNahE8O9W2aUELpzFDKQQyP3SLbFmDHwLS%2F74S4%3D" rel="nofollow">边学边å®�战系列(一):ElasticSearch 基础概念ã€�生æ€�和应用场景</a> </p><p><a href="https://link.segmentfault.com/?enc=2SVZw%2BOt55brdP59psqJmA%3D%3D.CmcV2tfrR7BG%2BqOzaUmlwOIvaQ96XFCLbu%2BwLXz5dZz6utwxNIBivin7qWTWaizUMBiB0q5gpcDJlEroURb2e1mzXrU97rp9KnNxVr6e%2F9roruYC0l3PIMSiyz47JWTYCNVhoWLn4BFTraCwET%2FpnYQbWQJJfu3ZDM7AAFpBAWYcGBZB7DZB2Jb2mXem%2FNPyaVh5tjsL3zkhyxtc0CW978JF1vEGQ9gwrX2hj5qmZRB97ECisWbsVqC4cggSrlX2GCcl5LFRdI4E11tt0DzLFbLOqfpdNC1GrpdEiBm125g%3D" rel="nofollow">边学边å®�战系列(二):ElasticSearch 技术å�Ÿç�†å›¾è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=hMydMHpYRF%2FYimpyBoiIKA%3D%3D.Q2hmMAUxZg4bLwmixQb3Z82Gw76PP0r7klETmjzpJO8y6wsf%2FgDAnv8YEa9ticmqcOfukT4QWzP6pb40yJuGmgELJoYI7SzyuM6gfSxjGDAHyFPJSHWXVOnY5FfbR8yqIFE19ZN8TZoYLxbI9klIFf6zxUr2VpsXuNnL7uc4esvC6KePjSx3qD76A5w4H4OnwFPpqB1Tuf%2FhlSnrbHKa6YpwhW%2Blmyvsf9wfSOLrEw3HqmnjoZ9IKEpXs%2Be86KN8IviCtMuLXMXDRZ64JUndsGs6X2CFvkF9ptsK%2Babxu4k%3D" rel="nofollow">边学边å®�战系列(三):ElasticSearch 安装ä¸�基础使用</a> </p><p><a href="https://link.segmentfault.com/?enc=f0jlyLHAEOaHPoJsWXtl%2Fw%3D%3D.q9RVjj8kkhf5ZebgGglPb3oJ%2FTsBLbid0gxr%2FYMHTba%2B3RtdW3Qy4yBsGZ6iGoluErk3zn1auULn8O4JqLteD8tCsGPiDQ86kq4OIaVv%2BLqR3YhW9%2F2yr38WZQS9MfmiiQYUBF6gr%2BdjF2kbjrZ8l8QZ1czEbB%2BBNrVHmR0nkRX821cuEwDQrZ3BXKTWADZaxg7jhc55Olco8ZjCpfcivoKIAYr0Gg2p6ejsjryKjr%2Fdb8VX5HiLL7PtlDxSbIce9JkXHLLR%2FNRYZlEj0uTZkJ2gb8stgym3igqx0dpqcb8%3D" rel="nofollow">边学边å®�战系列(四):ElasticSearch 索引管ç�†</a> </p><p><a href="https://link.segmentfault.com/?enc=1dDzW%2Btpc8FRO8eCJaZwdg%3D%3D.bHHFY%2Bdg3eN%2BRKPMCLpw6rzUoGYk9KSasFcFXpIoVXcuFwPEM5t1Db9bWXVfASer0lnXzCsdYqVGhMDmTvNQALW%2BpwuN%2FVE48ZNDrbEH3Kalg1ONdcrahfngmuPWqWRa1bGBhEhGda7yfyme2KCbwWUKMUu70g6eYjmlgI%2FJ93r02SGalgplQOqAFqV2g06ckYr1UlyVHrqXfxVjKtd8A9h9Z%2FQkwePsBrcgB%2F6CCNmcTx6pJbCuqxyuvWH0LKn%2FbJ40D%2BZi0FSUbrrERKrgtGMt5UDq3wWDbE1iXC8RiAw%3D" rel="nofollow">边学边å®�战系列(五):ElasticSearch DSL 查询å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=gY%2Ff0Yct7jb%2FKMUmCIxQpQ%3D%3D.aAn%2BlrfbTMqsRcXre55OulIGKcQ0R3QPU3Tmvrw8mxww4GKAxGCXHiYO1N%2Fzm%2FSMQnjGXwekVlXeWeDgxFECPco4GKrDymbpwg3maKW1PquMjaj40PQIJ6nnqRiVKgZ1LJVA329ODO%2FhRg8fWsCyvl1QMJTE2YA0oGXxFXTJ%2F5w0TDTaypzHk1ZQ8EfNPdJpE4932mlbN7BszKBoELJ6zcjVh%2ByAh7BbjC3WCQY54AQAQ8lD5ES%2BCJ8MDTh92p0yNjfab7QHZjTRDCFrsIlkF8%2Bcn79dhCzj58jGRPnAkYU%3D" rel="nofollow">边学边å®�战系列(六):ElasticSearch è�šå�ˆæŸ¥è¯¢å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=4wanR6qtIdlXkqM8Ad5ZZw%3D%3D.4WBfaEKw%2B5FE4d0SNELgDXTUyVCJfx5hTKQFtBSjozyQjqkzrTgCQTGL%2FpucWizZyo6dySvcpXITX4zijfc4fRi90jVf9mRFTyzXh7jIHqm8HaiNBzrSaWAzkKTVg4rjp0GCITKkxRNXMAz1lLQmpWJdqFXwzZ0sbpd6Wv88%2FUSyD8UdZuJKumYyJyzCbR1M9taGd8%2Br89Svp5w7BPEvssG%2F5RRELY0p4ZSFYs1Hx%2BcL9zw5BRi6%2B%2F%2FjenxxR3pDQOwSYEwikhKM7Lm3p%2FsT8BRLK0d8f2f%2FPVTEmdO2sbA%3D" rel="nofollow">边学边å®�战系列(七):ElasticSearch 文档索引ä¸�读å�–æµ�程详解</a> </p><p><a href="https://link.segmentfault.com/?enc=r9PBv8qTiJSn4yh2gzadVA%3D%3D.1bhh5LTrlTz3FuPdMEq%2F%2BSNzlzmyFOZmF4gnnT5dq91T17kPKR71CO7k0gykRntNeKV8aF5CM4p2HIZzfcdME%2F9YoUZjuyDZ6hHTYMN0XOaDBNQ9aIPKFmUV7xtPO0Q7P3WIdux5p%2BY3uLpSH4YsojPvvlxfV2cs9a%2Fp8mCwU0Xt5n8PKhWwpocwqsb3zMxGw5uRj6BMBU%2B4J12bvhVPCJszWwBSMh%2FoPtTIBtfzpDcALF291RoFs5IML%2Bs9E%2FYGQ6HzNNZWHt%2FKJeQIjAexFG6K4iA2%2Fcgir0dq%2BwTMJ40%3D" rel="nofollow">边学边å®�战系列(八):ElasticSearch 集群部署ã€�分片ä¸�故障转移</a> </p><p><a href="https://link.segmentfault.com/?enc=3ntgjAsB8XAVglioCSnhCA%3D%3D.Iljup4GUVVuq24sbhRT26gqaaDf93QAoBRJrQNy1I5n%2BO81Dh3eOvFzE8HKIau6EcHN52cFs27hC3WEfFrgAa27YLj2qHsjiLxWg%2BD9iczQ6vQroIgKnGVcY%2BrMGFFwh1xvfcDkFGLhZ5ImFCHqXJ3V%2Frm2hX4nl7vVRG7bu58Hk5kI7NueP6ZN6C3OSJkhOb8qwVxP9B5pHbDPzYu00AI32PolvO0Fn8P5DbUmaYyc27SFoyowGc3X0txnpEqrhMI81qpU9z4fBhMM%2FTlv77QZQSIa81ZXPzlA2el3TfD8%3D" rel="nofollow">边学边å®�战系列(ä¹�):ElasticSearch 集群规划ä¸�è¿�ç»´ç»�验总结</a> </p><p><a href="https://link.segmentfault.com/?enc=SUMFeNyclPsgRq%2FFGS0Z0Q%3D%3D.IEFqEWwbTcQdLoOq7mnu52HQxkyDrMGov4StuW24%2Fajfe%2B%2FQjN6IvP5S4f2sERtHconvE6Y6WjbtgPY74%2B8oK9wN6nv7QJkdPX9J1xn46w%2Bvk4fHLhK0TZpJ7zU2wOmUoX8aL9hVJ%2Be1orC9JvPMrlOz%2FSvx3sh5q6IprF8lmzPWCgYVS6OBdRhhwHRs4ycrM11%2B2WMBiAnMvIN94yJolyRxAMA%2F567XI8mPSoZzRF%2BnYLc%2Fdk9331QyzkEOWETw%2BJtNLLfCYcp4ErRKBFdR6hpIR1c%2F3H9yMl0nAD2bESY%3D" rel="nofollow">边学边å®�战系列(å��):ElasticSearch 分片/副本ä¸�æ•°æ�®æ“�作æµ�程</a> </p><p><a href="https://link.segmentfault.com/?enc=N%2FW0KV4tdxeVGm%2BysvcpCg%3D%3D.WOhDI6E1rkUZ%2FyM53A%2BIJpAKnWm5WJN2eOLxUaFcrMH2HQ41uOEDAnhyhQLZu6ZtFFgxC6WmyR1YdC7rJNHIBROh00VlHKEEZC%2FkKUfXicp63zSMS87S08zYUgcr8iaSCgR%2FFqtjS5P0Bym4vAaLP70ompyhRcMp3sPlxHSxRJRXdphuZDdqw4FZrprll%2BPDR0UL6DzhpUf1gd7tIUAEdbyJKnIoMbENYisd3BQtOD4sRdJ11W1uvK7JjljZE%2BnurwxuahhG75JTfKin9SmPuo9Hi0PPBWeDM6ikhINgxX8%3D" rel="nofollow">边学边å®�战系列(å��一):ElasticSearch æ•°æ�®å¤‡ä»½ä¸�è¿�ç§»</a> </p><p><a href="https://link.segmentfault.com/?enc=xH%2B7FkYuuUkBaS0aGbEEzw%3D%3D.EkOffxON1ZeUZzSUsvANKFOtkc58c6o0rTxnk9bweKrRjh8DcGDXgDpn8xLJu8cr%2FPHEnNrNSycGtw1euWQYz8a8NnpZz1dugQn9FMdvuJew8nhl92tAvoo89SPhfzpmrTOjByhLISJLlNdPKfXccCs1xbZTfYrStqJwpP%2B%2BQIdZRCj3fgRRhE1snOlu%2FCvCBfxKDQrBjjS7%2FvPdfdqIttonZHM3wuoV6ZFvxZThvoyWDGcWDzq3bKl8N%2Ftmu%2BDq0%2BE17KCtEAQSEUOQc2bhl7%2FDwQB6%2BbDFCBtmttQU1ms%3D" rel="nofollow">边学边å®�战系列(å��二):ElasticSearch 常用 Curl 命令å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=GtRI9k5YbRJ26ByAqli85g%3D%3D.sMJwz1bVWWzem%2BMYU%2BoljPW0xcDqe5iv5fL7U4vJt8l2YkQLPPRqS0wvtWy9BEArl28KpGi8xPQo%2FGVnNusHHlBOI%2FL%2FV537xloOyS41USw6yRO4qcfA0zsVdQo57eLn6H2o4FmnOJIHmJasl2Ospirfrzjc0OOthh15VsUoCIcjSAiTjpAVm13JlPQykTO3e2LB0468vsfOjkdtzxuShEMLHufMM3w7CbUAAsuS5NPCoPw8kykGCGrpxDox%2F55K2v%2BTBJduYjlXr%2BitNVqsTkgND84dEYuUy6aQI2B%2ByZQ%3D" rel="nofollow">边学边å®�战系列(å��三):ElasticSearch å�¯è§†åŒ–管ç�†å·¥å…·</a> </p><p><a href="https://link.segmentfault.com/?enc=EjPP4IoY0D%2B0yUmXRCihYg%3D%3D.hNdb6xJsd5jaXhvNO8bcsb6rHBYfkovxSTOW%2B4rlqneqbV8bh8LriHxvUqWQfl6GOdxmpyeAruO0VdE292p6Lu7qM9nwFFErepTxFpp%2BrUH9N5mdAlXAMygCXFaRioSmTaWupbZeDugvHO1W99mdpJfM3TDOsOjq41S5z2F8SqTBDCY%2BMxplgC7bJX7HiM0Rcdx1ufhpvCs2ZV4WUJuk%2FT2oPHTPpgVpa2p8RPOz3g5kqpS%2FmxJlJlAYAp7s0Q5kiIg8ns2pdfXElEWh5n%2BkvfT1cnVhOFSNn3uKTMW6phY%3D" rel="nofollow">边学边å®�战系列(å��四):ElasticSearch 性能优化详解</a> </p><p><a href="https://link.segmentfault.com/?enc=Klp8BpBtpZKzAXesYmsz1A%3D%3D.O2n2qZxGXqMF%2Bfz68drSAW4AjzEnkhF7ElhLKI75FicpPh8sV3tAtukp8OBrZDK0LFrqnskHvDTP48QZ45kqWxglcE%2B6pw9XM4YXFDh0XJgoPHh%2B5%2BKwYBd5eXXRI8peYhg%2BdOLM%2F5XWIfUOe8%2FgHAbbFlmlo%2BTPbxOSJSkH8VP1rStXJEMFpNBr7ddJhqqAfHj2w6e%2BBDV3Dpo%2FE937TY2NUR1tfXmvdMvz9Tp%2FzP%2Ff57i4rVNCpy9DaPZficitxdAAW2H5i7BeI1hmbzLqh36%2F5zB9L5chGQhRnvdxymQ%3D" rel="nofollow">边学边å®�战系列(å��五):ElasticSearch 性能监æ�§</a></p><p>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</p> 硬å�·å®Œäº†ï¼�MongoDB 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路( 2023 最新版 )ï¼� https://segmentfault.com/a/1190000043831522 2023-05-26T10:44:58+08:00 2023-05-26T10:44:58+08:00 民工哥 https://segmentfault.com/u/jishuroad 13 <p>å‰�é�¢æˆ‘ä»¬å­¦ä¹ ï¼š<a href="https://link.segmentfault.com/?enc=XMnPer5bdr%2BFcDDNHbGcoA%3D%3D.I5ZDd6Gs4y7pmk5Gd%2BdJqmV1XvE%2BfAAfZY05j2i1teDFaifsjgygV9SbWW%2Fh%2FIlbXxlza15sB%2B7LtpAx3dekp8hWyi%2FqZ8PIE5JB76lhvYe89DRbcw8acv5Ga82B%2FUxT8xoUGSPWFtcrDIbBLycRGHsy3Xn5WCSNR6Wc6yAWjwwF3TNTpy5V4%2FRcOIkOrmNfuqa6oPeXDD%2FrSEwI1t%2FPOEG8F7i77%2B0rMEgF5zr16ICEEWQWUDkYvXQNjV8mARHDqXuglZW5XEtpWlgR7bDe%2Byk3pB1UqegNwRGpsE0snVY%3D" rel="nofollow">MySQL 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路</a>ã€�<a href="https://link.segmentfault.com/?enc=1NIg2kLiox4r3N7mn%2FmX9Q%3D%3D.0sbNdsmzQdFkL4mWmI02REkFYddaVUmYJKd892w%2FwMFrYBAWvv6bPKguYrsWqldWD%2BBKK6UNMcT%2BT9rHkirskCoWElYP7FxGXgG8tYLjYhiIv0HnTo%2Bu%2BWzQ5p2VLQbcnS70QHjfcpuoqj44PX5AR912GBibpHE4fHoA6VoOJ2bozzcQpZbt4vGwjw96AMMgCGEVVWGygxljhAYBH0%2FGHFR4FFsgawZEkM%2FdPLB1MUAYuiqig9mJe5ZrXPWJQX3f58rIt3B7ACWFKdroN4Bp68OKEj7yZORjW7mpQpfbM%2BM%3D" rel="nofollow">Redis 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路</a>,然å��我们还在继续 NoSQL çš„å�·ç�‹ä¹‹è·¯ã€‚ä»�ç¬¬ä¸€ç¯‡æ–‡ç« å¼€å§‹ï¼Œæˆ‘ä»¬é€�步详细介ç»�了 MogoDB 基础概念ã€�安装和最基本的CURDæ“�作ã€�索引和è�šå�ˆã€�工具/Java API/Springbot集æˆ�ã€�常用管ç�†å‘½ä»¤ä¸�认è¯�ã€�WT存储引æ“�技术ã€�å¤�制集ã€�集群部署ä¸�维护ã€�分片技术ã€�æ•°æ�®å¤‡ä»½ä¸�æ�¢å¤�ã€�状æ€�检测ä¸�性能追踪ã€�客户端和日志分æ��工具ã€�查询è�šå�ˆä¼˜åŒ–ã€�设计开å�‘规范等知识。</p><h2>Nosql æ•°æ�®åº“介ç»�</h2><p>是一ç§�é��关系å�‹æ•°æ�®åº“æœ�务,它能解决常规数æ�®åº“的并å�‘èƒ½åŠ›ï¼Œæ¯”å¦‚ä¼ ç»Ÿçš„æ•°æ�®åº“çš„IOä¸�性能的瓶颈,å�Œæ ·å®ƒæ˜¯å…³ç³»å�‹æ•°æ�®åº“的一个补充,有ç�€æ¯”较好的高效ç�‡ä¸�高性能。专注äº�key-value查询的redisã€�memcachedã€�ttserver。</p><p><img src="/img/remote/1460000043831442" alt="图片" title="图片"></p><p>解决以下问题:</p><ul><li>对数æ�®åº“的高并å�‘读写需求</li><li>大数æ�®çš„高效存储和访问需求</li><li>高å�¯æ‰©å±•性和高å�¯ç”¨æ€§çš„需求</li></ul><h2>MongoDB 基础概念</h2><h4>什么是MongoDB</h4><p>MongoDB 是é�¢å�‘文档的 NoSQL æ•°æ�®åº“,用äº�大é‡�æ•°æ�®å­˜å‚¨ã€‚MongoDB 是一个在 2000 年代中期问世的数æ�®åº“。å±�äº� NoSQL æ•°æ�®åº“的类别。</p><h4>MongoDB功能</h4><p>æ¯�个数æ�®åº“都包å�«é›†å�ˆï¼Œè€Œé›†å�ˆå�ˆåŒ…å�«æ–‡æ¡£ã€‚æ¯�个文档å�¯ä»¥å…·æœ‰ä¸�å�Œæ•°é‡�的字段。æ¯�个文档的大å°�和内容å�¯ä»¥äº’ä¸�相å�Œã€‚文档结æ�„更符å�ˆå¼€å�‘人员如何使用å�„自的编程语言æ�„é€ å…¶ç±»å’Œå¯¹è±¡ã€‚å¼€å�‘人员ç»�常会说他们的类ä¸�是行和列,而是具有键值对的清晰结æ�„。ä»� NoSQL æ•°æ�®åº“的简介中å�¯ä»¥çœ‹å‡ºï¼Œè¡Œï¼ˆæˆ–在MongoDB 中调用的文档)ä¸�需è¦�预先定义æ�¶æ�„。相å��,å�¯ä»¥åЍæ€�创建字段。MongoDB 中å�¯ç”¨çš„æ•°æ�®æ¨¡å�‹ä½¿æˆ‘们å�¯ä»¥æ›´è½»æ�¾åœ°è¡¨ç¤ºå±‚次结æ�„关系,存储数组和其他更å¤�æ�‚的结æ�„。å�¯ä¼¸ç¼©æ€§â€“ MongoDB ç�¯å¢ƒå…·æœ‰å¾ˆé«˜çš„å�¯ä¼¸ç¼©æ€§ã€‚å…¨ç�ƒå�„地的公å�¸å·²ç»�定义了自己的集群,其中一些集群è¿�行ç�€100多个节点,数æ�®åº“中包å�«å¤§çº¦æ•°ç™¾ä¸‡ä¸ªæ–‡æ¡£ã€‚</p><h4>为什么使用MongoDB</h4><p>以下是一些为什么应该开始使用MongoDBçš„å�Ÿå› </p><ul><li>é�¢å�‘文档的–由äº�MongoDB是NoSQLç±»å�‹çš„æ•°æ�®åº“,它ä¸�是以关系类å�‹çš„æ ¼å¼�存储数æ�®ï¼Œè€Œæ˜¯å°†æ•°æ�®å­˜å‚¨åœ¨æ–‡æ¡£ä¸­ã€‚这使得MongoDBé��常ç�µæ´»ï¼Œå�¯ä»¥é€‚应å®�际的业务ç�¯å¢ƒå’Œéœ€æ±‚。</li><li>临时查询-MongoDB支æŒ�按字段,范围查询和正则表达å¼�æ�œç´¢ã€‚å�¯ä»¥æŸ¥è¯¢è¿”å›�文档中的特定字段。</li><li>索引-å�¯ä»¥åˆ›å»ºç´¢å¼•以æ��高MongoDB中的æ�œç´¢æ€§èƒ½ã€‚MongoDB文档中的任何字段都å�¯ä»¥å»ºç«‹ç´¢å¼•。</li><li>å¤�制-MongoDBå�¯ä»¥æ��供副本集的高å�¯ç”¨æ€§ã€‚副本集由两个或多个mongoæ•°æ�®åº“å®�例组æˆ�。æ¯�个副本集æˆ�员å�¯ä»¥éš�时充当主副本或辅助副本的角色。主副本是ä¸�客户端交互并执行所有读/写æ“�作的主æœ�务器。辅助副本使用内置å¤�制维护主数æ�®çš„副本。当主副本å�‘生故障时,副本集将自动切æ�¢åˆ°è¾…助副本,然å��它将æˆ�为主æœ�务器。</li><li>负载平衡-MongoDB使用分片的概念,通过在多个MongoDBå®�例之间拆分数æ�®æ�¥æ°´å¹³æ‰©å±•。MongoDBå�¯ä»¥åœ¨å¤šå�°æœ�务器上è¿�行,以平衡负载或å¤�制数æ�®ï¼Œä»¥ä¾¿åœ¨ç¡¬ä»¶å‡ºç�°æ•…障时ä¿�æŒ�系统正常è¿�行。</li></ul><p>æ‰€ä»¥ï¼Œæ— è®ºæ˜¯è¿�维还是开å�‘ã€�测试,对äº� NoSQL æ•°æ�®åº“之一的 MongoDB 也是必学知识体系之一。</p><p><strong>å†�å�·ä¹Ÿå¾—学起æ�¥ï¼Œæ��èµ·æ�¥ï¼�ï¼�ï¼�</strong></p><p><a href="https://link.segmentfault.com/?enc=RWms%2FLWf710zkZ2B9roZXA%3D%3D.45fQD%2BO7OmL1UuJ6zooYsQ5WsYGXa%2BhB8KouccGtB0rG2gNRP4a6VCgA34iecxkXqMgCPa8PYhUjjNqDyOQY02aMhN5OTSEFQgeuiHfnzfZdAe%2FRIMkSfRNy7a0GI%2BmC0Y8lfFkqPaK3moZon0L8ftMcGAyJVAmfcZoKEEhTtS8VAzyk9XmTkmn%2BBRy03gUzu4tD3nsXNLzmwOhb2M7fMb3LGNOG3E2Imj75wPDXVC3i0Fe97tLYRREv6%2BQdztmlQlK6xFlpypnbT2wp7IzA9tki2LDFhm5yfEySquCVxeg%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(一):MongoDB  知识体系ä¸�基础概念</a> </p><p><a href="https://link.segmentfault.com/?enc=EabXycD%2BefzNe2Pe4qs%2BMg%3D%3D.lGBoA7%2FQ7qOzCb8bsadAFkoZT%2B%2FfFgMivvmG7h1r5YRCodam1sEyZUEcjZL9XHv4tM9%2FXv6vH8c3wMhM5ivrYYLmMdVhmFHuFpqN2%2FrKKAHz4rUafoAUB0M5oF9wiSFy%2FYwxWWmaJ%2B7FVqKm7PXo0KYBsFWxkZJ3e3y7oWkhWnwrWZC3z4llbOfqljgmshTWkC0bRoHTgADNjlkJnHKqZPjnkvhU73b%2B9IxfzYsT1Jw6OP9IFNYu2vyOnXthqvJCGDIzf%2FqLu4velLPackINPIGN8%2BpW3k8MYPqDuwGj1IQ%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(二):MongoDB 安装ä¸� CURD 基本æ“�作</a> </p><p><a href="https://link.segmentfault.com/?enc=uoxemK5Vl7miavlMfgPc%2BQ%3D%3D.MBs7K9YUSGUTnWJhSxH5R8lb7Gtj9e3hEvsRxPL6jztw9qq77PM67laS5EZDt5pCrOEW04pFbOOAw%2F0EKSusGPT%2F6U4xPc8NC91fmeN1YP%2FGBM%2B9Rdtt7LXl9JLuRnBLJwKtwLH3HAmbuPhVfmM7s%2BmftomYMgSrOVfcHgwR7V3xfnsQtojPio8kxuH1B51zbXpjqdV0c1qjsQWxXRnamw6vhud46K%2BfUN45Vrx8aaBUv8CzKLDP5vwA8VJ21ebepM2ZphSLAJ%2F%2FJx26RL%2FH2PbLT8R0tWQoXm4Ar9M%2B5%2BA%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(三):MongoDB 索引ä¸�è�šå�ˆ</a> </p><p><a href="https://link.segmentfault.com/?enc=6WQnn9v3auwFENDtUT%2B4xA%3D%3D.UGqfpoM1rnr2lDf4gX8BgNco62svXnMyD8vUyLj5eL1xF1NFBN8pfR8IYSowusYPG0oSFe%2B8BL1XQ%2Bw%2BOfzZxnNnS01TNmT68bKbaFRqq%2B7FCUZ8rHLpZE63r2Adp6CiAq9VSCARf4ILR7eMW%2BL5tnRkil17MoEOHNwgsdB5NPo7s%2FORvIp7DLtP%2BK38FjU83b0gOZOATXcIpvh3NvZPmnk%2Fm5crfusbyNKGK%2By6PG2%2Fc7fZNigfkRupFPp%2FoHAIr%2FrZkzjuQmTYsmcy1p%2BAwrUB%2BSLgwg%2F4ezeMJRXIUl0%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(四):MongoDB 基本使用(工具ã€�APIã€�Spring 集æˆ�)</a> </p><p><a href="https://link.segmentfault.com/?enc=oChMJvLGN%2BfKK8cwizZOTg%3D%3D.C7eXI%2FtYYZ%2Bl%2FxLdy5tHq9GfdVIfr1d61cwlAHNOXfL66KPXOg%2FLw67aVlL3C0YTmaD8pW4MqdxmlIFR4wLW5BkSWJsoy3WpPMvxto1XuSVJX45e1G1oG%2Fylarhduz2faSdPHtKYZnqSq6MEzLhmpQAyWqNpX5osI1WmND3h8%2FRADtOEzsccGllJim%2BX5Z0fwgMAxdEa9y3eYMkCFa17i56IRbCRSsEe9rktLaCVYmN17chPJoF3T3Dfg4IJZdDguHfJUUry%2BxdBk5IKG9NOLlDtt3RwUlaysP99nFhrero%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(五):MongoDB 常用管ç�†å‘½ä»¤ä¸�æ�ˆæ�ƒè®¤è¯�</a> </p><p><a href="https://link.segmentfault.com/?enc=cbS1mzofs4cBBoxSce1Q4w%3D%3D.EIFECaoZc1UdmJqGOkbl%2FyjrZW39ATpoK9jFCYScCOlYLpOI0kYCTDf9HrH8%2FO09LTh2TLB8e9Ah8vnFr4A5qaQ5131BPPev2GLsJGDvL3IUZRugpcW8FXKx0aKMsXP%2Bq%2BztW29AjveguttQFtN%2F00bgHE5MsKUaD2gsIHbQaGNl8I1Rr1BoTlDpw2zFRIGAp1dTv0ZGxEsa0XH0CuXXrqDuavVfG1J1CSjSPg5oh%2Fci%2F6O23ZpdRtrZnu31VrXyViPdoUDbyZqY7l%2Bc3FKarJh5sMfkUQkSvDEf130mzXs%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(六):MongoDB 存储引æ“� WiredTiger 技术详解</a> </p><p><a href="https://link.segmentfault.com/?enc=%2Bz2g18uWJXnef07hshAwLg%3D%3D.KLy48zCIjp1rqdBjA0bdS5F7uvRHQApjj4Z2LL1%2Ft%2F0C4s%2BfuBdqKESTuEmsBZeu5EBcBTXq3yLiZL4KaqGGS1aIQOOdOS8ulQNI6DM7SID0Gx7EloPE2O4AFh1JjWUF%2FacQXRIVOpuy9u2mNhQfSPA47U3kJpgVXIpZQTg3Ns0OnqW6aoIOmLK1%2BnOqMENeXonBfaFOs4XfG2pMxnfEK%2BciTXl%2BhM8Mf5lYI7XcdcmHDO0UYKJSrlx5TbsuewxIeN6US7reZkMSF2ERo2%2FAb5ehawRqkQslIA8Fd6UeW5E%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(七):MongoDB å¤�制集技术å�Ÿç�†è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=TvdPaG4%2F0Y%2BMmUtQeSqFZA%3D%3D.tEqUXmSVMLplAyWAzvis4QxqrknBKvECxPwvMhpnTYSFofwxAsEAOwlKzhkIx1ert0tzWZa3q2Op6R5sY353kZfCGGVcX%2BBjZ%2BWGczh8I0EEgVApcx650dISiyUgJtZpIqvcKZErx3c%2FFllwRIO0OZ9%2FrDEqmAZx0ZkxREeX2oOF2gYLhafMq7OA4D%2B4toYhlEPN0jXucz%2Fm6IAiVC9a1fNesZ4UkQB9oeDTpXne3WRsXPxL1vzvnO8%2Bky1EYhXaAPmiX%2BraF%2BgFcirPuq4D1vBC3S5nVJQ5cG3puHYHGNg%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(八):MongoDB 集群部署ä¸�é…�ç½®å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=8JZUaWEf0UAbesbBBsbU%2Bg%3D%3D.BCsj94qYv2QLxTkEjNbnh5DtQndHr8gk3jxB%2BkfausVXzSo%2FGe2ldsnVCQpa%2BjsWfXlBQSpBXJuYiM0QtWDOSPOAPi0z9Mq0O6WCJpLRNn44wbg7ZVsqlmdPY1YogyhtMv7qFPEZu25Vu6B231DVsBNibPafw691fZ9409c%2FfbZdpG7wb11h6gRWOJ0YcV%2BuD%2BZV3UlK3NNPmH%2BBNUsOk8RFi5As7eLfIFvdHHEbIOqcnKVyF2Bdfpl%2ButVYgwMXFGguH0n7io%2BFsYdum5%2B0rg0nyDBWOqbiwJ9oDL5Uvfk%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(ä¹�):MongoDB 分片(sharding)技术</a> </p><p><a href="https://link.segmentfault.com/?enc=UDkoG84FaNVohrx%2BPn2MJA%3D%3D.Ql9X8XrNUgDLV97Yp5yw57165bfoqXcythy5xOD7Ee9AfQ1cxysAP0qEGBdeLCPfIMd4FbE5axlLlWvq%2FwFevFF%2BCpoaEdY0ePwpou834NiSJLidsVnbkv0t5XGH9XPPHKdivh2oPRNIxzKRXRpQhHANbT%2BSQFQEttaNd8OC4GwgdbPOXarHEPfkK2Qij%2BBsSX5Bvp%2B%2BQ94diSSKKelEVLmiixijWQ9TA7PiN8A5ivvju6JvCS311vvQWUVDxEGKjbRFVZOU%2FqTiBwzpB5wIpckwGRnHue9KI7p077hTuEw%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(å��):MongoDB æ•°æ�®åº“备份ä¸�æ�¢å¤�</a></p><p><a href="https://link.segmentfault.com/?enc=NE7%2FdemzWkhFe9q%2B9O9wnQ%3D%3D.33KUmKqNNN1EhKfhJ6ToNhcv78sH7cnavfsIITIofOmOtW9KneRHRkF2EU4iEIBjYJJ4I8u1EWPhZ0g47mUdjjaggoV9NjB%2Ba9ugxtHlWJZSLvvFsneM%2BSgKlAx29JVLyaiGCeCxj8eC%2BESPd5U%2FtYF0tjp5pp1%2B2RPiTby0iB6NhpLXk2Itkfe%2F7YIL0mvJd3WkrkfCIxG89tdaIc2YJ%2BYiWUyRFEacXSePw8qvGtJrXcane79ah5vy0rmLgl4Eo3tPvAq2Fd9jW6VeDNvdcK%2BwHnwfgJTZjiC9cxC33mA%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(å��一):MongoDB 状æ€�检测ä¸�性能追踪</a> </p><p><a href="https://link.segmentfault.com/?enc=Ltk4LC1KoqahLw8oFV4mwg%3D%3D.xjBYTDkWlNGf9%2BnusGJCjlqdUaUxIu0quRAZIBfYrdAd3kB29BdnAgMMA%2F4cLNgBIRBIRj3v1cJ5vrVTMN2tW6BcWRr%2BmfojRdO5xNIMVxr37LXpKUIGkYayxNx08yb5VQI6n%2FjrmXFfEPFe8A6oi6%2Fy1GeoqyRGcpraHM0EqwFHT611FgBkBLnFZCSp%2F%2B2Q%2FRhTr%2FSByaP%2F%2FcW0L4RDR%2F%2BE4TMRj7M%2BUFXTYpewsFqf3ZEbWRxI2TnnYRGtXSWfou0JhTfE%2BduSzvn8iWyXFfwFhE5Ruspzlu8Ipoq9nZU%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(å��二):MongoDB 客户端管ç�†å·¥å…·</a> </p><p><a href="https://link.segmentfault.com/?enc=0XnffUaOkITb6tX%2BVLS%2BxA%3D%3D.zbEBoarjg6tGCadLUIeXzDLkluTgs%2BerDPkrkD%2BRDy6Z%2F2NmXVtdqCLVTp0%2FEqbnNiXut0IZmZ0vLiPra8oa6Mq7mQpF8rg57EW%2Bp2zdLPy5cSKOPE0XNeEzYZZ72JPrabN4Cu4R0g5j1WDOYlySpoVllmOTj2eyUf%2FlltXNlDhpIYmP2IsJEqKg3A7MEAbomq5jpB9JlBoGIyC9xhUq7j1MCoNbGqNuj3jxG21CCpHRoBMaZO1KhNArGmowOQXrc%2BqMMJXTOuyMWWKGOmIDi7EwAonwQf0xVLvBLN9quwA%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(å��三):MongoDB 日志分æ��工具</a> </p><p><a href="https://link.segmentfault.com/?enc=AdgH3PfsKEllmV2eYxMJhA%3D%3D.imjiVz9Q5lUulg1gnCZC0VNLtgfrOVhX14gLth5r4VxI8fsWrNSi8SpiobsFhFaRnLMxTjUhxMPwtPvzSTeGHNfbaDBs5PyWYBBCl%2BtYaowyYHQtd4LEMZSKlxrAT2xjMhkSNdBEMdKFreW2CSxrl7tg5gUA3r3FUe0QKMaG7dz5NTo1IDqnZQ0TFEuI1ED%2FPDSg3o8dM%2FeHRW7O1Jnh8ys0Y%2F80%2Bvl%2BRFFyyBnuclIqKrb%2BKSS0sYYBDzBp0%2BGyUIpc89v8%2B1n5TYFH0U4sDaraCnlea3Tw19t2wWSaQ%2FM%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(å��四):MongoDB 查询è�šå�ˆæ€§èƒ½ä¼˜åŒ–</a> </p><p><a href="https://link.segmentfault.com/?enc=CZaCCu2vesi8B%2Brhz0F9PA%3D%3D.NLiv49hZzu3pkyVJNkOHmHdvhmG8i%2FOGouIcTR1M7SEomp%2FmBB9vL84VHDoRegbD2a51onq9pMUTacSe3KwFwBcP%2BS0Fu9%2Bx2YfG%2FSkXef0k3aoheFhNgNysPC7420hdECk3ngvs5K29bL2HVLYK8geBf%2BEiSjIzuc9wKGHBvzR9q1PyIf%2BuCRvQ7YUmOxWCdEJPdpb%2ByaZpdW3b0DYnQFLQRh80ZiqZ%2BQx7UF3vaBjQDoenPxTQjXJ38lW5eMM0NLTrRHKqBl6Y4uHZ6oug1a5tISu%2BNNHWo0ah2ocPtXs%3D" rel="nofollow">硬å�· NoSQL æ•°æ�®åº“系列(å��五):MongoDB æ•°æ�®åº“设计开å�‘规范</a></p><h2><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></h2><h2><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></h2> 终äº�å�·å®Œäº†ï¼�Redis 打怪å�‡çº§è¿›é˜¶æˆ�ç¥�之路(2023 最新版)ï¼� https://segmentfault.com/a/1190000043831440 2023-05-26T10:41:05+08:00 2023-05-26T10:41:05+08:00 民工哥 https://segmentfault.com/u/jishuroad 20 <h2>Nosql æ•°æ�®åº“介ç»�</h2><p>是一ç§�é��关系å�‹æ•°æ�®åº“æœ�务,它能解决常规数æ�®åº“的并å�‘èƒ½åŠ›ï¼Œæ¯”å¦‚ä¼ ç»Ÿçš„æ•°æ�®åº“çš„IOä¸�性能的瓶颈,å�Œæ ·å®ƒæ˜¯å…³ç³»å�‹æ•°æ�®åº“的一个补充,有ç�€æ¯”较好的高效ç�‡ä¸�高性能。专注äº�key-value查询的redisã€�memcachedã€�ttserver。</p><p><img src="/img/remote/1460000043831442" alt="图片" title="图片">解决以下问题:</p><ul><li>对数æ�®åº“的高并å�‘读写需求</li><li>大数æ�®çš„高效存储和访问需求</li><li>高å�¯æ‰©å±•性和高å�¯ç”¨æ€§çš„需求</li></ul><h2>Redis æ•°æ�®åº“</h2><p>Redis 是一款内存高速缓存数æ�®åº“。Redis全称为:Remote Dictionary Server(远程数æ�®æœ�务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支æŒ�丰富的数æ�®ç±»å�‹ï¼Œå¦‚:Stringã€�listã€�setã€�zsetã€�hash。</p><p><img src="/img/remote/1460000043831443" alt="图片" title="图片"></p><p><a href="https://link.segmentfault.com/?enc=xF7qe4wx%2FzTKTsgQyhma6A%3D%3D.nJUTG1QB1N%2BjjeP6DiOMOWbH256p6FpAwwrb%2B%2BeUqjr3U2DYMU%2BbEvnXOhyHdF0r1KRGrUT%2BCdpUsVDSGTnGDz8v8O79%2FZaqhRDS5juLY%2F7Cu2fS0U7yGDg6umXHulY9rJTVtbU8SAhxzBcm3tiZ0p9aoMciPQRs9NFWsNq1JEPUuShShCW14Ay8pd4mX8xRmRMBlCU5RBy9NRNfysC%2B0UPE3ccKnYYtaVIeW5e8yQjT%2BIrVfrhPmtLNvjY5NwfKo2CqZPARxF4BQeDWCt%2BjcctxpybV05cFta1PAMHv7PpcHkCPv5Z8sJxYjOA4nsstheA%2BajeNOmDAS6Mahj6osQ%3D%3D" rel="nofollow">Redis</a>是一ç§�支æŒ�key-value等多ç§�æ•°æ�®ç»“æ�„的存储系统。å�¯ç”¨äº�缓存,事件å�‘布或订阅,高速队列等场景。支æŒ�网络,æ��供字符串,哈希,列表,队列,集å�ˆç»“æ�„ç›´æ�¥å­˜å�–,基äº�内存,å�¯æŒ�久化。</p><h4>官方资料</h4><ul><li>Redis官网:<a href="https://link.segmentfault.com/?enc=ori0VIm%2FKCAkZ9rWDdBFVw%3D%3D.RxJonmBavwlIzSio2%2B46VB9e7uIRFhGB6Oi%2F1XyO1nU%3D" rel="nofollow">http://redis.io/</a></li><li>Redis官方文档:<a href="https://link.segmentfault.com/?enc=J5%2BZGBJn0Bg3SRXqZ4ARcw%3D%3D.MqnmBXvHse3v4onRUR7S4vc0UpwtwcTND%2B5xP0einLg%3D" rel="nofollow">http://redis.io/documentation</a></li><li>Redis教程:<a href="https://link.segmentfault.com/?enc=GpEDDBqf3joVbnE6HO7bkQ%3D%3D.Xt1kBdR190In8fu1cPrsA5Ty6n9km6RkWRw0H2LXRu%2Fw1SPukHV83aCWpCoActgZ" rel="nofollow">http://www.w3cschool.cn/redis/redis-intro.html</a></li><li>Redis下载:<a href="https://link.segmentfault.com/?enc=oiwUOTAh3PRGYyUS3D4MLQ%3D%3D.9nQL%2B%2BbB4AK9r75ju98MCLRAPT8TddDCgX3yuXMI%2F0U%3D" rel="nofollow">http://redis.io/download</a></li></ul><h2>为什么è¦�使用 Redis</h2><p>一个产å“�的使用场景肯定是需è¦�æ ¹æ�®äº§å“�的特性,先列举一下Redis的特点:</p><ul><li>读写性能优异</li><li>Redis能读的速度是110000次/s,写的速度是81000次/s (测试æ�¡ä»¶è§�下一节)。</li><li>æ•°æ�®ç±»å�‹ä¸°å¯Œ</li><li>Redis支æŒ�二进制案例的 Strings, Lists, Hashes, Sets å�Š Ordered Sets æ•°æ�®ç±»å�‹æ“�作。</li><li>å�Ÿå­�性</li><li>Redis的所有æ“�作都是å�Ÿå­�性的,å�Œæ—¶Redis还支æŒ�å¯¹å‡ ä¸ªæ“�作全并å��çš„å�Ÿå­�性执行。</li><li>丰富的特性</li><li>Redis支æŒ� publish/subscribe, 通知, key 过期等特性。</li><li>æŒ�久化</li><li>Redis支æŒ�RDB, AOFç­‰æŒ�久化方å¼�</li><li>å�‘布订阅</li><li>Redis支æŒ�å�‘布/订阅模å¼�</li><li>分布å¼�</li><li>Redis Cluster</li></ul><p>æ‰€ä»¥ï¼Œæ— è®ºæ˜¯è¿�维还是开å�‘ã€�测试,对äº� NoSQL æ•°æ�®åº“之一的 Redis 也是必学知识体系之一。</p><p><strong>å†�å�·ä¹Ÿå¾—学起æ�¥ï¼Œæ��èµ·æ�¥ï¼�ï¼�ï¼�</strong></p><p>ä»�ç¬¬ä¸€ç¯‡æ–‡ç« å¼€å§‹ï¼Œæˆ‘ä»¬é€�步详细介ç»�了 Redis 基础ç�†è®ºä¸�安装é…�ç½®ã€�9 ç§�æ•°æ�®ç±»å�‹å’Œåº”用场景ã€�常用管ç�†å‘½ä»¤ã€�å�‘布ä¸�订阅ã€�事件ã€�事务机制ã€�æŒ�久化ã€�主ä»�å¤�制ä¸�æ•°æ�®æ�¢å¤�å®�è·µã€�哨兵模å¼�å�Ÿç�†ä¸�æ•°æ�®æ�¢å¤�ã€�Redis Cluster 集群分片技术ã€�交å�‰å¤�制ä¸�故障切æ�¢ã€�自动化部署集群å®�战ã€�集群的扩容ä¸�收缩ã€�ä¸� Java\Php\Springboot 等应用的è¿�æ�¥ä¸�使用ã€�常用è¿�维脚本ã€�Redis 缓存问题(一致性ã€�击穿ã€�ç©¿é€�ã€�雪崩ã€�污染)ã€�内存消耗å�Šå›�æ”¶ã€�Key 过期时间相关的命令ã€�注æ„�事项ã€�å›�æ”¶ç­–ç•¥ã€� 性能优化ä¸�问题æ�’查ã€�性能测试å�Šç›¸å…³å·¥å…·ä½¿ç”¨ã€�è¿�维监æ�§ï¼ˆæŒ‡æ ‡ã€�体系建设ã€�工具使用)ã€�å¼€å�‘规范等知识。</p><p><a href="https://link.segmentfault.com/?enc=EANUmflVZB4uzsIPfpANNw%3D%3D.9jIqAfBBJCBhF3QQagHJRm%2BTX0e1jQukY9%2FYubtC4be4XfJ9Yp3TlZXekeyccYTUCu3ZxMbstIs7%2B%2FKpVOW6Zc3P8dZwg91nJ%2BWT9TkSHmgCCQT9s81b1Zba1%2FpZtOkscX7KxRpE79peBJwk8uEgqY4Nw4a0ZWHFIdtSpGsq528SXfVHU8eM8hedra9rLHy4z%2Fy6P6qlkLXYx9%2FKE1F3px9JABFxbm2bqgFdTLkiPnET%2B3l76AGKaJnDaC9s%2B74yNTrgXkNYWWu9OzGtOo2uhy2kkMAKfC3wt0Qm9mOKPDk%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(一):Redis 基础ç�†è®ºä¸�安装é…�ç½®</a> </p><p><a href="https://link.segmentfault.com/?enc=oDZI3xGQulQ%2FjBulVOMoHQ%3D%3D.nIvay7hM7pxTw%2B7aBdIc4P83Ku6Nw1H6T4pmslqi6E1dWk2ATqjMa3X9xB5StVZWTs6xwm1uE3dAuu4S9ubPaatWY%2FL%2B35McqsesiSKWPuqS%2Be%2B6jNC%2BfURXXG%2BELBWra1uwFbzfRkcQTbFDpUeamJXLR1rye7Fo%2FW4dcY0GWDFCg21oid1Fjm8XvMql9lubsATKMdZ%2BUAQnG2tidq877feq1Y6uza0pPtb9rZAm4psuVTkq8P2A8wD%2By0eWKzao5L5wK%2BY1VWneWwJnf8dI7tmOZ7F5WE%2FOHyAAuFZPTTg%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(二):Redis 9 ç§�æ•°æ�®ç±»å�‹å’Œåº”用场景</a> </p><p><a href="https://link.segmentfault.com/?enc=AWAqzszAOQSI7FqL0Wqlaw%3D%3D.qsk5tGS%2F70XGZ95DDtSLqRo1O%2FPhEniZnlersnH0sXxEBChLiPpLcPaZBtyEBXpPGJbSHJY7Vh8ARMt4ZSTbOv1BJjG0R8xecC3yWhOn0P8%2BVCs45%2B%2BPitD%2F9dkbok3d4TS%2FORjWYa5cUjQzWUgr0gtA%2FV9x0Lb86s7QXOzA3f%2BbqF1go7MYjelqkolpBX7EfvuSrXgdz5FxLADuUrq6dGo65a8CP5T2hSsTRF3r%2Fz4f4oapnzcXBVvzFt3y7Tlkacu7yVS82KztPu8Hqcyd1vJHZawrKICEm%2FsMb1t9Lk0%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(三):Redis 常用管ç�†å‘½ä»¤</a> </p><p><a href="https://link.segmentfault.com/?enc=KScLlKDsPaMcKN0r%2Fo41cg%3D%3D.6MEBHgiiOp1ZKCFp8YhiYGM2bwI9zQyLpGLC%2BwgMHfEBQIT3Q9o8Rls8ZnazbMOS0m2LTL4UzGLKEqHm7H6mnc4QdjpDBa5qPEbljTyNesx5U%2BqsR0Li4IrvIBPBUBU4AiSLPV%2FAp4xLxUtQ9ukf1qkYrPd75EisZ%2B4J9HxJA3l8%2FpibOfq1qe5B8LVuqFTHotPGzB1PprEP%2F8XNoY%2B1T4XbgKLpdFarHMMuv8aQjoUrtaIP6e3lguaSStEyUI0q7Jw9oa3ll4%2BbZQcwf1gwOYDQ3yf6RKrBc7qqIZ99QNA%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(四):Redis å�‘布ä¸�订阅(pub/sub)</a> </p><p><a href="https://link.segmentfault.com/?enc=BiqFtpfpk0VFryTxhFFQuQ%3D%3D.97lNLend5Mp3KNvcrkrUvZvhHCfhnHvYM5c19STmEvOfv7N2R%2BSXrd0FVxbEr%2FkQUcxRxRBt1QrSpxZX1bfQ5WyxcOcRAQKJOUF5zKL0QBnBeRHBbG%2FD3kzhVmld43F%2Bd2S0r8E%2FwQxcjnmprCDZqaiwjz9%2BTC854zsQ0ReMkFDuZAeS6DQqCe1opfn8yNC%2FI%2BHtBBpMzhqSJX1tIrtrANmmgru3fZVgvCog4Cgxq3PIMULme8O2j%2F0kyTkUlk%2F5p5zcbOg57GelXwNOEW9fGlNkqXY7AZSyZis%2FP%2BGfD7E%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(五):Redis 事件机制详解</a> </p><p><a href="https://link.segmentfault.com/?enc=dXUAVJXMfHkGEUDthLwyGw%3D%3D.n9szVHCePO%2B1zCWy%2BrDMzWRF%2BOx76aOmoiRgwHULzlfgks5eVipbiA1Grf6qbrFkGcBT7WQgv%2FHnn%2B2VSCHTAnBooUmVzkzng%2Bzsh5zeCpX%2BO%2B2Z3HsbKb7%2F7MdyIbUuy5JwUD9KVDhk7jRa%2BoMYo9B79KxmojV393FUBObB2%2FP58Z4Zo0AvDSIX2h3eOVzAKSu9%2FQYsCHElDOIsF5e6wnyy4zMLh0m5T0l%2FDzBPOvv%2FaoI6WnoayYbJXmUcZDePCmVRyr9nFujWWs1TIoaax8xX1ZMJjwwNUKdC9urrJWU%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(六):Redis 事务详解</a> </p><p><a href="https://link.segmentfault.com/?enc=PKhw%2F8%2BoU63EWHsqm58DVQ%3D%3D.MDGcBq8DspEXqf9%2Bxe1Wj%2FphffrylmDMiwHsrJ60z68Bi5wPJ6Du0CmYxgZbUwf2oyKGbRJD7A7nKdv%2FAEqOo2N1dBX9vbk6%2FWXk%2BLUR%2BJzEvwv2zLgjGDZEUVMHN9k9zHMtuIBPyXtr3gOmlsOkoJBfc4BxLERTjaZ7MHtGS2RTPPa86EM39ulyv9fP%2FLjHXdOLewj9UzMYEX%2BXUOBSJZWSGPkuOc5n8PPbSaoVZVoI8Crs9AqRwMhvI0YbAEcLPA5S5I4B2X9W%2BdHbwU%2B0kOKMaQ0L2fadhYiAnN3RzrE%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(七):Redis æŒ�久化(RDBå’ŒAOF)</a> </p><p><a href="https://link.segmentfault.com/?enc=7k4E1sE0nxmm4%2F%2FW7g1inA%3D%3D.OQ6XKpDnpZa84uFWVqqTqmWBpCgxmEBbWc3UGC3nU%2Fj0GCtgMMAojbGuUNNO%2BOJrO0XFr%2FjUCQ7mwff6cRS9NUgj5%2BZOIbqjy7zcV1rePpfkMSa9OJ%2BEZdNWJveiBazAlwKjNcGqELFe3HEsKGwemTdPpI%2F51B%2F5kieHQZzeXOvLYImzcs1Y6kC8rm31T7eayiHD6CcAdVQYB%2Bj3dbE1kpbCPMoRbdCppHcgCVxzXlrm4ulLMA9IsFFZZ1yB7QDFyFlyHm0sJmoBDi%2FpkXw%2BwS5qzbIxibixC2tvZKHe15k%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(八):Redis 主ä»�å¤�制å�Šæ•°æ�®æ�¢å¤�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=SF3sTrZG756xf40EU%2BscKA%3D%3D.r8Oce63DGb6oMcZ5Sc49G%2B%2FVpxp1iGewkufDusML2XM%2FfGVLUV6Fl7K06ufL9wt28R6PuWblOSKfEuvhejr6QJCwCG9z%2FIcVzAnN5ETO17EtIXLDfkkIlK6qsZh63Vqt3xoj58j8beDrcqSdOtcZ1AT60OoilW4ouK401%2BU2V7WKXlrFPM%2Bjx75MhyaTfr3oGsjlTGOUMWyfpW1NkWXby0Emlz0uMPEZh4jSaNXrGm1Bpepe%2BPVXLUYpWDrj0rF2fTTojdqdFzlIu%2FpVWLlkg5px3dKBW6uLWplpq%2BWH04c%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(ä¹�):Redis sentinel 集群å�Ÿç�†éƒ¨ç½²å�Šæ•°æ�®æ�¢å¤�</a> </p><p><a href="https://link.segmentfault.com/?enc=o2GFX9PRPklGddyrV1jJRg%3D%3D.TXtzBn7283pYudASj7WgLSrZC%2FDD9ZpGGYcqV3%2FQKKJZEO0g7oZC7MqkZWKsu%2BKfnd9uSH5uw98OCyF3LVKXZwjPncz5vutIgEab415fxgUqifNuTzokpJQnepLyOvb7KVOJKfkTnEwD%2BhRxFaLxAE59upQP%2B1aMziTOBPOg0%2BbToMOwIxWmPHORaToZQyZRPK4g1qvg%2BCUJSjIVYCfeGHD2nfAIw4KcODPWjKSnV3lkdGCSQa7HPpJhHcNpIbBEsIMN0qqoBB1TDJm7w1%2BTe0y%2FE%2FdNofoGMrB1wpMPBn0%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��):Redis Cluster 集群分片技术</a> </p><p><a href="https://link.segmentfault.com/?enc=6c5Hb1H1C86%2Biooyw9aMGQ%3D%3D.DpyXfUuMFgWtVLeiHcquo2DQwWo8N3FXF6oQ%2FZzyySoeBye9lf7eG%2FzGKfctEv9tfi2pHIDJbj7XuGmR2Csabk3%2F5M5ye2rrDZoPQ1o5WqbnEgpgBkLL4%2FW58Jltu%2By67m%2B30o5lghCnugDZW927onlNZuAI3LWUnA5fAbLqAjBVRpzxeLmTnVEBjOjimO3cp8qsZC7m9A5iTk9BQ0GgW2CUsOjRQhnIoBCbvGy2%2FlqrZLWxlwKvjVWVAstQxc80q7wNrSIjoMmUatLWqv23%2FG1orxTPEoxp1RXu0deaGuA%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��一):Redis Cluster 交å�‰å¤�制ä¸�故障切æ�¢å®�战</a> </p><p><a href="https://link.segmentfault.com/?enc=%2BgGfDCRuxBgfec7Misj8tg%3D%3D.9fhOA8QJrL5SuMvrnNuxNum0BwEqTj1%2BBOZ05DRzOWCvPNy3AXyiQ427i%2BaTmaWIXtql39F0YmeX5BYU7DpZMBJ1qdR%2B8G6yCWhLzgZudDEY8q6g%2Br0pcUbvaz9QALKh7F3JeKaDMmGlfe4DGAvDsVPVK9jH8lSnZP1F2b9Ncu64u6f0tF%2BwjG%2BIok2cRt7YBBgSoWhMcN71JN5Z0HqBLm9%2BKUoCFunjrzrgtP7pQDzPmTFbHQsMMIXUJjydnl6QISVdAJOSaevwzeoUQNcvTQbhT43A4U7UjKdTPsAlZzM%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��二):使用 Redis 官方工具自动部署 Cluster 集群å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=EhQrbXTtApsVwKC%2BKRdq%2Bg%3D%3D.rigEh0HQLev75BiBak%2BZQYoxEp4aJs3nYyemOuP8xGATIrX1w0cZ7u%2FfKrNA8G9a1AwSDcoTqJzFlX%2F5usCO0KbaOEgSXMW%2FLJKj5tqP8h7mVWbcwq1iO0EY8ToS36%2F3wjTQaB%2FOjxQTv5%2F2aGApF5uLPHCzvs1rvfh3RRIvapsYWtNgdoKsUCAIAfAMvjD5Hntr1%2BQDw4YbaSyCmmi84dq8aToESKMJt893Us8NlFzLKXhat%2FFmNsC182zeuKh%2FbInhxw2OC71m6IR9eRvnUfcTi5o8w2lAWEuO69Kt2IU%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��三):Redis Cluster 集群扩容å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=A%2FtsmxdiX9hDkAR5Er89SQ%3D%3D.UmFRBoNsBsDMV%2FZZsX4%2BKRM%2BCgZiAItGgfta%2BDl9JlDa%2FsrtfY5qNcNtaEyrnnvdWzWxyWWcW3iuOSqA%2FCCDc%2BvTWWd7VloGW9nXncC9I64KOVlez9r6m%2FXff%2FzSypNxXq47px7V%2BxuPA%2FbUTi4Stav0FJwAQhqm9XK%2F%2BKEiTHf8Z%2BEX87LiILAdCKdYebeFe9v30y%2FL3sZ77DHaALGebNQtRKD7jK9c3zHnCYWdftnFnWf16aixTcJeBCfoMYL1xFNRmyK6R0ZK1BNyZEJtQm7Ey2cMoNMQADxXuMhTIwA%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��四):Redis Cluster 集群收缩å�Ÿç�†ä¸�å®�è·µ</a> </p><p><a href="https://link.segmentfault.com/?enc=41U9orCSpS4PQrniQ3eqlg%3D%3D.Y6tWqV696fQay%2FQaYa21Y4HKNmh%2F280i%2B17g7ohkqg9106Xg7V1%2Bwvit9wWeJHCWgS8IUjEWK4sKefJXKSy0xdSwy%2FwvMWOHzvuXvVxdaw9ay%2F%2BF2Q8HQIdA%2BZ5geVPHG4wj2irZyZRyBAeCoOHioFR4jF2tG9C9Qs6JUsP8%2Fe8VmhloDs0UlbWbeFjn9Ca%2FbNBX9oDa92YLbISJqQNiubT1du6gQEIafXX1vfX0pAxWtW4mYezVKOo6g%2FE2%2FLbHuijjA7BM5iJbr89trZ1i5iGT9Dm93%2B4LO8RIlGOHnvo%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��五):Redis ä¸�Java\Php\Springboot 等应用的è¿�æ�¥ä¸�使用</a> </p><p><a href="https://link.segmentfault.com/?enc=CG0r6oVPjfqPu%2BFp4tbP1A%3D%3D.ur1%2Fee3Qk%2Bxc18r0kw%2B7gwge%2BJu244SMUmjXHyp9A4jVfm7jb3bx%2B7wRNE%2Be3KQDwO9J6O4r3QICDA0OSbmQTMp9n%2FZQzUrG0Qv7SZ%2BV9lBJ8u0Y9WY4fDW7IFa2Fzrp1v8eegHfm0VjccfRU2WLx4lLX36j5hKhPtM619lIbm6hgAbPM4Yzl%2BI7Mm6%2FHjmsVZhbMLFPaJ4tvZ8ZNHkSQ0KXW74Oejihg04Ju4fTHrAzg4QVsZowyblpUj8cmtnWSSFWY%2B%2F8gDEww2mosCrLrcMeWfvks%2BaXtwYdU2cc1qo%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��六):Redis 常用è¿�维脚本</a> </p><p><a href="https://link.segmentfault.com/?enc=zKndI%2F3t22jCx9g5EEHk2g%3D%3D.m69TaQunEKu8UzKlvc3Gno84MlUkeu4xmMxC9twgehQ%2FT3YbBdIuFTQax48B09oDrdD9ZsRuAhhGTbP%2FohujkTqRRWWlhtDDKWUt3w%2FwparKkmidg6CVAA3npZFN7lURyeClT5EbSqgD1lUxyFqR4dU0Ts5JmAFn4cRFZ4uy0vQS1rGTKkbKG2GLdnSoNZkOUmelitz1pJcdmA1ziUzRORJbnuDVkAZjdjR%2FHDP9KmzBvRL%2BsOMUAzX7w6x1YXbFOGorIVOb2EHPNJriBIEAVncpx1hTgthmNWmxGNbRFB8%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��七):Redis 缓存问题(一致性ã€�击穿ã€�ç©¿é€�ã€�雪崩ã€�污染)</a> </p><p><a href="https://link.segmentfault.com/?enc=C%2F5bWN7HKkbzTbugH7Ik0A%3D%3D.WwdkbD1xxbUeZ55sdQUOKhFojt7FNe6yP98gExSAuQXD6Mnc61Obt3t9anRYGC7l%2BNaArw8F18PyrkJS9tw%2F7X2LygJ360okd%2FAmH61cyqFKNaZff71hl3WCY%2BxVx4b0qwslLcmk1ECoLdrbBfYuG3hdSr0%2F7YUqxnas3Akg0%2FSkDp%2B6TgTRepf2AasAUiX9N%2BSNB05H6B5rFjjS2uZdmWRq2fte0SfNl2BrZzKJayfut6W%2FtTT%2BghC%2Bwa9Q0MpmJ%2BVdLeFFZKGHo0n9b9YNDso6rQ%2FGIb2aY7BuiOXouFo%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��八):Redis 内存消耗å�Šå›�æ”¶</a> </p><p><a href="https://link.segmentfault.com/?enc=tLIA5ZrgmzBxPTaoBTPNmA%3D%3D.W%2B7P3z3ufok7g314hU%2BnIg8IuSqBlnkj1671Gg5O1CnyvWB2KpisDyVhU6icJGPihWL7%2Bm9k24S8VBUbnZfLQAhfzHWq02WYIbWRaHFSYYSpwB0fcw0tGafoN7DOWOujsYKzM28bTbjJCVHL5kj4dprANlsJFu8gp11diAuBdfehubXrRup6A6%2BFpxicOB1unosjaP9TKs3UaOdMiRzmote8CDfsJcjQ8zzp2TBMmKpOvgfPYYRjCeOzZy%2Fn%2FaABkwgVIFZ9M1Ahg7UtWZshC4O7qQ3fJCybyBrHXBN5wL4%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(å��ä¹�):Redis Key 过期时间相关的命令ã€�注æ„�事项ã€�å›�æ”¶ç­–ç•¥</a> </p><p><a href="https://link.segmentfault.com/?enc=oXItgscCHAptzbXag%2B5NEA%3D%3D.PFH%2Bx6lgo1RGvOtWbY6VKc5Gg%2F0%2BmS37qIGwZASmpeEbCXjUTxbw5mAMZyOjra9Ap%2BAjfkFQeoxRr241Aj3ocCcKNij7O0SiJgPn%2BpkpGERQ9N3lLMJuq19K1puw7u3sCnZGfPB7RMlshOTFa2bcfkkvlayRkhajfte5uPu0%2BojD1yqwgvxANAEBi2%2BQzub5s9DoQ0Xz4H%2FnLLjwby3E31FhsUayGCZ%2B%2Fmy9yw1FuYyg8t10hmNsbMXlWrmeZ4DW8e5fqHtf%2FTDn0HaxF753AGAXCVYvX9%2FGhSMKG6SjpFw%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(二å��):Redis 性能优化ä¸�问题æ�’查</a> </p><p><a href="https://link.segmentfault.com/?enc=3SNw5JnOf%2FqG0d0UJQyldA%3D%3D.6mYOS0%2BwaOqjDxpRB%2FsPu7fTgft87%2FiQFdUEMgZxzJjaZs%2F7ZQJ3s64W8Mf6aqHOHO1p7WlVZBLU7s3rfogDtOOHlAenLT0rI%2BW%2FEwJUhVOpdWgYY5VvEBShE83kwMSiFUJDpIY691f6o0Z5%2Bz4vA3IU512N2g8BicPAfcEIny4UhP2nuXRsOn2%2Fysb%2FKGDD5%2FEiY%2Bxn%2FAejlXys8ZWgbXrnRcCiWPb8j37WHzuFCVrFHgehFqYpjvR9S0qmqUErLxW2u4JyaqsVUuGwp79b5ArJx9JBnxwU0604mbcYh30%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(二å��一):Redis 性能测试å�Šç›¸å…³å·¥å…·ä½¿ç”¨</a> </p><p><a href="https://link.segmentfault.com/?enc=4BnMkl9NFBRPQMVV2PFIEw%3D%3D.Py9jzsDfIIqILmFfKkFqK4cOP4haUfZ22y8diBXQH0mb1BTGJaRiDUWNXuscfdnbVNFPYQbhHu7b20jZ7R5sX9dlKAC2Y%2B4hVUgRU8nBL0UqKVbuv3KmWWf6cQCz30UgqKZbuK%2FbN2j04Sfwn4uLl8%2FA%2BVa106bm5Cf9fJCOzXOljHDnqTWxF30vFRGEJSrc5FI8OqwtsHCxOKpBbqECb4MK%2FkC6hLaK0WjV1Ahns30Ehs%2BCfMQmo85rsb1lpI7ltYGXGUgVCmfVCM%2FN%2FIEpxXFmS64fnxOlh%2BFCqssPde0%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(二å��二):Redis è¿�维监æ�§ï¼ˆæŒ‡æ ‡ã€�体系建设ã€�工具使用)</a> </p><p><a href="https://link.segmentfault.com/?enc=2FB3mT9qorobaZaVR6oonw%3D%3D.tSg1%2Fs6oM910dVl%2FRTg1ESr1RvhC9kMznn8sPTTYUddJ5cvcQ2pzXzAe01hz6%2FaYiByl3pLEK4y1Fsb%2BKhNiZBfL5qKjFljxfOvagKOi8G3XCsCcRukvTDd92pzM2H%2Bs2mTUGxAlqS8tAMGqdMQPauwu2pQ0ZN77Jm8HNcbj2KXjLi7d6X%2Bn6lM7wboggScTsONgA1ZKNnbQGTnwbl0c9CpvBtYUVNs2D4C4xEWx6r7xJpVxC%2BtoaRbApZz2i7tbKD8SKbFWL2c7aNKntFje4Ccn9zIwxNJ2HAUYly1Fzeo%3D" rel="nofollow">死磕 NoSQL æ•°æ�®åº“系列(二å��三):Redis å¼€å�‘规范</a></p><h2><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></h2><h2><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></h2> å�ˆä¸€æ¬¾å†…存数æ�®åº“横空出世,比 Redis 更强,性能直æ�¥é£™å�‡ä¸€å€�ï¼�æ�€ç–¯äº† https://segmentfault.com/a/1190000043522803 2023-03-10T14:18:31+08:00 2023-03-10T14:18:31+08:00 民工哥 https://segmentfault.com/u/jishuroad 4 <h2>什么是 KeyDB?</h2><p>KeyDB是Redis的高性能分支,专注äº�多线程,内存效ç�‡å’Œé«˜å��å��é‡�。除了多线程之外,KeyDB还具有仅在Redis Enterprise中å�¯ç”¨çš„功能,例如Active Replication,FLASH存储支æŒ�以å�Šä¸€äº›æ ¹æœ¬ä¸�å�¯ç”¨çš„功能,例如直æ�¥å¤‡ä»½åˆ°AWS S3。</p><p>KeyDBä¸�Rediså��议,模å�—和脚本ä¿�æŒ�完全兼容性。这包括脚本和事务的å�Ÿå­�性ä¿�è¯�。由äº�KeyDBä¸�Rediså¼€å�‘ä¿�æŒ�å�Œæ­¥ï¼Œå› æ­¤KeyDB是Redis功能的超集,ä»�而使KeyDBå�–代了ç�°æœ‰Redis部署。</p><p>在相å�Œçš„硬件上,KeyDBæ¯�ç§’å�¯ä»¥æ‰§è¡Œçš„æŸ¥è¯¢æ•°é‡�是Redis的两å€�,而延迟å�´é™�ä½�了60%。Active-Replication简化了热备用故障转移,使您å�¯ä»¥è½»æ�¾åœ°åœ¨å‰¯æœ¬ä¸Šåˆ†é…�写æ“�作并使用基äº�TCP的简å�•负载平衡/故障转移。KeyDB的高性能å�¯è®©æ‚¨åœ¨æ›´å°‘的硬件上å�šæ›´å¤šçš„äº‹æƒ…ï¼Œä»�而é™�ä½�了è¿�è�¥æˆ�本和å¤�æ�‚性。<img src="/img/remote/1460000043522805" alt="图片" title="图片"><img src="/img/remote/1460000043522806" alt="图片" title="图片">在此处查看完整的基准测试结æ�œå’Œè®¾ç½®ä¿¡æ�¯ï¼š</p><ul><li><a href="https://link.segmentfault.com/?enc=XEeQgJrrLaQHW0AG1TxvxA%3D%3D.RwApJEYKiagKgNaegQ0Fu%2BIAi%2F%2Fym9PQX8OTRqVXWUWOZExmNEDbLBt6x7IuofMp8BXPMEiOW%2Bh8CtoS5%2BlulQ%3D%3D" rel="nofollow">https://docs.keydb.dev/blog/2019/10/07/blog-post/</a></li></ul><h2>èµ°è¿› KeyDB</h2><p>KeyDB项目是ä»�redis fork出æ�¥çš„分支。众所周知redis是一个å�•线程的kv内存存储系统,而KeyDB在100%兼容redis API的情况下将redisæ”¹é€ æˆ�多线程。</p><p>项目git地å�€ï¼š</p><ul><li><a href="https://link.segmentfault.com/?enc=aTP4L2o0FYVvLMFtEBBzVA%3D%3D.ioDdeeESpMt0nGw2g%2FhYfMXFEungYMcALCJ1rJlV0%2FSOJ8q%2FPJ2dopZft8Fn9E86" rel="nofollow">https://github.com/JohnSully/KeyDB</a></li></ul><p>网上公开的技术细节比较少,本文基本是通过阅读æº�ç �总结出æ�¥çš„,如有错æ¼�之处欢è¿�指正。</p><h2>多线程æ�¶æ�„</h2><h4>线程模å�‹</h4><p>KeyDBå°†rediså�Ÿæ�¥çš„主线程拆分æˆ�了主线程和worker线程。æ¯�个worker线程都是io线程,负责监å�¬ç«¯å�£ï¼Œaccept请求,读å�–æ•°æ�®å’Œè§£æ��å��议。如图所示:<img src="/img/remote/1460000043522807" alt="图片" title="图片">KeyDB使用了<code>SO_REUSEPORT</code>特性,多个线程å�¯ä»¥ç»‘定监å�¬å�Œä¸ªç«¯å�£ã€‚</p><p>æ¯�个worker线程å�šäº†cpuç»‘æ ¸ï¼Œè¯»å�–æ•°æ�®ä¹Ÿä½¿ç”¨äº†<code>SO_INCOMING_CPU</code>特性,指定cpuæ�¥æ”¶æ•°æ�®ã€‚</p><p>è§£æ��å��议之å��æ¯�个线程都会å�»æ“�作内存中的数æ�®ï¼Œç”±ä¸€æŠŠå…¨å±€é”�æ�¥æ�§åˆ¶å¤šçº¿ç¨‹è®¿é—®å†…存数æ�®ã€‚</p><p>主线程其å®�也是一个worker线程,包括了worker线程的工作内容,å�Œæ—¶ä¹ŸåŒ…括å�ªæœ‰ä¸»çº¿ç¨‹æ‰�å�¯ä»¥å®Œæˆ�的工作内容。在workerçº¿ç¨‹æ•°ç»„ä¸­ä¸‹æ ‡ä¸º0的就是主线程。</p><p>主线程的主è¦�工作在å®�ç�°<code>serverCron</code>,包括:</p><ul><li>处ç�†ç»Ÿè®¡</li><li>客户端链æ�¥ç®¡ç�†</li><li>dbæ•°æ�®çš„resizeå’Œreshard</li><li>处ç�†aof</li><li>replication主备å�Œæ­¥</li><li>cluster模å¼�下的任务</li></ul><h4>链æ�¥ç®¡ç�†</h4><p>在redis中所有链æ�¥ç®¡ç�†éƒ½æ˜¯åœ¨ä¸€ä¸ªçº¿ç¨‹ä¸­å®Œæˆ�的。在KeyDB的设计中,æ¯�个worker线程负责一组链æ�¥ï¼Œæ‰€æœ‰çš„链æ�¥æ�’入到本线程的链æ�¥åˆ—表中维护。链æ�¥çš„产生ã€�工作ã€�销æ¯�必须在å�Œä¸ªçº¿ç¨‹ä¸­ã€‚æ¯�个链æ�¥æ–°å¢�一个字段</p><pre><code>int iel; /* the event loop index we're registered with */  </code></pre><p>用æ�¥è¡¨ç¤ºé“¾æ�¥å±�äº�哪个线程æ�¥ç®¡ã€‚</p><p>KeyDB维护了三个关键的数æ�®ç»“æ�„å�šé“¾æ�¥ç®¡ç�†ï¼š</p><ul><li><code>clients_pending_write</code>:线程专å±�的链表,维护å�Œæ­¥ç»™å®¢æˆ·é“¾æ�¥å�‘é€�æ•°æ�®çš„队列</li><li><code>clients_pending_asyncwrite</code>:线程专å±�的链表,维护异步给客户链æ�¥å�‘é€�æ•°æ�®çš„队列</li><li><code>clients_to_close</code>:全局链表,维护需è¦�异步关闭的客户链æ�¥</li></ul><p>分æˆ�å�Œæ­¥å’Œå¼‚æ­¥ä¸¤ä¸ªé˜Ÿåˆ—ï¼Œæ˜¯å› ä¸ºredis有些è�”动api,比如<code>pub/sub</code>,pub之å��需è¦�ç»™sub的客户端å�‘é€�消æ�¯ï¼Œpub执行的线程和sub的客户端所在线程ä¸�是å�Œä¸€ä¸ªçº¿ç¨‹ï¼Œä¸ºäº†å¤„ç�†è¿™ç§�情况,KeyDB将需è¦�ç»™é��本线程的客户端å�‘é€�æ•°æ�®ç»´æŠ¤åœ¨å¼‚步队列中。</p><p>å�Œæ­¥å�‘é€�的逻辑比较简å�•,都是在本线程中完æˆ�,以下图æ�¥è¯´æ˜�如何å�Œæ­¥ç»™å®¢æˆ·ç«¯å�‘é€�æ•°æ�®ï¼š<img src="/img/remote/1460000043522808" alt="图片" title="图片">如上文所æ��到的,一个链æ�¥çš„创建ã€�æ�¥æ”¶æ•°æ�®ã€�å�‘é€�æ•°æ�®ã€�释放链æ�¥éƒ½å¿…须在å�Œä¸ªçº¿ç¨‹æ‰§è¡Œã€‚异步å�‘é€�涉å�Šåˆ°ä¸¤ä¸ªçº¿ç¨‹ä¹‹é—´çš„交互。KeyDB通过管é�“åœ¨ä¸¤ä¸ªçº¿ç¨‹ä¸­ä¼ é€’æ¶ˆæ�¯ï¼š</p><pre><code>int fdCmdWrite; //写管é�“  int fdCmdRead; //读管é�“  </code></pre><p>本地线程需è¦�异步å�‘é€�æ•°æ�®æ—¶ï¼Œå…ˆæ£€æŸ¥client是å�¦å±�äº�本地线程,é��本地线程è�·å�–到client专å±�的线程ID,之å��给专å±�的线程管到å�‘é€�<code>AE_ASYNC_OP::CreateFileEvent</code>çš„æ“�作,è¦�æ±‚æ·»åŠ å†™socket事件。专å±�线程在处ç�†ç®¡é�“消æ�¯æ—¶å°†å¯¹åº”çš„è¯·æ±‚æ·»åŠ åˆ°å†™äº‹ä»¶ä¸­ï¼Œå¦‚å›¾æ‰€ç¤ºï¼š<img src="/img/remote/1460000043522809" alt="图片" title="图片">redis有些关闭客户端的请求并é��完全是在链æ�¥æ‰€åœ¨çš„线程执行关闭,所以在这里维护了一个全局的异步关闭链表。<img src="/img/remote/1460000043522810" alt="图片" title="图片"></p><h4>é”�机制</h4><p>KeyDBå®�ç�°äº†ä¸€å¥—类似spinlockçš„é”�机制,称之为fastlock。</p><p>fastlock的主è¦�æ•°æ�®ç»“æ�„有:</p><pre><code>struct ticket { uint16_t m_active; //è§£é”�+1 uint16_t m_avail; //åŠ é”�+1 }; struct fastlock { volatile struct ticket m_ticket; volatile int m_pidOwner; //当å‰�è§£é”�的线程id volatile int m_depth; //当å‰�线程é‡�å¤�åŠ é”�的次数 }; </code></pre><p>使用å�Ÿå­�æ“�作<code>__atomic_load_2</code>,<code>__atomic_fetch_add</code>,<code>__atomic_compare_exchange</code>æ�¥é€šè¿‡æ¯”较<code>m_active=m_avail</code>判断是å�¦å�¯ä»¥è�·å�–é”�。fastlockæ��供了两ç§�è�·å�–é”�的方å¼�:</p><ul><li>try_lock:一次è�·å�–失败,直æ�¥è¿”å›�</li><li>lock:忙等,æ¯�<code>1024 * 1024</code>次忙等å��使用<code>sched_yield</code> 主动交出cpu,挪到cpu的任务末尾等待执行。</li></ul><p>在KeyDB中将<code>try_lock</code>和事件结å�ˆèµ·æ�¥ï¼Œæ�¥é�¿å…�忙等的情况å�‘生。æ¯�个客户端有一个专å±�çš„lock,在读å�–客户端数æ�®ä¹‹å‰�会先å°�è¯•åŠ é”�,如æ�œå¤±è´¥ï¼Œåˆ™é€€å‡ºï¼Œå› 为数æ�®è¿˜æœªè¯»å�–,所以在下个<code>epoll_wait</code>处ç�†äº‹ä»¶å¾ªç�¯ä¸­å�¯ä»¥å†�次处ç�†ã€‚<img src="/img/remote/1460000043522811" alt="图片" title="图片"></p><h2>Active-Replica</h2><p>KeyDBå®�ç�°äº†å¤šæ´»çš„æœºåˆ¶ï¼Œæ¯�个replicaå�¯è®¾ç½®æˆ�å�¯å†™é��å�ªè¯»ï¼Œreplica之间互相å�Œæ­¥æ•°æ�®ã€‚主è¦�特性有:</p><ul><li>æ¯�个replica有个uuidæ ‡å¿—ï¼Œç”¨æ�¥å�»é™¤ç�¯å½¢å¤�制</li><li>æ–°å¢�åŠ rreplay API,将å¢�é‡�命令打包æˆ�rreplay命令,带上本地的uuid</li><li>key,valueåŠ ä¸Šæ—¶é—´æˆ³ç‰ˆæœ¬å�·ï¼Œä½œä¸ºå†²çª�æ ¡éªŒï¼Œå¦‚æ�œæœ¬åœ°æœ‰ç›¸å�Œçš„key且时间戳版本å�·å¤§äº�å�Œæ­¥è¿‡æ�¥çš„æ•°æ�®ï¼Œæ–°å†™å…¥å¤±è´¥ã€‚采用当å‰�时间戳å�‘左移20ä½�,å†�åŠ ä¸Šå��44ä½�自å¢�的方å¼�æ�¥è�·å�–key的时间戳版本å�·ã€‚</li></ul><h2>文档</h2><ul><li><a href="https://link.segmentfault.com/?enc=YSyzamhymphsWI8v9OCgUw%3D%3D.kAi0WUum3I%2FotO%2BQXcFqvZ2ypH4f8VY7tCDEkQEW%2FjoM32JxsctaLNZPys%2F%2Fd3x%2F" rel="nofollow">https://docs.keydb.dev/docs/commands</a></li></ul><p>æ„Ÿè°¢é˜…è¯»ï¼Œå¸Œæœ›å¯¹ä½ æœ‰æ‰€å¸®åŠ©Â :)</p><p>æ�¥æº�:<a href="https://link.segmentfault.com/?enc=MMKxx7JxpX3Rx38gHGLMNQ%3D%3D.swa8VnSml3nGJyo91phRrNccKgWWL%2BM6%2FEa5aHwteVZkY5Tjwc7gFDWhViZzEnSdWUNvy9gWCx%2BFad00rBBA5bY7bGodp%2BAlaRdd8UW7Do%2FIiWV457Ot8009bHTmqc3RvvU1JsHIMe30hC5jTq61S7TEvvKUPnwI9obyq62pGpdqRHVzFjd55bAWeYXdYi34jkwBdRVVZv67p2akfLGGKnF1pGo3jXiIgblPUAP3q2F%2FhfopVmD3kUcBU%2FBfNKdvxKYp7p4JGppPjVm7Hup68bmjVD%2Fu4ph7u85sInDJ25M%3D" rel="nofollow">å�ˆä¸€æ¬¾å†…存数æ�®åº“横空出世,比 Redis 更强,性能直æ�¥é£™å�‡ä¸€å€�ï¼�</a></p> å†�有è°�说还ä¸�会数æ�®åº“基础知识点ï¼�就把这个直æ�¥ç”©è¿‡å�» https://segmentfault.com/a/1190000043434720 2023-02-16T20:50:08+08:00 2023-02-16T20:50:08+08:00 民工哥 https://segmentfault.com/u/jishuroad 2 <p><a href="https://link.segmentfault.com/?enc=5YxTnsHY8UeLWRBzF7kffA%3D%3D.C9BM0jfqEZzSAa58qvjiFW4jmOlp3mdaRe02lp41%2F%2B%2BnrRpf3xCoFH3jkXyskyf%2FxinEzZRlMSXypiT4YRehRLV3WUAcKubZMB4j9owjaRNWX9D2NuoRlPHTFuyBsmJ2OSkckWiVlo5cZcJmPUBH3FNtKyWuym6RSqjmwx3Jz5TNgHkvkZT01jAujJeVZ8cr7IizYQ4jh7jIPZhPTyID3SnUg7sKgd8KWrV8ejqBEj2335z0Gw%2FA6lPXauEfWErI9WwdEgARBlwMKRFdIXB4aTJKqIi3Gs0EqGOuWgIoUug%3D" rel="nofollow">死磕数æ�®åº“系列(一):关系å�‹æ•°æ�®åº“是如何工作的?</a> </p><p><a href="https://link.segmentfault.com/?enc=AxeLFZ5K%2BMHfa0JD%2BttZVg%3D%3D.KaLLGp6hKBomSmTznzvWtrXL1AQO%2Fh0t92XqteJFrZUmjpKWGriqup%2BhaDfIxkERBuREKPq2keT1iyXhm1IHDp3x8M0c3y0BCwrZWh4kEROfRGX0AeNwEG5py%2BpKjMmwa7ClRMonN5RJqZnblT1%2FWDqSMWcGeZPzwP%2FDJ7qU7zysur3qLZTXR3hhAYcQPTutWGt5YCGgxnFVxvLfX6QDKH%2FJizQPk95PykJmXPv38gErsL8C%2BWMK9CG5mkbMK6yCe4b8DCiK8m5R2HFxa0K0Ba%2FeL%2FKHRqngjsImoE3G62U%3D" rel="nofollow">死磕数æ�®åº“系列(二):数æ�®åº“ç³»ç»Ÿæ ¸å¿ƒçŸ¥è¯†ç‚¹è¯¦è§£</a> </p><p><a href="https://link.segmentfault.com/?enc=RnMwA6NeqcBe782r8YYKLw%3D%3D.%2F97J6Mxx34iskEMhoIUVx6UDL%2FDui29lLEyJxw2Yb6erNovy3TGGe2P5twXloE5rAauTJRFMUBhaejreRaKSGBOLqyteLaIHzhBleeH47wKEwDPkpCGrY9WfGeGryoHO%2FjMXNW%2FmY3yh%2BX%2BYafr5VW4xwy7HxtxWzA2jc82gH%2Bye8J%2BNiDl2VXB7H7C2wij2D8PmqKIu9YZhW5xwp8O50S4u%2BVIBHTxyVeW%2F6Yy2Zly%2Blnbj97unVbDHtzqle81wxgH%2BAtrGso9dt9UyKfG2xf%2FlLwHuoeaGYGb4D6aZrME%3D" rel="nofollow">死磕数æ�®åº“系列(三):关系å�‹æ•°æ�®åº“设计ç�†è®ºä¸�æµ�程详解</a></p><h2><strong>SQL语法基础</strong></h2><h4><strong>基础</strong></h4><p>模å¼�定义了数æ�®å¦‚何存储ã€�å­˜å‚¨ä»€ä¹ˆæ ·çš„æ•°æ�®ä»¥å�Šæ•°æ�®å¦‚何分解等信æ�¯ï¼Œæ•°æ�®åº“和表都有模å¼�。</p><p>主键的值ä¸�å…�许修改,也ä¸�å…�许å¤�用(ä¸�能使用已ç»�åˆ é™¤çš„ä¸»é”®å€¼èµ‹ç»™æ–°æ•°æ�®è¡Œçš„主键)。</p><p>SQL(Structured Query Language)ï¼Œæ ‡å‡† SQL ç”± ANSI æ ‡å‡†å§”å‘˜ä¼šç®¡ç�†ï¼Œä»�而称为 ANSI SQL。å�„个 DBMS 都有自己的å®�ç�°ï¼Œå¦‚ PL/SQLã€�Transact-SQL 等。</p><p>SQL 语å�¥ä¸�区分大å°�写,但是数æ�®åº“表å��ã€�列å��和值是å�¦åŒºåˆ†ä¾�èµ–äº�具体的 DBMS 以å�Šé…�置。</p><p>SQL 支æŒ�以下三ç§�注释:</p><pre><code class="text"># 注释 SELECT * FROM mytable; -- 注释 /* 注释1 注释2 */</code></pre><p>æ•°æ�®åº“创建ä¸�使用:</p><pre><code class="text">CREATE DATABASE test; USE test;</code></pre><h4><strong>创建表</strong></h4><pre><code class="text">CREATE TABLE mytable ( id INT NOT NULL AUTO_INCREMENT, col1 INT NOT NULL DEFAULT 1, col2 VARCHAR(45) NULL, col3 DATE NULL, PRIMARY KEY (`id`));</code></pre><h4><strong>修改表</strong></h4><p>æ·»åŠ åˆ—</p><pre><code class="text">ALTER TABLE mytable ADD col CHAR(20);</code></pre><p>修改列和å±�性(读者@CodeHourra补充)</p><pre><code class="text">---ALTER TABLE 表å�� CHANGE å�Ÿå­—段å�� 新字段å�� 字段类å�‹ 约æ�Ÿæ�¡ä»¶ ALTER TABLE mytable CHANGE col col1 CHAR(32) NOT NULL DEFAULT '123';</code></pre><p>åˆ é™¤åˆ—</p><pre><code class="text">ALTER TABLE mytable DROP COLUMN col;</code></pre><p>åˆ é™¤è¡¨</p><pre><code class="text">DROP TABLE mytable;</code></pre><h4><strong>æ�’å…¥</strong></h4><p>普通æ�’å…¥</p><pre><code class="text">INSERT INTO mytable(col1, col2) VALUES(val1, val2);</code></pre><p>æ�’入检索出æ�¥çš„æ•°æ�®</p><pre><code class="text">INSERT INTO mytable1(col1, col2) SELECT col1, col2 FROM mytable2;</code></pre><p>将一个表的内容æ�’入到一个新表</p><pre><code class="text">CREATE TABLE newtable AS SELECT * FROM mytable;</code></pre><h4><strong>æ›´æ–°</strong></h4><pre><code class="text">UPDATE mytable SET col = val WHERE id = 1;</code></pre><h4><strong>åˆ é™¤</strong></h4><pre><code class="text">DELETE FROM mytable WHERE id = 1;</code></pre><p>TRUNCATE TABLE å�¯ä»¥æ¸…ç©ºè¡¨ï¼Œä¹Ÿå°±æ˜¯åˆ é™¤æ‰€æœ‰è¡Œã€‚</p><pre><code class="text">TRUNCATE TABLE mytable;</code></pre><p>ä½¿ç”¨æ›´æ–°å’Œåˆ é™¤æ“�作时一定è¦�用 WHERE å­�å�¥ï¼Œä¸�ç„¶ä¼šæŠŠæ•´å¼ è¡¨çš„æ•°æ�®éƒ½ç ´å��。å�¯ä»¥å…ˆç”¨ SELECT 语å�¥è¿›è¡Œæµ‹è¯•ï¼Œé˜²æ­¢é”™è¯¯åˆ é™¤ã€‚</p><h4><strong>查询</strong></h4><p>DISTINCT</p><p>相å�Œå€¼å�ªä¼šå‡ºç�°ä¸€æ¬¡ã€‚它作用äº�所有列,也就是说所有列的值都相å�Œæ‰�算相å�Œã€‚</p><pre><code class="text">SELECT DISTINCT col1, col2 FROM mytable;</code></pre><p>LIMIT</p><p>é™�制返å›�的行数。å�¯ä»¥æœ‰ä¸¤ä¸ªå�‚数,第一个å�‚数为起始行,ä»� 0 开始;第二个å�‚数为返å›�的总行数。</p><p>è¿”å›�å‰� 5 行:</p><pre><code class="text">SELECT * FROM mytable LIMIT 5; SELECT * FROM mytable LIMIT 0, 5;</code></pre><p>è¿”å›�第 3 ~ 5 行:</p><pre><code class="text">SELECT * FROM mytable LIMIT 2, 3;</code></pre><h4><strong>æ�’åº�</strong></h4><ul><li>ASC : å�‡åº�(默认)</li><li>DESC : é™�åº�</li></ul><p>å�¯ä»¥æŒ‰å¤šä¸ªåˆ—进行æ�’åº�,并且为æ¯�个列指定ä¸�å�Œçš„æ�’åº�æ–¹å¼�:</p><pre><code class="text">SELECT * FROM mytable ORDER BY col1 DESC, col2 ASC;</code></pre><h4><strong>过滤</strong></h4><p>ä¸�进行过滤的数æ�®é��å¸¸å¤§ï¼Œå¯¼è‡´é€šè¿‡ç½‘ç»œä¼ è¾“äº†å¤šä½™çš„æ•°æ�®ï¼Œä»�è€Œæµªè´¹äº†ç½‘ç»œå¸¦å®½ã€‚å› æ­¤å°½é‡�使用 SQL 语å�¥æ�¥è¿‡æ»¤ä¸�å¿…è¦�的数æ�®ï¼Œè€Œä¸�æ˜¯ä¼ è¾“æ‰€æœ‰çš„æ•°æ�®åˆ°å®¢æˆ·ç«¯ä¸­ç„¶å��由客户端进行过滤。</p><pre><code class="text">SELECT * FROM mytable WHERE col IS NULL;</code></pre><p>下表显示了 WHERE å­�å�¥å�¯ç”¨çš„æ“�作符</p><p><img src="/img/remote/1460000043434722" alt="" title=""></p><p>应该注æ„�到,NULL ä¸� 0ã€�空字符串都ä¸�å�Œã€‚</p><p>AND å’Œ OR 用äº�è¿�æ�¥å¤šä¸ªè¿‡æ»¤æ�¡ä»¶ã€‚优先处ç�† AND,当一个过滤表达å¼�涉å�Šåˆ°å¤šä¸ª AND å’Œ OR 时,å�¯ä»¥ä½¿ç”¨ () æ�¥å†³å®šä¼˜å…ˆçº§ï¼Œä½¿å¾—优先级关系更清晰。</p><p>IN æ“�作符用äº�匹é…�一组值,其å��也å�¯ä»¥æ�¥ä¸€ä¸ª SELECT å­�å�¥ï¼Œä»�而匹é…�å­�查询得到的一组值。</p><p>NOT æ“�作符用äº�å�¦å®šä¸€ä¸ªæ�¡ä»¶ã€‚</p><h4><strong>通é…�符</strong></h4><p>通é…�符也是用在过滤语å�¥ä¸­ï¼Œä½†å®ƒå�ªèƒ½ç”¨äº�文本字段。</p><ul><li>% 匹é…� &gt;=0 个任æ„�字符;</li><li>\_ 匹é…� ==1 个任æ„�字符;</li><li>[ ] å�¯ä»¥åŒ¹é…�集å�ˆå†…的字符,例如 [ab] 将匹é…�字符 a 或者 b。用脱字符 ^ å�¯ä»¥å¯¹å…¶è¿›è¡Œå�¦å®šï¼Œä¹Ÿå°±æ˜¯ä¸�匹é…�集å�ˆå†…的字符。</li></ul><p>使用 Like æ�¥è¿›è¡Œé€šé…�符匹é…�。</p><pre><code class="text">SELECT * FROM mytable WHERE col LIKE '[^AB]%'; -- ä¸�以 A å’Œ B 开头的任æ„�文本</code></pre><p>ä¸�è¦�滥用通é…�符,通é…�符ä½�äº�开头处匹é…�会é��常慢。</p><h4><strong>计算字段</strong></h4><p>在数æ�®åº“æœ�务器上完æˆ�æ•°æ�®çš„转æ�¢å’Œæ ¼å¼�化的工作往往比客户端上快得多,并且转æ�¢å’Œæ ¼å¼�化å��的数æ�®é‡�æ›´å°‘çš„è¯�å�¯ä»¥å‡�少网络通信é‡�。</p><p>计算字段通常需è¦�使用 AS æ�¥å�–别å��,å�¦åˆ™è¾“出的时候字段å��为计算表达å¼�。</p><pre><code class="text">SELECT col1 * col2 AS alias FROM mytable;</code></pre><p>CONCAT() 用äº�è¿�æ�¥ä¸¤ä¸ªå­—段。许多数æ�®åº“ä¼šä½¿ç”¨ç©ºæ ¼æŠŠä¸€ä¸ªå€¼å¡«å……ä¸ºåˆ—å®½ï¼Œå› æ­¤è¿�æ�¥çš„结æ�œä¼šå‡ºç�°ä¸€äº›ä¸�å¿…è¦�çš„ç©ºæ ¼ï¼Œä½¿ç”¨ TRIM() å�¯ä»¥å�»é™¤é¦–å°¾ç©ºæ ¼ã€‚</p><pre><code class="text">SELECT CONCAT(TRIM(col1), '(', TRIM(col2), ')') AS concat_col FROM mytable;</code></pre><h4><strong>函数</strong></h4><p>å�„个 DBMS 的函数都是ä¸�相å�Œçš„ï¼Œå› æ­¤ä¸�å�¯ç§»æ¤�,以下主è¦�是 MySQL 的函数。</p><h2><strong>汇总</strong></h2><p><img src="/img/remote/1460000043434723" alt="" title=""></p><pre><code class="text">SELECT AVG(DISTINCT col1) AS avg_col FROM mytable;</code></pre><h4><strong>文本处ç�†</strong></h4><p><img src="/img/remote/1460000043434724" alt="" title=""></p><p>转æ�¢ä¸ºè¯­éŸ³å€¼</p><p>其中, SOUNDEX() å�¯ä»¥å°†ä¸€ä¸ªå­—符串转æ�¢ä¸ºæ��述其语音表示的字æ¯�数字模å¼�。</p><pre><code class="text">SELECT * FROM mytable WHERE SOUNDEX(col1) = SOUNDEX('apple')</code></pre><h3><strong>日期和时间处ç�†</strong></h3><ul><li>æ—¥æœŸæ ¼å¼�: YYYY-MM-DD</li><li>æ—¶é—´æ ¼å¼�: HH:MM:SS</li></ul><p><img src="/img/remote/1460000043434725" alt="" title=""></p><pre><code class="text">mysql&gt; SELECT NOW(); 2018-4-14 20:25:11</code></pre><h3><strong>数值处ç�†</strong></h3><p><img src="/img/remote/1460000043434726" alt="" title=""></p><p><img src="/img/remote/1460000043434727" alt="" title=""></p><h4><strong>分组</strong></h4><p>分组就是把具有相å�Œçš„æ•°æ�®å€¼çš„行放在å�Œä¸€ç»„中。</p><p>å�¯ä»¥å¯¹å�Œä¸€åˆ†ç»„æ•°æ�®ä½¿ç”¨æ±‡æ€»å‡½æ•°è¿›è¡Œå¤„ç�†ï¼Œä¾‹å¦‚求分组数æ�®çš„å¹³å�‡å€¼ç­‰ã€‚</p><p>指定的分组字段除了能按该字段进行分组,也会自动按该字段进行æ�’åº�。</p><pre><code class="text">SELECT col, COUNT(*) AS num FROM mytable GROUP BY col;</code></pre><p>GROUP BY 自动按分组字段进行æ�’åº�,ORDER BY 也å�¯ä»¥æŒ‰æ±‡æ€»å­—段æ�¥è¿›è¡Œæ�’åº�。</p><pre><code class="text">SELECT col, COUNT(*) AS num FROM mytable GROUP BY col ORDER BY num;</code></pre><p>WHERE 过滤行,HAVING 过滤分组,行过滤应当先äº�分组过滤。</p><pre><code class="text">SELECT col, COUNT(*) AS num FROM mytable WHERE col &gt; 2 GROUP BY col HAVING num &gt;= 2;</code></pre><p>分组规定:</p><ul><li>GROUP BY å­�å�¥å‡ºç�°åœ¨ WHERE å­�å�¥ä¹‹å��,ORDER BY å­�å�¥ä¹‹å‰�ï¼›</li><li>除了汇总字段外,SELECT 语å�¥ä¸­çš„æ¯�一字段都必须在 GROUP BY å­�å�¥ä¸­ç»™å‡ºï¼›</li><li>NULL 的行会å�•独分为一组;</li><li>大多数 SQL å®�ç�°ä¸�支æŒ� GROUP BY 列具有å�¯å�˜é•¿åº¦çš„æ•°æ�®ç±»å�‹ã€‚</li></ul><h4><strong>å­�查询</strong></h4><p>å­�查询中å�ªèƒ½è¿”å›�一个字段的数æ�®ã€‚</p><p>å�¯ä»¥å°†å­�查询的结æ�œä½œä¸º WHRER 语å�¥çš„过滤æ�¡ä»¶:</p><pre><code class="text">SELECT * FROM mytable1 WHERE col1 IN (SELECT col2 FROM mytable2);</code></pre><p>下é�¢çš„语å�¥å�¯ä»¥æ£€ç´¢å‡ºå®¢æˆ·çš„订å�•æ•°é‡�,å­�查询语å�¥ä¼šå¯¹ç¬¬ä¸€ä¸ªæŸ¥è¯¢æ£€ç´¢å‡ºçš„æ¯�个客户执行一次:</p><pre><code class="text">SELECT cust_name, (SELECT COUNT(*) FROM Orders WHERE Orders.cust_id = Customers.cust_id) AS orders_num FROM Customers ORDER BY cust_name;</code></pre><h2><strong>è¿�æ�¥</strong></h2><p>è¿�æ�¥ç”¨äº�è¿�æ�¥å¤šä¸ªè¡¨ï¼Œä½¿ç”¨ JOIN 关键字,并且æ�¡ä»¶è¯­å�¥ä½¿ç”¨ ON 而ä¸�是 WHERE。</p><p>è¿�æ�¥å�¯ä»¥æ›¿æ�¢å­�查询,并且比å­�查询的效ç�‡ä¸€èˆ¬ä¼šæ›´å¿«ã€‚</p><p>å�¯ä»¥ç”¨ AS 给列å��ã€�计算字段和表å��å�–别å��,给表å��å�–别å��是为了简化 SQL 语å�¥ä»¥å�Šè¿�æ�¥ç›¸å�Œè¡¨ã€‚</p><h4><strong>内è¿�æ�¥</strong></h4><p>内è¿�æ�¥å�ˆç§°ç­‰å€¼è¿�æ�¥ï¼Œä½¿ç”¨ INNER JOIN 关键字。</p><pre><code class="text">SELECT A.value, B.value FROM tablea AS A INNER JOIN tableb AS B ON A.key = B.key;</code></pre><p>å�¯ä»¥ä¸�æ˜�确使用 INNER JOIN,而使用普通查询并在 WHERE 中将两个表中è¦�è¿�æ�¥çš„列用等值方法è¿�æ�¥èµ·æ�¥ã€‚</p><pre><code class="text">SELECT A.value, B.value FROM tablea AS A, tableb AS B WHERE A.key = B.key;</code></pre><p>在没有æ�¡ä»¶è¯­å�¥çš„æƒ…况下返å›�笛å�¡å°”积。</p><h4><strong>自è¿�æ�¥</strong></h4><p>自è¿�æ�¥å�¯ä»¥çœ‹æˆ�内è¿�æ�¥çš„一ç§�,å�ªæ˜¯è¿�æ�¥çš„表是自身而已。</p><p>ä¸€å¼ å‘˜å·¥è¡¨ï¼ŒåŒ…å�«å‘˜å·¥å§“å��和员工所å±�部门,è¦�找出ä¸� Jim 处在å�Œä¸€éƒ¨é—¨çš„æ‰€æœ‰å‘˜å·¥å§“å��。</p><p>å­�查询版本</p><pre><code class="text">SELECT name FROM employee WHERE department = ( SELECT department FROM employee WHERE name = &quot;Jim&quot;);</code></pre><p>自è¿�æ�¥ç‰ˆæœ¬</p><pre><code class="text">SELECT e1.name FROM employee AS e1 INNER JOIN employee AS e2 ON e1.department = e2.department AND e2.name = &quot;Jim&quot;;</code></pre><h4><strong>自然è¿�æ�¥</strong></h4><p>自然è¿�æ�¥æ˜¯æŠŠå�Œå��列通过等值测试è¿�æ�¥èµ·æ�¥çš„,å�Œå��列å�¯ä»¥æœ‰å¤šä¸ªã€‚</p><p>内è¿�æ�¥å’Œè‡ªç„¶è¿�æ�¥çš„区别: 内è¿�æ�¥æ��ä¾›è¿�æ�¥çš„列,而自然è¿�æ�¥è‡ªåЍè¿�æ�¥æ‰€æœ‰å�Œå��列。</p><pre><code class="text">SELECT A.value, B.value FROM tablea AS A NATURAL JOIN tableb AS B;</code></pre><h4><strong>外è¿�æ�¥</strong></h4><p>外è¿�æ�¥ä¿�留了没有关è�”的那些行。分为左外è¿�æ�¥ï¼Œå�³å¤–è¿�æ�¥ä»¥å�Šå…¨å¤–è¿�æ�¥ï¼Œå·¦å¤–è¿�æ�¥å°±æ˜¯ä¿�留左表没有关è�”的行。</p><p>检索所有顾客的订å�•ä¿¡æ�¯ï¼ŒåŒ…括还没有订å�•ä¿¡æ�¯çš„顾客。</p><pre><code class="text">SELECT Customers.cust_id, Orders.order_num FROM Customers LEFT OUTER JOIN Orders ON Customers.cust_id = Orders.cust_id;</code></pre><p><img src="/img/remote/1460000043434728" alt="" title=""></p><p><img src="/img/remote/1460000043434729" alt="" title=""></p><h2><strong>组å�ˆæŸ¥è¯¢</strong></h2><p>使用 UNION æ�¥ç»„å�ˆä¸¤ä¸ªæŸ¥è¯¢ï¼Œå¦‚æ�œç¬¬ä¸€ä¸ªæŸ¥è¯¢è¿”å›� M 行,第二个查询返å›� N 行,那么组å�ˆæŸ¥è¯¢çš„结æ�œä¸€èˆ¬ä¸º M+N 行。</p><p>æ¯�个查询必须包å�«ç›¸å�Œçš„列ã€�表达å¼�å’Œè�šé›†å‡½æ•°ã€‚</p><p>默认会å�»é™¤ç›¸å�Œè¡Œï¼Œå¦‚æ�œéœ€è¦�ä¿�留相å�Œè¡Œï¼Œä½¿ç”¨ UNION ALL。</p><p>å�ªèƒ½åŒ…å�«ä¸€ä¸ª ORDER BY å­�å�¥ï¼Œå¹¶ä¸”å¿…é¡»ä½�äº�语å�¥çš„æœ€å��。</p><pre><code class="text">SELECT col FROM mytable WHERE col = 1 UNION SELECT col FROM mytable WHERE col =2;</code></pre><h2><strong>视图</strong></h2><p>视图是虚拟的表,本身ä¸�包å�«æ•°æ�®ï¼Œä¹Ÿå°±ä¸�能对其进行索引æ“�作。</p><p>对视图的æ“�作和对普通表的æ“�ä½œä¸€æ ·ã€‚</p><p>视图具有如下好处:</p><ul><li>简化å¤�æ�‚çš„ SQL æ“�作,比如å¤�æ�‚çš„è¿�æ�¥ï¼›</li><li>å�ªä½¿ç”¨å®�际表的一部分数æ�®ï¼›</li><li>通过å�ªç»™ç”¨æˆ·è®¿é—®è§†å›¾çš„æ�ƒé™�,ä¿�è¯�æ•°æ�®çš„安全性;</li><li>更改数æ�®æ ¼å¼�和表示。</li></ul><pre><code class="text">CREATE VIEW myview AS SELECT Concat(col1, col2) AS concat_col, col3*col4 AS compute_col FROM mytable WHERE col5 = val;</code></pre><h2><strong>存储过程</strong></h2><p>存储过程å�¯ä»¥çœ‹æˆ�是对一系列 SQL æ“�作的批处ç�†ã€‚</p><p>使用存储过程的好处:</p><ul><li>代ç �å°�装,ä¿�è¯�了一定的安全性;</li><li>代ç �å¤�用;</li><li>ç”±äº�æ˜¯é¢„å…ˆç¼–è¯‘ï¼Œå› æ­¤å…·æœ‰å¾ˆé«˜çš„æ€§èƒ½ã€‚</li></ul><p>命令行中创建存储过程需è¦�è‡ªå®šä¹‰åˆ†éš”ç¬¦ï¼Œå› ä¸ºå‘½ä»¤è¡Œæ˜¯ä»¥ ; 为结æ�Ÿç¬¦ï¼Œè€Œå­˜å‚¨è¿‡ç¨‹ä¸­ä¹ŸåŒ…å�«äº†åˆ†å�·ï¼Œå› 此会错误把这部分分å�·å½“æˆ�是结æ�Ÿç¬¦ï¼Œé€ æˆ�语法错误。</p><p>包å�« inã€�out å’Œ inout 三ç§�å�‚数。</p><p>ç»™å�˜é‡�赋值都需è¦�用 select into 语å�¥ã€‚</p><p>æ¯�次å�ªèƒ½ç»™ä¸€ä¸ªå�˜é‡�赋值,ä¸�支æŒ�集å�ˆçš„æ“�作。</p><pre><code class="text">delimiter // create procedure myprocedure( out ret int ) begin declare y int; select sum(col1) from mytable into y; select y*y into ret; end // delimiter ; call myprocedure(@ret); select @ret;</code></pre><h2><strong>æ¸¸æ ‡</strong></h2><p>åœ¨å­˜å‚¨è¿‡ç¨‹ä¸­ä½¿ç”¨æ¸¸æ ‡å�¯ä»¥å¯¹ä¸€ä¸ªç»“æ�œé›†è¿›è¡Œç§»åЍé��å�†ã€‚</p><p>æ¸¸æ ‡ä¸»è¦�用äº�交互å¼�应用,其中用户需è¦�对数æ�®é›†ä¸­çš„ä»»æ„�行进行æµ�览和修改。</p><p>ä½¿ç”¨æ¸¸æ ‡çš„å››ä¸ªæ­¥éª¤:</p><ol><li>声æ˜�æ¸¸æ ‡ï¼Œè¿™ä¸ªè¿‡ç¨‹æ²¡æœ‰å®�际检索出数æ�®ï¼›</li><li>æ‰“å¼€æ¸¸æ ‡ï¼›</li><li>å�–出数æ�®ï¼›</li><li>å…³é—­æ¸¸æ ‡ï¼›</li></ol><pre><code class="text">delimiter // create procedure myprocedure(out ret int) begin declare done boolean default 0; declare mycursor cursor for select col1 from mytable; # 定义了一个 continue handler,当 sqlstate '02000' 这个æ�¡ä»¶å‡ºç�°æ—¶ï¼Œä¼šæ‰§è¡Œ set done = 1 declare continue handler for sqlstate '02000' set done = 1; open mycursor; repeat fetch mycursor into ret; select ret; until done end repeat; close mycursor; end // delimiter ;</code></pre><h2><strong>触å�‘器</strong></h2><p>触å�‘器会在æŸ�个表执行以下语å�¥æ—¶è€Œè‡ªåŠ¨æ‰§è¡Œ: DELETEã€�INSERTã€�UPDATE。</p><p>触å�‘器必须指定在语å�¥æ‰§è¡Œä¹‹å‰�还是之å��自动执行,之å‰�执行使用 BEFORE 关键字,之å��执行使用 AFTER 关键字。BEFORE 用äº�æ•°æ�®éªŒè¯�和净化,AFTER 用äº�审计跟踪,将修改记录到å�¦å¤–ä¸€å¼ è¡¨ä¸­ã€‚</p><p>INSERT 触å�‘器包å�«ä¸€ä¸ªå��为 NEW 的虚拟表。</p><pre><code class="text">CREATE TRIGGER mytrigger AFTER INSERT ON mytable FOR EACH ROW SELECT NEW.col into @result; SELECT @result; -- è�·å�–结æ�œ</code></pre><p>DELETE 触å�‘器包å�«ä¸€ä¸ªå��为 OLD 的虚拟表,并且是å�ªè¯»çš„。</p><p>UPDATE 触å�‘器包å�«ä¸€ä¸ªå��为 NEW 和一个å��为 OLD 的虚拟表,其中 NEW 是å�¯ä»¥è¢«ä¿®æ”¹çš„,而 OLD 是å�ªè¯»çš„。</p><p>MySQL ä¸�å…�许在触å�‘器中使用 CALL 语å�¥ï¼Œä¹Ÿå°±æ˜¯ä¸�能调用存储过程。</p><h2><strong>事务管ç�†</strong></h2><p>基本术语:</p><ul><li>事务(transaction)指一组 SQL 语å�¥ï¼›</li><li>å›�退(rollback)指撤销指定 SQL 语å�¥çš„过程;</li><li>æ��交(commit)指将未存储的 SQL 语å�¥ç»“æ�œå†™å…¥æ•°æ�®åº“表;</li><li>ä¿�留点(savepoint)指事务处ç�†ä¸­è®¾ç½®çš„临时å� ä½�符(placeholder)ï¼Œä½ å�¯ä»¥å¯¹å®ƒå�‘布å›�退(ä¸�å›�退整个事务处ç�†ä¸�å�Œ)。</li></ul><p>ä¸�能å›�退 SELECT 语å�¥ï¼Œå›�退 SELECT 语å�¥ä¹Ÿæ²¡æ„�义;也ä¸�能å›�退 CREATE å’Œ DROP 语å�¥ã€‚</p><p>MySQL 的事务æ��交默认是éš�å¼�æ��交,æ¯�执行一æ�¡è¯­å�¥å°±æŠŠè¿™æ�¡è¯­å�¥å½“æˆ�一个事务然å��进行æ��交。当出ç�° START TRANSACTION 语å�¥æ—¶ï¼Œä¼šå…³é—­éš�å¼�æ��交;当 COMMIT 或 ROLLBACK 语å�¥æ‰§è¡Œå��,事务会自动关闭,é‡�æ–°æ�¢å¤�éš�å¼�æ��交。</p><p>通过设置 autocommit 为 0 å�¯ä»¥å�–消自动æ��交;autocommit æ ‡è®°æ˜¯é’ˆå¯¹æ¯�个è¿�æ�¥è€Œä¸�是针对æœ�务器的。</p><p>如æ�œæ²¡æœ‰è®¾ç½®ä¿�留点,ROLLBACK 会å›�退到 START TRANSACTION 语å�¥å¤„;如æ�œè®¾ç½®äº†ä¿�留点,并且在 ROLLBACK 中指定该ä¿�留点,则会å›�退到该ä¿�留点。</p><pre><code class="text">START TRANSACTION // ... SAVEPOINT delete1 // ... ROLLBACK TO delete1 // ... COMMIT</code></pre><h2><strong>字符集</strong></h2><p>基本术语:</p><ul><li>字符集为字æ¯�和符å�·çš„集å�ˆï¼›</li><li>ç¼–ç �为æŸ�个字符集æˆ�员的内部表示;</li><li>æ ¡å¯¹å­—ç¬¦æŒ‡å®šå¦‚ä½•æ¯”è¾ƒï¼Œä¸»è¦�用äº�æ�’åº�和分组。</li></ul><p>é™¤äº†ç»™è¡¨æŒ‡å®šå­—ç¬¦é›†å’Œæ ¡å¯¹å¤–ï¼Œä¹Ÿå�¯ä»¥ç»™åˆ—指定:</p><pre><code class="text">CREATE TABLE mytable (col VARCHAR(10) CHARACTER SET latin COLLATE latin1_general_ci ) DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;</code></pre><p>å�¯ä»¥åœ¨æ�’åº�ã€�åˆ†ç»„æ—¶æŒ‡å®šæ ¡å¯¹:</p><pre><code class="text">SELECT * FROM mytable ORDER BY col COLLATE latin1_general_ci;</code></pre><h2><strong>æ�ƒé™�管ç�†</strong></h2><p>MySQL 的账户信æ�¯ä¿�存在 mysql 这个数æ�®åº“中。</p><pre><code class="text">USE mysql; SELECT user FROM user;</code></pre><p>创建账户</p><p>新创建的账户没有任何æ�ƒé™�。</p><pre><code class="text">CREATE USER myuser IDENTIFIED BY 'mypassword';</code></pre><p>修改账户å��</p><pre><code class="text">RENAME myuser TO newuser;</code></pre><p>åˆ é™¤è´¦æˆ·</p><pre><code class="text">DROP USER myuser;</code></pre><p>查看æ�ƒé™�</p><pre><code class="text">SHOW GRANTS FOR myuser;</code></pre><p>æ�ˆäºˆæ�ƒé™�</p><p>账户用 username@host 的形å¼�定义,username@% 使用的是默认主机å��。</p><pre><code class="text">GRANT SELECT, INSERT ON mydatabase.* TO myuser;</code></pre><p>åˆ é™¤æ�ƒé™�</p><p>GRANT å’Œ REVOKE å�¯åœ¨å‡ 个层次上æ�§åˆ¶è®¿é—®æ�ƒé™�:</p><ul><li>整个æœ�务器,使用 GRANT ALL å’Œ REVOKE ALLï¼›</li><li>整个数æ�®åº“,使用 ON database.*ï¼›</li><li>特定的表,使用 ON database.tableï¼›</li><li>特定的列;</li><li>特定的存储过程。</li></ul><pre><code class="text">REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;</code></pre><p>更改密ç �</p><p>必须使用 Password() 函数</p><pre><code class="text">SET PASSWROD FOR myuser = Password('new_password');</code></pre><h2><strong>SQL语å�¥ç»ƒä¹ </strong></h2><p>åœ¨ä¸Šæ–‡å­¦ä¹ äº†SQL的基本语法以å��,本文将通过最ç»�典的“教师-学生-æˆ�绩â€�表æ�¥å¸®åŠ©ä½ ç»ƒä¹ SQL。</p><h2><strong>æ�„建如下表结æ�„</strong></h2><p>还有一个Gradeè¡¨ï¼Œåœ¨å¦‚ä¸‹çš„ç»ƒä¹ ä¸­ä½“ç�°</p><p><img src="/img/remote/1460000043434730" alt="" title=""></p><h5><strong>æ�’入数æ�®</strong></h5><p>下é�¢è¡¨SQL和相关测试数æ�®æ˜¯æˆ‘Dump出æ�¥çš„</p><pre><code class="text">-- MySQL dump 10.13 Distrib 5.7.17, for macos10.12 (x86_64) -- -- Host: localhost Database: learn_sql_pdai_tech -- ------------------------------------------------------ -- Server version 5.7.28 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `COURSE` -- DROP TABLE IF EXISTS `COURSE`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `COURSE` ( `CNO` varchar(5) NOT NULL, `CNAME` varchar(10) NOT NULL, `TNO` varchar(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `COURSE` -- LOCK TABLES `COURSE` WRITE; /*!40000 ALTER TABLE `COURSE` DISABLE KEYS */; INSERT INTO `COURSE` VALUES ('3-105','计算机导论','825'),('3-245','æ“�作系统','804'),('6-166','æ•°æ�®ç”µè·¯','856'),('9-888','高等数学','100'); /*!40000 ALTER TABLE `COURSE` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `SCORE` -- DROP TABLE IF EXISTS `SCORE`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `SCORE` ( `SNO` varchar(3) NOT NULL, `CNO` varchar(5) NOT NULL, `DEGREE` decimal(10,1) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `SCORE` -- LOCK TABLES `SCORE` WRITE; /*!40000 ALTER TABLE `SCORE` DISABLE KEYS */; INSERT INTO `SCORE` VALUES ('103','3-245',86.0),('105','3-245',75.0),('109','3-245',68.0),('103','3-105',92.0),('105','3-105',88.0),('109','3-105',76.0),('101','3-105',64.0),('107','3-105',91.0),('101','6-166',85.0),('107','6-106',79.0),('108','3-105',78.0),('108','6-166',81.0); /*!40000 ALTER TABLE `SCORE` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `STUDENT` -- DROP TABLE IF EXISTS `STUDENT`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `STUDENT` ( `SNO` varchar(3) NOT NULL, `SNAME` varchar(4) NOT NULL, `SSEX` varchar(2) NOT NULL, `SBIRTHDAY` datetime DEFAULT NULL, `CLASS` varchar(5) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `STUDENT` -- LOCK TABLES `STUDENT` WRITE; /*!40000 ALTER TABLE `STUDENT` DISABLE KEYS */; INSERT INTO `STUDENT` VALUES ('108','曾å��','ç”·','1977-09-01 00:00:00','95033'),('105','匡æ˜�','ç”·','1975-10-02 00:00:00','95031'),('107','ç�‹ä¸½','女','1976-01-23 00:00:00','95033'),('101','æ��军','ç”·','1976-02-20 00:00:00','95033'),('109','ç�‹èг','女','1975-02-10 00:00:00','95031'),('103','陆å�›','ç”·','1974-06-03 00:00:00','95031'); /*!40000 ALTER TABLE `STUDENT` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `TEACHER` -- DROP TABLE IF EXISTS `TEACHER`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `TEACHER` ( `TNO` varchar(3) NOT NULL, `TNAME` varchar(4) NOT NULL, `TSEX` varchar(2) NOT NULL, `TBIRTHDAY` datetime NOT NULL, `PROF` varchar(6) DEFAULT NULL, `DEPART` varchar(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `TEACHER` -- LOCK TABLES `TEACHER` WRITE; /*!40000 ALTER TABLE `TEACHER` DISABLE KEYS */; INSERT INTO `TEACHER` VALUES ('804','æ��诚','ç”·','1958-12-02 00:00:00','副教æ�ˆ','计算机系'),('856','å¼ æ—­','ç”·','1969-03-12 00:00:00','讲师','电å­�工程系'),('825','ç�‹è��','女','1972-05-05 00:00:00','助教','计算机系'),('831','刘冰','女','1977-08-14 00:00:00','助教','电å­�工程系'); /*!40000 ALTER TABLE `TEACHER` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2020-02-06 18:18:25 </code></pre><h2><strong>ç›¸å…³ç»ƒä¹ </strong></h2><ul><li>1ã€�查询Student表中的所有记录的Snameã€�Ssexå’ŒClass列。</li></ul><pre><code>select SNAME, SSEX, CLASS from STUDENT;</code></pre><ul><li>2ã€�查询教师所有的å�•ä½�å�³ä¸�é‡�å¤�çš„Depart列。</li></ul><pre><code class="text">select distinct DEPART from TEACHER;</code></pre><ul><li>3ã€�查询Student表的所有记录。</li></ul><pre><code class="text">select * from STUDENT;</code></pre><ul><li>4ã€�查询Score表中æˆ�绩在60到80之间的所有记录。</li></ul><pre><code class="text">select * from SCORE where DEGREE &gt; 60 and DEGREE &lt; 80;</code></pre><ul><li>5ã€�查询Score表中æˆ�绩为85,86或88的记录。</li></ul><pre><code class="text">select * from SCORE where DEGREE = 85 or DEGREE = 86 or DEGREE = 88;</code></pre><ul><li>6ã€�查询Student表中“95031â€�ç�­æˆ–性别为“女â€�çš„å�Œå­¦è®°å½•。</li></ul><pre><code class="text">select * from STUDENT where CLASS = '95031' or SSEX = '女';</code></pre><ul><li>7ã€�以Classé™�åº�查询Student表的所有记录。</li></ul><pre><code class="text">select * from STUDENT order by CLASS desc;</code></pre><ul><li>8ã€�以Cnoå�‡åº�ã€�Degreeé™�åº�查询Score表的所有记录。</li></ul><pre><code class="text">select * from SCORE order by CNO asc, DEGREE desc;</code></pre><ul><li>9ã€�查询“95031â€�ç�­çš„学生人数。</li></ul><pre><code class="text">select count(*) from STUDENT where CLASS = '95031';</code></pre><ul><li>10ã€�查询Score表中的最高分的学生学å�·å’Œè¯¾ç¨‹å�·ã€‚</li></ul><pre><code class="text">select sno, CNO from SCORE where DEGREE = ( select max(DEGREE) from SCORE );</code></pre><ul><li>11ã€�查询‘3-105’å�·è¯¾ç¨‹çš„å¹³å�‡åˆ†ã€‚</li></ul><pre><code class="text">select avg(DEGREE) from SCORE where CNO = '3-105';</code></pre><ul><li>12ã€�查询Score表中至少有5å��学生选修的并以3开头的课程的平å�‡åˆ†æ•°ã€‚</li></ul><pre><code class="text">select avg(DEGREE), CNO from SCORE where cno like '3%' group by CNO having count(*) &gt; 5;</code></pre><ul><li>13ã€�查询最ä½�分大äº�70,最高分å°�äº�90çš„Sno列。</li></ul><pre><code class="text">select SNO from SCORE group by SNO having min(DEGREE) &gt; 70 and max(DEGREE) &lt; 90;</code></pre><ul><li>14ã€�查询所有学生的Snameã€�Cnoå’ŒDegree列。</li></ul><pre><code class="text">select SNAME, CNO, DEGREE from STUDENT, SCORE where STUDENT.SNO = SCORE.SNO;</code></pre><ul><li>15ã€�查询所有学生的Snoã€�Cnoå’ŒDegree列。</li></ul><pre><code class="text">select SCORE.SNO, CNO, DEGREE from STUDENT, SCORE where STUDENT.SNO = SCORE.SNO;</code></pre><ul><li>16ã€�查询所有学生的Snameã€�Cnameå’ŒDegree列。</li></ul><pre><code class="text">SELECT A.SNAME, B.CNAME, C.DEGREE FROM STUDENT A JOIN (COURSE B, SCORE C) ON A.SNO = C.SNO AND B.CNO = C.CNO;</code></pre><ul><li>17ã€�查询“95033â€�ç�­æ‰€é€‰è¯¾ç¨‹çš„å¹³å�‡åˆ†ã€‚</li></ul><pre><code class="text">select avg(DEGREE) from SCORE where sno in (select SNO from STUDENT where CLASS = '95033');</code></pre><ul><li>18ã€�å�‡è®¾ä½¿ç”¨å¦‚下命令建立了一个grade表:</li></ul><pre><code class="text">create table grade ( low numeric(3, 0), upp numeric(3), rank char(1) ); insert into grade values (90, 100, 'A'); insert into grade values (80, 89, 'B'); insert into grade values (70, 79, 'C'); insert into grade values (60, 69, 'D'); insert into grade values (0, 59, 'E');</code></pre><ul><li>ç�°æŸ¥è¯¢æ‰€æœ‰å�Œå­¦çš„Snoã€�Cnoå’Œrank列。</li></ul><pre><code class="text">SELECT A.SNO, A.CNO, B.RANK FROM SCORE A, grade B WHERE A.DEGREE BETWEEN B.LOW AND B.UPP ORDER BY RANK;</code></pre><ul><li>19ã€�查询选修“3-105â€�课程的æˆ�绩高äº�“109â€�å�·å�Œå­¦æˆ�绩的所有å�Œå­¦çš„记录。</li></ul><pre><code class="text">select * from SCORE where CNO = '3-105' and DEGREE &gt; ALL ( select DEGREE from SCORE where SNO = '109' );</code></pre><ul><li>20ã€�查询score中选学一门以上课程的å�Œå­¦ä¸­åˆ†æ•°ä¸ºé��最高分æˆ�绩的学生记录</li></ul><pre><code class="text">select * from STUDENT where SNO in (select SNO from SCORE where DEGREE &lt; (select MAX(DEGREE) from SCORE) group by SNO having count(*) &gt; 1);</code></pre><ul><li>21ã€�查询æˆ�绩高äº�å­¦å�·ä¸ºâ€œ109â€�ã€�课程å�·ä¸ºâ€œ3-105â€�çš„æˆ�绩的所有记录。</li></ul><pre><code class="text">select * from SCORE where CNO = '3-105' and DEGREE &gt; ALL ( select DEGREE from SCORE where SNO = '109' );</code></pre><ul><li>22ã€�查询和学å�·ä¸º108çš„å�Œå­¦å�Œå¹´å‡ºç”Ÿçš„æ‰€æœ‰å­¦ç”Ÿçš„Snoã€�Snameå’ŒSbirthday列。</li></ul><pre><code class="text">select SNO, SNAME, SBIRTHDAY from STUDENT where year(SBIRTHDAY) = ( select year(SBIRTHDAY) from STUDENT where SNO = '108' );</code></pre><ul><li>23ã€�æŸ¥è¯¢â€œå¼ æ—­â€œæ•™å¸ˆä»»è¯¾çš„å­¦ç”Ÿæˆ�绩。</li></ul><pre><code class="text">select * from SCORE where cno = ( select CNO from COURSE inner join TEACHER on COURSE.TNO = TEACHER.TNO and TNAME = 'å¼ æ—­' );</code></pre><ul><li>24ã€�查询选修æŸ�课程的å�Œå­¦äººæ•°å¤šäº�5人的教师姓å��。</li></ul><pre><code class="text">select TNAME from TEACHER where TNO = ( select TNO from COURSE where CNO = (select CNO from SCORE group by CNO having count(SNO) &gt; 5) );</code></pre><ul><li>25ã€�查询95033ç�­å’Œ95031ç�­å…¨ä½“学生的记录。</li></ul><pre><code class="text">select * from STUDENT where CLASS in ('95033', '95031');</code></pre><ul><li>26ã€�查询存在有85分以上æˆ�绩的课程Cno.</li></ul><pre><code class="text">select cno from SCORE group by CNO having MAX(DEGREE) &gt; 85;</code></pre><ul><li>27ã€�查询出“计算机系“教师所教课程的æˆ�绩表。</li></ul><pre><code class="text">select * from SCORE where CNO in (select CNO from TEACHER, COURSE where DEPART = '计算机系' and COURSE.TNO = TEACHER.TNO);</code></pre><ul><li>28ã€�查询“计算机系â€�ä¸�“电å­�工程系“ä¸�å�Œè�Œç§°çš„æ•™å¸ˆçš„Tnameå’ŒProf</li></ul><pre><code class="text">select tname, prof from TEACHER where depart = '计算机系' and prof not in ( select prof from TEACHER where depart = '电å­�工程系' );</code></pre><ul><li>29ã€�查询选修编å�·ä¸ºâ€œ3-105“课程且æˆ�绩至少高äº�选修编å�·ä¸ºâ€œ3-245â€�çš„å�Œå­¦çš„Cnoã€�Snoå’ŒDegree,并按Degreeä»�高到ä½�次åº�æ�’åº�。</li></ul><pre><code class="text">select CNO, SNO, DEGREE from SCORE where CNO = '3-105' and DEGREE &gt; any ( select DEGREE from SCORE where CNO = '3-245' ) order by DEGREE desc;</code></pre><ul><li>30ã€�查询选修编å�·ä¸ºâ€œ3-105â€�且æˆ�绩高äº�选修编å�·ä¸ºâ€œ3-245â€�课程的å�Œå­¦çš„Cnoã€�Snoå’ŒDegree.</li></ul><pre><code class="text">SELECT * FROM SCORE WHERE CNO = '3-105' AND DEGREE &gt; ALL ( SELECT DEGREE FROM SCORE WHERE CNO = '3-245' ) ORDER by DEGREE desc;</code></pre><ul><li>31ã€�查询所有教师和å�Œå­¦çš„nameã€�sexå’Œbirthday.</li></ul><pre><code class="text">select TNAME name, TSEX sex, TBIRTHDAY birthday from TEACHER union select sname name, SSEX sex, SBIRTHDAY birthday from STUDENT;</code></pre><ul><li>32ã€�查询所有“女â€�教师和“女â€�å�Œå­¦çš„nameã€�sexå’Œbirthday.</li></ul><pre><code class="text">select TNAME name, TSEX sex, TBIRTHDAY birthday from TEACHER where TSEX = '女' union select sname name, SSEX sex, SBIRTHDAY birthday from STUDENT where SSEX = '女';</code></pre><ul><li>33ã€�查询æˆ�绩比该课程平å�‡æˆ�绩ä½�çš„å�Œå­¦çš„æˆ�绩表。</li></ul><pre><code class="text">SELECT A.* FROM SCORE A WHERE DEGREE &lt; (SELECT AVG(DEGREE) FROM SCORE B WHERE A.CNO = B.CNO);</code></pre><ul><li>34ã€�查询所有任课教师的Tnameå’ŒDepart.</li></ul><pre><code class="text">select TNAME, DEPART from TEACHER a where exists(select * from COURSE b where a.TNO = b.TNO);</code></pre><ul><li>35ã€�查询所有未讲课的教师的Tnameå’ŒDepart.</li></ul><pre><code class="text">select TNAME, DEPART from TEACHER a where tno not in (select tno from COURSE);</code></pre><ul><li>36ã€�查询至少有2å��男生的ç�­å�·ã€‚</li></ul><pre><code class="text">select CLASS from STUDENT where SSEX = 'ç”·' group by CLASS having count(SSEX) &gt; 1;</code></pre><ul><li>37ã€�查询Student表中ä¸�姓“ç�‹â€�çš„å�Œå­¦è®°å½•。</li></ul><pre><code class="text">select * from STUDENT where SNAME not like &quot;ç�‹%&quot;;</code></pre><ul><li>38ã€�查询Student表中æ¯�个学生的姓å��和年龄。</li></ul><pre><code class="text">select SNAME, year(now()) - year(SBIRTHDAY) from STUDENT;</code></pre><ul><li>39ã€�查询Student表中最大和最å°�çš„Sbirthday日期值。</li></ul><pre><code class="text">select min(SBIRTHDAY) birthday from STUDENT union select max(SBIRTHDAY) birthday from STUDENT;</code></pre><ul><li>40ã€�以ç�­å�·å’Œå¹´é¾„ä»�大到å°�的顺åº�查询Student表中的全部记录。</li></ul><pre><code class="text">select * from STUDENT order by CLASS desc, year(now()) - year(SBIRTHDAY) desc;</code></pre><ul><li>41ã€�查询“男â€�教师å�Šå…¶æ‰€ä¸Šçš„课程。</li></ul><pre><code class="text">select * from TEACHER, COURSE where TSEX = 'ç”·' and COURSE.TNO = TEACHER.TNO;</code></pre><ul><li>42ã€�查询最高分å�Œå­¦çš„Snoã€�Cnoå’ŒDegree列。</li></ul><pre><code class="text">select sno, CNO, DEGREE from SCORE where DEGREE = (select max(DEGREE) from SCORE);</code></pre><ul><li>43ã€�查询和“æ��军â€�å�Œæ€§åˆ«çš„æ‰€æœ‰å�Œå­¦çš„Sname.</li></ul><pre><code class="text">select sname from STUDENT where SSEX = (select SSEX from STUDENT where SNAME = 'æ��军');</code></pre><ul><li>44ã€�查询和“æ��军â€�å�Œæ€§åˆ«å¹¶å�Œç�­çš„å�Œå­¦Sname.</li></ul><pre><code class="text">select sname from STUDENT where (SSEX, CLASS) = (select SSEX, CLASS from STUDENT where SNAME = 'æ��军');</code></pre><ul><li>45ã€�查询所有选修“计算机导论â€�课程的“男â€�å�Œå­¦çš„æˆ�绩表</li></ul><pre><code class="text">select * from SCORE, STUDENT where SCORE.SNO = STUDENT.SNO and SSEX = 'ç”·' and CNO = ( select CNO from COURSE where CNAME = '计算机导论');</code></pre><ul><li>46ã€�ä½¿ç”¨æ¸¸æ ‡æ–¹å¼�æ�¥å�Œæ—¶æŸ¥è¯¢æ¯�ä½�å�Œå­¦çš„å��字,他所选课程å�Šæˆ�绩。</li></ul><pre><code class="text">declare cursor student_cursor is select S.SNO,S.SNAME,C.CNAME,SC.DEGREE as DEGREE from STUDENT S, COURSE C, SCORE SC where S.SNO=SC.SNO and SC.CNO=C.CNO; student_row student_cursor%ROWTYPE; begin open student_cursor; loop fetch student_cursor INTO student_row; exit when student_cursor%NOTFOUND; dbms_output.put_line( student_row.SNO || '' || student_row.SNAME|| '' || student_row.CNAME || '' || student_row.DEGREE); end loop; close student_cursor; END; / </code></pre><ul><li>47ã€� 声æ˜�触å�‘器指令,æ¯�当有å�Œå­¦è½¬æ�¢ç�­çº§æ—¶æ‰§è¡Œè§¦å�‘器显示当å‰�和之å‰�所在ç�­çº§ã€‚</li></ul><pre><code class="text">CREATE OR REPLACE TRIGGER display_class_changes AFTER DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.sno &gt; 0) BEGIN dbms_output.put_line('Old class: ' || :OLD.class); dbms_output.put_line('New class: ' || :NEW.class); END; / Update student set class=95031 where sno=109;</code></pre><ul><li>48ã€� åˆ é™¤å·²è®¾ç½®çš„è§¦å�‘器指令</li></ul><pre><code class="text">DROP TRIGGER display_class_changes;</code></pre><h2><strong>SQL 语å�¥ä¼˜åŒ–</strong></h2><h4><strong>è´Ÿå�‘查询ä¸�能使用索引</strong></h4><pre><code class="text">select name from user where id not in (1,3,4);</code></pre><p>应该修改为:</p><pre><code class="text">select name from user where id in (2,5,6);</code></pre><h4><strong>å‰�导模糊查询ä¸�能使用索引</strong></h4><p>如:</p><pre><code class="text">select name from user where name like '%zhangsan'</code></pre><p>é��å‰�导则å�¯ä»¥:</p><pre><code class="text">select name from user where name like 'zhangsan%'</code></pre><p>建议å�¯ä»¥è€ƒè™‘使用 <code>Lucene</code> 等全文索引工具æ�¥ä»£æ›¿é¢‘ç¹�的模糊查询。</p><h4><strong>æ•°æ�®åŒºåˆ†ä¸�æ˜�显的ä¸�建议创建索引</strong></h4><p>如 user 表中的性别字段,å�¯ä»¥æ˜�显区分的æ‰�建议创建索引,如身份è¯�等字段。</p><p>字段的默认值ä¸�è¦�为 null</p><p>è¿™æ ·ä¼šå¸¦æ�¥å’Œé¢„期ä¸�一致的查询结æ�œã€‚</p><p>在字段上进行计算ä¸�能命中索引</p><pre><code class="text">select name from user where FROM_UNIXTIME(create_time) &lt; CURDATE();</code></pre><p>应该修改为:</p><pre><code class="text">select name from user where create_time &lt; FROM_UNIXTIME(CURDATE());</code></pre><h4><strong>最左å‰�缀问题</strong></h4><p>如æ�œç»™ user 表中的 username pwd 字段创建了å¤�å�ˆç´¢å¼•那么使用以下SQL 都是å�¯ä»¥å‘½ä¸­ç´¢å¼•:</p><pre><code class="text">select username from user where username='zhangsan' and pwd ='axsedf1sd' select username from user where pwd ='axsedf1sd' and username='zhangsan' select username from user where username='zhangsan'</code></pre><p>但是使用</p><pre><code class="text">select username from user where pwd ='axsedf1sd'</code></pre><p>是ä¸�能命中索引的。</p><h4><strong>如æ�œæ˜�确知é�“å�ªæœ‰ä¸€æ�¡è®°å½•è¿”å›�</strong></h4><pre><code class="text">select name from user where username='zhangsan' limit 1</code></pre><p>å�¯ä»¥æ��高效ç�‡ï¼Œå�¯ä»¥è®©æ•°æ�®åº“å�œæ­¢æ¸¸æ ‡ç§»åŠ¨ã€‚</p><h4><strong>ä¸�è¦�让数æ�®åº“帮我们å�šå¼ºåˆ¶ç±»å�‹è½¬æ�¢</strong></h4><pre><code class="text">select name from user where telno=18722222222</code></pre><p>è¿™æ ·è™½ç„¶å�¯ä»¥æŸ¥å‡ºæ•°æ�®ï¼Œä½†æ˜¯ä¼šå¯¼è‡´å…¨è¡¨æ‰«æ��。</p><p>需è¦�修改为</p><pre><code class="text">select name from user where telno='18722222222'</code></pre><h4><strong>如æ�œéœ€è¦�进行 join 的字段两表的字段类å�‹è¦�相å�Œ</strong></h4><p>ä¸�然也ä¸�会命中索引。</p> Nginx 一网打尽:动é�™åˆ†ç¦»ã€�å�‹ç¼©ã€�缓存ã€�黑白å��å�•ã€�跨域ã€�高å�¯ç”¨ã€�性能优化... https://segmentfault.com/a/1190000043430175 2023-02-15T20:14:57+08:00 2023-02-15T20:14:57+08:00 民工哥 https://segmentfault.com/u/jishuroad 35 <p><strong>引言</strong></p><p>早期的业务都是基äº�å�•体节点部署,由äº�å‰�期访问æµ�é‡�ä¸�å¤§ï¼Œå› æ­¤å�•体结æ�„也å�¯æ»¡è¶³éœ€æ±‚,但éš�ç�€ä¸šåŠ¡å¢�长,æµ�é‡�也越æ�¥è¶Šå¤§ï¼Œé‚£ä¹ˆæœ€ç»ˆå�•å�°æœ�务器å�—到的访问å�‹åŠ›ä¹Ÿä¼šé€�æ­¥å¢�高。时间一长,å�•å�°æœ�åŠ¡å™¨æ€§èƒ½æ— æ³•è·Ÿä¸Šä¸šåŠ¡å¢�é•¿ï¼Œå°±ä¼šé€ æˆ�线上频ç¹�宕机的ç�°è±¡å�‘ç”Ÿï¼Œæœ€ç»ˆå¯¼è‡´ç³»ç»Ÿç˜«ç—ªæ— æ³•ç»§ç»­å¤„ç�†ç”¨æˆ·çš„请求。</p><p>ä»�上é�¢çš„æ��述中,主è¦�存在两个问题:</p><ul><li>â‘ å�•体结æ�„的部署方å¼�æ— æ³•æ‰¿è½½æ—¥ç›Šå¢�长的业务æµ�é‡�。</li><li>②当å��端节点宕机å��,整个系统会陷入瘫痪,导致整个项目ä¸�å�¯ç”¨ã€‚</li></ul><p>å› æ­¤åœ¨è¿™ç§�背景下,引入负载å�‡è¡¡æŠ€æœ¯å�¯å¸¦æ�¥çš„æ”¶ç›Šï¼š</p><ul><li>「系统的高å�¯ç”¨ï¼šã€� 当æŸ�个节点宕机å��å�¯ä»¥è¿…速将æµ�é‡�转移至其他节点。</li><li>「系统的高性能:ã€� 多å�°æœ�务器共å�Œå¯¹å¤–æ��ä¾›æœ�务,为整个系统æ��供了更高规模的å��å��。</li><li>「系统的拓展性:ã€� 当业务å†�次出ç�°å¢�长或è��é�¡æ—¶ï¼Œå�¯å†�åŠ å…¥/å‡�少节点,ç�µæ´»ä¼¸ç¼©ã€‚</li></ul><p>OK~,既然引入负载å�‡è¡¡æŠ€æœ¯å�¯ç»™æˆ‘们带æ�¥å¦‚此巨大的好处,那么å�ˆæœ‰é‚£äº›æ–¹æ¡ˆå�¯ä¾›é€‰æ‹©å‘¢ï¼Ÿä¸»è¦�有两ç§�负载方案,「「<strong>硬件层é�¢ä¸�软件层é�¢</strong>ã€�ã€� ,比较常用的<strong>硬件负载器有A10ã€�F5</strong>ç­‰ï¼Œä½†è¿™äº›æœºå™¨åŠ¨è¾„å¤§å‡ ä¸‡ä¹ƒè‡³å‡ å��万的æˆ�æœ¬ï¼Œå› æ­¤ä¸€èˆ¬å¤§å�‹ä¼�业会采用该方案,如银行ã€�国ä¼�ã€�央ä¼�等。而æˆ�本有é™�,但ä¾�旧想å�šè´Ÿè½½å�‡è¡¡çš„项目,那么å�¯åœ¨è½¯ä»¶å±‚é�¢å®�ç�°ï¼Œå¦‚å…¸å�‹çš„Nginx等,软件层的负载也是本文的é‡�点,毕竟Boss们的准则之一就是:「「<strong>能é� 技术å®�ç�°çš„就尽é‡�ä¸�花钱。</strong>ã€�ã€�</p><h2><strong>性能怪兽-Nginx概念深入浅出</strong></h2><p>Nginx 是目å‰�è´Ÿè½½å�‡è¡¡æŠ€æœ¯ä¸­çš„主æµ�æ–¹æ¡ˆï¼Œå‡ ä¹�ç»�大部分项目都会使用它,<a href="https://link.segmentfault.com/?enc=ppXcSy7%2BxKZKjAmMGS6usQ%3D%3D.o%2BYxunfjblgOTF6%2FZu8dP%2FnZetH65d95HP%2Fhe2UARXEmjSo1pA9jkLlh8qKupg0FN2uXsRy7MlWZ1CeRqNfX37eGPlNoRXEg7xRekZaNsH%2FIkj1lo1r8bxwMrVAfi%2FanWOJsyAJv0X54faHMlnKEQ8Z7diMevuLOvBvfDLhMvBIxvI5rhVJYgqjx3f10EZi2vumCiNQH3M3wg1Po%2Fhkx5z8RCPU7oFBLzq0epS9l5fKcqvM8jC%2Ba6Iszq2g%2BqFLvXmSRbb72WhmYBaoZlI%2Bc5SmV8bMYhY9UVP4TTVRlmI0%3D" rel="nofollow">Nginx</a> 是一个轻é‡�级的高性能HTTPå��å�‘代ç�†æœ�务器,å�Œæ—¶å®ƒä¹Ÿæ˜¯ä¸€ä¸ªé€šç”¨ç±»å�‹çš„代ç�†æœ�务器,支æŒ�ç»�大部分å��议,如TCPã€�UDPã€�SMTPã€�HTTPS等。</p><p><img src="/img/remote/1460000043430177" alt="" title=""></p><p>Nginxä¸�Redis相å�Œï¼Œéƒ½æ˜¯åŸºäº�多路å¤�用模å�‹æ�„å»ºå‡ºçš„äº§ç‰©ï¼Œå› æ­¤å®ƒä¸�Rediså�Œæ ·å…·å¤‡ 「「资æº�å� 用少ã€�å¹¶å�‘支æŒ�高ã€�ã€� 的特点,在ç�†è®ºä¸Šå�•节点的<a href="https://link.segmentfault.com/?enc=jPp6olTvKooYRZhMT6hX0g%3D%3D.oFV11chxESkCrJ2zM1xUARmWNWJLJCc1GwMrNRopV%2BDc58h94q0uTYtj7GvuUlc967N7zJIh9Cu8Ul2zi0LqjGsBpyVrexgWwAMsxnhsIUurUqVDL1NkntdSBCxk07He6sHAXI%2BtlSV0OumFyA0OiVcuM69Xq6WTEI89xNYjcugT03LXqOwtofagUmg9wdV4eGMz4zXzJtnUxEKyiALNml7dX%2FYslNH3Z9tIT8qupwA%2BxDES6aadxC7XMup8cFIQZMvqBTWv5JUxCTNRpsZobw%2F%2FTWZfn2kWFmYTeqRDVD4%3D" rel="nofollow">Nginx</a>å�Œæ—¶æ”¯æŒ�5Wå¹¶å�‘è¿�æ�¥ï¼Œè€Œå®�际生产ç�¯å¢ƒä¸­ï¼Œç¡¬ä»¶åŸºç¡€åˆ°ä½�å†�结å�ˆç®€å�•调优å��ç¡®å®�能达到该数值。</p><p>å…ˆæ�¥çœ‹çœ‹<a href="https://link.segmentfault.com/?enc=xJHcYGnE7GR%2BAF86SfwyAw%3D%3D.IDq5qPm%2F4WRTz4KQNDLU96nvSWFW5m8AbXXecImkemf0hn0RiiaiGrzQ1MI8aIMy8CRORQ2y6NRx7zmyFHAt5gGj5z6nzLZM%2F8MjUVZDfJkYv2XN%2Buan6f4FFt%2FAD3TWwU2tBbE%2FPCs5sE3lNC30sERcYs8IuVxTS3KORJVO%2FBPExpv%2FWb35%2BI7n2iugvqB%2B%2FJXvI9ndLCP%2BxMKFJ0aH%2BT9%2FD0z1cGmTNd15V5OFIjYF7RXzWenbyKqLLwAZWuWBNW%2FK2CcLZWAlPMp%2Bz9YPi2j689bwGcsJqO9nPPITM6U%3D" rel="nofollow">Nginx</a>引入å‰�å��,客户端请求处ç�†æµ�程的对比:</p><p><img src="/img/remote/1460000043430178" alt="" title=""></p><p>å�Ÿæœ¬å®¢æˆ·ç«¯æ˜¯ç›´æ�¥è¯·æ±‚ç›®æ ‡æœ�åŠ¡å™¨ï¼Œç”±ç›®æ ‡æœ�务器直æ�¥å®Œæˆ�请求处ç�†å·¥ä½œï¼Œä½†åŠ å…¥Nginxå��,所有的请求会先ç»�过<a href="https://link.segmentfault.com/?enc=tV50BVQ3pMtnGvsIjZnBoA%3D%3D.zpjGLW7JR2QUNCRd3WOZ56yy0nmiP0e5NSZgDVTmQfGxuumqdgS0HvT2h6WptReRvNNkU%2FmYLMnOD%2FOCoRwf4FO%2F41UUrMjWeo1KeicW48gk4JhtmgtpBl4FIZeKE6aPRBEN0kfZeykWd6I3RCP8abR0xbCmBjyz4J1gogJRBKu55OZNoKhxex1Q%2FqKGmLYKBn3Ii1fepZSDooY4zw3yBAw3x%2Bci7%2B1X7UrB4u%2Bq%2FseoLqX0H%2Faz%2FHpIsI9O694xh7hI%2F82RO5aMqsPjGRHgNz5yLtwFUOuRavgszOcFj9Y%3D" rel="nofollow">Nginx</a>,å†�由其进行分å�‘到具体的æœ�务器处ç�†ï¼Œå¤„ç�†å®Œæˆ�å��å†�è¿”å›�Nginx,最å��ç”±Nginx将最终的å“�应结æ�œè¿”å›�给客户端。</p><p>了解了Nginx的基本概念å��,å†�æ�¥å¿«é€Ÿæ�­å»ºä¸€ä¸‹ç�¯å¢ƒï¼Œä»¥å�Šäº†è§£ä¸€äº›Nginx的高级特性,如动é�™åˆ†ç¦»ã€�资æº�å�‹ç¼©ã€�缓存é…�ç½®ã€�IP黑å��å�•ã€�高å�¯ç”¨ä¿�障等。</p><h2><strong>Nginxç�¯å¢ƒæ�­å»º</strong></h2><p>â�¶é¦–先创建Nginx的目录并进入:</p><pre><code class="text">[root@localhost]# mkdir /soft &amp;&amp; mkdir /soft/nginx/ [root@localhost]# cd /soft/nginx/ </code></pre><p>â�·ä¸‹è½½Nginx的安装包,å�¯ä»¥é€šè¿‡FTPå·¥å…·ä¸Šä¼ ç¦»çº¿ç�¯å¢ƒåŒ…,也å�¯é€šè¿‡wget命令在线è�·å�–安装包:</p><pre><code class="text">[root@localhost]# wget https://nginx.org/download/nginx-1.21.6.tar.gz </code></pre><p>没有wget命令的å�¯é€šè¿‡yum命令安装:</p><pre><code class="text">[root@localhost]# yum -y install wget </code></pre><p>â�¸è§£å�‹Nginxçš„å�‹ç¼©åŒ…:</p><pre><code class="text">[root@localhost]# tar -xvzf nginx-1.21.6.tar.gz </code></pre><p>â�¹ä¸‹è½½å¹¶å®‰è£…Nginx所需的ä¾�赖库和包:</p><pre><code class="text">[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ gcc-c++ [root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ pcre pcre-devel4 [root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ zlib zlib-devel [root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ openssl openssl-devel </code></pre><p>也å�¯ä»¥é€šè¿‡yum命令一键下载(æ�¨è��上é�¢å“ªç§�æ–¹å¼�):</p><pre><code class="text">[root@localhost]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel </code></pre><p>执行完æˆ�å��,然å��lsæŸ¥çœ‹ç›®å½•æ–‡ä»¶ï¼Œä¼šçœ‹ä¸€å¤§å †ä¾�赖:</p><p><img src="/img/remote/1460000043430179" alt="" title=""></p><p>ç´§æ�¥ç�€é€šè¿‡rpm命令ä¾�次将ä¾�赖包一个个æ�„建,或者通过如下指令一键安装所有ä¾�赖包:</p><pre><code class="text">[root@localhost]# rpm -ivh --nodeps *.rpm </code></pre><p>â�ºè¿›å…¥è§£å�‹å��çš„nginx目录,然å��执行Nginxçš„é…�置脚本,为å��续的安装æ��å‰�é…�置好ç�¯å¢ƒï¼Œé»˜è®¤ä½�äº�/usr/local/nginx/目录下(å�¯è‡ªå®šä¹‰ç›®å½•):</p><pre><code class="text">[root@localhost]# cd nginx-1.21.6 [root@localhost]# ./configure --prefix=/soft/nginx/ </code></pre><p>â�»ç¼–译并安装Nginx:</p><pre><code class="text">[root@localhost]# make &amp;&amp; make install </code></pre><p>â�¼æœ€å��å›�到å‰�é�¢çš„/soft/nginx/目录,输入lså�³å�¯çœ‹è§�安装nginx完æˆ�å��生æˆ�的文件。</p><p>â�½ä¿®æ”¹å®‰è£…å��生æˆ�çš„conf目录下的nginx.confé…�置文件:</p><pre><code class="text">[root@localhost]# vi conf/nginx.conf 修改端å�£å�·ï¼šlisten 80; 修改IP地å�€ï¼šserver_name ä½ å½“å‰�机器的本地IP(线上é…�置域å��); </code></pre><p>â�¾åˆ¶å®šé…�置文件并å�¯åЍNginx:</p><pre><code class="text">[root@localhost]# sbin/nginx -c conf/nginx.conf [root@localhost]# ps aux | grep nginx </code></pre><p>Nginxå…¶ä»–æ“�作命令:</p><pre><code class="text">sbin/nginx -t -c conf/nginx.conf # 检测é…�置文件是å�¦æ­£å¸¸ sbin/nginx -s reload -c conf/nginx.conf # 修改é…�ç½®å��平滑é‡�å�¯ sbin/nginx -s quit # 优雅关闭Nginx,会在执行完当å‰�的任务å��å†�退出 sbin/nginx -s stop # 强制终止Nginx,ä¸�管当å‰�是å�¦æœ‰ä»»åŠ¡åœ¨æ‰§è¡Œ </code></pre><p>â�¿å¼€æ”¾80端å�£ï¼Œå¹¶æ›´æ–°é˜²ç�«å¢™ï¼š</p><pre><code class="text">[root@localhost]# firewall-cmd --zone=public --add-port=80/tcp --permanent [root@localhost]# firewall-cmd --reload [root@localhost]# firewall-cmd --zone=public --list-ports </code></pre><p>⓫在Windows/Macçš„æµ�览器中,直æ�¥è¾“入刚刚é…�置的IP地å�€è®¿é—®Nginx:</p><p><img src="/img/remote/1460000043430180" alt="" title=""></p><p>最终看到如上的Nginx欢è¿�界é�¢ï¼Œä»£è¡¨Nginx安装完æˆ�。</p><h2><strong>Nginxå��å�‘代ç�†-è´Ÿè½½å�‡è¡¡</strong></h2><p>首先通过SpringBoot+Freemarker快速æ�­å»ºä¸€ä¸ªWEB项目:springboot-web-nginx,然å��在该项目中,创建一个IndexNginxController.java文件,逻辑如下:</p><pre><code class="text">@Controller public class IndexNginxController { @Value(&quot;${server.port}&quot;) private String port; @RequestMapping(&quot;/&quot;) public ModelAndView index(){ ModelAndView model = new ModelAndView(); model.addObject(&quot;port&quot;, port); model.setViewName(&quot;index&quot;); return model; } } </code></pre><p>在该Controller类中,存在一个æˆ�员å�˜é‡�:port,它的值å�³æ˜¯ä»�application.propertiesé…�置文件中è�·å�–server.port值。当出ç�°è®¿é—®/资æº�的请求时,跳转å‰�端index页é�¢ï¼Œå¹¶å°†è¯¥å€¼æ�ºå¸¦è¿”å›�。</p><p>å‰�端的index.ftl文件代ç �如下:</p><pre><code class="text">&lt;html&gt; &lt;head&gt; &lt;title&gt;Nginx演示页é�¢&lt;/title&gt; &lt;link href=&quot;nginx_style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;/&gt; &lt;/head&gt; &lt;body&gt; &lt;div style=&quot;border: 2px solid red;margin: auto;width: 800px;text-align: center&quot;&gt; &lt;div id=&quot;nginx_title&quot;&gt; &lt;h1&gt;欢è¿�æ�¥åˆ°ç†ŠçŒ«é«˜çº§ä¼šæ‰€ï¼Œæˆ‘是竹å­�${port}å�·ï¼�&lt;/h1&gt; &lt;/div&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; </code></pre><p>ä»�上å�¯ä»¥çœ‹å‡ºå…¶é€»è¾‘å¹¶ä¸�å¤�æ�‚,仅是ä»�å“�应中è�·å�–了port输出。</p><p>OK~,å‰�æ��工作准备就绪å��,å†�简å�•修改一下nginx.confçš„é…�ç½®å�³å�¯ï¼š</p><pre><code class="text">upstream nginx_boot{ # 30s内检查心跳å�‘é€�两次包,未å›�å¤�就代表该机器宕机,请求分å�‘æ�ƒé‡�比为1:2 server 192.168.0.000:8080 weight=100 max_fails=2 fail_timeout=30s; server 192.168.0.000:8090 weight=200 max_fails=2 fail_timeout=30s; # 这里的IP请é…�ç½®æˆ�ä½ WEBæœ�务所在的机器IP } server { location / { root html; # é…�置一下index的地å�€ï¼Œæœ€å��åŠ ä¸Šindex.ftl。 index index.html index.htm index.jsp index.ftl; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 请求交给å��为nginx_bootçš„upstream上 proxy_pass http://nginx_boot; } } </code></pre><p>至此,所有的å‰�æ��工作准备就绪,紧æ�¥ç�€å†�å�¯åЍNginx,然å��å†�å�¯åŠ¨ä¸¤ä¸ªwebæœ�务,第一个WEBæœ�务å�¯åŠ¨æ—¶ï¼Œåœ¨application.propertiesé…�置文件中,将端å�£å�·æ”¹ä¸º8080,第二个WEBæœ�务å�¯åŠ¨æ—¶ï¼Œå°†å…¶ç«¯å�£å�·æ”¹ä¸º8090。</p><p>最终æ�¥çœ‹çœ‹æ•ˆæ�œï¼š<br><img src="/img/remote/1460000043430181" alt="" title=""></p><p>å› ä¸ºé…�置了请求分å�‘çš„æ�ƒé‡�,8080ã€�8090çš„æ�ƒé‡�比为2:1ï¼Œå› æ­¤è¯·æ±‚ä¼šæ ¹æ�®æ�ƒé‡�比å�‡æ‘Šåˆ°æ¯�å�°æœºå™¨ï¼Œä¹Ÿå°±æ˜¯8080一次ã€�8090两次ã€�8080一次......</p><h2><strong>Nginx请求分å�‘å�Ÿç�†</strong></h2><p>客户端å�‘出的请求192.168.12.129最终会转å�˜ä¸ºï¼š<a href="https://link.segmentfault.com/?enc=r%2Bl%2FDG6iqsjHfAkLYL2prA%3D%3D.%2FKHxKoAArsoiTHnnpjjZWmexwPzvAZExmoOEVE2DKBI%3D" rel="nofollow">http://192.168.12.129:80/</a>,然å��å†�å�‘ç›®æ ‡IPå�‘起请求,æµ�程如下:</p><p><img src="/img/remote/1460000043430182" alt="" title=""></p><ul><li>ç”±äº�Nginx监å�¬äº†192.168.12.129çš„80端å�£ï¼Œæ‰€ä»¥æœ€ç»ˆè¯¥è¯·æ±‚会找到Nginx进程;</li><li>Nginxé¦–å…ˆä¼šæ ¹æ�®é…�置的location规则进行匹é…�ï¼Œæ ¹æ�®å®¢æˆ·ç«¯çš„请求路径/,会定ä½�到location /{}规则;</li><li>ç„¶å��æ ¹æ�®è¯¥location中é…�置的proxy_pass会å†�找到å��为nginx_bootçš„upstreamï¼›</li><li>最å��æ ¹æ�®upstream中的é…�置信æ�¯ï¼Œå°†è¯·æ±‚转å�‘到è¿�行WEBæœ�务的机器处ç�†ï¼Œç”±äº�é…�置了多个WEBæœ�务,且é…�置了æ�ƒé‡�å€¼ï¼Œå› æ­¤Nginx会ä¾�æ¬¡æ ¹æ�®æ�ƒé‡�比分å�‘请求。</li></ul><h2><strong>Nginx动é�™åˆ†ç¦»</strong></h2><p>动é�™åˆ†ç¦»åº”该是å�¬çš„æ¬¡æ•°è¾ƒå¤šçš„æ€§èƒ½ä¼˜åŒ–方案,那先æ€�考一个问题:「「为什么需è¦�å�šåЍé�™åˆ†ç¦»å‘¢ï¼Ÿå®ƒå¸¦æ�¥çš„好处是什么?ã€�ã€� å…¶å®�这个问题也并ä¸�éš¾å›�ç­”ï¼Œå½“ä½ æ��懂了网站的本质å��,自然就ç�†è§£äº†åЍé�™åˆ†ç¦»çš„é‡�è¦�性。先æ�¥ä»¥æ·˜å®�为例分æ��看看:</p><p><img src="/img/remote/1460000043430183" alt="" title=""></p><p>当æµ�览器输入<a href="https://link.segmentfault.com/?enc=p8YxNZGQuCQdV65lIAa6ZA%3D%3D.Ok3rGdwfxnY6ylntdXzqC48Fy1yR%2F4Qpa5IiMwbSR9k%3D" rel="nofollow">http://www.taobao.com</a>访问淘å®�首页时,打开开å�‘者调试工具å�¯ä»¥å¾ˆæ˜�æ˜¾çš„çœ‹åˆ°ï¼Œé¦–é¡µåŠ è½½ä¼šå‡ºç�°100+的请求数,而正常项目开å�‘时,é�™æ€�资æº�一般会放入到resources/static/目录下:</p><p><img src="/img/remote/1460000043430184" alt="" title=""></p><p>在项目上线部署时,这些é�™æ€�资æº�会一起打æˆ�包,那此时æ€�考一个问题:「「å�‡è®¾æ·˜å®�ä¹Ÿæ˜¯è¿™æ ·å¹²çš„ï¼Œé‚£ä¹ˆé¦–é¡µåŠ è½½æ—¶çš„è¯·æ±‚æœ€ç»ˆä¼šå�»åˆ°å“ªå„¿è¢«å¤„ç�†ï¼Ÿã€�ã€� 答案毋庸置疑,首页100+的所有请求都会æ�¥åˆ°éƒ¨ç½²WEBæœ�务的机器处ç�†ï¼Œé‚£åˆ™ä»£è¡¨ç�€ä¸€ä¸ªå®¢æˆ·ç«¯è¯·æ±‚æ·˜å®�首页,就会对å��端æœ�åŠ¡å™¨é€ æˆ�100+的并å�‘è¯·æ±‚ã€‚æ¯«æ— ç–‘é—®ï¼Œè¿™å¯¹äº�å��端æœ�务器的å�‹åŠ›æ˜¯å°¤ä¸ºå·¨å¤§çš„ã€‚</p><p>但此时ä¸�妨分æ��看看,首页100+的请求中,是ä¸�是至少有60+是å±�äº�*.jsã€�*.cssã€�*.htmlã€�*.jpg.....这类é�™æ€�资æº�的请求呢?答案是Yes。</p><p>既然有这么多请求å±�äº�é�™æ€�的,这些资æº�大概ç�‡æƒ…况下,长时间也ä¸�会出ç�°å�˜åŠ¨ï¼Œé‚£ä¸ºä½•è¿˜è¦�让这些请求到å��端å†�处ç�†å‘¢ï¼Ÿèƒ½ä¸�能在此之å‰�å°±æ��å‰�处ç�†æ�‰ï¼Ÿå½“ç„¶OKï¼Œå› æ­¤ç»�过分æ��之å��能够æ˜�确一点:「「å�šäº†åЍé�™åˆ†ç¦»ä¹‹å��,至少能够让å��端æœ�务å‡�少一å�Šä»¥ä¸Šçš„å¹¶å�‘é‡�。ã€�ã€� 到此时大家应该æ˜�白了动é�™åˆ†ç¦»èƒ½å¤Ÿå¸¦æ�¥çš„æ€§èƒ½æ”¶ç›Šç©¶ç«Ÿæœ‰å¤šå¤§ã€‚</p><p>OK~,æ��清楚动é�™åˆ†ç¦»çš„å¿…è¦�性之å��,如何å®�ç�°åЍé�™åˆ†ç¦»å‘¢ï¼Ÿå…¶å®�é��常简å�•,å®�战看看。</p><p>①先在部署Nginx的机器,Nginx目录下创建一个目录static_resources:</p><pre><code class="text">mkdir static_resources </code></pre><p>②将项目中所有的é�™æ€�资æº�全部拷è´�到该目录下,而å��将项目中的é�™æ€�资æº�移除é‡�新打包。</p><p>â‘¢ç¨�微修改一下nginx.confçš„é…�置,å¢�åŠ ä¸€æ�¡location匹é…�规则:</p><pre><code class="text">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){ root /soft/nginx/static_resources; expires 7d; } </code></pre><p>ç„¶å��照常å�¯åЍnginx和移除了é�™æ€�资æº�çš„WEBæœ�åŠ¡ï¼Œä½ ä¼šå�‘ç�°å�Ÿæœ¬çš„æ ·å¼�ã€�js效æ�œã€�图片等ä¾�旧有效,如下:</p><p><img src="/img/remote/1460000043430185" alt="" title=""></p><p>其中static目录下的nginx_style.css文件已被移除,但效æ�œä¾�旧存在(绿色字体+è“�色大边框):</p><p><img src="/img/remote/1460000043430181" alt="" title=""></p><p>最å��解读一下那æ�¡location规则:</p><pre><code class="text">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css) ~代表匹é…�时区分大å°�写 .*代表任æ„�字符都å�¯ä»¥å‡ºç�°é›¶æ¬¡æˆ–多次,å�³èµ„æº�å��ä¸�é™�制 \.代表匹é…�å��缀分隔符. (html|...|css)代表匹é…�括å�·é‡Œæ‰€æœ‰é�™æ€�资æº�ç±»å�‹</code></pre><p>综上所述,简å�•一å�¥è¯�概述:该é…�置表示匹é…�以.html~.css为å��缀的所有资æº�请求。</p><p>「最å��æ��一嘴,也å�¯ä»¥å°†é�™æ€�资æº�ä¸Šä¼ åˆ°æ–‡ä»¶æœ�务器中,然å��location中é…�置一个新的upstream指å�‘。ã€�</p><h2><strong>Nginx资æº�å�‹ç¼©</strong></h2><p>建立在动é�™åˆ†ç¦»çš„基础之上,如æ�œä¸€ä¸ªé�™æ€�资æº�çš„Sizeè¶Šå°�ï¼Œé‚£ä¹ˆè‡ªç„¶ä¼ è¾“é€Ÿåº¦ä¼šæ›´å¿«ï¼Œå�Œæ—¶ä¹Ÿä¼šæ›´èŠ‚çœ�å¸¦å®½ï¼Œå› æ­¤æˆ‘ä»¬åœ¨éƒ¨ç½²é¡¹ç›®æ—¶ï¼Œä¹Ÿå�¯ä»¥é€šè¿‡Nginx对äº�é�™æ€�资æº�å®�ç�°å�‹ç¼©ä¼ 输,一方é�¢å�¯ä»¥èŠ‚çœ�带宽资æº�,第二方é�¢ä¹Ÿå�¯ä»¥åŠ å¿«å“�应速度并æ��å�‡ç³»ç»Ÿæ•´ä½“å��å��。</p><p>在Nginx也æ��供了三个支æŒ�资æº�å�‹ç¼©çš„æ¨¡å�—<code>ngx_http_gzip_module</code>ã€�<code>ngx_http_gzip_static_module</code>ã€�<code>ngx_http_gunzip_module</code>,其中ngx\_http\_gzip\_moduleå±�äº�内置模å�—,代表ç�€å�¯ä»¥ç›´æ�¥ä½¿ç”¨è¯¥æ¨¡å�—下的一些å�‹ç¼©æŒ‡ä»¤ï¼Œå��续的资æº�å�‹ç¼©æ“�作都基äº�该模å�—,先æ�¥çœ‹çœ‹å�‹ç¼©é…�置的一些å�‚æ•°/指令:</p><p><img src="/img/remote/1460000043430186" alt="" title=""></p><p>了解了Nginx中的基本å�‹ç¼©é…�ç½®å��,æ�¥ä¸‹æ�¥å�¯ä»¥åœ¨Nginx中简å�•é…�置一下:</p><pre><code class="text">http{ # å¼€å�¯å�‹ç¼©æœºåˆ¶ gzip on; # 指定会被å�‹ç¼©çš„æ–‡ä»¶ç±»å�‹(也å�¯è‡ªå·±é…�置其他类å�‹) gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; # 设置å�‹ç¼©çº§åˆ«ï¼Œè¶Šé«˜èµ„æº�消耗越大,但å�‹ç¼©æ•ˆæ�œè¶Šå¥½ gzip_comp_level 5; # åœ¨å¤´éƒ¨ä¸­æ·»åŠ Vary: Accept-Encoding(建议开å�¯ï¼‰ gzip_vary on; # 处ç�†å�‹ç¼©è¯·æ±‚的缓冲区数é‡�和大å°� gzip_buffers 16 8k; # 对äº�ä¸�支æŒ�å�‹ç¼©åŠŸèƒ½çš„å®¢æˆ·ç«¯è¯·æ±‚ä¸�å¼€å�¯å�‹ç¼©æœºåˆ¶ gzip_disable &quot;MSIE [1-6]\.&quot;; # ä½�版本的IEæµ�览器ä¸�支æŒ�å�‹ç¼© # 设置å�‹ç¼©å“�应所支æŒ�çš„HTTP最ä½�版本 gzip_http_version 1.1; # 设置触å�‘å�‹ç¼©çš„æœ€å°�阈值 gzip_min_length 2k; # 关闭对å��端æœ�务器的å“�应结æ�œè¿›è¡Œå�‹ç¼© gzip_proxied off; }</code></pre><p>在上述的å�‹ç¼©é…�置中,最å��一个gzip_proxied选项,å�¯ä»¥æ ¹æ�®ç³»ç»Ÿçš„å®�际情况决定,总共存在多ç§�选项:</p><pre><code class="text">off:关闭Nginx对å��å�°æœ�务器的å“�应结æ�œè¿›è¡Œå�‹ç¼©ã€‚ expired:如æ�œå“�应头中包å�«Expiresä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ no-cache:如æ�œå“�应头中包å�«Cache-Control:no-cacheä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ no-store:如æ�œå“�应头中包å�«Cache-Control:no-storeä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ private:如æ�œå“�应头中包å�«Cache-Control:privateä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ no_last_modified:如æ�œå“�应头中ä¸�包å�«Last-Modifiedä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ no_etag:如æ�œå“�应头中ä¸�包å�«ETagä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ auth:如æ�œå“�应头中包å�«Authorizationä¿¡æ�¯ï¼Œåˆ™å¼€å�¯å�‹ç¼©ã€‚ anyï¼šæ— æ�¡ä»¶å¯¹å��端的å“�应结æ�œå¼€å�¯å�‹ç¼©æœºåˆ¶ã€‚</code></pre><p>OK~,简å�•修改好了Nginxçš„å�‹ç¼©é…�ç½®å��,å�¯ä»¥åœ¨å�Ÿæœ¬çš„index页é�¢ä¸­å¼•入一个jquery-3.6.0.js文件:</p><pre><code class="text">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-3.6.0.js&quot;&gt;&lt;/script&gt; </code></pre><p>分别æ�¥å¯¹æ¯”下å�‹ç¼©å‰�å��的区别:</p><p><img src="/img/remote/1460000043430187" alt="" title=""></p><p>ä»�图中å�¯ä»¥å¾ˆæ˜�显看出,未开å�¯å�‹ç¼©æœºåˆ¶å‰�访问时,js文件的å�Ÿå§‹å¤§å°�为230K,当é…�置好å�‹ç¼©å��å†�é‡�å�¯Nginx,会å�‘ç�°æ–‡ä»¶å¤§å°�ä»�230KB→69KB,效æ�œç«‹ç«¿è§�å½±ï¼�</p><p>注æ„�点:①对äº�图片ã€�视频类å�‹çš„æ•°æ�®ï¼Œä¼šé»˜è®¤å¼€å�¯å�‹ç¼©æœºåˆ¶ï¼Œå› æ­¤ä¸€èˆ¬æ— éœ€å†�次开å�¯å�‹ç¼©ã€‚②对äº�.js文件而言,需è¦�指定å�‹ç¼©ç±»å�‹ä¸ºapplication/javascript,而并é��text/javascriptã€�application/x-javascript。</p><h2><strong>Nginx缓冲区</strong></h2><p>å…ˆæ�¥æ€�考一个问题,æ�¥å…¥Nginx的项目一般请求æµ�程为:“客户端→Nginx→æœ�务端â€�,在这个过程中存在两个è¿�æ�¥ï¼šâ€œå®¢æˆ·ç«¯â†’Nginxã€�Nginx→æœ�务端â€�,那么两个ä¸�å�Œçš„è¿�æ�¥é€Ÿåº¦ä¸�一致,就会影å“�用户的体验(比如æµ�è§ˆå™¨çš„åŠ è½½é€Ÿåº¦è·Ÿä¸�上æœ�务端的å“�应速度)。</p><p>å…¶å®�也就类似电脑的内存跟ä¸�上CPU速度,所以对äº�ç”¨æˆ·é€ æˆ�的体验感æ��å·®ï¼Œå› æ­¤åœ¨CPUè®¾è®¡æ—¶éƒ½ä¼šåŠ å…¥ä¸‰çº§é«˜é€Ÿç¼“å†²åŒºï¼Œç”¨äº�缓解CPU和内存速ç�‡ä¸�一致的矛盾。在Nginx也å�Œæ ·å­˜åœ¨ç¼“冲区的机制,主è¦�目的就在äº�:「「用æ�¥è§£å†³ä¸¤ä¸ªè¿�æ�¥ä¹‹é—´é€Ÿåº¦ä¸�匹é…�é€ æˆ�的问题ã€�ã€� ,有了缓冲å��,Nginx代ç�†å�¯æš‚å­˜å��端的å“�应,然å��按需供给数æ�®ç»™å®¢æˆ·ç«¯ã€‚å…ˆæ�¥çœ‹çœ‹ä¸€äº›å…³äº�缓冲区的é…�置项:</p><pre><code class="text">proxy_buffering:是å�¦å�¯ç”¨ç¼“冲机制,默认为on关闭状æ€�。 client_body_buffer_size:设置缓冲客户端请求数æ�®çš„内存大å°�。 proxy_buffers:为æ¯�个请求/è¿�æ�¥è®¾ç½®ç¼“冲区的数é‡�和大å°�,默认4 4k/8k。 proxy_buffer_size:设置用äº�存储å“�应头的缓冲区大å°�。 proxy_busy_buffers_size:在å��端数æ�®æ²¡æœ‰å®Œå…¨æ�¥æ”¶å®Œæˆ�时,Nginxå�¯ä»¥å°†busy状æ€�的缓冲返å›�给客户端,该å�‚数用æ�¥è®¾ç½®busy状æ€�çš„buffer具体有多大,默认为proxy_buffer_size*2。 proxy_temp_path:当内存缓冲区存满时,å�¯ä»¥å°†æ•°æ�®ä¸´æ—¶å­˜æ”¾åˆ°ç£�盘,该å�‚数是设置存储缓冲数æ�®çš„目录。 path是临时目录的路径。 语法:proxy_temp_path path; path是临时目录的路径 proxy_temp_file_write_size:设置æ¯�次写数æ�®åˆ°ä¸´æ—¶æ–‡ä»¶çš„大å°�é™�制。 proxy_max_temp_file_size:设置临时的缓冲目录中å…�许存储的最大容é‡�。 é��缓冲å�‚数项: proxy_connect_timeout:设置ä¸�å��端æœ�务器建立è¿�æ�¥æ—¶çš„超时时间。 proxy_read_timeout:设置ä»�å��端æœ�务器读å�–å“�应数æ�®çš„超时时间。 proxy_send_timeout:设置å�‘å��端æœ�åŠ¡å™¨ä¼ è¾“è¯·æ±‚æ•°æ�®çš„超时时间。</code></pre><p>具体的nginx.confé…�置如下:</p><pre><code class="text">http{ proxy_connect_timeout 10; proxy_read_timeout 120; proxy_send_timeout 10; proxy_buffering on; client_body_buffer_size 512k; proxy_buffers 4 64k; proxy_buffer_size 16k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_temp_path /soft/nginx/temp_buffer; } </code></pre><p>上述的缓冲区å�‚数,是基äº�æ¯�个请求分é…�的空间,而并ä¸�是所有请求的共享空间。当然,具体的å�‚数值还需è¦�æ ¹æ�®ä¸šåŠ¡å�»å†³å®šï¼Œè¦�综å�ˆè€ƒè™‘机器的内存以å�Šæ¯�个请求的平å�‡æ•°æ�®å¤§å°�。</p><p>最å��æ��一嘴:使用缓冲也å�¯ä»¥å‡�å°‘å�³æ—¶ä¼ 输带æ�¥çš„带宽消耗。</p><h2><strong>Nginx缓存机制</strong></h2><p>对äº�性能优化而言,缓存是一ç§�能够大幅度æ��å�‡æ€§èƒ½çš„æ–¹æ¡ˆï¼Œå› æ­¤å‡ ä¹�å�¯ä»¥åœ¨å�„处都能看è§�缓存,如客户端缓存ã€�代ç�†ç¼“å­˜ã€�æœ�务器缓存等等,Nginx的缓存则å±�äº�代ç�†ç¼“存的一ç§�。对äº�æ•´ä¸ªç³»ç»Ÿè€Œè¨€ï¼ŒåŠ å…¥ç¼“å­˜å¸¦æ�¥çš„优势é¢�外æ˜�显:</p><ul><li>å‡�少了å†�次å�‘å��端或文件æœ�务器请求资æº�的带宽消耗。</li><li>é™�ä½�了下游æœ�务器的访问å�‹åŠ›ï¼Œæ��å�‡ç³»ç»Ÿæ•´ä½“å��å��。</li><li>缩短了å“�应时间,æ��å�‡äº†åŠ è½½é€Ÿåº¦ï¼Œæ‰“å¼€é¡µé�¢çš„速度更快。</li></ul><p>那么在Nginx中,å�ˆè¯¥å¦‚何é…�置代ç�†ç¼“存呢?先æ�¥çœ‹çœ‹ç¼“存相关的é…�置项:</p><p>「proxy_cache_pathã€�:代ç�†ç¼“存的路径。</p><p>语法:</p><pre><code class="text">proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];</code></pre><p>æ˜¯çš„ï¼Œä½ æ²¡æœ‰çœ‹é”™ï¼Œå°±æ˜¯è¿™ä¹ˆé•¿....,解释一下æ¯�个å�‚数项的å�«ä¹‰ï¼š</p><pre><code class="text">path:缓存的路径地å�€ã€‚ levels:缓存存储的层次结æ�„,最多å…�许三层目录。 use_temp_path:是å�¦ä½¿ç”¨ä¸´æ—¶ç›®å½•。 keys_zone:指定一个共享内存空间æ�¥å­˜å‚¨çƒ­ç‚¹Key(1Må�¯å­˜å‚¨8000个Key)。 inactive:设置缓存多长时间未被访问å��åˆ é™¤ï¼ˆé»˜è®¤æ˜¯å��分钟)。 max_size:å…�许缓存的最大存储空间,超出å��会基äº�LRU算法移除缓存,Nginx会创建一个Cache manager的进程移除数æ�®ï¼Œä¹Ÿå�¯ä»¥é€šè¿‡purgeæ–¹å¼�。 manager_files:manager进程æ¯�次移除缓存文件数é‡�的上é™�。 manager_sleep:manager进程æ¯�次移除缓存文件的时间上é™�。 manager_threshold:manager进程æ¯�次移除缓存å��的间隔时间。 loader_files:é‡�å�¯Nginx载入缓存时,æ¯�æ¬¡åŠ è½½çš„ä¸ªæ•°ï¼Œé»˜è®¤100。 loader_sleep:æ¯�次载入时,å…�许的最大时间上é™�,默认200ms。 loader_threshold:一次载入å��,å�œé¡¿çš„æ—¶é—´é—´éš”,默认50ms。 purger:是å�¦å¼€å�¯purgeæ–¹å¼�移除数æ�®ã€‚ purger_files:æ¯�次移除缓存文件时的数é‡�。 purger_sleep:æ¯�次移除时,å…�许消耗的最大时间。 purger_threshold:æ¯�次移除完æˆ�å��,å�œé¡¿çš„间隔时间。</code></pre><p>「proxy_cacheã€�:开å�¯æˆ–关闭代ç�†ç¼“存,开å�¯æ—¶éœ€è¦�指定一个共享内存区域。</p><p>语法:</p><pre><code class="text">proxy_cache zone | off;</code></pre><p>zone为内存区域的å��称,å�³ä¸Šé�¢ä¸­keys_zone设置的å��称。</p><p>「proxy\_cache_keyã€�:定义如何生æˆ�缓存的键。</p><p>语法:</p><pre><code class="text">proxy_cache_key string;</code></pre><p>string为生æˆ�Key的规则,如proxy_host$request_uri。</p><p>「proxy_cache_validã€�:缓存生效的状æ€�ç �ä¸�过期时间。</p><p>语法:</p><pre><code class="text">proxy_cache_valid [code ...] time;</code></pre><p>code为状æ€�ç �,time为有效时间,å�¯ä»¥æ ¹æ�®çжæ€�ç �设置ä¸�å�Œçš„缓存时间。</p><p>例如:proxy_cache_valid 200 302 30m;</p><p>「proxy_cache_min_usesã€�:设置资æº�被请求多少次å��被缓存。</p><p>语法:</p><pre><code class="text">proxy_cache_min_uses number;</code></pre><p>number为次数,默认为1。</p><p>「proxy_cache_use_staleã€�:当å��端出ç�°å¼‚常时,是å�¦å…�许Nginxè¿”å›�缓存作为å“�应。</p><p>语法:</p><pre><code class="text">proxy_cache_use_stale error;</code></pre><p>error为错误类å�‹ï¼Œå�¯é…�ç½®timeout|invalid_header|updating|http_500...。</p><p>「proxy_cache_lockã€�:对äº�相å�Œçš„请求,是å�¦å¼€å�¯é”�机制,å�ªå…�许一个请求å�‘å¾€å��端。</p><p>语法:</p><pre><code class="text">proxy_cache_lock on | off;</code></pre><p>「proxy_cache_lock_timeoutã€�:é…�ç½®é”�超时机制,超出规定时间å��会释放请求。</p><pre><code class="text">proxy_cache_lock_timeout time;</code></pre><p>「proxy_cache_methodsã€�:设置对äº�那些HTTP方法开å�¯ç¼“存。</p><p>语法:</p><pre><code class="text">proxy_cache_methods method;</code></pre><p>method为请求方法类å�‹ï¼Œå¦‚GETã€�HEAD等。</p><p>「proxy_no_cacheã€�:定义ä¸�存储缓存的æ�¡ä»¶ï¼Œç¬¦å�ˆæ—¶ä¸�会ä¿�存。</p><p>语法:</p><pre><code class="text">proxy_no_cache string...;</code></pre><p>string为æ�¡ä»¶ï¼Œä¾‹å¦‚arg_nocache $arg_comment;</p><p>「proxy_cache_bypassã€�:定义ä¸�读å�–缓存的æ�¡ä»¶ï¼Œç¬¦å�ˆæ—¶ä¸�会ä»�缓存中读å�–。</p><p>语法:</p><pre><code class="text">proxy_cache_bypass string...;</code></pre><p>和上é�¢proxy_no_cacheçš„é…�置方法类似。</p><p>「add_headerã€�:往å“�åº”å¤´ä¸­æ·»åŠ å­—æ®µä¿¡æ�¯ã€‚</p><p>语法:</p><pre><code class="text">add_header fieldName fieldValue;</code></pre><p>「$upstream_cache_statusã€�:记录了缓存是å�¦å‘½ä¸­çš„ä¿¡æ�¯ï¼Œå­˜åœ¨å¤šç§�情况:</p><pre><code class="text">MISS:请求未命中缓存。 HIT:请求命中缓存。 EXPIRED:请求命中缓存但缓存已过期。 STALE:请求命中了陈旧缓存。 REVALIDDATED:Nginx验è¯�陈旧缓存ä¾�然有效。 UPDATING:命中的缓存内容陈旧,但正在更新缓存。 BYPASS:å“�应结æ�œæ˜¯ä»�å�Ÿå§‹æœ�务器è�·å�–的。</code></pre><p>PS:这个和之å‰�çš„ä¸�å�Œï¼Œä¹‹å‰�的都是å�‚数项,这个是一个Nginx内置å�˜é‡�。</p><p>OK~,对äº�Nginx中的缓存é…�置项大概了解å��,æ�¥ç�€æ�¥é…�置一下Nginx代ç�†ç¼“存:</p><pre><code class="text">http{ # 设置缓存的目录,并且内存中缓存区å��为hot_cache,大å°�为128m, # 三天未被访问过的缓存自动清楚,ç£�盘中缓存的最大容é‡�为2GB。 proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g; server{ location / { # 使用å��为nginx_cache的缓存空间 proxy_cache hot_cache; # 对äº�200ã€�206ã€�304ã€�301ã€�302状æ€�ç �的数æ�®ç¼“å­˜1天 proxy_cache_valid 200 206 304 301 302 1d; # 对äº�其他状æ€�的数æ�®ç¼“å­˜30分钟 proxy_cache_valid any 30m; # 定义生æˆ�缓存键的规则(请求的url+å�‚数作为key) proxy_cache_key $host$uri$is_args$args; # 资æº�至少被é‡�å¤�访问三次å��å†�åŠ å…¥ç¼“å­˜ proxy_cache_min_uses 3; # 出ç�°é‡�å¤�请求时,å�ªè®©ä¸€ä¸ªå�»å��端读数æ�®ï¼Œå…¶ä»–çš„ä»�缓存中读å�– proxy_cache_lock on; # 上é�¢çš„é”�超时时间为3s,超过3s未è�·å�–æ•°æ�®ï¼Œå…¶ä»–请求直æ�¥å�»å��端 proxy_cache_lock_timeout 3s; # 对äº�请求å�‚数或cookie中声æ˜�了ä¸�缓存的数æ�®ï¼Œä¸�å†�åŠ å…¥ç¼“å­˜ proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; # 在å“�åº”å¤´ä¸­æ·»åŠ ä¸€ä¸ªç¼“å­˜æ˜¯å�¦å‘½ä¸­çš„状æ€�(便äº�调试) add_header Cache-status $upstream_cache_status; } } } </code></pre><p>æ�¥ç�€æ�¥çœ‹ä¸€ä¸‹æ•ˆæ�œï¼Œå¦‚下:</p><p><img src="/img/remote/1460000043430188" alt="" title=""></p><p>ç¬¬ä¸€æ¬¡è®¿é—®æ—¶ï¼Œå› ä¸ºè¿˜æ²¡æœ‰è¯·æ±‚è¿‡èµ„æº�,所以缓存中没有数æ�®ï¼Œå› 此没有命中缓存。第二ã€�三次,ä¾�旧没有命中缓存,直至第四次时æ‰�æ˜¾ç¤ºå‘½ä¸­ï¼Œè¿™æ˜¯ä¸ºä»€ä¹ˆå‘¢ï¼Ÿå› ä¸ºåœ¨å‰�é�¢çš„缓存é…�置中,我们é…�ç½®äº†åŠ å…¥ç¼“å­˜çš„æœ€ä½�æ�¡ä»¶ä¸ºï¼šã€Œã€Œèµ„æº�至少è¦�被请求三次以上æ‰�ä¼šåŠ å…¥ç¼“å­˜ã€‚ã€�ã€� è¿™æ ·å�¯ä»¥é�¿å…�å¾ˆå¤šæ— æ•ˆç¼“å­˜å� 用空间。</p><h2><strong>缓存清ç�†</strong></h2><p>当缓存过多时,如æ�œä¸�å�Šæ—¶æ¸…ç�†ä¼šå¯¼è‡´ç£�盘空间被“å�ƒå…‰â€�ï¼Œå› æ­¤æˆ‘ä»¬éœ€è¦�一套完善的缓存清ç�†æœºåˆ¶å�»åˆ 除缓存,在之å‰�çš„proxy_cache_pathå�‚数中有purger相关的选项,开å�¯å��å�¯ä»¥å¸®æˆ‘们自动清ç�†ç¼“存,但é�—憾的是:purger系列å�‚æ•°å�ªæœ‰å•†ä¸šç‰ˆçš„NginxPlusæ‰�èƒ½ä½¿ç”¨ï¼Œå› æ­¤éœ€è¦�付费æ‰�å�¯ä½¿ç”¨ã€‚</p><p>ä¸�è¿‡å¤©æ— ç»�人之路,我们å�¯ä»¥é€šè¿‡å¼ºå¤§çš„第三方模å�—ngx_cache_purgeæ�¥æ›¿ä»£ï¼Œå…ˆæ�¥å®‰è£…一下该æ�’件:</p><p>①首先å�»åˆ°Nginx的安装目录下,创建一个cache_purge目录:</p><pre><code class="text">[root@localhost]# mkdir cache_purge &amp;&amp; cd cache_purge </code></pre><p>②通过wget指令ä»�github上拉å�–安装包的å�‹ç¼©æ–‡ä»¶å¹¶è§£å�‹ï¼š</p><pre><code class="text">[root@localhost]# wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz [root@localhost]# tar -xvzf 2.3.tar.gz </code></pre><p>â‘¢å†�次å�»åˆ°ä¹‹å‰�Nginx的解å�‹ç›®å½•下:</p><pre><code class="text">[root@localhost]# cd /soft/nginx/nginx1.21.6 </code></pre><p>â‘£é‡�æ–°æ�„建一次Nginx,通过--add-moduleçš„æŒ‡ä»¤æ·»åŠ åˆšåˆšçš„ç¬¬ä¸‰æ–¹æ¨¡å�—:</p><pre><code class="text">[root@localhost]# ./configure --prefix=/soft/nginx/ --add-module=/soft/nginx/cache_purge/ngx_cache_purge-2.3/ </code></pre><p>⑤é‡�æ–°æ ¹æ�®åˆšåˆšæ�„建的Nginx,å†�次编译一下,「但切记ä¸�è¦�make installã€� :</p><pre><code class="text">[root@localhost]# make </code></pre><p>â‘¥åˆ é™¤ä¹‹å‰�Nginxçš„å�¯åŠ¨æ–‡ä»¶ï¼Œä¸�放心的也å�¯ä»¥ç§»åŠ¨åˆ°å…¶ä»–ä½�置:</p><pre><code class="text">[root@localhost]# rm -rf /soft/nginx/sbin/nginx </code></pre><p>⑦ä»�生æˆ�çš„objs目录中,é‡�æ–°å¤�制一个Nginxçš„å�¯åŠ¨æ–‡ä»¶åˆ°å�Ÿæ�¥çš„ä½�置:</p><pre><code class="text">[root@localhost]# cp objs/nginx /soft/nginx/sbin/nginx </code></pre><p>至此,第三方缓存清除模å�—ngx_cache_purge就安装完æˆ�了,æ�¥ä¸‹æ�¥ç¨�微修改一下nginx.confé…�置,å†�æ·»åŠ ä¸€æ�¡location规则:</p><pre><code class="text">location ~ /purge(/.*) { # é…�ç½®å�¯ä»¥æ‰§è¡Œæ¸…除æ“�作的IP(线上å�¯ä»¥é…�ç½®æˆ�内网机器) # allow 127.0.0.1; # 代表本机 allow all; # 代表å…�许任æ„�IP清除缓存 proxy_cache_purge $host$1$is_args$args; } </code></pre><p>ç„¶å��å†�é‡�å�¯Nginx,æ�¥ä¸‹æ�¥å�³å�¯é€šè¿‡<a href="https://link.segmentfault.com/?enc=hVxG9vbn4V11j%2B%2BlU1RM4A%3D%3D.elmIJwk0fVEroTagTSJI0HuIWIvN8LXspoDkO2w9D2I%3D" rel="nofollow">http://xxx/purge/xx</a>的方å¼�清除缓存。</p><h2><strong>Nginxå®�ç�°IP黑白å��å�•</strong></h2><p>有时候往往有些需求,å�¯èƒ½æŸ�些æ�¥å�£å�ªèƒ½å¼€æ”¾ç»™å¯¹åº”çš„å�ˆä½œå•†ï¼Œæˆ–者购买/æ�¥å…¥APIçš„å�ˆä½œä¼™ä¼´ï¼Œé‚£ä¹ˆæ­¤æ—¶å°±éœ€è¦�å®�ç�°ç±»ä¼¼äº�IP白å��å�•的功能。而有时候有些æ�¶æ„�攻击者或爬虫程åº�,被识别å��需è¦�ç¦�止其å†�æ¬¡è®¿é—®ç½‘ç«™ï¼Œå› æ­¤ä¹Ÿéœ€è¦�å®�ç�°IP黑å��å�•ã€‚é‚£ä¹ˆè¿™äº›åŠŸèƒ½æ— éœ€äº¤ç”±å��端å®�ç�°ï¼Œå�¯ç›´æ�¥åœ¨Nginx中处ç�†ã€‚</p><p>Nginxå�šé»‘白å��å�•机制,主è¦�是通过allowã€�denyé…�置项æ�¥å®�ç�°ï¼š</p><pre><code class="text">allow xxx.xxx.xxx.xxx; # å…�许指定的IP访问,å�¯ä»¥ç”¨äº�å®�ç�°ç™½å��å�•。 deny xxx.xxx.xxx.xxx; # ç¦�止指定的IP访问,å�¯ä»¥ç”¨äº�å®�ç�°é»‘å��å�•。 </code></pre><p>è¦�å�Œæ—¶å±�蔽/开放多个IP访问时,如æ�œæ‰€æœ‰IP全部写在nginx.conf文件中定然是ä¸�显示的,这ç§�æ–¹å¼�比较冗余,那么å�¯ä»¥æ–°å»ºä¸¤ä¸ªæ–‡ä»¶BlocksIP.confã€�WhiteIP.conf:</p><pre><code class="text"># --------黑å��å�•:BlocksIP.conf--------- deny 192.177.12.222; # å±�蔽192.177.12.222访问 deny 192.177.44.201; # å±�蔽192.177.44.201访问 deny 127.0.0.0/8; # å±�蔽127.0.0.1到127.255.255.254网段中的所有IP访问 # --------白å��å�•:WhiteIP.conf--------- allow 192.177.12.222; # å…�许192.177.12.222访问 allow 192.177.44.201; # å…�许192.177.44.201访问 allow 127.45.0.0/16; # å…�许127.45.0.1到127.45.255.254网段中的所有IP访问 deny all; # 除开上述IP外,其他IP全部ç¦�止访问 </code></pre><p>分别将è¦�ç¦�æ­¢/开放的IPæ·»åŠ åˆ°å¯¹åº”çš„æ–‡ä»¶å��,å�¯ä»¥å†�将这两个文件在nginx.conf中导入:</p><pre><code class="text">http{ # å±�蔽该文件中的所有IP include /soft/nginx/IP/BlocksIP.conf; server{ location xxx { # æŸ�一系列æ�¥å�£å�ªå¼€æ”¾ç»™ç™½å��å�•中的IP include /soft/nginx/IP/blockip.conf; } } }</code></pre><p>对äº�文件具体在哪儿导入,这个也并é��éš�æ„�的,如æ�œè¦�æ•´ç«™å±�蔽/开放就在http中导入,如æ�œå�ªéœ€è¦�一个域å��下å±�蔽/开放就在sever中导入,如æ�œå�ªéœ€è¦�针对äº�æŸ�一系列æ�¥å�£å±�蔽/开放IP,那么就在location中导入。</p><p>当然,上述å�ªæ˜¯æœ€ç®€å�•çš„IP黑/白å��å�•å®�ç�°æ–¹å¼�,å�Œæ—¶ä¹Ÿå�¯ä»¥é€šè¿‡ngx_http_geo_moduleã€�ngx_http_geo_module第三方库å�»å®�ç�°ï¼ˆè¿™ç§�æ–¹å¼�å�¯ä»¥æŒ‰åœ°åŒºã€�国家进行å±�蔽,并且æ��供了IP库)。</p><h2><strong>Nginx跨域é…�ç½®</strong></h2><p>跨域问题在之å‰�çš„å�•体æ�¶æ�„å¼€å�‘中,其å®�是比较少è§�的问题,除é��是需è¦�æ�¥å…¥ç¬¬ä¸‰æ–¹SDK时,æ‰�需è¦�处ç�†æ­¤é—®é¢˜ã€‚但éš�ç�€ç�°åœ¨å‰�å��端分离ã€�分布å¼�æ�¶æ�„çš„æµ�行,跨域问题也æˆ�为了æ¯�个Javaå¼€å�‘å¿…é¡»è¦�懂得解决的一个问题。</p><h3><strong>跨域问题产生的å�Ÿå› </strong></h3><p>产生跨域问题的主è¦�å�Ÿå› 就在äº� 「å�Œæº�ç­–ç•¥ã€� ,为了ä¿�è¯�用户信æ�¯å®‰å…¨ï¼Œé˜²æ­¢æ�¶æ„�网站窃å�–æ•°æ�®ï¼Œå�Œæº�策略是必须的,å�¦åˆ™cookieå�¯ä»¥å…±äº«ã€‚ç”±äº�httpæ— çŠ¶æ€�å��议通常会借助cookieæ�¥å®�ç�°æœ‰çжæ€�的信æ�¯è®°å½•,例如用户的身份/密ç �ç­‰ï¼Œå› æ­¤ä¸€æ—¦cookie被共享,那么会导致用户的身份信æ�¯è¢«ç›—å�–。</p><p>å�Œæº�策略主è¦�是指三点相å�Œï¼Œã€Œã€Œå��è®®+域å��+端å�£ã€�ã€� 相å�Œçš„两个请求,则å�¯ä»¥è¢«çœ‹å�šæ˜¯å�Œæº�的,但如æ�œå…¶ä¸­ä»»æ„�一点存在ä¸�å�Œï¼Œåˆ™ä»£è¡¨æ˜¯ä¸¤ä¸ªä¸�å�Œæº�的请求,å�Œæº�策略会é™�制了ä¸�å�Œæº�之间的资æº�交互。</p><h3><strong>Nginx解决跨域问题</strong></h3><p>弄æ˜�白了跨域问题的产生å�Ÿå› ,æ�¥ä¸‹æ�¥çœ‹çœ‹Nginx中å�ˆè¯¥å¦‚何解决跨域呢?其å®�比较简å�•,在nginx.conf中ç¨�å¾®æ·»åŠ ä¸€ç‚¹é…�ç½®å�³å�¯ï¼š</p><pre><code class="text">location / { # å…�许跨域的请求,å�¯ä»¥è‡ªå®šä¹‰å�˜é‡�$http_origin,*表示所有 add_header 'Access-Control-Allow-Origin' *; # å…�许æ�ºå¸¦cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; # å…�许跨域请求的方法:GET,POST,OPTIONS,PUT add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT'; # å…�许请求时æ�ºå¸¦çš„头部信æ�¯ï¼Œ*表示所有 add_header 'Access-Control-Allow-Headers' *; # å…�许å�‘é€�按段è�·å�–资æº�的请求 add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; # 一定è¦�有ï¼�ï¼�ï¼�å�¦åˆ™Postè¯·æ±‚æ— æ³•è¿›è¡Œè·¨åŸŸï¼� # 在å�‘é€�Post跨域请求å‰�,会以Optionsæ–¹å¼�å�‘é€�预检请求,æœ�务器æ�¥å�—æ—¶æ‰�会正å¼�请求 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; # 对äº�Optionsæ–¹å¼�的请求返å›�204,表示æ�¥å�—跨域请求 return 204; } } </code></pre><p>在nginx.confæ–‡ä»¶åŠ ä¸Šå¦‚ä¸Šé…�ç½®å��,跨域请求å�³å�¯ç”Ÿæ•ˆäº†ã€‚</p><p>但如æ�œå��端是采用分布å¼�æ�¶æ�„å¼€å�‘的,有时候RPC调用也需è¦�解决跨域问题,ä¸�然也å�Œæ ·ä¼šå‡ºç�°æ— æ³•è·¨åŸŸè¯·æ±‚çš„å¼‚å¸¸ï¼Œå› æ­¤å�¯ä»¥åœ¨ä½ çš„å��端项目中,通过继承HandlerInterceptorAdapterç±»ã€�å®�ç�°WebMvcConfigureræ�¥å�£ã€�æ·»åŠ @CrossOrgin注解的方å¼�å®�ç�°æ�¥å�£ä¹‹é—´çš„跨域é…�置。</p><h2><strong>Nginx防盗链设计</strong></h2><p>首先了解一下何谓盗链:「「盗链å�³æ˜¯æŒ‡å¤–部网站引入当å‰�网站的资æº�对外展示ã€�ã€� ,æ�¥ä¸¾ä¸ªç®€å�•的例å­�ç�†è§£ï¼š</p><p>好比å£�纸网站Xç«™ã€�Y站,X站是一点点å�»è´­ä¹°ç‰ˆæ�ƒã€�签约作者的方å¼�,ä»�而积累了海é‡�çš„å£�çº¸ç´ æ��,但Y站由äº�资金等å�„æ–¹é�¢çš„å�Ÿå› ,就直æ�¥é€šè¿‡<code>&lt;img src=&quot;Xç«™/xxx.jpg&quot; /&gt;</code>è¿™ç§�æ–¹å¼�ç…§æ�¬äº†X站的所有å£�纸资æº�,继而æ��供给用户下载。</p><p>那么如æ�œæˆ‘们自己是这个X站的Boss,心中必然ä¸�爽,那么此时å�ˆè¯¥å¦‚何å±�蔽这类问题呢?那么æ�¥ä¸‹æ�¥è¦�å�™è¯´çš„「「防盗链ã€�ã€� 登场了ï¼�</p><p>Nginx的防盗链机制å®�ç�°ï¼Œè·Ÿä¸€ä¸ªå¤´éƒ¨å­—段:Referer有关,该字段主è¦�æ��述了当å‰�请求是ä»�哪儿å�‘出的,那么在Nginx中就å�¯è�·å�–该值,然å��判断是å�¦ä¸ºæœ¬ç«™çš„资æº�引用请求,如æ�œä¸�是则ä¸�å…�许访问。Nginx中存在一个é…�置项为valid_referers,正好å�¯ä»¥æ»¡è¶³å‰�é�¢çš„需求,语法如下:</p><pre><code class="text">valid_referers none | blocked | server_names | string ...; none:表示æ�¥å�—没有Referer字段的HTTP请求访问。 blocked:表示å…�许http://或https//以外的请求访问。 server_names:资æº�的白å��å�•,这里å�¯ä»¥æŒ‡å®šå…�许访问的域å��。 string:å�¯è‡ªå®šä¹‰å­—符串,支é…�通é…�符ã€�正则表达å¼�写法。</code></pre><p>简å�•了解语法å��,æ�¥ä¸‹æ�¥çš„å®�ç�°å¦‚下:</p><pre><code class="text"># 在动é�™åˆ†ç¦»çš„location中开å�¯é˜²ç›—链机制 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){ # 最å��é�¢çš„值在上线å‰�å�¯é…�置为å…�许的域å��地å�€ valid_referers blocked 192.168.12.129; if ($invalid_referer) { # å�¯ä»¥é…�ç½®æˆ�è¿”å›�ä¸€å¼ ç¦�止盗å�–的图片 # rewrite ^/ http://xx.xx.com/NO.jpg; # 也å�¯ç›´æ�¥è¿”å›�403 return 403; } root /soft/nginx/static_resources; expires 7d; } </code></pre><p>æ ¹æ�®ä¸Šè¿°ä¸­çš„内容é…�ç½®å��,就已ç»�通过Nginxå®�ç�°äº†æœ€åŸºæœ¬çš„防盗链机制,最å��å�ªéœ€è¦�é¢�外é‡�å�¯ä¸€ä¸‹å°±å¥½å•¦ï¼�当然,对äº�防盗链机制å®�ç�°è¿™å�—,也有专门的第三方模å�—ngx_http_accesskey_moduleå®�ç�°äº†æ›´ä¸ºå®Œå–„的设计,感兴趣的å°�伙伴å�¯ä»¥è‡ªè¡Œå�»çœ‹çœ‹ã€‚</p><p>PSï¼šé˜²ç›—é“¾æœºåˆ¶ä¹Ÿæ— æ³•è§£å†³çˆ¬è™«ä¼ªé€ referersä¿¡æ�¯çš„è¿™ç§�æ–¹å¼�抓å�–æ•°æ�®ã€‚</p><h2><strong>Nginxå¤§æ–‡ä»¶ä¼ è¾“é…�ç½®</strong></h2><p>在æŸ�些业务场景中需è¦�ä¼ è¾“ä¸€äº›å¤§æ–‡ä»¶ï¼Œä½†å¤§æ–‡ä»¶ä¼ è¾“æ—¶å¾€å¾€éƒ½ä¼šä¼šå‡ºç�°ä¸€äº›Bug,比如文件超出é™�制ã€�æ–‡ä»¶ä¼ è¾“è¿‡ç¨‹ä¸­è¯·æ±‚è¶…æ—¶ç­‰ï¼Œé‚£ä¹ˆæ­¤æ—¶å°±å�¯ä»¥åœ¨Nginxç¨�å¾®å�šä¸€äº›é…�置,先æ�¥äº†è§£ä¸€äº›å…³äº�å¤§æ–‡ä»¶ä¼ è¾“æ—¶å�¯èƒ½ä¼šç”¨çš„é…�置项:</p><p><img src="/img/remote/1460000043430189" alt="" title=""></p><p>åœ¨ä¼ è¾“å¤§æ–‡ä»¶æ—¶ï¼Œ<code>client_max_body_sizeã€�client_header_timeoutã€�proxy_read_timeoutã€�proxy_send_timeout</code>这四个å�‚数值都å�¯ä»¥æ ¹æ�®è‡ªå·±é¡¹ç›®çš„å®�际情况æ�¥é…�置。</p><p>上述é…�置仅是作为代ç�†å±‚需è¦�é…�ç½®çš„ï¼Œå› ä¸ºæœ€ç»ˆå®¢æˆ·ç«¯ä¼ è¾“æ–‡ä»¶è¿˜æ˜¯ç›´æ�¥ä¸�å��端进行交互,这里å�ªæ˜¯æŠŠä½œä¸ºç½‘关层的Nginxé…�置调高一点,调到能够“容纳大文件â€�ä¼ è¾“çš„ç¨‹åº¦ã€‚å½“ç„¶ï¼ŒNginx中也å�¯ä»¥ä½œä¸ºæ–‡ä»¶æœ�务器使用,但需è¦�用到一个专门的第三方模å�—nginx-upload-module,如æ�œé¡¹ç›®ä¸­æ–‡ä»¶ä¸Šä¼ 的作用处ä¸�多,那么建议å�¯ä»¥é€šè¿‡Nginxæ�­å»ºï¼Œæ¯•竟å�¯ä»¥èŠ‚çœ�一å�°æ–‡ä»¶æœ�务器资æº�ã€‚ä½†å¦‚è‹¥æ–‡ä»¶ä¸Šä¼ /下载较为频ç¹�,那么还是建议é¢�外æ�­å»ºæ–‡ä»¶æœ�åŠ¡å™¨ï¼Œå¹¶å°†ä¸Šä¼ /下载功能交由å��端处ç�†ã€‚</p><h2><strong>Nginxé…�ç½®SLLè¯�书</strong></h2><p>éš�ç�€è¶Šæ�¥è¶Šå¤šçš„网站æ�¥å…¥HTTPSï¼Œå› æ­¤Nginx中仅é…�ç½®HTTP还ä¸�够,往往还需è¦�监å�¬443端å�£çš„请求,HTTPS为了确ä¿�通信安全,所以æœ�务端需é…�置对应的数字è¯�书,当项目使用Nginx作为网关时,那么è¯�书在Nginx中也需è¦�é…�置,æ�¥ä¸‹æ�¥ç®€å�•è�Šä¸€ä¸‹å…³äº�SSLè¯�书é…�置过程:</p><p>â‘ å…ˆå�»CA机æ�„或ä»�云æ�§åˆ¶å�°ä¸­ç”³è¯·å¯¹åº”çš„SSLè¯�ä¹¦ï¼Œå®¡æ ¸é€šè¿‡å��下载Nginx版本的è¯�书。</p><p>②下载数字è¯�书å��,完整的文件总共有三个:.crtã€�.keyã€�.pem:</p><pre><code class="text">.crt:数字è¯�书文件,.crt是.pemçš„æ‹“å±•æ–‡ä»¶ï¼Œå› æ­¤æœ‰äº›äººä¸‹è½½å��å�¯èƒ½æ²¡æœ‰ã€‚ .key:æœ�务器的ç§�钥文件,å�Šé��å¯¹ç§°åŠ å¯†çš„ç§�钥,用äº�è§£å¯†å…¬é’¥ä¼ è¾“çš„æ•°æ�®ã€‚ .pem:Base64-encodedç¼–ç �æ ¼å¼�çš„æº�è¯�书文本文件,å�¯è‡ªè¡Œæ ¹éœ€æ±‚修改拓展å��。</code></pre><p>③在Nginx目录下新建certificate目录,并将下载好的è¯�书/ç§�é’¥ç­‰æ–‡ä»¶ä¸Šä¼ è‡³è¯¥ç›®å½•ã€‚</p><p>④最å��修改一下nginx.conf文件å�³å�¯ï¼Œå¦‚下:</p><pre><code class="text"># ----------HTTPSé…�ç½®----------- server { # 监å�¬HTTPS默认的443端å�£ listen 443; # é…�置自己项目的域å�� server_name www.xxx.com; # 打开SSLåŠ å¯†ä¼ è¾“ ssl on; # 输入域å��å��,首页文件所在的目录 root html; # é…�置首页的文件å�� index index.html index.htm index.jsp index.ftl; # é…�置自己下载的数字è¯�书 ssl_certificate certificate/xxx.pem; # é…�置自己下载的æœ�务器ç§�é’¥ ssl_certificate_key certificate/xxx.key; # å�œæ­¢é€šä¿¡æ—¶ï¼ŒåŠ å¯†ä¼šè¯�的有效期,在该时间段内ä¸�需è¦�é‡�新交æ�¢å¯†é’¥ ssl_session_timeout 5m; # TLSæ�¡æ‰‹æ—¶ï¼Œæœ�务器采用的密ç �套件 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # æœ�务器支æŒ�çš„TLS版本 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # å¼€å�¯ç”±æœ�务器决定采用的密ç �套件 ssl_prefer_server_ciphers on; location / { .... } } # ---------HTTP请求转HTTPS------------- server { # 监å�¬HTTP默认的80端å�£ listen 80; # 如æ�œ80端å�£å‡ºç�°è®¿é—®è¯¥åŸŸå��的请求 server_name www.xxx.com; # 将请求改写为HTTPSï¼ˆè¿™é‡Œå†™ä½ é…�置了HTTPS的域å��) rewrite ^(.*)$ https://www.xxx.com; } </code></pre><p>OK~ï¼Œæ ¹æ�®å¦‚上é…�置了Nginxå��ï¼Œä½ çš„ç½‘ç«™å�³å�¯é€šè¿‡https://的方å¼�访问,并且当客户端使用http://的方å¼�访问时,会自动将其改写为HTTPS请求。</p><h2><strong>Nginx的高å�¯ç”¨</strong></h2><p>线上如æ�œé‡‡ç”¨å�•个节点的方å¼�部署Nginx,难å…�会出ç�°å¤©ç�¾äººç¥¸ï¼Œæ¯”如系统异常ã€�程åº�宕机ã€�æœ�务器断电ã€�机房爆炸ã€�地ç�ƒæ¯�ç�­....å“ˆå“ˆå“ˆï¼Œå¤¸å¼ äº†ã€‚ä½†å®�际生产ç�¯å¢ƒä¸­ç¡®å®�存在éš�患问题,由äº�Nginx作为整个系统的网关层æ�¥å…¥å¤–部æµ�é‡�,所以一旦Nginx宕机,最终就会导致整个系统ä¸�å�¯ç”¨ï¼Œè¿™æ— 疑对äº�用户的体验感是æ��å·®çš„ï¼Œå› æ­¤ä¹Ÿå¾—ä¿�éšœNginx高å�¯ç”¨çš„特性。</p><p>æ�¥ä¸‹æ�¥åˆ™ä¼šé€šè¿‡keepalivedçš„VIP机制,å®�ç�°Nginx的高å�¯ç”¨ã€‚VIPå¹¶ä¸�是å�ªä¼šå‘˜çš„æ„�æ€�,而是指Virtual IP,å�³è™šæ‹ŸIP。</p><p>keepalived在之å‰�å�•体æ�¶æ�„å¼€å�‘时,是一个用的较为频ç¹�的高å�¯ç”¨æŠ€æœ¯ï¼Œæ¯”如MySQLã€�Redisã€�MQã€�Proxyã€�Tomcatç­‰å�„处都会通过keepalivedæ��供的VIP机制,å®�ç�°å�•节点应用的高å�¯ç”¨ã€‚</p><h3><strong>Keepalived+é‡�å�¯è„šæœ¬+å�Œæœºçƒ­å¤‡æ�­å»º</strong></h3><p>①首先创建一个对应的目录并下载keepalived到Linux中并解å�‹ï¼š</p><pre><code class="text">[root@localhost]# mkdir /soft/keepalived &amp;&amp; cd /soft/keepalived [root@localhost]# wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz [root@localhost]# tar -zxvf keepalived-2.2.4.tar.gz </code></pre><p>②进入解å�‹å��çš„keepalived目录并æ�„建安装ç�¯å¢ƒï¼Œç„¶å��编译并安装:</p><pre><code class="text">[root@localhost]# cd keepalived-2.2.4 [root@localhost]# ./configure --prefix=/soft/keepalived/ [root@localhost]# make &amp;&amp; make install </code></pre><p>③进入安装目录的/soft/keepalived/etc/keepalived/并编辑é…�置文件:</p><pre><code class="text">[root@localhost]# cd /soft/keepalived/etc/keepalived/ [root@localhost]# vi keepalived.conf </code></pre><p>④编辑主机的keepalived.confæ ¸å¿ƒé…�置文件,如下:</p><pre><code class="text">global_defs { # 自带的邮件æ��醒æœ�务,建议用独立的监æ�§æˆ–第三方SMTP,也å�¯é€‰æ‹©é…�置邮件å�‘é€�。 notification_email { root@localhost } notification_email_from root@localhost smtp_server localhost smtp_connect_timeout 30 # 高å�¯ç”¨é›†ç¾¤ä¸»æœºèº«ä»½æ ‡è¯†(é›†ç¾¤ä¸­ä¸»æœºèº«ä»½æ ‡è¯†å��ç§°ä¸�能é‡�å¤�,建议é…�ç½®æˆ�本机IP) router_id 192.168.12.129 } # 定时è¿�行的脚本文件é…�ç½® vrrp_script check_nginx_pid_restart { # 之å‰�编写的nginxé‡�å�¯è„šæœ¬çš„æ‰€åœ¨ä½�ç½® script &quot;/soft/scripts/keepalived/check_nginx_pid_restart.sh&quot; # æ¯�é—´éš”3秒执行一次 interval 3 # 如æ�œè„šæœ¬ä¸­çš„æ�¡ä»¶æˆ�立,é‡�å�¯ä¸€æ¬¡åˆ™æ�ƒé‡�-20 weight -20 } # 定义虚拟路由,VI_1ä¸ºè™šæ‹Ÿè·¯ç”±çš„æ ‡ç¤ºç¬¦ï¼ˆå�¯è‡ªå®šä¹‰å��称) vrrp_instance VI_1 { # 当å‰�èŠ‚ç‚¹çš„èº«ä»½æ ‡è¯†ï¼šç”¨æ�¥å†³å®šä¸»ä»�(MASTER为主机,BACKUP为ä»�机) state MASTER # 绑定虚拟IP的网络æ�¥å�£ï¼Œæ ¹æ�®è‡ªå·±çš„æœºå™¨çš„网å�¡é…�ç½® interface ens33 # 虚拟路由的IDå�·ï¼Œä¸»ä»�ä¸¤ä¸ªèŠ‚ç‚¹è®¾ç½®å¿…é¡»ä¸€æ · virtual_router_id 121 # 填写本机IP mcast_src_ip 192.168.12.129 # 节点æ�ƒé‡�优先级,主节点è¦�比ä»�节点优先级高 priority 100 # 优先级高的设置nopreempt,解决异常æ�¢å¤�å��å†�次抢å� é€ æˆ�的脑裂问题 nopreempt # 组播信æ�¯å�‘é€�é—´éš”ï¼Œä¸¤ä¸ªèŠ‚ç‚¹è®¾ç½®å¿…é¡»ä¸€æ ·ï¼Œé»˜è®¤1s(类似äº�心跳检测) advert_int 1 authentication { auth_type PASS auth_pass 1111 } # å°†track_scriptå�—åŠ å…¥instanceé…�ç½®å�— track_script { # 执行Nginx监æ�§çš„脚本 check_nginx_pid_restart } virtual_ipaddress { # 虚拟IP(VIP),也å�¯æ‰©å±•,å�¯é…�置多个。 192.168.12.111 } } </code></pre><p>⑤克隆一å�°ä¹‹å‰�的虚拟机作为ä»�(备)机,编辑ä»�机的keepalived.conf文件,如下:</p><pre><code class="text">global_defs { # 自带的邮件æ��醒æœ�务,建议用独立的监æ�§æˆ–第三方SMTP,也å�¯é€‰æ‹©é…�置邮件å�‘é€�。 notification_email { root@localhost } notification_email_from root@localhost smtp_server localhost smtp_connect_timeout 30 # 高å�¯ç”¨é›†ç¾¤ä¸»æœºèº«ä»½æ ‡è¯†(é›†ç¾¤ä¸­ä¸»æœºèº«ä»½æ ‡è¯†å��ç§°ä¸�能é‡�å¤�,建议é…�ç½®æˆ�本机IP) router_id 192.168.12.130 } # 定时è¿�行的脚本文件é…�ç½® vrrp_script check_nginx_pid_restart { # 之å‰�编写的nginxé‡�å�¯è„šæœ¬çš„æ‰€åœ¨ä½�ç½® script &quot;/soft/scripts/keepalived/check_nginx_pid_restart.sh&quot; # æ¯�é—´éš”3秒执行一次 interval 3 # 如æ�œè„šæœ¬ä¸­çš„æ�¡ä»¶æˆ�立,é‡�å�¯ä¸€æ¬¡åˆ™æ�ƒé‡�-20 weight -20 } # 定义虚拟路由,VI_1ä¸ºè™šæ‹Ÿè·¯ç”±çš„æ ‡ç¤ºç¬¦ï¼ˆå�¯è‡ªå®šä¹‰å��称) vrrp_instance VI_1 { # 当å‰�èŠ‚ç‚¹çš„èº«ä»½æ ‡è¯†ï¼šç”¨æ�¥å†³å®šä¸»ä»�(MASTER为主机,BACKUP为ä»�机) state BACKUP # 绑定虚拟IP的网络æ�¥å�£ï¼Œæ ¹æ�®è‡ªå·±çš„æœºå™¨çš„网å�¡é…�ç½® interface ens33 # 虚拟路由的IDå�·ï¼Œä¸»ä»�ä¸¤ä¸ªèŠ‚ç‚¹è®¾ç½®å¿…é¡»ä¸€æ · virtual_router_id 121 # 填写本机IP mcast_src_ip 192.168.12.130 # 节点æ�ƒé‡�优先级,主节点è¦�比ä»�节点优先级高 priority 90 # 优先级高的设置nopreempt,解决异常æ�¢å¤�å��å†�次抢å� é€ æˆ�的脑裂问题 nopreempt # 组播信æ�¯å�‘é€�é—´éš”ï¼Œä¸¤ä¸ªèŠ‚ç‚¹è®¾ç½®å¿…é¡»ä¸€æ ·ï¼Œé»˜è®¤1s(类似äº�心跳检测) advert_int 1 authentication { auth_type PASS auth_pass 1111 } # å°†track_scriptå�—åŠ å…¥instanceé…�ç½®å�— track_script { # 执行Nginx监æ�§çš„脚本 check_nginx_pid_restart } virtual_ipaddress { # 虚拟IP(VIP),也å�¯æ‰©å±•,å�¯é…�置多个。 192.168.12.111 } } </code></pre><p>⑥新建scripts目录并编写Nginxçš„é‡�å�¯è„šæœ¬ï¼Œcheck_nginx_pid_restart.sh:</p><pre><code class="text">[root@localhost]# mkdir /soft/scripts /soft/scripts/keepalived [root@localhost]# touch /soft/scripts/keepalived/check_nginx_pid_restart.sh [root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh #!/bin/sh # 通过ps指令查询å��å�°çš„nginx进程数,并将其ä¿�存在å�˜é‡�nginx_number中 nginx_number=`ps -C nginx --no-header | wc -l` # 判断å��å�°æ˜¯å�¦è¿˜æœ‰Nginx进程在è¿�行 if [ $nginx_number -eq 0 ];then # 如æ�œå��å�°æŸ¥è¯¢ä¸�到`Nginx`进程存在,则执行é‡�å�¯æŒ‡ä»¤ /soft/nginx/sbin/nginx -c /soft/nginx/conf/nginx.conf # é‡�å�¯å��等待1så��,å†�次查询å��å�°è¿›ç¨‹æ•° sleep 1 # 如æ�œé‡�å�¯å��ä¾�æ—§æ— æ³•æŸ¥è¯¢åˆ°nginx进程 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then # å°†keepalived主机下线,将虚拟IP漂移给ä»�机,ä»�机上线æ�¥ç®¡Nginxæœ�务 systemctl stop keepalived.service fi fi </code></pre><p>⑦编写的脚本文件需è¦�更改编ç �æ ¼å¼�,并赋予执行æ�ƒé™�,å�¦åˆ™å�¯èƒ½æ‰§è¡Œå¤±è´¥ï¼š</p><pre><code class="text">[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh :set fileformat=unix # 在vi命令里é�¢æ‰§è¡Œï¼Œä¿®æ”¹ç¼–ç �æ ¼å¼� :set ff # 查看修改å��的编ç �æ ¼å¼� [root@localhost]# chmod +x /soft/scripts/keepalived/check_nginx_pid_restart.sh </code></pre><p>â‘§ç”±äº�安装keepalived时,是自定义的安装ä½�ç½®ï¼Œå› æ­¤éœ€è¦�æ‹·è´�一些文件到系统目录中:</p><pre><code class="text">[root@localhost]# mkdir /etc/keepalived/ [root@localhost]# cp /soft/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ [root@localhost]# cp /soft/keepalived/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/ [root@localhost]# cp /soft/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ </code></pre><p>⑨将keepalivedåŠ å…¥ç³»ç»Ÿæœ�务并设置开å�¯è‡ªå�¯åŠ¨ï¼Œç„¶å��测试å�¯åŠ¨æ˜¯å�¦æ­£å¸¸ï¼š</p><pre><code class="text">[root@localhost]# chkconfig keepalived on [root@localhost]# systemctl daemon-reload [root@localhost]# systemctl enable keepalived.service [root@localhost]# systemctl start keepalived.service </code></pre><p>其他命令:</p><pre><code class="text">systemctl disable keepalived.service # ç¦�止开机自动å�¯åЍ systemctl restart keepalived.service # é‡�å�¯keepalived systemctl stop keepalived.service # å�œæ­¢keepalived tail -f /var/log/messages # 查看keepalivedè¿�行时日志 </code></pre><p>⑩最å��测试一下VIP是å�¦ç”Ÿæ•ˆï¼Œé€šè¿‡æŸ¥çœ‹æœ¬æœºæ˜¯å�¦æˆ�功挂载虚拟IP:</p><pre><code class="text">[root@localhost]# ip addr </code></pre><p><img src="/img/remote/1460000043430190" alt="" title=""></p><p>ä»�上图中å�¯ä»¥æ˜�显看è§�虚拟IPå·²ç»�æˆ�功挂载,但å�¦å¤–一å�°æœºå™¨192.168.12.130å¹¶ä¸�会挂载这个虚拟IP,å�ªæœ‰å½“主机下线å��,作为ä»�机的192.168.12.130æ‰�会上线,æ�¥æ›¿VIP。最å��测试一下外网是å�¦å�¯ä»¥æ­£å¸¸ä¸�VIP通信,å�³åœ¨Windows中直æ�¥ping VIP:</p><p><img src="/img/remote/1460000043430191" alt="" title=""></p><p>外部通过VIP通信时,也å�¯ä»¥æ­£å¸¸Ping通,代表虚拟IPé…�ç½®æˆ�功。</p><h2><strong>Nginx高å�¯ç”¨æ€§æµ‹è¯•</strong></h2><p>ç»�过上述步骤å��,keepalivedçš„VIP机制已ç»�æ�­å»ºæˆ�功,在上个阶段中主è¦�å�šäº†å‡ 件事:</p><ul><li>一ã€�为部署Nginx的机器挂载了VIP。</li><li>二ã€�通过keepalivedæ�­å»ºäº†ä¸»ä»�å�Œæœºçƒ­å¤‡ã€‚</li><li>三ã€�通过keepalivedå®�ç�°äº†Nginx宕机é‡�å�¯ã€‚</li></ul><p>ç”±äº�å‰�é�¢æ²¡æœ‰åŸŸå��çš„å�Ÿå› ï¼Œå› æ­¤æœ€åˆ�server_nameé…�置的是当å‰�机器的IP,所以需ç¨�微更改一下nginx.confçš„é…�置:</p><pre><code class="text">sever{ listen 80; # 这里ä»�机器的本地IP改为虚拟IP server_name 192.168.12.111; # 如æ�œè¿™é‡Œé…�置的是域å��,那么则将域å��çš„æ˜ å°„é…�置改为虚拟IP } </code></pre><p>最å��æ�¥å®�验一下效æ�œï¼š</p><p><img src="/img/remote/1460000043430192" alt="" title=""></p><p>在上述过程中,首先分别å�¯åŠ¨äº†keepalivedã€�nginxæœ�务,然å��通过手动å�œæ­¢nginx的方å¼�模拟了Nginx宕机情况,过了片刻å��å†�次查询å��å�°è¿›ç¨‹ï¼Œæˆ‘们会å�‘ç�°nginxä¾�旧存活。</p><p>ä»�这个过程中ä¸�éš¾å�‘ç�°ï¼Œkeepalivedå·²ç»�为我们å®�ç�°äº†Nginx宕机å��自动é‡�å�¯çš„功能,那么æ�¥ç�€å†�模拟一下æœ�务器出ç�°æ•…障时的情况:</p><p><img src="/img/remote/1460000043430193" alt="" title=""></p><p>在上述过程中,我们通过手动关闭keepalivedæœ�务模拟了机器断电ã€�硬件æ�Ÿå��ç­‰æƒ…å†µï¼ˆå› ä¸ºæœºå™¨æ–­ç”µç­‰æƒ…å†µ=主机中的keepalived进程消失),然å��å†�次查询了一下本机的IPä¿¡æ�¯ï¼Œå¾ˆæ˜�显会看到VIP消失了ï¼�</p><p>ç�°åœ¨å†�切æ�¢åˆ°å�¦å¤–一å�°æœºå™¨ï¼š192.168.12.130æ�¥çœ‹çœ‹æƒ…况:</p><p><img src="/img/remote/1460000043430194" alt="" title=""></p><p>此刻我们会å�‘ç�°ï¼Œåœ¨ä¸»æœº192.168.12.129宕机å��,VIP自动ä»�主机飘移到了ä»�机192.168.12.130上,而此时客户端的请求就最终会æ�¥åˆ°130è¿™å�°æœºå™¨çš„Nginx上。</p><p>「「最终,利用Keepalived对Nginxå�šäº†ä¸»ä»�热备之å��ï¼Œæ— è®ºæ˜¯é�‡åˆ°çº¿ä¸Šå®•机还是机房断电等å�„类故障时,都能够确ä¿�应用系统能够为用户æ��ä¾›7x24å°�æ—¶æœ�务。ã€�ã€�</p><h2><strong>Nginx性能优化</strong></h2><p>åˆ°è¿™é‡Œæ–‡ç« çš„ç¯‡å¹…è¾ƒé•¿äº†ï¼Œæœ€å��å†�æ�¥è�Šä¸€ä¸‹å…³äº�Nginx的性能优化,主è¦�就简å�•è¯´è¯´æ”¶ç›Šæœ€é«˜çš„å‡ ä¸ªä¼˜åŒ–é¡¹ï¼Œåœ¨è¿™å�—å°±ä¸�å†�展开å�™è¿°äº†ï¼Œæ¯•竟影å“�性能都有多方é�¢å�Ÿå› 导致的,比如网络ã€�æœ�务器硬件ã€�æ“�作系统ã€�å��端æœ�务ã€�程åº�自身ã€�æ•°æ�®åº“æœ�务等。</p><h6><strong>优化一:打开长è¿�æ�¥é…�ç½®</strong></h6><p>通常Nginx作为代ç�†æœ�务,负责分å�‘客户端的请求,那么建议开å�¯HTTPé•¿è¿�æ�¥ï¼Œç”¨æˆ·å‡�å°‘æ�¡æ‰‹çš„æ¬¡æ•°ï¼Œé™�ä½�æœ�务器æ�Ÿè€—,具体如下:</p><pre><code class="text">upstream xxx { # é•¿è¿�æ�¥æ•° keepalive 32; # æ¯�个长è¿�æ�¥æ��供的最大请求数 keepalived_requests 100; # æ¯�个长è¿�æ�¥æ²¡æœ‰æ–°çš„请求时,ä¿�æŒ�的最长时间 keepalive_timeout 60s; } </code></pre><h6><strong>优化二ã€�å¼€å�¯é›¶æ‹·è´�技术</strong></h6><p>é›¶æ‹·è´�这个概念,在大多数性能较为ä¸�错的中间件中都有出ç�°ï¼Œä¾‹å¦‚Kafkaã€�Netty等,而Nginx中也å�¯ä»¥é…�置数æ�®é›¶æ‹·è´�技术,如下:</p><pre><code class="text">sendfile on; # å¼€å�¯é›¶æ‹·è´�机制 </code></pre><p>é›¶æ‹·è´�读å�–机制ä¸�ä¼ ç»Ÿèµ„æº�读å�–机制的区别:</p><ul><li>ã€Œä¼ ç»Ÿæ–¹å¼�:ã€� 硬件--&gt;å†…æ ¸--&gt;用户空间--&gt;程åº�空间--&gt;程åº�å†…æ ¸ç©ºé—´--&gt;网络套æ�¥å­—</li><li>「零拷è´�æ–¹å¼�:ã€� 硬件--&gt;å†…æ ¸--&gt;程åº�å†…æ ¸ç©ºé—´--&gt;网络套æ�¥å­—</li></ul><p>ä»�上述这个过程对比,很轻易就能看出两者之间的性能区别。</p><h6><strong>优化三ã€�å¼€å�¯æ— 延迟或多包共å�‘机制</strong></h6><p>在Nginx中有两个较为关键的性能å�‚数,å�³<code>tcp_nodelayã€�tcp_nopush</code>,开å�¯æ–¹å¼�如下:</p><pre><code class="text">tcp_nodelay on; tcp_nopush on; </code></pre><p>TCP/IPå��议中默认是采用了Nagle算法的,å�³åœ¨ç½‘络数æ�®ä¼ 输过程中,æ¯�个数æ�®æŠ¥æ–‡å¹¶ä¸�会立马å�‘é€�出å�»ï¼Œè€Œæ˜¯ä¼šç­‰å¾…一段时间,将å��é�¢çš„å‡ ä¸ªæ•°æ�®åŒ…一起组å�ˆæˆ�一个数æ�®æŠ¥æ–‡å�‘é€�,但这个算法虽然æ��高了网络å��å��é‡�,但是å®�时性å�´é™�ä½�了。</p><p>å› æ­¤ä½ çš„é¡¹ç›®å±�äº�交互性很强的应用,那么å�¯ä»¥æ‰‹åЍ开å�¯tcp_nodelayé…�置,让应用程åº�å�‘å†…æ ¸é€’äº¤çš„æ¯�个数æ�®åŒ…都会立å�³å�‘é€�出å�»ã€‚ä½†è¿™æ ·ä¼šäº§ç”Ÿå¤§é‡�çš„TCP报文头,å¢�åŠ å¾ˆå¤§çš„ç½‘ç»œå¼€é”€ã€‚</p><p>相å��,有些项目的业务对数æ�®çš„å®�时性è¦�求并ä¸�高,追求的则是更高的å��å��,那么则å�¯ä»¥å¼€å�¯tcp_nopushé…�置项,这个é…�置就类似äº�“å¡�å­�â€�çš„æ„�æ€�,首先将è¿�æ�¥å¡�ä½�,使得数æ�®å…ˆä¸�å�‘出å�»ï¼Œç­‰åˆ°æ‹”å�»å¡�å­�å��å†�å�‘出å�»ã€‚设置该选项å��ï¼Œå†…æ ¸ä¼šå°½é‡�把å°�æ•°æ�®åŒ…拼æ�¥æˆ�一个大的数æ�®åŒ…(一个MTU)å†�å�‘é€�出å�».</p><p>当然若一定时间å��(一般为200msï¼‰ï¼Œå†…æ ¸ä»�然没有积累到一个MTUçš„é‡�时,也必须å�‘é€�ç�°æœ‰çš„æ•°æ�®ï¼Œå�¦åˆ™ä¼šä¸€ç›´é˜»å¡�。</p><p>tcp_nodelayã€�tcp_nopush两个å�‚数是“互斥â€�的,如æ�œè¿½æ±‚å“�应速度的应用æ�¨è��å¼€å�¯tcp_nodelayå�‚数,如IMã€�金è��等类å�‹çš„项目。如æ�œè¿½æ±‚å��å��é‡�的应用则建议开å�¯tcp_nopushå�‚数,如调度系统ã€�报表系统等。</p><p>注æ„�:①tcp_nodelay一般è¦�建立在开å�¯äº†é•¿è¿�æ�¥æ¨¡å¼�的情况下使用。②tcp_nopushå�‚数是必须è¦�å¼€å�¯sendfileå�‚æ•°æ‰�å�¯ä½¿ç”¨çš„。</p><h6><strong>优化四ã€�调整Worker工作进程</strong></h6><p>Nginxå�¯åЍå��默认å�ªä¼šå¼€å�¯ä¸€ä¸ªWorker工作进程处ç�†å®¢æˆ·ç«¯è¯·æ±‚,而我们å�¯ä»¥æ ¹æ�®æœºå™¨çš„CPUæ ¸æ•°å¼€å�¯å¯¹åº”æ•°é‡�的工作进程,以此æ�¥æ��å�‡æ•´ä½“的并å�‘é‡�支æŒ�,如下:</p><pre><code class="text"># è‡ªåŠ¨æ ¹æ�®CPUæ ¸å¿ƒæ•°è°ƒæ•´Worker进程数é‡� worker_processes auto; </code></pre><p>工作进程的数é‡�最高开到8个就OK了,8个之å��å°±ä¸�会有å†�大的性能æ��å�‡ã€‚</p><p>å�Œæ—¶ä¹Ÿå�¯ä»¥ç¨�微调整一下æ¯�个工作进程能够打开的文件å�¥æŸ„数:</p><pre><code class="text"># æ¯�个Worker能打开的文件æ��述符,最少调整至1W以上,负è�·è¾ƒé«˜å»ºè®®2-3W worker_rlimit_nofile 20000; </code></pre><p>æ“�ä½œç³»ç»Ÿå†…æ ¸ï¼ˆkernel)都是利用文件æ��述符æ�¥è®¿é—®æ–‡ä»¶ï¼Œæ— 论是打开ã€�新建ã€�读å�–ã€�写入文件时,都需è¦�使用文件æ��述符æ�¥æŒ‡å®šå¾…æ“�ä½œçš„æ–‡ä»¶ï¼Œå› æ­¤è¯¥å€¼è¶Šå¤§ï¼Œä»£è¡¨ä¸€ä¸ªè¿›ç¨‹èƒ½å¤Ÿæ“�作的文件越多(但ä¸�èƒ½è¶…å‡ºå†…æ ¸é™�制,最多建议3.8Wå·¦å�³ä¸ºä¸Šé™�)。</p><h6><strong>优化五ã€�å¼€å�¯CPU亲和机制</strong></h6><p>对äº�å¹¶å�‘编程较为熟悉的伙伴都知é�“ï¼Œå› ä¸ºè¿›ç¨‹/线程数往往都会远超出系统CPUçš„æ ¸å¿ƒæ•°ï¼Œå› ä¸ºæ“�作系统执行的å�Ÿç�†æœ¬è´¨ä¸Šæ˜¯é‡‡ç”¨æ—¶é—´ç‰‡åˆ‡æ�¢æœºåˆ¶ï¼Œä¹Ÿå°±æ˜¯ä¸€ä¸ªCPUæ ¸å¿ƒä¼šåœ¨å¤šä¸ªè¿›ç¨‹ä¹‹é—´ä¸�断频ç¹�切æ�¢ï¼Œé€ æˆ�很大的性能æ�Ÿè€—。</p><p>而CPU亲和机制则是指将æ¯�个Nginx的工作进程,绑定在固定的CPUæ ¸å¿ƒä¸Šï¼Œä»�而å‡�å°�CPU切æ�¢å¸¦æ�¥çš„æ—¶é—´å¼€é”€å’Œèµ„æº�æ�Ÿè€—,开å�¯æ–¹å¼�如下:</p><pre><code class="text">worker_cpu_affinity auto; </code></pre><h6><strong>优化六ã€�å¼€å�¯epoll模å�‹å�Šè°ƒæ•´å¹¶å�‘è¿�æ�¥æ•°</strong></h6><p>在最开始就æ��到过:Nginxã€�Redis都是基äº�多路å¤�用模å�‹å�»å®�ç�°çš„程åº�,但最åˆ�版的多路å¤�用模å�‹select/poll最大å�ªèƒ½ç›‘å�¬1024个è¿�æ�¥ï¼Œè€Œepoll则å±�äº�select/pollæ�¥å�£çš„å¢�å¼ºç‰ˆï¼Œå› æ­¤é‡‡ç”¨è¯¥æ¨¡å�‹èƒ½å¤Ÿå¤§ç¨‹åº¦ä¸Šæ��å�‡å�•个Worker的性能,如下:</p><pre><code class="text">events { # 使用epoll网络模å�‹ use epoll; # 调整æ¯�个Worker能够处ç�†çš„è¿�æ�¥æ•°ä¸Šé™� worker_connections 10240; } </code></pre><p>这里对äº�select/poll/epoll模å�‹å°±ä¸�展开细说了,å��é�¢çš„IO模å�‹æ–‡ç« 中会详细剖æ��。</p><h2><strong>放在最å��的结尾</strong></h2><p>至此,Nginx的大部分内容都已é˜�述完毕,关äº�最å��一å°�节的性能优化内容,其å®�在å‰�é�¢å°±è°ˆåˆ°çš„动é�™åˆ†ç¦»ã€�分é…�缓冲区ã€�资æº�缓存ã€�防盗链ã€�资æº�å�‹ç¼©ç­‰å†…容,也都å�¯å½’纳为性能优化的方案。</p><p>最å��,希望诸å�›æ”¶è—�çš„å�Œæ—¶ä¸�è¦�忘了点个èµ�支æŒ�一下^_^,在此万分感谢ï¼�</p><p><strong>如æ�œæœ¬æ–‡å¯¹ä½ 有帮助的è¯�,欢è¿�点èµ�&转å�‘,这对我继续分享&åˆ›ä½œä¼˜è´¨æ–‡ç« é��常é‡�è¦�。感谢</strong></p> èŠ±äº†å‡ ä¸ªæœˆæ—¶é—´æŠŠ MySQL é‡�新巩固了一é��,梳ç�†äº†ä¸€ç¯‡å‡ 万字 â€œè¶…ç¡¬æ ¸â€� çš„ä¿�姆å¼�å­¦ä¹ æ•™ç¨‹ï¼�(æŒ�续更新中~) https://segmentfault.com/a/1190000043430057 2023-02-15T19:42:32+08:00 2023-02-15T19:42:32+08:00 民工哥 https://segmentfault.com/u/jishuroad 22 <p>在这之å‰�ï¼Œæˆ‘ä»¬å­¦ä¹ è¿‡äº†ï¼š<a href="https://link.segmentfault.com/?enc=6moGzS3ObYxjJ0yJfBncDw%3D%3D.HbjlgCghj1InsyNJHLLaZuA2v6yoQVg9BJ8raAkHZv0kHXJZk4aSEDEtlRuo1NOfMeySINKZMtacTLoDEium6UpyJQ6VXS6pRCrkjmKfQWBglY%2FXfiBB4vKIq4D1nkkrr8nDbl1XrEEDvEYM8l6YHzcjzy95NfCQbh%2F3yjRPPiUbONZYc0CqUAtK4gGPeACi3PPwVhUhTUXERWpqd%2F3b1%2FOp6o%2FPSv7mo%2BYpiggduL1aMKNenrk%2B6MZXQNBYgzyKtBZoCRyXm4FBDwtEDN8oFzsYNRZOcoeXf09TTfUki7g%3D" rel="nofollow">æ•°æ�®åº“çš„æ ¸å¿ƒçŸ¥è¯†ç‚¹æ˜¯å“ªäº›</a>?<a href="https://link.segmentfault.com/?enc=%2F4Lf%2BM1ipV1iiBTycnZoJw%3D%3D.4FsokxBpjrODpOj5nUGr21U8OCNzObTFvFIuj2PC0l1Zq%2BCIGD3VY7REoei%2FnWtXWT7FJ4izZOGYMSG1xZFw6NWXDvvk5K7tdgJTF0LqdAChpyT8Pp4Gwp9FfgdrvzjLwksf4JU52vtvIGATmKMCX%2FqLT9mFoL4RSs%2FrDzmcTFDlRHX1XdkMWyvc0t3wMLtHo61bNeRMG%2FaVcsn%2F6HrS6Qs9HlDC4WR%2F9dGb6H%2B57ZVcaW%2Fx9noRGGZ%2FAqDHYNjpeSBMqLrx4XOTgciFPzQEnKGJz%2FVHV3jjXUrEIaUfYnU%3D" rel="nofollow">关系å�‹æ•°æ�®å·¥ä½œæµ�程</a>ã€�<a href="https://link.segmentfault.com/?enc=0SsS4BYqRdWZSTVJoL0UHQ%3D%3D.oHeHbYY5j9R1Ek840HjCJpfufjcVZQG5APIelybHrCFcdeaHM%2BVBeFe%2BHTzusclFp1ezHQJYPHphCPOULClTzSuCOZqslF%2BOgR%2FakZyb8%2FYpAk7QIaPko8VmbKRZOjHc4MU6U8r5%2FO1%2BnZmiOv36pJGQKRF9RXVXrOdN96nindoY0vgKrfZpgke3TGhqEQWx80bwKpifpdZ7HYJBIzcU3a2W%2FJQ%2FFVDziUYkRtM8AUqkcPC51HcVhy6k4FvevL4d2oEQHkeJyptNcjv5mU7jA2dGZnQ3Gd%2FYqv6qbheXBMk%3D" rel="nofollow">设计ç�†è®ºä¸�æµ�程</a>,以å�Š<a href="https://link.segmentfault.com/?enc=N6zh3wfNX85b1FfK6%2BObew%3D%3D.JCkheW8PapnAz6aNMaAAaOukv%2FiNnlwe1faWSQH5j48LpRMx1wSICcK7WSqvYWCSK%2BwDNJ9%2FWRT5TCG%2BvDPjhgzUElKUoDLCh2V0MOHmt2YiBNIDmZxBdcgE77Ygvd9wereGldtV8DzBVoeYHeD1joRJTQhGdGytVbimqeJWXwTPgMXjKG9Jnj6Xe1rnN8UwW3CUQ0IaoIjqvxpyU9oFW%2B%2FpPvgalyLf807xj8wbjn3VysPRpmPvMmGgWNKvjyKuefbTEmQXEBvpe3QlOoR%2FGrsUgTlCBu4CZQp9Q6yCWoI%3D" rel="nofollow">SQL 语法基础ã€�语å�¥ç»ƒä¹ ä¸�优化</a>ã€‚ä»¥ä¸Šè¿™äº›ï¼Œéƒ½æ˜¯å­¦ä¹ æ•°æ�®åº“的必备入门基础知识点,需è¦�é‡�点æ�Œæ�¡ã€‚</p><p>今天开始,我们进入死磕数æ�®åº“系列之:MySQL æ•°æ�®åº“çš„å­¦ä¹ ä¹‹æ—…ã€‚</p><h5><strong>注:本文是ä¸�定期更新内容的,如有帮助,大家点èµ�支æŒ�一波ï¼�ï¼�ï¼�ï¼�</strong></h5><h2>MySQL æ•°æ�®åº“简介</h2><p>MySQL 是最æµ�行的关系å�‹æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œåœ¨ WEB 应用方é�¢ MySQL 是最好的 RDBMS(Relational Database Management System:关系数æ�®åº“管ç�†ç³»ç»Ÿ)应用软件之一。</p><p>MySQL 是一个关系å�‹æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œç”±ç‘�å…¸ MySQL AB å…¬å�¸å¼€å�‘,目å‰�å±�äº� Oracle å…¬å�¸ã€‚MySQL 是一ç§�å…³è�”æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œå…³è�”æ•°æ�®åº“将数æ�®ä¿�存在ä¸�å�Œçš„表中,而ä¸�是将所有数æ�®æ”¾åœ¨ä¸€ä¸ªå¤§ä»“åº“å†…ï¼Œè¿™æ ·å°±å¢�åŠ äº†é€Ÿåº¦å¹¶æ��高了ç�µæ´»æ€§ã€‚</p><ul><li>MySQL 是开æº�的,目å‰�éš¶å±�äº� Oracle 旗下产å“�。</li><li>MySQL 支æŒ�大å�‹çš„æ•°æ�®åº“。å�¯ä»¥å¤„ç�†æ‹¥æœ‰ä¸Šå�ƒä¸‡æ�¡è®°å½•的大å�‹æ•°æ�®åº“。</li><li>MySQL ä½¿ç”¨æ ‡å‡†çš„ SQL æ•°æ�®è¯­è¨€å½¢å¼�。</li><li>MySQL å�¯ä»¥è¿�行äº�多个系统上,并且支æŒ�多ç§�语言。这些编程语言包括 Cã€�C++ã€�Pythonã€�Javaã€�Perlã€�PHPã€�Eiffelã€�Ruby å’Œ Tcl 等。</li><li>MySQL 对PHP有很好的支æŒ�,PHP 是目å‰�最æµ�行的 Web å¼€å�‘语言。</li><li>MySQL 支æŒ�大å�‹æ•°æ�®åº“,支æŒ� 5000 万æ�¡è®°å½•的数æ�®ä»“库,32 ä½�系统表文件最大å�¯æ”¯æŒ� 4GB,64 ä½�系统支æŒ�最大的表文件为8TB。</li><li>MySQL 是å�¯ä»¥å®šåˆ¶çš„,采用了 GPL å��è®®ï¼Œä½ å�¯ä»¥ä¿®æ”¹æº�ç �æ�¥å¼€å�‘自己的 MySQL 系统。</li></ul><p>在日常工作ä¸�å­¦ä¹ ä¸­ï¼Œæ— è®ºæ˜¯å¼€å�‘ã€�è¿�ç»´ã€�还是测试,对äº�æ•°æ�®åº“çš„å­¦ä¹ æ˜¯ä¸�å�¯é�¿å…�的,å�Œæ—¶ä¹Ÿæ˜¯æ—¥å¸¸å·¥ä½œçš„必备技术之一。在互è�”网公å�¸ï¼Œå¼€æº�产å“�线比较多,互è�”网ä¼�业所用的数æ�®åº“å� 比较é‡�的还是MySQL。更多关äº�MySQLæ•°æ�®åº“的介ç»�,有兴趣的读者å�¯ä»¥å�‚è€ƒå®˜æ–¹ç½‘ç«™çš„æ–‡æ¡£å’Œè¿™ç¯‡æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=RJB1h3iRQm%2BmA8a%2BGJTteg%3D%3D.hn02e0jxuMDRhLVJCYDNX6jduvWLfY8xokNjtvEL60VPYwuFxzhWtIaJxVDu6ALxmb6uogb221h5YE3QSQyAjvl%2FejKCMjJ8Rz4j9g%2Br1Fzu1qcr%2FypzcU18752ljQ%2BZnlZYkvAdo7Umy34pUO%2FKiNBjwwLSPcuiGd3k4yAFdJgvEN%2FxR3jKSPrbWcdvETkDuZ89TK1ZqpaogQz63hzZvgx%2BaJsKa5%2FQA4z%2BPdCoZlqZqc3pEzeAHwAzJi6Rib1kLWegzwQXIbBEQZOZLLM5dsHyP%2FPYw3AqRI10w0EOrPM%3D" rel="nofollow">å�¯èƒ½æ˜¯å…¨ç½‘最好的MySQLé‡�è¦�知识点</a></p><h2>MySQL 安装</h2><p>MySQL 8æ­£å¼�版8.0.11å·²å�‘布,官方表示MySQL8è¦�比MySQL 5.7å¿«2å€�,还带æ�¥äº†å¤§é‡�的改进和更快的性能ï¼�到底è°�最牛呢?请看:<a href="https://link.segmentfault.com/?enc=Kpma4wKYjt65vg6I93BYFQ%3D%3D.Sn42UnaL5i7ZJ5e3v6EM%2BwLyWTpGkugB%2FP056BMuzgeRGGst1SsHTVWYzFW%2Fzc9SJUcie8Ue1%2FS6ESFrX8mWBSvFeTCS06FWDmSEq5aSDvWdfXMazrpRSSCXcxT113zL5GPC1Nfb5uotKtL%2FaCsTUeIO9rNTMJ5MoYGP1m2rsaKjOTYKPP6w5%2FqRGtAoW05tEP8%2FEdmq7xtwKz6EeLTZsTuFhwMi9Sv2fX5AkciM6b2N7vZMPGJlFk12%2Bt5AwdtRFQYY3ErflE6r%2F0y69x6ywch%2F3mXTWhexFiWPRXb8yng%3D" rel="nofollow">MySQL 5.7 vs 8.0,哪个性能更牛?</a></p><p>详细的安装步骤请å�‚阅:<a href="https://link.segmentfault.com/?enc=amEGVbto0CtHIRZGNQt%2FpA%3D%3D.nG%2FxrufN6zKx6OgMZcQveURImRpDX0XY9cdtMRNETOT%2FsfHgup3cyi1F%2FOdcuzRscxqQc3J3MjmcAK3gknPgHHD%2Bf6Wp1P69mga1sygcGWYLt%2FxsSB%2FP0ICVkJgmjw2kYK761QcgDM0jVIi9IbXBDK5XVZU580cV8JPBm15eUQ8Ou%2BqFIfN2ShJMuqmAD3pxd2n9Kl612Y58Ob6TSsXGZUTqVzXJqNfXY5JGguf5xwKEv%2FqXYaB7flgEErM%2B9YMIgrCr4ZwYsOqJIcGNJjSmmOc%2FwcGeDu6pA1IBHkvRZ4s%3D" rel="nofollow">CentOS 下 MySQL 8.0 安装部署,超详细ï¼�</a></p><h2>MySQL 多å®�例é…�ç½®</h2><p><a href="https://link.segmentfault.com/?enc=SaRkIr%2BcQTibmRC2MLu4lQ%3D%3D.7ncvUA5Wz3H%2BPO6gsCi0gPA2JE4KQlFoMcV8tGaPn4ZNwKYUj4grWQfj6RnbmNKcRQ%2FH964Ek%2BYkxF3f%2BHElNpE6NzTYM89jHJCVaOAfOJOsqmuOIWmWpgeiSeCLYPULIb1Pu70cWMfU%2BJPoQadItLJBZda5%2FYZ2rzWRtUv4JD1ZGtJ%2B%2BafOuey4XiI6jmPioEEbPfZUYTKJhG1uKzRW6wkAfGulT85t8wZWAkzyKTHS%2Figg6bnoI6pWq97lmgufqU4V2ieTmkPnboTpEAA3nDX5jnLCRpa1BV272Pu0Alw%3D" rel="nofollow">MySQLæ•°æ�®åº“入门——多å®�例é…�ç½®</a></p><h2>MySQL 命令基础æ“�作</h2><p>Windowsæœ�务</p><pre><code class="text">-- å�¯åЍMySQL net start mysql -- 创建Windowsæœ�务 sc create mysql binPath= mysqld_bin_path(注æ„�:等å�·ä¸�å€¼ä¹‹é—´æœ‰ç©ºæ ¼)</code></pre><p>è¿�æ�¥ä¸�æ–­å¼€æœ�务器</p><pre><code class="text">mysql -h 地å�€ -P 端å�£ -u 用户å�� -p 密ç � SHOW PROCESSLIST -- 显示哪些线程正在è¿�行 SHOW VARIABLES -- 显示系统å�˜é‡�ä¿¡æ�¯</code></pre><p>æ•°æ�®åº“æ“�作</p><pre><code class="text">-- 查看当å‰�æ•°æ�®åº“ SELECT DATABASE(); -- 显示当å‰�æ—¶é—´ã€�用户å��ã€�æ•°æ�®åº“版本 SELECT now(), user(), version(); -- 创建库 CREATE DATABASE[ IF NOT EXISTS] æ•°æ�®åº“å�� æ•°æ�®åº“选项 æ•°æ�®åº“选项: CHARACTER SET charset_name COLLATE collation_name -- 查看已有库 SHOW DATABASES[ LIKE 'PATTERN'] -- 查看当å‰�库信æ�¯ SHOW CREATE DATABASE æ•°æ�®åº“å�� -- 修改库的选项信æ�¯ ALTER DATABASE 库å�� 选项信æ�¯ -- åˆ é™¤åº“ DROP DATABASE[ IF EXISTS] æ•°æ�®åº“å�� å�Œæ—¶åˆ 除该数æ�®åº“相关的目录å�Šå…¶ç›®å½•内容</code></pre><p>更多相关的æ“�作基础知识点请å�‚é˜…ä»¥ä¸‹æ–‡ç« ï¼š</p><p><a href="https://link.segmentfault.com/?enc=79ghfhANjIFDbeyKd6XZ8Q%3D%3D.58KiCfyrQXYEC3VJ4oPzastbY0%2BzsfvmPsqWY9aktczYZz5AE%2BCzltfczVS14hdgxo%2FyQwfMY8h0cIQPUAnKq0ZHSb%2BlngEXz8z4hGsWJQcVBka6hXdGA2G0djjs5fQj1NY8oC%2Bz19Xjv45IDxjNhi343aD3EvhPgSQMgnn62eF4MBd%2Faq%2B4hSYpHM7xfHdjMCSYrq%2B582NNr%2BGucxmhTo9USuzqu1ajkTbkLOPgZwa0BFHEn%2BaAYAVBHqhqdWQ4fYG4jPJW4sYuMKy2axr3Uqd5JjX96O4MaX6fuskJeD8%3D" rel="nofollow">1047 行 MySQL è¯¦ç»†å­¦ä¹ ç¬”è®°ï¼ˆå€¼å¾—å­¦ä¹ ä¸�æ”¶è—�)</a></p><h2>MySQL æ•°æ�®ç±»å�‹</h2><p><a href="https://link.segmentfault.com/?enc=qg8%2F0%2FWi%2BqfCOmGcEC0L%2FQ%3D%3D.xwRLBVcgDXw51vpplgvu%2FhZ%2Bx4GY6FbIbsonj6TpJy3v3MvZBOsDtNEjcO2385veF5U%2BtgNIaOg4LECnvQhbzit%2BNgVw77f6iub%2BXFA82EPHT8kmnjd6QOJsi%2FQ4rPwMEinTD1uW%2FzRJuSeRQHfXpwSM%2BtObON9SXJH4Zmn%2FTumQEHPtvIETh4w1wcWVMGHAGg52w3B3YKvUVkkhRlttBDMWOm2ncSbVFsM6vFRRCAICRpIRanSwSv2cUSHbrOAhBTqctV%2FravTqgouLiYzlHPdnT4%2F52v07%2BGgt7gWehtk%3D" rel="nofollow">死磕数æ�®åº“系列(五):MySQL æ•°æ�®ç±»å�‹ä¸�存储引æ“�介ç»�</a></p><h2>MySQL 索引详解</h2><p><a href="https://link.segmentfault.com/?enc=BO2O%2F1QaVvaJohn31iTg1Q%3D%3D.n%2F%2F0FKaGRmyRHsV8MyTIJYGqcQaJ6ZGU2wOkTFEoeOtAmKlP%2F%2F3PWNJL2NAsxaFFBnHgU1jsvKl1OvB4FKkIWva5Z8fEx9yOn8NBn8iVMyX2O%2B%2BVXbVLc415qZAOUz59t0f0zzS0Kv279xQ%2F5usV76jtxM9DfnYlPhImGZgnyhqpyolw0lI528swG1CWqiLf8tdJSDp%2BmaQw%2FPEES2XogJhD4QiVykdlkAHjM51D1M9yJIGUGksuHBkExSx%2FiXDsKbv0KTg0UONlL%2F6rR56mJb1jlBqjLSuw8A%2F3i16N%2FrM%3D" rel="nofollow">死磕数æ�®åº“系列(六):MySQL 索引详解</a></p><h2>MySQL 性能优化</h2><h4>MySQL优化方案</h4><p>想必大家都知é�“,é�¢è¯•期间一æ��到数æ�®åº“,就会è�Šåˆ°æ•°æ�®åº“优化相关问题。网上关äº�æ•°æ�®åº“ä¼˜åŒ–çš„æ–‡ç« ä¹Ÿæ˜¯çœ¼èŠ±ç¼­ä¹±ï¼Œå±‚å‡ºä¸�ç©·ã€‚ä»Šå¤©å°†ä¼šé€šè¿‡è¿™ç¯‡æ–‡ç« ç»†åˆ†å‡ ç‚¹ç»™å¤§å®¶æ±‡æ€»æ•´ç�†å‡ºä¸€å¥—å…³äº�MySQLæ•°æ�®åº“çš„ä¼˜åŒ–æ–¹æ¡ˆï¼Œè®©å¤§å®¶é€šè¿‡å­¦ä¹ è¿™ç¯‡æ–‡ç« ä¸�å†�被é�¢è¯•官å�Šæ‰“ï¼�<br><img src="/img/remote/1460000043430063" alt="" title=""><br>æˆ�本:硬件优化 &gt; 系统é…�置优化 &gt; 表结æ�„优化 &gt; SQL语å�¥ä¼˜åŒ– &gt; 索引优化。</p><p>效æ�œï¼šç´¢å¼•优化 &gt; SQL语å�¥ä¼˜åŒ– &gt; 表结æ�„优化 &gt; 系统é…�置优化 &gt; 硬件优化。</p><p><a href="https://link.segmentfault.com/?enc=peQM1603LcQuNUq2yzVsxQ%3D%3D.LgCQJYK%2BFx%2F%2BMJYdUr8NmaSvu7qGaG52dmpQNTFmZS%2F7kvsqzRsvEiTGH9g6ROxp%2B7sLqg62vwZPMf6a2%2Bxa%2BB0aXeTd7Eh%2F3qrg%2B61vGWxRtS4nnAZd3sgv130p9a5kW6qi9B%2FUQLAKR1BNkMLHpqSITAf39JFzAiM6bGnFWOvCwlebAV%2FdAGzxj29XDKrmEuoPKrnrnOU5L4eiahCF0SECVJ9gwGbZoHOrwETR%2FowxImaP%2BYIRUzdBX1jFqjvVxfKlJ5F7azuT2eEKzL8Os3msymWbEQuZ2mzwCBNEBjE%3D" rel="nofollow">死磕数æ�®åº“系列(七):MySQL 性能优化(硬件,系统é…�置,表结æ�„,SQL语å�¥ï¼‰</a></p><h2>MySQL 主ä»�å¤�制</h2><h4><strong>MySQLå¤�制有两ç§�方法:</strong></h4><ul><li>ä¼ ç»Ÿæ–¹å¼�:基äº�主库的bin-log将日志事件和事件ä½�ç½®å¤�制到ä»�库,ä»�库å†�åŠ ä»¥ 应用æ�¥è¾¾åˆ°ä¸»ä»�å�Œæ­¥çš„目的。</li><li>Gtidæ–¹å¼�:global transaction identifiers是基äº�事务æ�¥å¤�制数æ�®ï¼Œå› 此也就ä¸� ä¾�赖日志文件ä½�置,å�Œæ—¶å�ˆèƒ½æ›´å¥½çš„ä¿�è¯�主ä»�库数æ�®ä¸€è‡´æ€§ã€‚</li></ul><p><a href="https://link.segmentfault.com/?enc=mRwzCz10bvJTDcOO5n%2BzvA%3D%3D.BId51OQkO%2FI54FbTVzoUNkpolRmaEn479mLzv3P7jG6D1GPGt6bCGF%2BWSCQxTtB0DzT73hVhX3Nxzt5JVg23ZXhI0IclgpS39NFjwau3aOj3ptTYv5XjGomPPfy%2BH4ltKJ38PMaOdz3eb7qW0Zw63fye7b4Euy%2B8F42sDlDKoh5ahSFbbxJ2yu9j5bfuK5r%2FsgwscdvdRXlVNwDHPTi0dORP%2FuvKQsOPdHAuzFymtwtfroFXr17TLMJdgqPpPC%2FV%2F6FqZAetAkuF2pFWKBK6Y0mg5%2F0aSyvyvhRoB3vS05s%3D" rel="nofollow">MySQLæ•°æ�®åº“主ä»�å�Œæ­¥å®�战过程</a></p><p><a href="https://link.segmentfault.com/?enc=OZ9%2BYV%2FJD5bJ1jCsbmA71w%3D%3D.Z%2Bkl%2BHRDVSItZ1Ox6gi79sO%2Bsc%2FbhZcrYkz1H5yhCCJID3L8aXrqkZAH%2Ft5jcRI%2BRCgL4ONBeW0qveRD6o07osK5eqE7zdBpMzBv7DTOw4j0lf4KfNGQfLcxiQvQ3jRBKKqu0Qd8t%2FAWMfz0mcIRbdPACb%2B1qRopVSd3jzHLS69npfFKtBmbKLiss76Rnfc9gv5q88T6%2Fbdhvk9ko3oDMgjXtBWbvM%2FbS3pVh%2BgDSthsbNnyen3bCL%2F9xN629N1VYga6VthOXJJOp47WDxEGjVMQZMQsTupQ4qJnfR58jbU%3D" rel="nofollow">MySQL 主ä»�å�Œæ­¥æ�¶æ�„ä¸­ä½ ä¸�知é�“的“å�‘â€�(上)</a></p><p><a href="https://link.segmentfault.com/?enc=s5zHzIDKXl575enszELQBQ%3D%3D.OAtw3uBOTbfh3P0SDxAVpOuKDOhDanZuZTrw%2B4EEM8hbsczsuQUjm3czO%2FUaltV8ezcotIybd2l%2FeZhSw2RIQZoOvABnXZcEDJX4ukNNS%2BjjtK%2BQZ2FTyQZTa3FZKm73etEOYx2K5vOu7F39C8QEBcE0vItTJ3sQwq7NkzQAtINfG9W1ha7fRK175HREVRhFBfuW0KlUm%2BuIn9ty76NWIPaa90z%2B3neYACcP%2B6ftu5lJYFo6QcahLuKzsMZwcYs0eJd5SEgE50gdDpZ2x%2FsTsNY5El%2BnKASU9BAMshXpcuk%3D" rel="nofollow">MySQL 主ä»�å�Œæ­¥æ�¶æ�„ä¸­ä½ ä¸�知é�“的“å�‘â€�(下)</a></p><p>这里顺便æ��一下:<a href="https://link.segmentfault.com/?enc=nm3A2Q%2Boog7KQ9DglMOUXQ%3D%3D.XvIwhVOdG1CR%2F5v4uTdD%2Bc%2FRtjxhOCAj3p%2BWQ6CWGNAJ4BqWLvVY%2Bvja%2FvotX3rC5Wz7dhKNMZfgbnGSbO7mFDKmCKeWHb3YRBtBYUWcV6z2QwdsI0rczzb%2FiaKczN7YD8kXVOCIqgM36FdQp%2FavBMSbM2yQGRkhcMYsLlJeZwZjN%2BfHG3%2BGqWnRCIHX5GX9fGUyjzKIC8eZ3BSSzzT0zNva%2BN2YAuhCbu1vyhvSZFzfhGilu%2F870vWCiBqDSbCxO2zs4BzNgQ66IQiYQSXMdXcJh%2BzeQF1HQA%2Bpk4JzW%2F8%3D" rel="nofollow">ROW 还是 STATEMENT?线上 MySQL Binlog æ€�么选?</a> è¿™ç¯‡æ–‡ç« ï¼Œå°±è¿™ä¸‰ç§�模å¼�有何区别,在生产如何选择,å�šä¸€ä¸ªå…·ä½“的案例详解。</p><h4>MySQLå¤�制有多ç§�ç±»å�‹ï¼š</h4><ul><li>异步å¤�制:一个主库,一个或多个ä»�库,数æ�®å¼‚æ­¥å�Œæ­¥åˆ°ä»�库。</li><li>å�Œæ­¥å¤�制:在MySQL Cluster中特有的å¤�制方å¼�。</li><li>å�Šå�Œæ­¥å¤�制:在异步å¤�制的基础上,确ä¿�任何一个主库上的事务在æ��交之å‰�至 少有一个ä»�库已ç»�收到该事务并日志记录下æ�¥ã€‚</li><li>延迟å¤�制:在异步å¤�制的基础上,人为设定主库和ä»�库的数æ�®å�Œæ­¥å»¶è¿Ÿæ—¶é—´ï¼Œ å�³ä¿�è¯�æ•°æ�®å»¶è¿Ÿè‡³å°‘是这个å�‚数。</li></ul><p>MySQL主ä»�å¤�制延迟解决方案:<a href="https://link.segmentfault.com/?enc=scuWHAEMfcLmFsIYBtycuQ%3D%3D.F0htSH7ZUbd7io1xadenvkghW9vo0v2JTMzU78FDPOR5ayZNB%2BaZ7MtKr8lVTJCaQXF7E6NECVbT%2B78KkHBif918lt9nXJbR39%2FBBIGYhCjuoI0W8r7lhxenHdVCsC32xdyrb5VUKrlSfV%2BjlPTsWcRBv%2BGsja2yC%2BfmKfFRSKfl7m6TuDLQS%2BgARL0iBdPn%2FjzThblSHyvIN9p8kEov0f8RBR61NIOGISKcVMOlVklafzn%2BeCDIRtisV4VWm0zAFgCBq7ZCePwJ96Do1Fg84uEn7e5GnpIZFfouiQSVLL0%3D" rel="nofollow">高å�¯ç”¨æ•°æ�®åº“主ä»�å¤�制延时的解决方案</a></p><p>MySQLå�¦ä¸€ç§�主ä»�å�Œæ­¥çš„æ–¹æ¡ˆï¼š<a href="https://link.segmentfault.com/?enc=DTo6rQy0E7iHd0RQ2%2Fz%2FHg%3D%3D.34uAOgC46IT7iThhWU%2BnOZTTOWSAaj12%2BCQw4MZ8vTvldDhqjjc%2F08GvVKodiG%2FioGQAUu7d4kAUsHUfYmc3KnIbUXXozyoQjOkmImNevkx2PtpE%2FUvLZfy6U1%2FqUgKDn7NoaxpfBRfLq5dfY5ID7t5uh8dHRDs%2FQVVPGG6SFQNegHKrp1p26Oj9D11IyiQciwuK76jFPbZZKZ54e7mv%2F1ratIlvU1Bs0lKStiiwLSVWho3%2FkameN39ise2Gsc0USd3aRjinXjYtWUKkxYLDs6dKFLvhG19gKbU35WkEuM0%3D" rel="nofollow">基äº� Gtid çš„ MySQL 主ä»�å�Œæ­¥å®�è·µ</a></p><h2>MySQL 日志文件解æ��(类å�‹ã€�作用)</h2><h4>Mysql 日志是什么?</h4><p>所谓日志,就是一ç§�将行为动作记录到一个地方,这个地方å�¯ä»¥æ˜¯æ–‡ä»¶ï¼Œæ–‡æœ¬ç­‰å�¯å­˜å‚¨çš„载体。</p><p>Mysql日志就是记录整个mysqlä»�å�¯åŠ¨ï¼Œè¿�行,到结æ�Ÿçš„æ•´ä¸ªç”Ÿå‘½å‘¨æœŸä¸‹çš„行为。</p><h4>日志类å�‹</h4><p>MySQL 中有七ç§�日志文件,分别是:</p><ul><li>二进制日志(binlog)</li><li>é‡�å�šæ—¥å¿—ï¼ˆredo log)</li><li>å›�滚日志(undo log)</li><li>错误日志(errorlog)</li><li>慢查询日志(slow query log)</li><li>一般查询日志(general log)</li><li>中继日志(relay log)</li></ul><p>è¿™å‡ ç§�日志的作用ä¸�具体的æ“�作详解å�¯ä»¥å�‚阅:<a href="https://link.segmentfault.com/?enc=gyTdzWzY%2BX6ClDtBS0fXvw%3D%3D.bfk86p05JFxSCmQVRdt2OChQkDpwY9S65US1N0nuemWL4qMZ%2F%2FQ9qxxFseie3Mb2Y7KVbKuU3Q%2FMGNlgaueId84eCXPRsw1pGbZSV4XVb8cN%2FXui9Mgen9iZlYVtKX8DsvNC24aX%2Fk3B05tP1ujwXEcpZA9drhE8NAgxhXogaxe1zZXLrn3FtpiFh2pSnKxYzZoSufSwoizRrXIzD0LTKH2cfJz4BOOBuiMa2%2FnABMl0ru7qUk160yIc61MUFP72Bmomnyj%2FD3Ep4o7mQJmtYXM4Low%2FAgWfMjFvUspEZrI%3D" rel="nofollow">死磕数æ�®åº“系列(å��一):MySQL 日志文件解æ��(类å�‹ã€�作用)</a></p><h2>MySQL æ•°æ�®å¤‡ä»½ä¸�æ�¢å¤�</h2><h4><strong>æ•°æ�®å¤‡ä»½å¤šç§�æ–¹å¼�:</strong></h4><ul><li>物ç�†å¤‡ä»½æ˜¯æŒ‡é€šè¿‡æ‹·è´�æ•°æ�®åº“文件的方å¼�完æˆ�备份,这ç§�备份方å¼�适用äº�æ•°æ�®åº“很大,数æ�®é‡�è¦�且需è¦�快速æ�¢å¤�的数æ�®åº“</li><li>逻辑备份是指通过备份数æ�®åº“的逻辑结æ�„(create database/table语å�¥)和数æ�®å†…容(insert语å�¥æˆ–者文本文件)的方å¼�完æˆ�备份。这ç§�备份方å¼�适用äº�æ•°æ�®åº“ä¸�æ˜¯å¾ˆå¤§ï¼Œæˆ–è€…ä½ éœ€è¦�对导出的文件å�šä¸€å®šçš„修改,å�ˆæˆ–者是希望在å�¦å¤–çš„ä¸�å�Œç±»å�‹æœ�务器上é‡�新建立此数æ�®åº“的情况</li><li>通常情况下物ç�†å¤‡ä»½çš„速度è¦�å¿«äº�逻辑备份,å�¦å¤–物ç�†å¤‡ä»½çš„备份和æ�¢å¤�粒度范围为整个数æ�®åº“或者是å�•个文件。对å�•表是å�¦æœ‰æ�¢å¤�能力å�–决äº�存储引æ“�,比如在MyISAM存储引æ“�下æ¯�个表对应了独立的文件,å�¯ä»¥å�•独æ�¢å¤�;但对äº�InnoDB存储引æ“�表æ�¥è¯´ï¼Œå�¯èƒ½æ¯�个表示对应了独立的文件,也å�¯èƒ½è¡¨ä½¿ç”¨äº†å…±äº«æ•°æ�®æ–‡ä»¶</li><li>物ç�†å¤‡ä»½é€šå¸¸è¦�求在数æ�®åº“关闭的情况下执行,但如æ�œæ˜¯åœ¨æ•°æ�®åº“è¿�行情况下执行,则è¦�求备份期间数æ�®åº“ä¸�能修改</li><li>逻辑备份的速度è¦�æ…¢äº�物ç�†å¤‡ä»½ï¼Œæ˜¯å› 为逻辑备份需è¦�访问数æ�®åº“并将内容转化æˆ�逻辑备份需è¦�çš„æ ¼å¼�;通常输出的备份文件大å°�也è¦�比物ç�†å¤‡ä»½å¤§ï¼›å�¦å¤–逻辑备份也ä¸�包å�«æ•°æ�®åº“çš„é…�置文件和日志文件内容;备份和æ�¢å¤�的粒度å�¯ä»¥æ˜¯æ‰€æœ‰æ•°æ�®åº“,也å�¯ä»¥æ˜¯å�•个数æ�®åº“,也å�¯ä»¥æ˜¯å�•个表;逻辑备份需è¦�å†�æ•°æ�®åº“è¿�行的状æ€�下执行;它的执行工具å�¯ä»¥æ˜¯mysqldump或者是select … into outfile两ç§�æ–¹å¼�</li></ul><p><a href="https://link.segmentfault.com/?enc=F4cTbunJ006ZyufMzZCU9Q%3D%3D.8I30X7ZN77N6ykfaXf4f6QsMnkPVjOF%2Fex7bFS0BfGQZMXQf74DjyEVa%2Fkjk44TQJlkJ5SPBEdC14evAPSV1xmCEepPd8ih%2BZVDkRLUvb80KkTOFbP0WrOcadd7P0pcxzKf1ERQAjo%2B7V%2BNeFFXVSV75f%2F%2BmIOxGZfVXNmpBKbGLB4S44CBMbxLCem5ZDUgFJWwlHch5CAToflZLiBqeX7DcF%2BsaUvagOUDjgw4TcdrwnQsq2ChgWRxdDK70wK2fa%2FJGEFUkx7ztaudwYUbUEk04Od7PIT1LWfPyPDEeoJ4%3D" rel="nofollow">死磕数æ�®åº“系列(å��):MySQL æ•°æ�®åº“的备份ä¸�æ�¢å¤�</a></p><h2>MySQL 日志文件解æ��(类å�‹ã€�作用)</h2><p><a href="https://link.segmentfault.com/?enc=SslJL30YjsZUKuP5aGoHxg%3D%3D.qIHR9836sHk06QfkpWcmyZ9mLxVxVHMRN4%2FAkSR0%2BoQX84d6dFUx%2Bg6FPbsCNCg2XZKmo2NXHhdfv228v1POvVcwpEjKbQq7KCKRVWa%2FLSRKNzky9bZ2NW55WSjA%2B%2BqsTtLN1W4%2FWfRQpKR9Uh%2B3tN%2BPaQP30y0uwAW55X%2Fhli2SYkVR%2FQk7Ayi0%2Fw0UXkH2Sf87AyecdttXSIdQSEFBzs1pKEkxYCuiXdPW3Lu5x6yolWgHoVXcuvHRZ8fWg8xiY93GrQvr3cWQWP25CMsPSVGGp4WRladV046Oq%2Fi6KeE%3D" rel="nofollow">死磕数æ�®åº“系列(å��一):MySQL 日志文件解æ��(类å�‹ã€�作用)</a></p><h2>MySQL æ•°æ�®åº“读写分离</h2><p><a href="https://link.segmentfault.com/?enc=wnGj0oXbLf4VRNZNd9M%2FEw%3D%3D.O%2FC8uFiLlHvp38QlAwInm4hqv0SfMcXaMqkTkGjmetcI%2Fciu0jr%2BWfMLNwK1EQcWtNt71vrEQAc9YqRjjewmlMP7hi1bHSeZvyh5Pd%2FniNJVL3JfoOP05aXxg5a3ytZ9yBVT0NTbHpIr4c5gWOWP2lebd3MUIrfkSqeRLdXmSsCrP5ZRn1mAOWFWFYiZm8jo8rrjE6iFexkbVGlqpgCUWbBJpRmHOF038rlHHwNBFBRQxgFamSiySynEcgmu%2Frn%2FeUtiYr6WYLZIeXKu6lzxmO%2F24hYPMuisVDTcwmH6oKo%3D" rel="nofollow">死磕数æ�®åº“系列(ä¹�):MySQL 读写分离详解</a></p><h2>MySQL 分库分库</h2><p><a href="https://link.segmentfault.com/?enc=LrC5lHeI5rg%2FzilPt0m6gw%3D%3D.URbxzOxCylY9JLySXtHbbVC9QRH6HdqRlExOCxnw39tbB4EgRjHDwa8QtYJ299PmCmLRcR6ZQd2Q7tEcqdMP2H9g38oeSTaLDLpLNxjzumih3BmG5%2BwmykuTDmOaHN%2Fh58F9hBAZYtOMFQM0SOs1cBpWHftTNrGawMT3HW%2FsSN8AUmJRRwmOUSjHgvG9tm0Yjs1OZwam8OMCRj%2FBsF0BHWqppvALt3cg7WeopXvKaABTX%2BJzTKLn54%2BnNdLmXlWDqNl9AaBjMZ4S7qRNB6H8P9ma%2FwC0j8HMqQDfXWhl%2BnQ%3D" rel="nofollow">死磕数æ�®åº“系列(å��二):MySQL 分库分表(何时分?æ€�么分?)</a></p><h2>MySQL 事务ä¸�隔离级别</h2><p><a href="https://link.segmentfault.com/?enc=LrHFir9t3oWBK2We%2Flp39Q%3D%3D.09p3B1gzXud7MEoJc4bYD48xofmVZVyQBd8zjg4ANsGSfmPYbmKugmy%2BhYl1qo5NJK77WhNkODJLcxwxILHMY6VKjL69vQ4vUPBdpWfHDS%2FN5XXerfCGvZRyj%2BnjisRGY5V1W0ie6BPvVrWZWxDm79%2B7LjThr9jOqyjxAtNudcVvPnM1jlI6I732htQUQD6GM%2B5gfan5eignosJOQMvMwBLQ7mQjJuQOLqeU5OevsMgM%2B%2BBEPPU8PcRbfWXKm7rmLN8GZcKnAeu1%2BtjjSgigGiBPOkcG%2Fc5jhWIPlFBIXb0%3D" rel="nofollow">死磕数æ�®åº“系列(å��三):MySQL 事务ä¸�隔离级别</a></p><h2>MySQL é”�机制详解</h2><p><a href="https://link.segmentfault.com/?enc=uocc3RK8XCtXM7oCTDT6xA%3D%3D.qZ%2BNSlomITE7eyC4PUYk6YeBrkXc0aBeU6oADPv0J%2BxkqU%2BUYoOB70xglTwtAgtc6BG9OjalfDhoEGsSihcdJ49h4gX0W%2BTT2eSxVEwQxxfOOOp5GfZcj44nZOqUEZOgDVd4qcE8IrhyWixjpt3PjDx%2FQ5wyjf5jvFdyNxl4tHbiT%2BL8MBHSolmTOouR1K1B1AzEo9%2B0dhOTnniKJTNqW4NRco%2FGxBfvTfS8wcnUHgDrbhBc%2F3CMcUtFbvoILjsp1ugXWRbtkepWa6IyA4SKrAP2lyNH8FBAgFrS7Yvbdqg%3D" rel="nofollow">死磕数æ�®åº“系列(å��四):MySQL é”�机制详解(表级é”�ã€�页级é”�ã€�行级é”�)</a></p><h2>MySQL 存储过程ã€�自定义函数ã€�事务ã€�æµ�程æ�§åˆ¶çš„语法ã€�创建和使用</h2><p><a href="https://link.segmentfault.com/?enc=yRiPC0ZtDXrgmsdlBlRYPA%3D%3D.m4a%2BLTEUz6wASRZndNwRQtsQO1CO5L1oWTGFN6CY9Cs6mJoJjWy2rl%2FQ6sI14Vp7wby9zbxHk2LeHP7zJkRIlOM19yuVqJ6ztgCJQ1cbe6LBjykMr%2BgUA2NfLboVdWHKveWKttec19TMasot6wVSFab%2BlHkKuI02EMyGO7dOBHBqT2dNe16FtV0yAFHj9c29%2FTzpsuioYhxjjXZP8ASlegeUTt1UDuDihZPZtikIYVg5XeQxhjK8OS3AlGjqpYcq8eoUFcDVLhcncG3V%2Bypbb2iKx3Pi9KCSuzVBF%2FYLGPc%3D" rel="nofollow">死磕数æ�®åº“系列(å��五):MySQL 存储过程ã€�自定义函数ã€�事务ã€�æµ�程æ�§åˆ¶çš„语法ã€�创建和使用</a></p><h2>MySQL å�•表ã€�多表æ“�作详解</h2><p><a href="https://link.segmentfault.com/?enc=wZ4yeMJVt0fco%2Bwffd703Q%3D%3D.DXoP%2B5jgL%2FPAMmoxG%2Brwal4JMWIuUEFQ6RjqYYOrUBh5raeSXdT8gCM9lTfRofe0ZabMRIrG7NigGW%2BRpaqQERFntwIGSSu2281Y1EBd%2B4bqMHTQuSs4xitOSKf2ZIJUqLa%2BJVyiExm2oN0EMsyfGYm9ESl465zw1fj4CAQCgrAxUm4745mO0An4kj%2BVI3fCAwQY0wLMWZC%2FC1rUsiwovgB5uoX8ZyIhs6YmkckS7KDiso3sxuHs%2FSWOdxvjZjMbmCy11hikUWdUpIDnUP%2FYQiFmAtnUrmDN7Q6zqeuSVdA%3D" rel="nofollow">死磕数æ�®åº“系列(å��六):MySQL å�•表æ“�作介ç»�</a></p><p><a href="https://link.segmentfault.com/?enc=z%2FXKg9ANXPWXOlXXXXg7eA%3D%3D.j%2BRRxgCZMmFx45jqejTeQ3%2FbB4P5X0LJIjE3B1%2FIXwmJqC%2ByBMdiojqWk%2B%2Fq7vhaX%2FFm%2BxSCuTtmPhcAJqL8ro6J5OP4roDaatT2LuBJ0lSune%2Bb5cIm6ust0H58PkWd%2F2GxtXF6zAb4RJE325V%2FVDRl26i6%2BOC1fwZy42wBNb9J6t%2FnSvJ8KyNP%2Ff3GHJ7RQWfynrJZ8xxFHeT%2FyePgwhfiQClCJjAo3cl4dfmE0E6daAOkB6DG4P3GYoW8Wc5i0CDM5iEVxSN78tgXlv0V4vB01vOUVYA03QaGtOb0FUc%3D" rel="nofollow">死磕数æ�®åº“系列(å��七):MySQL 多表æ“�作介ç»�</a></p><h2>MySQL 表的七大约æ�Ÿ</h2><p><a href="https://link.segmentfault.com/?enc=GN13tXk7qNZyaq7kMpI5MA%3D%3D.CmuRDkIhUPlR%2B7VWghjzeCtSMHxcQn6QqwWuee%2F5%2Bk%2FnzIOeiGLgHSWQ2s0FBbwKSNTQd2HnQmWHI0y7qWsJ5dVnEPhtkA7srjRpPV0aawvcnczsYY0uVh7GC8ToHtuYCI0jm0CSbx4lfSXdzD0a%2F2DaGojgwKOnYkt6x%2BAp7UXYqinj%2BIg4j46rbi8%2F4qIFOqrVuFwcdCDLZ6kPBq0q48v56qWaXOyCt6JIJglaPDpjCcLc9X55QbNzg3ikd9psRsrjZdY92Myjw0nu7ujAkeJHDbfVk2Rd8A%2FeguPPFOw%3D" rel="nofollow">死磕数æ�®åº“系列(å��八):MySQL 表的七大约æ�Ÿ</a></p><h2>MySQL 视图ã€�触å�‘器的å�Ÿç�†ä¸�å®�战</h2><p>本文主è¦�讲解视图(view)的基本概念,什么是视图以å�Šè§†å›¾çš„使用场景,视图å¢�åˆ æ”¹æŸ¥çš„å®�战(CREATEã€�DESCRIBEã€�SHOW CREATEã€�DORPå’ŒALTER),视图的更新æ“�作包括å¢�åŠ ï¼ˆINSERT)ã€�åˆ é™¤ï¼ˆDELETE)和更新(UPDATE)的视图æ“�作基表数æ�®å®�战。</p><p><a href="https://link.segmentfault.com/?enc=Pn42Xl4SOidrZ1kO0TY1XQ%3D%3D.cuMKQ2zchqdJKj1JSLUPJLVkYnQfKj5Zr6vca5mO%2FYQvCezU05cgK%2F2wP92f530FBdxhEthZaBbIZgd3Sy5gvHpLg%2BFHhjjbbBp7J47SnaHK3ZBuydwFJgByzqGaQBmyOfKUFSzdm2thxXtVb5X04VO8g80ehOnn%2FvE92wTQ%2BVWO3%2FgRvBiGKLKDPQI3K%2FpoOkdpvD1x4dZ%2B3IKkpwzhTWI6V7YSWkHlvJsSyAOiAAOPzKigZ%2FILTvTqtPWYlY%2F9LMV%2BweObwkMUJvIyZl5BmgfINcX9TNwYe3eIntDhIos%3D" rel="nofollow">死磕数æ�®åº“系列(å��ä¹�):MySQL 视图ã€�触å�‘器的å�Ÿç�†ä¸�å®�战</a></p><h2>MySQL æ•°æ�®åº“ DDLã€�DMLã€�DQLã€�DCL 语言ç�†è®ºä¸�å®�践(sql 8.0 版)</h2><p><img src="/img/bVc74E8" alt="image.png" title="image.png"></p><p><a href="https://link.segmentfault.com/?enc=c0GRng48zNtFlN5tB1ditw%3D%3D.gW41U44ulY6jTfW07A5IrFJomR8SeHFXiCJoBsCMBBNLvlY7%2FsHpwzaXoIfo7aEq6h103Z9ZvoMb%2BR3TNkZ3cU2rDy4hE6ptUx5Absuo3YEt6rydeSgEH7aaaPzGKQVj7cXJN53n6KL9NKNyWyI5tfKkPykmYsgpOFbUWEkEEsiKpq%2BTBJoF3z767pji6bSTNBns0CY0lTfXz4qEAFnzpzOUndfarj88fUjKY68KAP3eRY2pP2zLB3Aq9%2F%2B%2FIzid1RMaFiH1zwQTCTcuDiU9cwbHhDSPD50ngEMrmUTAbbg%3D" rel="nofollow">死磕数æ�®åº“系列(二å��):MySQL æ•°æ�®åº“ DDLã€�DMLã€�DQLã€�DCL 语言ç�†è®ºä¸�å®�践(sql 8.0 版)</a></p><h2>MySQL 多版本并å�‘æ�§åˆ¶ MVCC å�Ÿç�†å�Šå®�ç�°</h2><p>MVCC ( Multi-VersionConcurrency Control) (注:ä¸�MVCC相对的,是基äº�é”�的并å�‘æ�§åˆ¶ï¼ŒLock-Based Concurrency Control)是一ç§�基äº�多版本的并å�‘æ�§åˆ¶å��议,å�ªæœ‰åœ¨InnoDB引æ“�下存在。MVCC是为了å®�ç�°äº‹åŠ¡çš„éš”ç¦»æ€§ï¼Œé€šè¿‡ç‰ˆæœ¬å�·ï¼Œé�¿å…�å�Œä¸€æ•°æ�®åœ¨ä¸�å�Œäº‹åŠ¡é—´çš„ç«�äº‰ï¼Œä½ å�¯ä»¥æŠŠå®ƒå½“æˆ�基äº�多版本å�·çš„一ç§�ä¹�è§‚é”�。当然,这ç§�ä¹�è§‚é”�å�ªåœ¨äº‹åŠ¡çº§åˆ«æ��交读和å�¯é‡�å¤�读有效。MVCC最大的好处,相信也是耳熟能详:读ä¸�åŠ é”�,读写ä¸�冲çª�。在读多写少的OLTP应用中,读写ä¸�冲çª�是é��常é‡�è¦�的,æ��大的å¢�åŠ äº†ç³»ç»Ÿçš„å¹¶å�‘性能。</p><p>ä¸�仅是MySQL,包括Oracle,PostgreSQL等其他数æ�®åº“系统也都å®�ç�°äº†MVCC,但å�„自的å®�ç�°æœºåˆ¶ä¸�尽相å�Œï¼Œå› 为MVCC没有一个统一的å®�ç�°æ ‡å‡†ã€‚</p><p><a href="https://link.segmentfault.com/?enc=flh8qCVEmjcMWKkd2fvh6A%3D%3D.HWbq8Xm0E5yedeyo1evIfZ0C5YP6zFt1IoXbomzYYKDk7Qk8yq9lQk6SK2v%2FkhdL1hQWbJPPx8vRkHn3HQQKnS7kOEKRZAMHUZcRJ9MEYahmSGKlnoW8GsvNIuUFhPJTUdY3kf8sPB8lqCRYK9xkROHL%2FkoJJ9rNH8EO6hPXClFI6wt62ud0MPYHNAoUAgEp2CGesPRJbDP0pPB3UWTEamIG85XwB2yfWZmHvqTSLTdBygxXW4xpdY1QQBYi7sDmBLTExl27zuuqV15rqk4mQjPswRp05v0C5fxFwkzUBCM%3D" rel="nofollow">死磕数æ�®åº“系列(二å��一):MySQL  多版本并å�‘æ�§åˆ¶ MVCC å�Ÿç�†å�Šå®�ç�°</a></p><h2>MySQL æ•°æ�®åº“机房æ�¶æ�„ä¸�è·¨åŸ�容ç�¾</h2><p>我们在å®�际生产ç�¯å¢ƒä¸­ï¼Œè¦�求ä¸�å…�许丢失任何数æ�®ã€‚也就是说,当 MySQL æ•°æ�®åº“ç”±äº�å�„ç§�å�Ÿå› è€Œæ— æ³•ä½¿ç”¨æ—¶ï¼ˆå�‘生宕机ã€�网络异常等),ä¸�仅需è¦�快速æ�¢å¤�业务,还需è¦�ç¡®ä¿�æ•°æ�®ä¸€è‡´æ€§ã€‚</p><p>本文主è¦�讲解数æ�®åº“机房æ�¶æ�„ä¸�è·¨åŸ�容ç�¾ï¼ŒåŒ…括主ä»�å¤�制的强一致性ã€�å�ŒåŸ�多活ã€�两地三中心ã€�三地五中心ã€�æ•°æ�®å…œåº•逻辑等进行é€�步讲解。</p><p><a href="https://link.segmentfault.com/?enc=cZ3j%2Fy3IhwxGuNiXD3wRYw%3D%3D.fgMVOVB2Kvns7KMIesqfUni%2BbTBPuOCL%2FN5iolAJPYat%2FcEO8OeIeF5w4B0c07CeXPjTB7MJ1357JVMipH0ZsRDoFlLeLGJAgDxG%2B0PyodxElG0NsN1Korn5hiKY%2FmyyfaO3IMFt8MdJCRIv4Jwat6BAufv1GVr1ebiuL8tclHNzrolP%2FhHL7bDHATCqLbQ1mIvNf%2FeN5WJOt3XCZ56HdP1iSHPPl9hU06QlUFTPWwuWkt9goM0BpvIvhpQgg6WwGgYiPBlgX23cvwFfBDT9fUsdxBaj4RLZqscF%2B9wlZwQ%3D" rel="nofollow">死磕数æ�®åº“系列(二å��二):MySQL æ•°æ�®åº“机房æ�¶æ�„ä¸�è·¨åŸ�容ç�¾</a></p><h2>MySQL 高å�¯ç”¨æ–¹æ¡ˆé€‰å�‹è§£æ��</h2><p>高å�¯ç”¨æ˜¯æ•°æ�®åº“æ°¸æ�’çš„è¯�题,高å�¯ç”¨æ–¹æ¡ˆä¹Ÿæ˜¯æœ€å�—æ•°æ�®åº“爱好者关注的é‡�点技术之一。在MySQL二å��多年的å�‘展å�†ç¨‹ä¸­ï¼Œé’ˆå¯¹<a href="https://link.segmentfault.com/?enc=e%2FmoG4dhSRT4Ma9mxOYsYA%3D%3D.dDXwSnPhLDautuKLI1qzbXznQPki4NKlmUP31Hf2MyW%2BRGBR1DxjHcHpK66rVNBxaHcBfRg0ny7gzQh1bmHdikwVdLZ5qufsDa5zflKDe4EICy1wCQk4lS92jjvnSdxWJ%2FMOINtR09leUtOBb6m6WRTQDOJwQhb48sowGTrW0bLTSKsoRUD6bnzpGe7PjkorD%2B%2BJu%2Bl4ak6IfdlRkQ6oHvuxdLgEUMcT3lD2ycGikBcJph1JywD7WuR%2F1K4zBOIK9tWnkkbqVw2j1Fme09HuozOQ5UlQQ7wWW8HGbUrC%2Fgc%3D" rel="nofollow">MySQL的高å�¯ç”¨æ–¹æ¡ˆ</a>百花é½�放,å�„具特色,这也是这款开æº�æ•°æ�®åº“最能让人ç�€è¿·çš„地方。例如,早些年著å��çš„MMMã€�MHA等等。</p><p>éš�ç�€MySQL官方的ä¸�æ–­å�‘力,在基äº�MySQLå¤�制的基础上,æ�¨å‡ºäº†ä¸€ç³»åˆ—的高å�¯ç”¨æ–¹æ¡ˆï¼Œä¾‹å¦‚,主ä»�å�Šå�Œæ­¥å¤�制ã€�InnoDB ReplicaSetã€�组å¤�制(MGR)ã€�InnoDB Cluster,å�Šç›®å‰�最新的InnoDB ClusterSet。</p><p>MySQL çš„å�„ç§�高å�¯ç”¨æ–¹æ¡ˆï¼Œå¤§å¤šæ˜¯åŸºäº�ä»¥ä¸‹å‡ ç§�基础æ�¥éƒ¨ç½²çš„:</p><ul><li>基äº�主ä»�å¤�制;</li><li>基äº�Galeraå��议;</li><li>基äº�NDB引æ“�ï¼›</li><li>基äº�中间件/proxyï¼›</li><li>基äº�共享存储;</li><li>基äº�主机高å�¯ç”¨ï¼›</li></ul><p>åœ¨è¿™ä¸€ç¯‡æ–‡ç« é‡Œï¼Œå°†å�‘å�„ä½�读者介ç»�å�„ç§�方案的优缺点,å�Šé€‚用场景。在介ç»�å�„ç§�方案之å‰�,读者首先必须了解 <a href="https://link.segmentfault.com/?enc=9OvKdp4s%2BnfnBJwYFTmL2g%3D%3D.TI5Zb0iEVO6EmDNHl4Poh7S0L21PsxrFErniUW9PdFlhaPZGyPWPBJMFL67jBjonnzLiAEy1FEOLXvN7MlW86Y6wg5guCE%2FnOfuZ4bD8b5Mvu4tkkyrek%2F02rKYQKD7e4dGVejcxM1Kv0lnexSJONMHdDL618b2LSTgDlrwy4yfVR4wk8c3TC5fzHkzI1H%2FmHO06EHC4L5ZBPgMhvsNoNQNAcc9MgLqnnmVxAnNHpYlO1SE3T69EYtT5QoqwKYNisbuq11XSjJ0KBVs4fPuzpr6hsn2hjaQrRDdygmExMEA%3D" rel="nofollow">MySQL å¤�制</a>功能,MySQL 的高å�¯ç”¨æ–¹æ¡ˆå‡ ä¹�全部是基äº� MySQL å¤�制å®�ç�°çš„。</p><p><a href="https://link.segmentfault.com/?enc=geSS9pXM%2Bfxg5DhIzUPYIA%3D%3D.zK%2BFz%2BhiqVbXZPnH5LKnCYdgVVgUmXqUOadWVu9z6IYJMqsGtY3URTnOE%2B32H5wtCtv2gEJc6HFyA0hY5sOVdEzlLc68cW6%2BqkgIa62G9rn2hz8zpQdaxHhwsgRjV9%2FqpemFd4o5WHcEkquczsqO%2FY1tkyKRlbp5q7bErTj9G6A9hNMxUQN1HOMJuDXwSEAZKiD1l%2BBD9p73ffXjON1yCKliIqY2GxM2V1saq%2BmIUqCDPJBDj3dvTJHEaNxomoat1sekQhAeGjq%2BdRXgfozISkNDfRsxn6VVyDuoucsuET8%3D" rel="nofollow">死磕数æ�®åº“系列(二å��三):MySQL 高å�¯ç”¨æ–¹æ¡ˆé€‰å�‹è§£æ��</a></p><h2>MySQL 级è�”å¤�制ä¸�å�Œä¸»å�Œä»�é…�ç½®å®�战</h2><p><a href="https://link.segmentfault.com/?enc=BGyIEq0yMt0A7DYGt72KlA%3D%3D.NWIqyBSjdeRep7Hi6o0ikzDBYm1Z0Z9hAItTntSRSocMOzS5HCZ9TQfYX2lwc6hHcw5IlsxwAhIa6yB1qlM43L755pCLbPkrwJrLCoTyDwSZkmK6eW7PqZc2TSokQJR1g%2Fc57frn3RbEzRwXvhti8iYN92C5EUO%2Fi%2Bb%2FUEadK2ScTeAoKfY4c%2Fgv68Gn8%2BXwyR21pY90ZycZ0UPVroHIORvw3F%2Fxfe%2FcN2ItCdn6XI6fz28KyKptCUJ3DPop72AyvptP4Eq18AQFVNF5XnSYk2OBZcsAQuMkM%2BmobLkkpsE%3D" rel="nofollow">死磕数æ�®åº“系列(二å��四):MySQL 级è�”å¤�制ä¸�å�Œä¸»å�Œä»�é…�ç½®å®�战</a></p><h2>MySQL 高å�¯ç”¨ä¹‹ç»„å¤�制(MGR)详解</h2><p><a href="https://link.segmentfault.com/?enc=iNfCaPuqJojzw3AKITK8Kw%3D%3D.MWpWDSI0kYkbMx9VFrHsUWKD2HftkEbpElO09yJqjY4vMUqGfHeWVdrouk4%2BSOZKlyuB%2BPrK5GdX9icd772mDCFs%2Fe%2BhQKyP56zhpcXoI5D6NAvk2Cl0zGOpLkk4Fo849M0m6aBIxWkQ9ZgbQmi2Uo6ETNrMvB%2FsqusSPsjYilTCqcZxVHGmNJy3EiPkL67wmUxR7VdW%2Bmo7nWIr%2B6howTt1V7%2BcPEeUTu0uYH1hNtoXaWNNTeJCsCGB4j9P0vM5bZBQQECV1jHh6izEr2NkkYqdhMe2b%2FeQf%2FMFORQYa6Y%3D" rel="nofollow">死磕数æ�®åº“系列(二å��五):MySQL 高å�¯ç”¨ä¹‹ç»„å¤�制(MGR)详解</a></p><h2>MySQL 高å�¯ç”¨ä¹‹å�•主ã€�å�Œä¸»æ¨¡å�‹ç»„å¤�制é…�ç½®å®�è·µ</h2><p><a href="https://link.segmentfault.com/?enc=LsxlX4L%2FCJJOe3LDnafGFQ%3D%3D.3HiVhz2lflq104iew%2FGzASA19qyIB4TFtaIMFYeBclGl1B286ws7fJElS7OjlLxSBhm4qOro1IJWlEmgCCHSJyWpcVO%2BAWlDWglJov%2FwQ8NmgiRJ8Nchr40CVcrpBnD8LjOdxlpBpvRfB6JxDQsVA%2B4vM1Gdl9m03G8oCJSlhqQ28Xfpw3BLmuYt%2FULfcx0DPbaLlvKeXHpriZXnK2UnyZ1oN3QW2W8%2B1vUHfcdLi2bf2hE6noE1lmVkjaFrbxQoFPoZEhb4aZHzkToxwlro%2BJMlm68rjVtDAUuu5R7p1Ks%3D" rel="nofollow">死磕数æ�®åº“系列(二å��六):MySQL 高å�¯ç”¨ä¹‹å�•主ã€�å�Œä¸»æ¨¡å�‹ç»„å¤�制é…�ç½®å®�è·µ</a></p><h2>MySQL 常用管ç�†å‘½ä»¤ä»‹ç»�</h2><p><a href="https://link.segmentfault.com/?enc=AMx8veiIJehf5q%2B9SSmWIw%3D%3D.hEqbZDKJEfL6VlD8EA0dEC2FCbBrARt09hZ%2B8obPC7MFpJ4EJMTV%2BIkLP05mG%2BSPOAbRfPJsWHY20pUCltmOR9X7iNpKmc15OntpwWhGgnXU8stSr%2FFE4QBgKONqo6WICC7dz5d4bflGUT1BTjpQpdImE7axYGiiKXWSSgT2LrGJyHkL6%2FkirgDj1gBRovMWy8bbT9qeRQYec%2BBiyQWWJoOWKGMf17bKIr%2BhfFkhEZWEhaMZG8ocrcS%2FOTwB0khWVOuL71GkftMkBwlsfgVzqIzIdmjw4VJsv2C6TYDI5%2BA%3D" rel="nofollow">死磕数æ�®åº“系列(二å��七):MySQL 常用管ç�†å‘½ä»¤ä»‹ç»�</a></p><h2>MySQL InnoDB Cluster 多节点高å�¯ç”¨éƒ¨ç½²å®�战</h2><p>MySQL的高å�¯ç”¨æ�¶æ�„æ— è®ºæ˜¯ç¤¾åŒºè¿˜æ˜¯å®˜æ–¹ï¼Œä¸€ç›´åœ¨æŠ€æœ¯ä¸Šè¿›è¡Œæ�¢ç´¢ï¼Œè¿™ä¹ˆå¤šå¹´æ��出了多ç§�解决方案,比如 MMM, MHA, NDB Cluster, Galera Cluster, InnoDB Cluster, 腾讯的PhxSQL, MySQL Fabric., aliSQL。MySQL官方在2017å¹´4月æ�¨å‡ºäº†ä¸€å¥—完整的ã€�高å�¯ç”¨çš„Mysql解决方案 - MySQL InnoDB Cluster, å�³ä¸€ç»„MySQLæœ�务器å�¯ä»¥é…�置为一个MySQL集群。在默认的å�•主节点模å¼�下,集群æœ�务器具有一个读写主节点和多个å�ªè¯»è¾…节点。辅助æœ�务器是主æœ�务器的副本。客户端应用程åº�通过MySQL Routerè¿�æ�¥åˆ°ä¸»æœ�务程åº�。如æ�œä¸»æœ�务è¿�æ�¥å¤±è´¥ï¼Œåˆ™æ¬¡è¦�的节点自动æ��å�‡ä¸ºä¸»èŠ‚ç‚¹ï¼ŒMySQL Router请求到新的主节点。InnoDB Clusterä¸�æ��ä¾›NDB Cluster支æŒ�。</p><p><a href="https://link.segmentfault.com/?enc=A9J1PAb9zwOKDHF6A4K%2FdA%3D%3D.ck08U2XNUk04XZ%2B6Gwv9pm0hKpEYqGi%2Blni4uyVuWqM4lC2u7FoUy3xSviPmOxbsIToMtFxm3l0JjJPatNzE7FwytDk9hF7sCHEoVaQ7dnr%2F9Oyxy16nY5jVdtT%2BR7gvIlOJKmIoBZPgJjWDkLOtFX9vqfqLuP8Z3Gu0b1obl20w7doRIa2vNQbgn%2FtvgUTzUw0lsnmrpqYfrBiBvU6ZI4g9C%2BR4%2BFhOE0Z2f8TRjvBG5mYAlAaXvWjfYjPKMBIL51mGxeyRxALZKB53d51zAID5dhX%2B1VE4mYpWIeLXWA4%3D" rel="nofollow">死磕数æ�®åº“系列(二å��八):MySQL InnoDB Cluster 多节点高å�¯ç”¨éƒ¨ç½²å®�战</a></p><h2>MySQL Router å®�ç�°æ•°æ�®åº“读写分离é…�ç½®å®�è·µ</h2><p>MySQL Router是MySQL官方æ��供的一个轻é‡�级MySQL中间件,用äº�å�–代以å‰�è€�版本的 SQL proxy。</p><p>既然MySQL Router是一个数æ�®åº“的中间件,那么MySQL Router必须能够分æ��æ�¥è‡ªå‰�é�¢å®¢æˆ·ç«¯çš„SQL请求是写请求还是读请求,以便决定这个SQL请求是å�‘é€�ç»™master还是slave,以å�Šå�‘é€�给哪个masterã€�哪个slaveã€‚è¿™æ ·ï¼ŒMySQL Routerå°±å®�ç�°äº†MySQL的读写分离,对MySQL请求进行了负载å�‡è¡¡ã€‚</p><p>å› æ­¤ï¼ŒMySQL Router çš„<code>å‰�æ��</code>是å��端å®�ç�°äº†MySQL的主ä»�å¤�制。</p><p>MySQL Router 很轻é‡�级,å�ªèƒ½é€šè¿‡ä¸�å�Œçš„端å�£æ�¥å®�ç�°ç®€å�•的读/写分离,且读请求的调度算法å�ªèƒ½ä½¿ç”¨é»˜è®¤çš„rr(round-robin),更多一点ã€�æ›´å¤�æ�‚一点的能力都ä¸�具备。所以,在å®�ç�°MySQL Router时,需è¦�自行é…�置好å��端MySQL的高å�¯ç”¨ã€‚高å�¯ç”¨å»ºè®®é€šè¿‡Percona XtraDB Cluster或MariaDB Galera或MySQL官方的group replicationå®�ç�°ï¼Œå¦‚æ�œå®�在没有选择,还å�¯ä»¥é€šè¿‡<a href="https://link.segmentfault.com/?enc=V4T1US7kHdCsVKzs%2F2o%2F5A%3D%3D.S2gepEALKJWPit8XOr6UonsUTjPQCzTzu5f%2FpCePMpBE%2B9cTJXknltZnkyGLu6K3%2BVSccZ0J9TEXObOFWqWqnFXB4xHV%2BqOKy78dPVZNJJvG2rwBPL6GbQcx58hcAtmeyR3rVGx7kW9eA%2BfsqHjeIjw43eMQVZlXJR1F3Qm0Avb7%2FZaqHGPnRMyPoxAeFffH1YCtxXkB1sXhZy1DyAA6yd57efiEpYkmVY70EcFS%2F4AHwhKUr6pbB%2FwDaOQbdfwzEIdobSB3yzXMhpJNLTDQBoEPBvM3XVMJvE8ZWc9b4zo%3D" rel="nofollow">MHA</a>å®�ç�°ã€‚</p><p>所以,一个简å�•çš„MySQL Router部署图如下。<img src="/img/remote/1460000043831394" alt="图片" title="图片"></p><p><a href="https://link.segmentfault.com/?enc=78B26Nj9fvyoRAWl0ay9%2FA%3D%3D.FuCpSTMNTlRWoI3RpSrME3sepI90%2B2M98nGI0aNBhfUcu%2Ftn858T%2BfKxGCFRKf12L5XQ%2BZTaSWIWtLn5ZMxZPzzc7d4B5akY1ifU5Zhp9ynTGd6sa99g4n2lne6tb5ZQHiCZvDjdFLSeWLt4GVWIGWNHTwskxyPvCi3F3V78DYXraU1qHBVmq5Vxj2N7xX%2F7C41fNz2ObT%2FW77Br8FADzHcvhD15QO43BUWTNauNr%2Bb2hnQXIKdPZFizLyAmnFrku4togWOiwwJiMN9andcvVA6uf80hQ0m9c7qu2%2BPViyE%3D" rel="nofollow">死磕数æ�®åº“系列(二å��ä¹�):MySQL Router å®�ç�°æ•°æ�®åº“读写分离é…�ç½®å®�è·µ</a></p><h2>MySQL 针对 Swap 分区的è¿�维管ç�†</h2><p>Linux 有很多很好的内存ã€�IO调度机制,但是并ä¸�会适用äº�所有场景。对äº�è¿�维人员æ�¥è¯´ï¼ŒLinux比较让人头疼的一个地方是:它ä¸�ä¼šå› ä¸ºMySQL很é‡�è¦�å°±é�¿å…�将分é…�ç»™MySQL的地å�€ç©ºé—´æ˜ 射到swap上。对äº�频ç¹�进行读写æ“�作的系统而言,数æ�®çœ‹ä¼¼åœ¨å†…存而å®�际上在ç£�盘是é��常糟糕的,å“�应时间的å¢�长很å�¯èƒ½ç›´æ�¥æ‹–å�®æ•´ä¸ªç³»ç»Ÿã€‚所以,作为è¿�维人员,æ€�æ ·å�šåˆ°å°½é‡�é�¿å…� MySQL 惨é�­ Swap 的毒手将显得尤为é‡�è¦�ï¼�</p><p>SWAP是æ“�作系统虚拟出æ�¥çš„一部分内存地å�€ï¼Œå®ƒçš„物ç�†å­˜å‚¨å…ƒä»¶æ˜¯ç£�盘。在备份数æ�®æˆ–æ�¢å¤�æ•°æ�®æ—¶ï¼Œæ–‡ä»¶ç³»ç»Ÿä¼šå�‘Linux系统请求大é‡�的内存作为cache。在物ç�†å†…存使用殆尽时候,为了确ä¿�程åº�è¿�行,往往会将å�¦å¤–的一些å� 用物ç�†å†…存地å�€ç©ºé—´çš„程åº�æ˜ å°„åˆ°swap分区上。</p><p><a href="https://link.segmentfault.com/?enc=szVhA6aCXhfjT7cL1z8xDQ%3D%3D.G%2F2UKz22oxM9g5FZGMj8wfH3HgiNaPdOaBPU5MiSLZp1kbvAsXQZBjpVqlqr5PyfqEx9RakzE6ue0mFPyx6v6InIMNIrd0zaSQXEL71G0i2jwezM7PBQ2vOFoTLtZgIKPZpMEBfJ8VT6gH0DJ%2FCLk2yhtDOFNV1HnU8i%2ByDr8cHJWd8khiBxtUJBLrDGJ5qLYSa7Q1eFmn9of4D7nV5vv025BEobz1wntBoDJyTfshIbJvakBU87uCY9yjkH7rhO8sF1LP1YIwiSi2HzQTDgZBMOcgwA1gdixIP77NIuA4k%3D" rel="nofollow">死磕数æ�®åº“系列(三å��):MySQL 针对 Swap 分区的è¿�维管ç�†</a></p><h2>MySQL æœ�务器 CPUã€�ç£�盘ã€�内存等硬件选å�‹</h2><p><a href="https://link.segmentfault.com/?enc=hcRcnKoB8WOuAHbK5Tok9w%3D%3D.VU%2FfoH9Vnlo9bcXe2TAkm9jiE4JJv4s0mqwZuyzg63kCuYTnWDcbhb7gi6ld6gjSLLov5GwDSXojLsL4Qar9Ue9q1Ac7wMSc5uSWrj5adO2UJwp1gAx8nsgtSl%2B4rSPHaoIuVvNrL68uDQ8Ne1IVg%2FKT33snHxS%2BLuGe7YLRAKeraFAeTRIlTLojpskyhcLyzWiWBIjiUHDeCqmiUWdPJq0Hl40RFgUY1IqNu8DvdCrMRZ3lsG%2FLoZvb6828ilmKXSoTb7z1pVciL%2FfP4ooIPka1PEOG%2B%2B5h6bzPV%2BmWeYA%3D" rel="nofollow">死磕数æ�®åº“系列(三å��一):MySQL æœ�务器 CPUã€�ç£�盘ã€�内存等硬件选å�‹</a></p><h2>MySQL æ•°æ�®åº“ã€�æ•°æ�®è¡¨ç®¡ç�†å·¥å…·ä»‹ç»�</h2><p><a href="https://link.segmentfault.com/?enc=qboc9gbJZxLa0RiTs66s2w%3D%3D.es8Xl%2BSVK%2BX8Dq5AsjEhMQyz4xNseifavshTXOMZcVxEQnXXjf3i5h7JZ%2BjKL3xM8gVE3%2BJF3xkJ89o5EPLD0QT3xgsL3xjplh35yZXfY1a8LHl4ggDGP%2FW5einewfU5IwM1kZl8%2Brrr1iRo%2Fx4bB86ocFww3Q8BUXWx4Y4kgQTFtwe%2FRTg8KfRLJoenAlimnYow6FmbAanT2ooN%2BgdvXMRkwPVKhaworn5J71XZHEGDHHwQTTrjn6FYR0ayR%2Fgg7n2RoUMJUnLkrlz1VFR6Cyh3FWwRC%2F6%2BxtfqxrLtVuo%3D" rel="nofollow">死磕数æ�®åº“系列(三å��二):MySQL æ•°æ�®åº“ã€�æ•°æ�®è¡¨ç®¡ç�†å·¥å…·ä»‹ç»�</a></p><h2>MySQL 性能分æ��ä¸�相关工具的使用</h2><p>在数æ�®åº“è°ƒä¼˜ä¸­ï¼Œæˆ‘ä»¬çš„ç›®æ ‡å°±æ˜¯ å“�应时间更快,å��å��é‡�更大。利用å®�观的监æ�§å·¥å…·å’Œå¾®è§‚的日志分æ��å�¯ä»¥å¸®æˆ‘们快速找到调优的æ€�路和方å¼�。</p><p><a href="https://link.segmentfault.com/?enc=kSCT7d711Dz7wbxvqNHXNQ%3D%3D.BFRVeoVo82oBPUrY00Nt7PH0NlMjL%2FmlRYWlzJ2tpkWB8FHO3yr7sw02z27qUULhzIi%2BSsTF0TvjCFJ5Q039NZ0o717d8jpNiMl7%2FOuR4jLLwZRgmfGJv%2BX2K6N7XJA1PRzOmZTO%2BBYHOzM1o3bx2yfjIyHW5FJ5y1Syxo05z1kiMKqDKOXjTNOwj65dzoXjq8rIEZTtZBYpB1TFN8wYHOCQR28NfgGXg3N%2BEeQnmcrKkPfe7PFt2inkyaxI1li47QXRv4gqg%2FLyDTegaX5eBAL5Qsyi4RhLF8p26jm6AKQ%3D" rel="nofollow">死磕数æ�®åº“系列(三å��三):MySQL 性能分æ��ä¸�相关工具的使用</a></p><h2>MySQL 性能测试工具 sysbench 详解</h2><p>sysbench 是一个很ä¸�错的数æ�®åº“性能测试工具。</p><p>官方站点:<a href="https://link.segmentfault.com/?enc=OKv6h%2FvITqTp2fozUe2YiQ%3D%3D.rq2ZQL%2FWFpjPO4AZZ8gOMMJVmpmwM48XfAiTobWCdUIH8m5BHsz%2FGAkoUjAiJNBC" rel="nofollow">https://github.com/akopytov/sysbench/</a></p><p><a href="https://link.segmentfault.com/?enc=C7Ok7l4%2FIdENyeS5UXFwxQ%3D%3D.YjofUMUclrhigXuwzFsKjUuQUF1Hrxbp%2BDJnpRHuAkt2RhWySHGUKeVPA83tgkzI3ZZWQfXdCqEDyvdSgsKOCQan7sqbN1%2BKPQiivC7Us7iaEyCfgLvEWKUeQXuCMSeLd8LATTgxOGN%2B7%2Fu6G47wH1GaGfvat0ok6MYN%2Bw8w8TCQDT5m6hsjeCj9IqD2RUz5U6DNIg0UT8EH4TS%2BCiSd3z0VNF2BW2LLNCvIs5nH8hX6mXapzbQpfax6Q0Oam83V3dOK8VFCKfMkdBclNHq07LxAJhgbikcIDFklUuyx1Ns%3D" rel="nofollow">死磕数æ�®åº“系列(三å��四):MySQL 性能测试工具 sysbench 详解</a></p><h2>MySQL æ•°æ�®åº“性能监æ�§</h2><p>我们监æ�§ MYSQL æ•°æ�®åº“,ä»�ä»¥ä¸‹å‡ ä¸ªç»´åº¦è¿›è¡Œ<a href="https://link.segmentfault.com/?enc=C%2FrvQmlRceH9TJdeyBfYkg%3D%3D.cpZw5jWqvew3VAI06YEgtNk6BSfkkBY9BdNwt4l9D20yGq%2BrupJHAqEjsUfHarnFioEhfVPdTXw8BR1IiwT9nVZg7E8hIIs7f3ua3srvssVSpsyJkb43FtOB6N0sOfoxW0pIKXwog8x5Xg9wzonySgetAyoV%2FLVGjCfxJ9jpqb4CwE%2BYDdYG%2B2n2LBbyXeH4cNS1cMqVbpKCXc10rsKJDvzjEwhp0DsI6fwqf%2B2k3%2FMYVYKgrI%2Bvjs3%2BNG8KgFz9Q2P8mz4EyAmcdLlpZ%2FkojTHV8iKOS09jwKscyJRj7s8%3D" rel="nofollow">监æ�§</a>。</p><p><code>å��å��é‡�</code>,包括数æ�®åº“çš„æ�¥æ”¶å’Œå�‘é€�å��å��é‡�。</p><p><code>innodbçš„æŒ‡æ ‡ä¿¡æ�¯</code>,包括了 innodb buffer pool çš„å�„é¡¹æŒ‡æ ‡ä¿¡æ�¯ï¼Œæ•°æ�®è¯»å’Œå†™çš„æ•°é‡�以å�ŠInnodbé”�ç­‰å¾…æŒ‡æ ‡ä¿¡æ�¯ç­‰ã€‚</p><p><code>线程信æ�¯</code>,包括缓存的线程ã€�è¿�æ�¥çš„线程ã€�创建的线程以å�Šæ¿€æ´»çš„线程,用æ�¥è¡¡é‡�æ•°æ�®åº“çš„è¿�æ�¥æƒ…况,我们在激活的线程中应用了异常检测算法,对äº�çª�å¢�或çª�检的情况,平å�°ä¼šå‘Šè­¦ï¼Œæ��示异常。</p><p>æ•°æ�®åº“çš„<code>å¢�åˆ æ”¹æŸ¥</code>æ“�作的统计信æ�¯ã€‚</p><p><code>æ…¢SQL</code>监æ�§ï¼Œå½“æ…¢ SQL 次数到达指定阈值,平å�°ä¼šå‘Šè­¦ï¼Œæ��醒用户确认具体的慢SQL,并调优。</p><p>当开å�¯ performance_schema 库中访问å��,我们å�¯ä»¥å¯¹è¡¨ã€�索引的<code>IO</code>等待信æ�¯ã€�等待<code>事件</code>ä¿¡æ�¯è¿›è¡Œæ”¶é›†å’Œç›‘æ�§ã€‚</p><p>æ•°æ�®åº“<code>等待事件</code>的监æ�§ã€‚</p><p><code>schema 的统计</code>ä¿¡æ�¯ï¼ŒåŒ…括表的行数ã€�大å°�ã€�空间剩余等信æ�¯ã€‚</p><p><a href="https://link.segmentfault.com/?enc=4JzmX0vqwgikZcCBE0nVlQ%3D%3D.R7%2BPWlVSn29aOyXnXTwmQARuyuR5OfLDWGThrx1d2DVfVtZOpoqcNrSWmIWmobH388zCfVuqREspc%2Ff3xZllYZDlGhrTHWb%2FJ2L6s6pAtvrXMbQwb2xCXumQw7hx9Ivj5oetvnmddMMzDk9UmLp29rY1dx3nppPPco%2FikSuLAdd5A01XXu97j2dJZDUG5Fc8ol2Rpz%2B0wRgiu3AQqjtawrIrNJTxT3WGO%2B0eg4dX6ccvUFqaiNvG9k2h1%2BLNsFWbQnGE6GrMzgKVCog9blUBt6C2qOo2ww43aEFXNJhkC3w%3D" rel="nofollow">死磕数æ�®åº“系列(三å��五):MySQL æ•°æ�®åº“性能监æ�§</a></p><h2>MySQL å¼€å�‘设计规范ã€�SQL 编写规范å�Šå®‰å…¨è§„范</h2><p>为了在软件生命周期内规范数æ�®åº“相关的需求分æ��ã€�设计ã€�å¼€å�‘ã€�测试ã€�è¿�维工作,便äº�ä¸�å�Œå›¢é˜Ÿä¹‹é—´çš„æ²Ÿé€šå��调,以å�Šåœ¨ç›¸å…³è§„范上达æˆ�共识,æ��å�‡ç›¸å…³ç�¯èŠ‚çš„å·¥ä½œæ•ˆç�‡å’Œç³»ç»Ÿçš„å�¯ç»´æŠ¤æ€§ã€‚å�Œæ—¶å¥½çš„规范,在执行的时候å�¯ä»¥åŸ¹å…»å‡ºå¥½çš„ä¹ æƒ¯ï¼Œå¥½çš„ä¹ æƒ¯æ˜¯è½¯ä»¶è´¨é‡�çš„ä¿�è¯�。</p><p><a href="https://link.segmentfault.com/?enc=asX5Px3OK7vPRFCxU8BQFw%3D%3D.iptjGFXJxLHYoXED5WuqfdiQjv07Py9cIOirQuU5siH5hXqez5lt7LDHpR2euKQdMKLjF7nFjPWEI%2Fi6Q5N4xYSmHotLmtUBul%2BmF2nId2c%2BbXNxPF6GO%2Bd%2B%2FDU%2Bm9dUMno67cKTSJpqrUrZn%2FdQbzGdch3MP3a6w00m01ncz3g3LSAupCE0FDOnOhTh30A27%2F1LGqor%2FKrxwqhslNHubR9BOC6enB8C897eYxFmj5MpMfPwqZIic9RrfTmMICNli2%2F1JJXQcpkJmYayb3HmBIYzUmWSPVf0LpbW6wuVevY%3D" rel="nofollow">死磕数æ�®åº“系列(三å��六):MySQL å¼€å�‘设计规范ã€�SQL 编写规范å�Šå®‰å…¨è§„范</a></p><h2><strong>今天 ,终终终äº�å�·å®Œäº†ï¼�ï¼�ï¼�ï¼�</strong></h2><h2><strong>希望大家能够ä»�中收è�·å¤šå¤šï¼�如有帮助,请点èµ�ã€�转å�‘支æŒ�一波ï¼�ï¼�ï¼�</strong></h2> ç¥�器ï¼�ä½ ä¸�å�¯é”™è¿‡çš„å‡ æ¬¾è¶…ç‰›é€¼ç»ˆç«¯å·¥å…· https://segmentfault.com/a/1190000042529010 2022-09-21T20:40:34+08:00 2022-09-21T20:40:34+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>终端是程åº�员的必备工具之一,今天,给大家介ç»�å‡ æ¬¾ç¨‹åº�员必备(牛逼)的终端工具ï¼�</p><p>好工具是æ��高工作效ç�‡çš„必备ç¥�器ï¼�民工哥在此之å‰�也介ç»�过ä¸�少的常用工具,以å�Šå®ƒçš„使用ä¸�é…�置,大家å�¯ä»¥ç‚¹å‡» <strong><a href="https://link.segmentfault.com/?enc=hGXl3DZqOiWopaT4I6bBfw%3D%3D.AMKmKYf3d3Ff%2B2FJXgeLoWe6HnQUfAVWiOwmTEEnxqOxnBkv2b68bN6q%2Faz%2BCx1%2FaaitxrIojtpmQezGX1IZgdmHv4xsrcFprOw%2BhmBgUURpTVa6cTFyCQgET8cpWEoJhPG9BnqaC0UxL%2Fvx7CTLmhvmeQTaRiwtdfJXST7Cmtwoy0cVBOSuZqxPDCA1o%2F5sxYO1csUm%2BFGXm4FEibVHqHPckN0GP7Fbo14c4mdPAva984AiDz0yaibBTDEQg%2FWq" rel="nofollow">Tools</a></strong> 专æ �查阅。</p><h2>PuTTY</h2><p>è¿™ç»�对是一款超级ç»�典的终端工具ï¼�99.99%程åº�员都用过它。</p><p>PuTTY 是一款集æˆ�虚拟终端ã€�系统æ�§åˆ¶å�°å’Œç½‘ç»œæ–‡ä»¶ä¼ è¾“ä¸ºä¸€ä½“çš„è‡ªç”±å�Šå¼€æ”¾æº�代ç �的程åº�。它支æŒ�多ç§�网络å��议,包括 SCP,SSH,Telnet,rlogin å’Œå�Ÿå§‹çš„套æ�¥å­—è¿�æ�¥ã€‚它也å�¯ä»¥è¿�æ�¥åˆ°ä¸²è¡Œç«¯å�£ã€‚其软件å��字“PuTTYâ€�没有特殊å�«ä¹‰ã€‚</p><p><img src="/img/remote/1460000042529012" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:MIT</li><li>æ“�作系统:Windows</li><li>官网:<a href="https://link.segmentfault.com/?enc=okWXwndH39rPAZsfxAEadw%3D%3D.t%2FwYNgISAE99TaUdhwLJBTjRRcrEQE9djGgD9Jyvit4%3D" rel="nofollow">https://www.puttylink.com/</a></li></ul><p>较早的版本仅支æŒ� Windows å¹³å�°ï¼Œå��陆续å¢�åŠ å¯¹å�„ç±» Unix å¹³å�°å’Œ Mac OS X 的支æŒ�。除了官方版本外,有许多第三方的团体或个人将 PuTTY ç§»æ¤�到其他平å�°ä¸Šï¼Œåƒ�是以 Symbian 为基础的移动电è¯�。</p><p>PuTTY 主è¦�由西蒙·泰瑟姆编写并维护,使用 MIT 许å�¯è¯�许å�¯ã€‚</p><h2>Windows Terminal</h2><p><img src="/img/remote/1460000042529013" alt="" title=""></p><p>Windows Teminal是一款新å¼�ã€�快速ã€�高效ã€�强大的终端应用程åº�,适用äº�命令行工具ã€�命令æ��示符ã€�PowerShellã€�WSL(Linuxå­�系统)等等的Shell用户,主è¦�功能包括多选项å�¡ã€�çª—æ ¼ã€�Unicode/UTF-8字符支æŒ�ã€�GPU åŠ é€Ÿæ–‡æœ¬æ¸²æŸ“å¼•æ“�,以å�Šè‡ªå®šä¹‰ä¸»é¢˜ã€�æ ·å¼�å’Œé…�置等等。</p><p><img src="/img/remote/1460000042529014" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:MIT</li><li>æ“�作系统:Windows</li><li>官网:<a href="https://link.segmentfault.com/?enc=Lh%2Bss%2BRPdXmMB3c5B31Dvw%3D%3D.0WxKRPD1M%2FpLo9AJ85yeAisYLfutNh5KvnAknp3oORlHSJ1OkiuilxQWQ0Fxh%2ByqoksVqGIOdIfT4Xze1BuiAw%3D%3D" rel="nofollow">https://learn.microsoft.com/e...</a></li></ul><h2>Tabby</h2><p>Tabby(以å‰�称为Terminus)是一个高度å�¯é…�置的终端模拟器ã€�SSH 和串行客户端,适用äº� Windowsã€�macOS å’Œ Linux。</p><p><img src="/img/remote/1460000042529015" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:MIT</li><li>æ“�作系统:跨平å�°</li><li>官网:<a href="https://link.segmentfault.com/?enc=75KOCiLWyTTbSLph8fBW1g%3D%3D.NV7F4VeJbhfPlJw1c1fj2ROtf54Kfk0lsD48vHg1AC0%3D" rel="nofollow">https://tabby.sh/</a></li></ul><h6>特点</h6><ul><li>集æˆ�çš„ SSH å’Œ Telnet 客户端和è¿�æ�¥ç®¡ç�†å™¨</li><li>集æˆ�串å�£ç»ˆç«¯</li><li>å�¯é…�置主题和é…�色方案</li><li>支æŒ�PowerShell(和 PS Core)ã€�WSLã€�Git-Bashã€�Cygwinã€�MSYS2ã€�Cmder å’Œ CMD</li><li>通过 Zmodem ä¸� SSH 会è¯�的直æ�¥è¿›è¡Œæ–‡ä»¶ä¼ è¾“ï¼ˆä¸Šä¼ /下载)</li><li>é��常的æµ�畅的界é�¢è¾“出</li><li>用äº� SSH 机密和é…�置的集æˆ�åŠ å¯†å®¹å™¨</li><li>SSHã€�SFTP å’Œ Telnet 客户端å�¯ç”¨ä½œWeb 应用程åº�</li></ul><p>更多相关介ç»�请å�‚考:<a href="https://link.segmentfault.com/?enc=Bhn6hWPJSXvWAcxYD28yGQ%3D%3D.mxjEVArghRYAfFDdjZflXHyzPqzChZZpSuk9UsS0v3RGcnT4ZqoLBiKxJ%2FvAC6rkdFxsc6LHwoVhx3gxiZaFkIig3Y5mM0P1XfbB7q27PW7gGdLPOsm9LT7waFL68lUVHZ53syjKhzyR9ltvFUp0lr6aiFEmLJUPRDJoBlzBBrnXo3aVLW3L3pGy2WZ1eyIea6sYRz%2FEeLilAXxDNucmQukEnwp07l%2BwjdTCt2UrMKcj3mWj78Avk9a1WY8ODXvVnqZqbkM2FVUpeGJuyPrj5PIpW1xEZu%2BJJRBSkEY4ktA%3D" rel="nofollow">æ�¨è��一个更ç�°ä»£çš„终端è¿�æ�¥å·¥å…·</a></p><h2>iTerm2</h2><p>iTerm2 是 Terminal 的替代å“�,也是 iTerm 的继任者。它适用äº�装有 macOS 10.14 或更高版本的 Mac。iTerm2 将终端带入ç�°ä»£æ—¶ä»£ï¼Œå…·æœ‰æ‚¨ä»�未知é�“您一直想è¦�的功能。</p><p><img src="/img/remote/1460000042529016" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:GPLv2</li><li>æ“�作系统:OS X</li><li>官网:<a href="https://link.segmentfault.com/?enc=%2F%2FPowp76VpEo%2BufnLoj3vA%3D%3D.LihGoEF0N4VmfPQlaIpi8wfNafRI%2BSdglp%2BrxraIBIQ%3D" rel="nofollow">https://iterm2.com/</a></li></ul><h2>Oh My Zsh</h2><p>Oh My Zsh 是一个令人愉快的ã€�å¼€æº�çš„ã€�社区驱动的框æ�¶ï¼Œç”¨äº�管ç�†æ‚¨çš„ Zsh é…�置。它æ�†ç»‘了数å�ƒä¸ªæœ‰ç”¨çš„功能ã€�助手ã€�æ�’ä»¶ã€�ä¸»é¢˜å’Œä¸€äº›è®©ä½ ç›´å‘¼å¥½ç”¨çš„ä¸œè¥¿ã€‚</p><p><img src="/img/remote/1460000042529017" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:MIT</li><li>æ“�作系统:Linux</li><li>官网:<a href="https://link.segmentfault.com/?enc=zZJV32KFmHdItu8RDPnkQA%3D%3D.02KM5MS3Z4rOhhVNFRrRQs94psde9VaAgqwNXGgbI24%3D" rel="nofollow">https://ohmyz.sh/</a></li></ul><h2>Zsh</h2><p>Zsh 是一个 Linux 下强大的 shell, ç”±äº�大多数 Linux 产å“�安装,以å�Šé»˜è®¤ä½¿ç”¨bash shell, 但是ä¸�毫ä¸�å½±å“�æ��客们对 zsh 的热衷, å‡ ä¹�æ¯�一款 Linux 产å“�都包å�«æœ‰ zsh,通常å�¯ä»¥ç”¨ apt-getã€�urpmi 或 yum 等包管ç�†å™¨è¿›è¡Œå®‰è£…。</p><p><img src="/img/remote/1460000042529018" alt="" title=""></p><ul><li>æ“�作系统:Linux</li><li>官网:<a href="https://link.segmentfault.com/?enc=MvXECRBmQ2FHkVR%2BW1euHQ%3D%3D.hXE5Bm1bCwNnO5HlfI2mH6SkmjWGu2GbNhzx5a%2FRVCuO85JwDfnIzJYN48cEVxDI" rel="nofollow">https://github.com/robbyrusse...</a></li></ul><h2>PowerShell</h2><p>PowerShell 是一个跨平å�°çš„ (Windows, Linux å’Œ OS X) 自动化和é…�置工具(框æ�¶ï¼‰ï¼Œå�¯ä»¥å’Œå·²æœ‰çš„工具å�‹å¥½é›†æˆ�,特别优化用äº�处ç�†ç»“æ�„化数æ�® (如 JSON, CSV, XML ç­‰), REST APIs 以å�Šå¯¹è±¡æ¨¡å�‹ã€‚它包å�«ä¸€ä¸ªå‘½ä»¤è¡Œ Shellã€�一个关è�”的脚本语言以å�Šä¸€ä¸ªç”¨äº�处ç�† cmdlets 的框æ�¶ã€‚PowerShell 就相当äº� Linux 下的 Bash 以å�Š Shell 脚本编程语言。</p><p><img src="/img/remote/1460000042529019" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:MIT</li><li>æ“�作系统:跨平å�°</li><li>项目地å�€ï¼š<a href="https://link.segmentfault.com/?enc=jVrjD8%2B1EhizC27o9uuQJg%3D%3D.07BgdhQ5vYu%2BHXnTV4Xxyyv8a6xgM3lnIuX3bmUJJI%2Bn3M3wKfKfWemXnbMPfzCg" rel="nofollow">https://docs.microsoft.com/zh...</a></li></ul><h6>PowerShell ä¸� Bash 的对比</h6><p><img src="/img/remote/1460000042529020" alt="" title=""></p><h2>Starship Shell</h2><p>Starship 是一个用 Rust 编写的开æº�项目,适用äº�最常è§�æ“�作系统上最常è§�çš„ shell。带æ�¥ Rust 一æµ�的速度和安全性,让您的æ��示尽å�¯èƒ½å¿«é€Ÿå’Œå�¯é� 。å�¯ä»¥æ ¹æ�®æ‚¨çš„喜好进行定制,以使此æ��示尽å�¯èƒ½å°‘或功能丰富。</p><p><img src="/img/remote/1460000042529021" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:ISC</li><li>æ“�作系统:跨平å�°</li><li>项目地å�€ï¼š<a href="https://link.segmentfault.com/?enc=qCJDuJWGqW%2FjoeC5VtEd0w%3D%3D.wVOWiwpkuGdQL0ctwWtMSdlV%2BgwTc1yMCr4DUIxzhMM%3D" rel="nofollow">https://starship.rs/</a></li></ul><h2>fish</h2><p><img src="/img/remote/1460000042529022" alt="" title=""></p><p>Fish 是“the friendly interactive shellâ€�的简称,fish最大的特点就是功能强大,智能并且用户å�‹å¥½ã€‚Fish支æŒ�è¯­æ³•é«˜äº®ï¼Œè‡ªåŠ¨å»ºè®®ï¼Œæ ‡ç­¾å®Œæˆ�等,而且é…�ç½®å��分简å�•。</p><ul><li>æ�ˆæ�ƒå��议:GPLv2</li><li>æ“�作系统:Linux</li><li>官网:<a href="https://link.segmentfault.com/?enc=NTE5DAl07D8%2B2NxnEwPe5Q%3D%3D.Ti3n79RiAJLsg4Tk8UjB481Jn3%2FLPoLBs42v47G7Ay8%3D" rel="nofollow">https://fishshell.com/</a></li></ul><p>如æ�œä½ 想拥有一个方便好用的 Shell,å�ˆä¸�æƒ³å­¦ä¹ ä¸€å¤§å †è¯­æ³•ï¼Œæˆ–è€…èŠ±è´¹å¾ˆå¤šæ—¶é—´é…�ç½®ï¼Œé‚£ä¹ˆä½ ä¸€å®šè¦�å°�试一下 Fish。</p><h2>Konsole</h2><p>功能强大且å�¯è‡ªå®šä¹‰çš„终端工具。Konsole 还集æˆ�到多个其他 KDE 应用程åº�中,使其更容易访问和更方便。例如,KDevelopã€�Kate å’Œ Dolphin 都使用 Konsole 作为集æˆ�终端工具。</p><p><img src="/img/remote/1460000042529023" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:GPL</li><li>æ“�作系统:Linux</li><li>官网:<a href="https://link.segmentfault.com/?enc=k0UeIq%2BUenuHCbECVn%2BQbA%3D%3D.xeMOHZqhPBgsn77c9wr56IphYrQUfFQ6rj%2FPasA1g%2Fg%3D" rel="nofollow">https://konsole.kde.org/</a></li></ul><h6>使用截图</h6><p><img src="/img/remote/1460000042529024" alt="" title=""><br><img src="/img/remote/1460000042529025" alt="" title=""></p><h2>Hyper</h2><p>hyper 是一款基äº� Web 技术å®�ç�°çš„一款命令行终端工具。</p><p><img src="/img/remote/1460000042529026" alt="" title=""></p><ul><li>æ�ˆæ�ƒå��议:MIT</li><li>æ“�作系统:跨平å�°</li><li>官网:<a href="https://link.segmentfault.com/?enc=KMACGBdPbXEFf4V4msBf3w%3D%3D.BKjCM3FO8mAyz7%2BKU3ndBOe3RtJWlaKj161tbZj4Db8%3D" rel="nofollow">https://hyper.is/</a></li></ul><p>工具对äº�个人æ�¥è¯´ï¼Œå�ªæœ‰æœ€å�ˆé€‚çš„ï¼Œæ²¡æœ‰æœ€å¥½çš„ï¼Œå¤§å®¶æŒ‰è‡ªå·±çš„ä½¿ç”¨ä¹ æƒ¯å�Šéœ€æ±‚æ�¥é€‰æ‹©ã€‚</p> 最详细的 K8S 高å�¯ç”¨éƒ¨ç½²æµ�程ï¼�步骤é½�全,少走å�‘è·¯ https://segmentfault.com/a/1190000042458864 2022-09-11T21:30:31+08:00 2022-09-11T21:30:31+08:00 民工哥 https://segmentfault.com/u/jishuroad 5 <p>官网:<a href="https://link.segmentfault.com/?enc=HEvAIU8sl7N0Q7triBnyzQ%3D%3D.RThjGe3CsbRaJZ%2FPgd1MEjeZhxh0i7mh2y7oxCp0K6Q%3D" rel="nofollow">https://kubernetes.io/</a></p><p>文档:<a href="https://link.segmentfault.com/?enc=StbY5dJDXuzSU%2FBFOic%2FEA%3D%3D.oBL%2F6gQf2T7h28wfaJcWc0%2Fr74DBfxp8sosfYG34yY1%2F80ZlwvChjEM9PVWtt9L7" rel="nofollow">https://kubernetes.io/zh-cn/d...</a></p><p><img src="/img/remote/1460000042458866" alt="图片" title="图片"></p><h2>基础ç�¯å¢ƒéƒ¨ç½²</h2><h6>å‰�期准备(所有节点)</h6><p>1ã€�修改主机å��å’Œé…�ç½® hosts</p><p>先部署 1master å’Œ 2node 节点,å��é�¢å†�åŠ ä¸€ä¸ª master 节点</p><pre><code># 在192.168.0.113执行 hostnamectl set-hostname k8s-master-168-0-113 # 在192.168.0.114执行 hostnamectl set-hostname k8s-node1-168-0-114 # 在192.168.0.115执行 hostnamectl set-hostname k8s-node2-168-0-115</code></pre><p>é…�ç½® hosts</p><pre><code>cat &gt;&gt; /etc/hosts&lt;&lt;EOF 192.168.0.113 k8s-master-168-0-113 192.168.0.114 k8s-node1-168-0-114 192.168.0.115 k8s-node2-168-0-115 EOF</code></pre><p>2ã€�é…�ç½® ssh 互信</p><pre><code># ç›´æ�¥ä¸€ç›´å›�车就行 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master-168-0-113 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node1-168-0-114 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node2-168-0-115</code></pre><p>3ã€�æ—¶é—´å�Œæ­¥</p><pre><code>yum install chrony -y systemctl start chronyd systemctl enable chronyd chronyc sources</code></pre><p>4ã€�关闭防ç�«å¢™</p><pre><code>systemctl stop firewalld systemctl disable firewalld</code></pre><p>5ã€�关闭 swap</p><pre><code># 临时关闭;关闭swap主è¦�是为了性能考虑 swapoff -a # å�¯ä»¥é€šè¿‡è¿™ä¸ªå‘½ä»¤æŸ¥çœ‹swap是å�¦å…³é—­äº† free # 永久关闭 sed -ri 's/.*swap.*/#&amp;/' /etc/fstab</code></pre><p>6ã€�ç¦�用 SELinux</p><pre><code># 临时关闭 setenforce 0 # 永久ç¦�用 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config</code></pre><p>7ã€�å…�许 iptables 检查桥æ�¥æµ�é‡�(å�¯é€‰ï¼Œæ‰€æœ‰èŠ‚ç‚¹ï¼‰</p><pre><code>è‹¥è¦�显å¼�åŠ è½½æ­¤æ¨¡å�—,请è¿�行 sudo modprobe br_netfilter,通过è¿�行 lsmod | grep br_netfilter æ�¥éªŒè¯� br_netfilter 模å�—是å�¦å·²åŠ è½½ï¼Œ sudo modprobe br_netfilter lsmod | grep br_netfilter</code></pre><p>为了让 Linux 节点的 iptables 能够正确查看桥æ�¥æµ�é‡�,请确认 sysctl é…�置中的 net.bridge.bridge-nf-call-iptables 设置为 1。例如:</p><pre><code>cat &lt;&lt;EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置所需的 sysctl å�‚数,å�‚数在é‡�æ–°å�¯åЍå��ä¿�æŒ�ä¸�å�˜ cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 应用 sysctl å�‚数而ä¸�é‡�æ–°å�¯åЍ sudo sysctl --system</code></pre><h6>安装容器 docker(所有节点)</h6><p>æ��示:v1.24 之å‰�çš„ Kubernetes 版本包括ä¸� Docker Engine 的直æ�¥é›†æˆ�,使用å��为 dockershim 的组件。这ç§�特殊的直æ�¥æ•´å�ˆä¸�å†�是 Kubernetes 的一部分 ï¼ˆè¿™æ¬¡åˆ é™¤è¢«ä½œä¸º v1.20 å�‘è¡Œç‰ˆæœ¬çš„ä¸€éƒ¨åˆ†å®£å¸ƒï¼‰ã€‚ä½ å�¯ä»¥é˜…读检查 Dockershim 弃用是å�¦ä¼šå½±å“�ä½ ä»¥äº†è§£æ­¤åˆ é™¤å�¯èƒ½ä¼šå¦‚何影å“�ä½ ã€‚è¦�了解如何使用 dockershim 进行è¿�移,请å�‚阅ä»� dockershim è¿�移。</p><pre><code># é…�ç½®yumæº� cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/ # centos7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # centos8 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo # 安装yum-config-manageré…�置工具 yum -y install yum-utils # 设置yumæº� yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装docker-ce版本 yum install -y docker-ce # å�¯åЍ systemctl start docker # 开机自å�¯ systemctl enable docker # 查看版本å�· docker --version # 查看版本具体信æ�¯ docker version # Docker镜åƒ�æº�设置 # 修改文件 /etc/docker/daemon.json,没有这个文件就创建 # æ·»åŠ ä»¥ä¸‹å†…å®¹å��,é‡�å�¯dockeræœ�务: cat &gt;/etc/docker/daemon.json&lt;&lt;EOF { &quot;registry-mirrors&quot;: [&quot;http://hub-mirror.c.163.com&quot;] } EOF # åŠ è½½ systemctl reload docker # 查看 systemctl status docker containerd</code></pre><p>ã€�<strong>温馨æ��示</strong>】dockerd å®�际真å®�调用的还是 containerd çš„ api æ�¥å�£ï¼Œcontainerd 是 dockerd å’Œ runC 之间的一个中间交æµ�组件。所以å�¯åЍ docker æœ�务的时候,也会å�¯åЍ containerd æœ�务的。</p><h6>é…�ç½® k8s yum æº�(所有节点)</h6><pre><code>cat &gt; /etc/yum.repos.d/kubernetes.repo &lt;&lt; EOF [k8s] name=k8s enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ EOF</code></pre><h6>å°† sandbox\_image 镜åƒ�æº�设置为阿里云 google\_containers 镜åƒ�æº�(所有节点)</h6><pre><code># 导出默认é…�置,config.toml这个文件默认是ä¸�存在的 containerd config default &gt; /etc/containerd/config.toml grep sandbox_image /etc/containerd/config.toml sed -i &quot;s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g&quot; /etc/containerd/config.toml grep sandbox_image /etc/containerd/config.toml</code></pre><h6>é…�ç½® containerd cgroup 驱动程åº� systemd(所有节点)</h6><p>kubernets 自v 1.24.0 å��,就ä¸�å†�使用 docker.shim,替æ�¢é‡‡ç”¨ containerd 作为容器è¿�è¡Œæ—¶ç«¯ç‚¹ã€‚å› æ­¤éœ€è¦�安装 containerd(在 docker 的基础下安装),上é�¢å®‰è£… docker 的时候就自动安装了 containerd 了。这里的 docker å�ªæ˜¯ä½œä¸ºå®¢æˆ·ç«¯è€Œå·²ã€‚容器引æ“�还是 containerd。</p><pre><code>sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml # 应用所有更改å��,é‡�æ–°å�¯åЍcontainerd systemctl restart containerd</code></pre><h6>开始安装 kubeadm,kubelet å’Œ kubectl(master 节点)</h6><pre><code># ä¸�指定版本就是最新版本,当å‰�最新版就是1.24.1 yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes # disableexcludes=kubernetes:ç¦�æ�‰é™¤äº†è¿™ä¸ªkubernetes之外的别的仓库 # 设置为开机自å�¯å¹¶ç�°åœ¨ç«‹åˆ»å�¯åЍæœ�务 --now:立刻å�¯åЍæœ�务 systemctl enable --now kubelet # 查看状æ€�,这里需è¦�等待一段时间å†�查看æœ�务状æ€�,å�¯åŠ¨ä¼šæœ‰ç‚¹æ…¢ systemctl status kubelet</code></pre><p><img src="/img/remote/1460000042458867" alt="图片" title="图片"></p><p>查看日志,å�‘ç�°æœ‰æŠ¥é”™ï¼ŒæŠ¥é”™å¦‚下:</p><pre><code>kubelet.service: Main process exited, code=exited, status=1/FAILURE kubelet.service: Failed with result 'exit-code'.</code></pre><p><img src="/img/remote/1460000042458868" alt="图片" title="图片"></p><p>ã€�<strong>解释</strong>】é‡�新安装(或第一次安装)k8s,未ç»�过 kubeadm init 或者 kubeadm join å��,kubelet 会ä¸�æ–­é‡�å�¯ï¼Œè¿™ä¸ªæ˜¯æ­£å¸¸ç�°è±¡â€¦â€¦ï¼Œæ‰§è¡Œ init 或 join å��问题会自动解决,对此官网有如下æ��述,也就是此时ä¸�用ç�†ä¼š kubelet.service。</p><p>查看版本</p><pre><code>kubectl version yum info kubeadm</code></pre><p><img src="/img/remote/1460000042458869" alt="图片" title="图片"></p><h6>使用 kubeadm åˆ�始化集群(master 节点)</h6><p>最好æ��å‰�把镜åƒ�ä¸‹è½½å¥½ï¼Œè¿™æ ·å®‰è£…å¿«</p><pre><code>docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.1 docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.1 docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.1 docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.24.1 docker pull registry.aliyuncs.com/google_containers/pause:3.7 docker pull registry.aliyuncs.com/google_containers/etcd:3.5.3-0 docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6</code></pre><p>集群åˆ�始化</p><pre><code>kubeadm init \ --apiserver-advertise-address=192.168.0.113 \ --image-repository registry.aliyuncs.com/google_containers \ --control-plane-endpoint=cluster-endpoint \ --kubernetes-version v1.24.1 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 \ --v=5 # –image-repository string: 这个用äº�指定ä»�什么ä½�ç½®æ�¥æ‹‰å�–镜åƒ�(1.13版本æ‰�有的),默认值是k8s.gcr.io,我们将其指定为国内镜åƒ�地å�€ï¼šregistry.aliyuncs.com/google_containers # –kubernetes-version string: 指定kubenets版本å�·ï¼Œé»˜è®¤å€¼æ˜¯stable-1,会导致ä»�https://dl.k8s.io/release/stable-1.txt下载最新的版本å�·ï¼Œæˆ‘们å�¯ä»¥å°†å…¶æŒ‡å®šä¸ºå›ºå®šç‰ˆæœ¬ï¼ˆv1.22.1)æ�¥è·³è¿‡ç½‘络请求。 # –apiserver-advertise-address 指æ˜�用 Master 的哪个 interface ä¸� Cluster 的其他节点通信。如æ�œ Master 有多个 interface,建议æ˜�确指定,如æ�œä¸�指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更æ�¢ã€‚ # –pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支æŒ�多ç§�网络方案,而且ä¸�å�Œç½‘络方案对 –pod-network-cidr有自己的è¦�求,这里设置为10.244.0.0/16 æ˜¯å› ä¸ºæˆ‘ä»¬å°†ä½¿ç”¨ flannel 网络方案,必须设置æˆ�这个 CIDR。 # --control-plane-endpoint cluster-endpoint æ˜¯æ˜ å°„åˆ°è¯¥ IP 的自定义 DNS å��称,这里é…�ç½®hostsæ˜ å°„ï¼š192.168.0.113 cluster-endpoint。 这将å…�è®¸ä½ å°† --control-plane-endpoint=cluster-endpoint ä¼ é€’ç»™ kubeadm init,并将相å�Œçš„ DNS å��ç§°ä¼ é€’ç»™ kubeadm join。 ç¨�å��ä½ å�¯ä»¥ä¿®æ”¹ cluster-endpoint 以指å�‘高å�¯ç”¨æ€§æ–¹æ¡ˆä¸­çš„è´Ÿè½½å�‡è¡¡å™¨çš„地å�€ã€‚</code></pre><p>ã€�<strong>温馨æ��示</strong>】kubeadm ä¸�支æŒ�将没有 --control-plane-endpoint å�‚æ•°çš„å�•个æ�§åˆ¶å¹³é�¢é›†ç¾¤è½¬æ�¢ä¸ºé«˜å�¯ç”¨æ€§é›†ç¾¤ã€‚</p><p>é‡�ç½®å†�åˆ�始化</p><pre><code>kubeadm reset rm -fr ~/.kube/ /etc/kubernetes/* var/lib/etcd/* kubeadm init \ --apiserver-advertise-address=192.168.0.113 \ --image-repository registry.aliyuncs.com/google_containers \ --control-plane-endpoint=cluster-endpoint \ --kubernetes-version v1.24.1 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 \ --v=5 # –image-repository string: 这个用äº�指定ä»�什么ä½�ç½®æ�¥æ‹‰å�–镜åƒ�(1.13版本æ‰�有的),默认值是k8s.gcr.io,我们将其指定为国内镜åƒ�地å�€ï¼šregistry.aliyuncs.com/google_containers # –kubernetes-version string: 指定kubenets版本å�·ï¼Œé»˜è®¤å€¼æ˜¯stable-1,会导致ä»�https://dl.k8s.io/release/stable-1.txt下载最新的版本å�·ï¼Œæˆ‘们å�¯ä»¥å°†å…¶æŒ‡å®šä¸ºå›ºå®šç‰ˆæœ¬ï¼ˆv1.22.1)æ�¥è·³è¿‡ç½‘络请求。 # –apiserver-advertise-address 指æ˜�用 Master 的哪个 interface ä¸� Cluster 的其他节点通信。如æ�œ Master 有多个 interface,建议æ˜�确指定,如æ�œä¸�指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更æ�¢ã€‚ # –pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支æŒ�多ç§�网络方案,而且ä¸�å�Œç½‘络方案对 –pod-network-cidr有自己的è¦�求,这里设置为10.244.0.0/16 æ˜¯å› ä¸ºæˆ‘ä»¬å°†ä½¿ç”¨ flannel 网络方案,必须设置æˆ�这个 CIDR。 # --control-plane-endpoint cluster-endpoint æ˜¯æ˜ å°„åˆ°è¯¥ IP 的自定义 DNS å��称,这里é…�ç½®hostsæ˜ å°„ï¼š192.168.0.113 cluster-endpoint。 这将å…�è®¸ä½ å°† --control-plane-endpoint=cluster-endpoint ä¼ é€’ç»™ kubeadm init,并将相å�Œçš„ DNS å��ç§°ä¼ é€’ç»™ kubeadm join。 ç¨�å��ä½ å�¯ä»¥ä¿®æ”¹ cluster-endpoint 以指å�‘高å�¯ç”¨æ€§æ–¹æ¡ˆä¸­çš„è´Ÿè½½å�‡è¡¡å™¨çš„地å�€ã€‚</code></pre><p>é…�ç½®ç�¯å¢ƒå�˜é‡�</p><pre><code>mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 临时生效(退出当å‰�窗å�£é‡�è¿�ç�¯å¢ƒå�˜é‡�失效) export KUBECONFIG=/etc/kubernetes/admin.conf # 永久生效(æ�¨è��) echo &quot;export KUBECONFIG=/etc/kubernetes/admin.conf&quot; &gt;&gt; ~/.bash_profile source ~/.bash_profile</code></pre><p><img src="/img/remote/1460000042458870" alt="图片" title="图片"></p><p>å�‘ç�°èŠ‚ç‚¹è¿˜æ˜¯æœ‰é—®é¢˜ï¼ŒæŸ¥çœ‹æ—¥å¿— /var/log/messages</p><pre><code>&quot;Container runtime network not ready&quot; networkReady=&quot;NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized&quot;</code></pre><p><img src="/img/remote/1460000042458871" alt="图片" title="图片"></p><p>æ�¥ä¸‹æ�¥å°±æ˜¯å®‰è£… Pod 网络æ�’ä»¶</p><h6>安装 Pod 网络æ�’件(CNI:Container Network Interface)(master)</h6><p>ä½ å¿…é¡»éƒ¨ç½²ä¸€ä¸ªåŸºäº� Pod 网络æ�’ä»¶çš„ 容器网络æ�¥å�£ (CNI)ï¼Œä»¥ä¾¿ä½ çš„ Pod å�¯ä»¥ç›¸äº’通信。</p><pre><code># 最好æ��å‰�下载镜åƒ�(所有节点) docker pull quay.io/coreos/flannel:v0.14.0 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml</code></pre><p>如æ�œä¸Šé�¢å®‰è£…失败,则下载å��离线安装</p><p>å†�查看 node 节点,就已ç»�正常了<img src="/img/remote/1460000042458872" alt="图片" title="图片"></p><h6>node èŠ‚ç‚¹åŠ å…¥ k8s 集群</h6><p>先安装 kubelet</p><pre><code>yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 设置为开机自å�¯å¹¶ç�°åœ¨ç«‹åˆ»å�¯åЍæœ�务 --now:立刻å�¯åЍæœ�务 systemctl enable --now kubelet systemctl status kubelet</code></pre><p>如æ�œæ²¡æœ‰ä»¤ç‰Œï¼Œå�¯ä»¥é€šè¿‡åœ¨æ�§åˆ¶å¹³é�¢èŠ‚ç‚¹ä¸Šè¿�行以下命令æ�¥è�·å�–令牌:</p><pre><code>kubeadm token list</code></pre><p>默认情况下,令牌会在24å°�æ—¶å��过期。如æ�œè¦�在当å‰�令牌过期å��å°†èŠ‚ç‚¹åŠ å…¥é›†ç¾¤ï¼Œ 则å�¯ä»¥é€šè¿‡åœ¨æ�§åˆ¶å¹³é�¢èŠ‚ç‚¹ä¸Šè¿�行以下命令æ�¥åˆ›å»ºæ–°ä»¤ç‰Œï¼š</p><pre><code>kubeadm token create # å†�查看 kubeadm token list</code></pre><p>如æ�œä½ 没有 <code>–discovery-token-ca-cert-hash</code> 的值,则å�¯ä»¥é€šè¿‡åœ¨æ�§åˆ¶å¹³é�¢èŠ‚ç‚¹ä¸Šæ‰§è¡Œä»¥ä¸‹å‘½ä»¤é“¾æ�¥è�·å�–它:</p><pre><code>openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2&gt;/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'</code></pre><p>如æ�œæ‰§è¡Œ <code>kubeadm init</code> æ—¶æ²¡æœ‰è®°å½•ä¸‹åŠ å…¥é›†ç¾¤çš„å‘½ä»¤ï¼Œå�¯ä»¥é€šè¿‡ä»¥ä¸‹å‘½ä»¤é‡�新创建(æ�¨è��)一般ä¸�用上é�¢çš„分别è�·å�– token å’Œ ca-cert-hash æ–¹å¼�,执行以下命令一气呵æˆ�:</p><pre><code>kubeadm token create --print-join-command</code></pre><p>这里需è¦�等待一段时间,å†�查看节点节点状æ€�ï¼Œå› ä¸ºéœ€è¦�安装 kube-proxy å’Œ flannel。</p><pre><code>kubectl get pods -A kubectl get nodes</code></pre><p><img src="/img/remote/1460000042458873" alt="图片" title="图片"></p><h6>é…�ç½® IPVS</h6><p>ã€�é—®é¢˜ã€‘é›†ç¾¤å†…æ— æ³• ping 通 ClusterIP(或 ServiceName)</p><p>1ã€�åŠ è½½ ip_vs ç›¸å…³å†…æ ¸æ¨¡å�—</p><pre><code>modprobe -- ip_vs modprobe -- ip_vs_sh modprobe -- ip_vs_rr modprobe -- ip_vs_wrr</code></pre><p>所有节点验è¯�å¼€å�¯äº† ipvs:</p><pre><code>lsmod |grep ip_vs</code></pre><p>2ã€�安装 ipvsadm 工具</p><pre><code>yum install ipset ipvsadm -y</code></pre><p>3ã€�编辑 kube-proxy é…�置文件,mode 修改æˆ� ipvs</p><pre><code>kubectl edit  configmap -n kube-system  kube-proxy</code></pre><p><img src="/img/remote/1460000042458874" alt="图片" title="图片"></p><p>4ã€�é‡�å�¯ kube-proxy</p><pre><code># 先查看 kubectl get pod -n kube-system | grep kube-proxy # å†�delete让它自拉起 kubectl get pod -n kube-system | grep kube-proxy |awk '{system(&quot;kubectl delete pod &quot;$1&quot; -n kube-system&quot;)}' # å†�查看 kubectl get pod -n kube-system | grep kube-proxy</code></pre><p><img src="/img/remote/1460000042458875" alt="图片" title="图片"></p><p>5ã€�查看 ipvs 转å�‘规则</p><pre><code>ipvsadm -Ln</code></pre><p><img src="/img/remote/1460000042458876" alt="图片" title="图片"></p><h6>集群高å�¯ç”¨é…�ç½®</h6><p>é…�置高å�¯ç”¨ï¼ˆHA)Kubernetes 集群å®�ç�°çš„<code>两ç§�方案</code>:</p><ul><li>ä½¿ç”¨å †å� (stacked)æ�§åˆ¶å¹³é�¢èŠ‚ç‚¹ï¼Œå…¶ä¸­ etcd 节点ä¸�æ�§åˆ¶å¹³é�¢èŠ‚ç‚¹å…±å­˜ï¼ˆæœ¬ç« ä½¿ç”¨ï¼‰ï¼Œæ�¶æ�„图如下:</li></ul><p><img src="/img/remote/1460000042458877" alt="图片" title="图片"></p><ul><li>使用外部 etcd 节点,其中 etcd 在ä¸�æ�§åˆ¶å¹³é�¢ä¸�å�Œçš„节点上è¿�行,æ�¶æ�„图如下:</li></ul><p><img src="/img/remote/1460000042458878" alt="图片" title="图片"></p><p>这里新å¢�一å�°æœºå™¨ä½œä¸ºå�¦å¤–一个 master 节点:192.168.0.116 é…�置跟上é�¢ master èŠ‚ç‚¹ä¸€æ ·ã€‚å�ªæ˜¯ä¸�需è¦�最å��一步åˆ�始化了。</p><p>1ã€�修改主机å��å’Œé…�ç½® hosts</p><p>所有节点都统一如下é…�置:</p><pre><code># 在192.168.0.113执行 hostnamectl set-hostname  k8s-master-168-0-113 # 在192.168.0.114执行 hostnamectl set-hostname k8s-node1-168-0-114 # 在192.168.0.115执行 hostnamectl set-hostname k8s-node2-168-0-115 # 在192.168.0.116执行 hostnamectl set-hostname k8s-master2-168-0-116</code></pre><p>é…�ç½® hosts</p><pre><code>cat &gt;&gt; /etc/hosts&lt;&lt;EOF 192.168.0.113 k8s-master-168-0-113 cluster-endpoint 192.168.0.114 k8s-node1-168-0-114 192.168.0.115 k8s-node2-168-0-115 192.168.0.116 k8s-master2-168-0-116 EOF</code></pre><p>2ã€�é…�ç½® ssh 互信</p><pre><code># 直æ�¥ä¸€ç›´å›�车就行 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master-168-0-113 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node1-168-0-114 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node2-168-0-115 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master2-168-0-116</code></pre><p>3ã€�æ—¶é—´å�Œæ­¥</p><pre><code>yum install chrony -y systemctl start chronyd systemctl enable chronyd chronyc sources</code></pre><p>4ã€�关闭防ç�«å¢™</p><pre><code>systemctl stop firewalld systemctl disable firewalld</code></pre><p>5ã€�关闭 swap</p><pre><code># 临时关闭;关闭swap主è¦�是为了性能考虑 swapoff -a # å�¯ä»¥é€šè¿‡è¿™ä¸ªå‘½ä»¤æŸ¥çœ‹swap是å�¦å…³é—­äº† free # 永久关闭 sed -ri 's/.*swap.*/#&amp;/' /etc/fstab</code></pre><p>6ã€�ç¦�用 SELinux</p><pre><code># 临时关闭 setenforce 0 # 永久ç¦�用 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config</code></pre><p>7ã€�å…�许 iptables 检查桥æ�¥æµ�é‡�(å�¯é€‰ï¼Œæ‰€æœ‰èŠ‚ç‚¹ï¼‰</p><p>è‹¥è¦�显å¼�åŠ è½½æ­¤æ¨¡å�—,请è¿�行 <code>sudo modprobe br_netfilter</code>,通过è¿�行 <code>lsmod | grep br_netfilter</code> æ�¥éªŒè¯� br_netfilter 模å�—是å�¦å·²åŠ è½½ï¼Œ</p><pre><code>sudo modprobe br_netfilter lsmod | grep br_netfilter</code></pre><p>为了让 Linux 节点的 iptables 能够正确查看桥æ�¥æµ�é‡�,请确认 sysctl é…�置中的 <code>net.bridge.bridge-nf-call-iptables</code> 设置为<code>1</code>。例如:</p><pre><code>cat &lt;&lt;EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置所需的 sysctl å�‚数,å�‚数在é‡�æ–°å�¯åЍå��ä¿�æŒ�ä¸�å�˜ cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 应用 sysctl å�‚数而ä¸�é‡�æ–°å�¯åЍ sudo sysctl --system</code></pre><p>8ã€�安装容器 docker(所有节点)</p><p>æ��示:v1.24 之å‰�çš„ Kubernetes 版本包括ä¸� Docker Engine 的直æ�¥é›†æˆ�,使用å��为 dockershim 的组件。这ç§�特殊的直æ�¥æ•´å�ˆä¸�å†�是 Kubernetes 的一部分 ï¼ˆè¿™æ¬¡åˆ é™¤è¢«ä½œä¸º v1.20 å�‘è¡Œç‰ˆæœ¬çš„ä¸€éƒ¨åˆ†å®£å¸ƒï¼‰ã€‚ä½ å�¯ä»¥é˜…读检查 Dockershim 弃用是å�¦ä¼šå½±å“�ä½ ä»¥äº†è§£æ­¤åˆ é™¤å�¯èƒ½ä¼šå¦‚何影å“�ä½ ã€‚è¦�了解如何使用 dockershim 进行è¿�移,请å�‚阅ä»� dockershim è¿�移。</p><pre><code># é…�ç½®yumæº� cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/ # centos7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # centos8 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo # 安装yum-config-manageré…�置工具 yum -y install yum-utils # 设置yumæº� yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装docker-ce版本 yum install -y docker-ce # å�¯åЍ systemctl start docker # 开机自å�¯ systemctl enable docker # 查看版本å�· docker --version # 查看版本具体信æ�¯ docker version # Docker镜åƒ�æº�设置 # 修改文件 /etc/docker/daemon.json,没有这个文件就创建 # æ·»åŠ ä»¥ä¸‹å†…å®¹å��,é‡�å�¯dockeræœ�务: cat &gt;/etc/docker/daemon.json&lt;&lt;EOF { &quot;registry-mirrors&quot;: [&quot;http://hub-mirror.c.163.com&quot;] } EOF # åŠ è½½ systemctl reload docker # 查看 systemctl status docker containerd</code></pre><p>ã€�<strong>温馨æ��示</strong>】dockerd å®�际真å®�调用的还是 containerd çš„ api æ�¥å�£ï¼Œcontainerd 是 dockerd å’Œ runC 之间的一个中间交æµ�组件。所以å�¯åЍ docker æœ�务的时候,也会å�¯åЍ containerd æœ�务的。</p><p>9ã€�é…�ç½® k8s yum æº�(所有节点)</p><pre><code>cat &gt; /etc/yum.repos.d/kubernetes.repo &lt;&lt; EOF [k8s] name=k8s enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ EOF</code></pre><p>10ã€�å°† sandbox_image 镜åƒ�æº�设置为阿里云 google_containers 镜åƒ�æº�(所有节点)</p><pre><code># 导出默认é…�置,config.toml这个文件默认是ä¸�存在的 containerd config default &gt; /etc/containerd/config.toml grep sandbox_image /etc/containerd/config.toml sed -i &quot;s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g&quot; /etc/containerd/config.toml grep sandbox_image /etc/containerd/config.toml</code></pre><p><img src="/img/remote/1460000042458879" alt="图片" title="图片"></p><p>11ã€�é…�ç½® containerd cgroup 驱动程åº� systemd</p><p>kubernets 自v 1.24.0 å��,就ä¸�å†�使用 docker.shim,替æ�¢é‡‡ç”¨ containerd 作为容器è¿�è¡Œæ—¶ç«¯ç‚¹ã€‚å› æ­¤éœ€è¦�安装 containerd(在 docker 的基础下安装),上é�¢å®‰è£… docker 的时候就自动安装了 containerd 了。这里的 docker å�ªæ˜¯ä½œä¸ºå®¢æˆ·ç«¯è€Œå·²ã€‚容器引æ“�还是 containerd。</p><pre><code>sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml # 应用所有更改å��,é‡�æ–°å�¯åЍcontainerd systemctl restart containerd 11ã€�开始安装 kubeadm,kubelet å’Œ kubectl(master 节点) # ä¸�指定版本就是最新版本,当å‰�最新版就是1.24.1 yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes # disableexcludes=kubernetes:ç¦�æ�‰é™¤äº†è¿™ä¸ªkubernetes之外的别的仓库 # 设置为开机自å�¯å¹¶ç�°åœ¨ç«‹åˆ»å�¯åЍæœ�务 --now:立刻å�¯åЍæœ�务 systemctl enable --now kubelet # 查看状æ€�,这里需è¦�等待一段时间å†�查看æœ�务状æ€�,å�¯åŠ¨ä¼šæœ‰ç‚¹æ…¢ systemctl status kubelet # 查看版本 kubectl version yum info kubeadm</code></pre><p>12ã€�åŠ å…¥ k8s 集群</p><pre><code># è¯�如æ�œè¿‡æœŸäº†ï¼Œå�¯ä»¥ä½¿ç”¨ä¸‹é�¢å‘½ä»¤ç”Ÿæˆ�æ–°è¯�ä¹¦ä¸Šä¼ ï¼Œè¿™é‡Œä¼šæ‰“å�°å‡ºcertificate key,å��é�¢ä¼šç”¨åˆ° kubeadm init phase upload-certs --upload-certs # ä½ è¿˜å�¯ä»¥åœ¨ ã€�init】期间指定自定义的 --certificate-key,以å��å�¯ä»¥ç”± join 使用。 è¦�生æˆ�è¿™æ ·çš„å¯†é’¥ï¼Œå�¯ä»¥ä½¿ç”¨ä»¥ä¸‹å‘½ä»¤ï¼ˆè¿™é‡Œä¸�执行,就用上é�¢é‚£ä¸ªè‡ªå‘½ä»¤å°±å�¯ä»¥äº†ï¼‰ï¼š kubeadm certs certificate-key kubeadm token create --print-join-command kubeadm join cluster-endpoint:6443 --token wswrfw.fc81au4yvy6ovmhh --discovery-token-ca-cert-hash sha256:43a3924c25104d4393462105639f6a02b8ce284728775ef9f9c30eed8e0abc0f --control-plane --certificate-key 8d2709697403b74e35d05a420bd2c19fd8c11914eb45f2ff22937b245bed5b68 # --control-plane æ ‡å¿—é€šçŸ¥ kubeadm join 创建一个新的æ�§åˆ¶å¹³é�¢ã€‚åŠ å…¥masterå¿…é¡»åŠ è¿™ä¸ªæ ‡è®° # --certificate-key ... 将导致ä»�集群中的 kubeadm-certs Secret 下载æ�§åˆ¶å¹³é�¢è¯�书并使用给定的密钥进行解密。这里的值就是上é�¢è¿™ä¸ªå‘½ä»¤ï¼ˆkubeadm init phase upload-certs --upload-certs)打å�°å‡ºçš„key。</code></pre><p><img src="/img/remote/1460000042458880" alt="图片" title="图片"></p><p>æ ¹æ�®æ��示执行如下命令:</p><pre><code>mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config</code></pre><p>查看</p><pre><code>kubectl get nodes kubectl get pods -A -owide</code></pre><p><img src="/img/remote/1460000042458881" alt="图片" title="图片"></p><p>虽然ç�°åœ¨å·²ç»�有两个 master 了,但是对外还是å�ªèƒ½æœ‰ä¸€ä¸ªå…¥å�£çš„,所以还得è¦�一个负载å�‡è¡¡å™¨ï¼Œå¦‚æ�œä¸€ä¸ª master 挂了,会自动切到å�¦å¤–一个 master 节点。</p><h6>部署 Nginx+Keepalived 高å�¯ç”¨è´Ÿè½½å�‡è¡¡å™¨</h6><p><img src="/img/remote/1460000042458882" alt="图片" title="图片"></p><p>1ã€�安装 Nginx å’Œ Keepalived</p><pre><code># 在两个master节点上执行 yum install nginx keepalived -y</code></pre><p>2ã€�Nginx é…�ç½®</p><p>在两个 master 节点é…�ç½®</p><pre><code>cat &gt; /etc/nginx/nginx.conf &lt;&lt; &quot;EOF&quot; user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } # 四层负载å�‡è¡¡ï¼Œä¸ºä¸¤å�°Master apiserver组件æ��供负载å�‡è¡¡ stream { log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent'; access_log /var/log/nginx/k8s-access.log main; upstream k8s-apiserver { # Master APISERVER IP:PORT server 192.168.0.113:6443; # Master2 APISERVER IP:PORT server 192.168.0.116:6443; } server { listen 16443; proxy_pass k8s-apiserver; } } http { log_format main '$remote_addr - $remote_user [$time_local] &quot;$request&quot; ' '$status $body_bytes_sent &quot;$http_referer&quot; ' '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80 default_server; server_name _; location / { } } } EOF</code></pre><p>ã€�<strong>温馨æ��示</strong>】如æ�œå�ªä¿�è¯�高å�¯ç”¨ï¼Œä¸�é…�ç½® k8s-apiserver è´Ÿè½½å�‡è¡¡çš„è¯�,å�¯ä»¥ä¸�装 nginx,但是最好还是é…�置一下 k8s-apiserver è´Ÿè½½å�‡è¡¡ã€‚</p><p>3ã€�Keepalived é…�置(master)</p><pre><code>cat &gt; /etc/keepalived/keepalived.conf &lt;&lt; EOF global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from fage@qq.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER } vrrp_script check_nginx { script &quot;/etc/keepalived/check_nginx.sh&quot; } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 # VRRP 路由 IDå®�例,æ¯�个å®�例是唯一的 priority 100 # 优先级,备æœ�务器设置 90 advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1ç§’ authentication { auth_type PASS auth_pass 1111 } # 虚拟IP virtual_ipaddress { 192.168.0.120/24 } track_script { check_nginx } } EOF</code></pre><p>vrrp_script:指定检查 nginx 工作状æ€�è„šæœ¬ï¼ˆæ ¹æ�® nginx 状æ€�判断是å�¦æ•…障转移) virtual_ipaddress:虚拟 IP(VIP)</p><p>检查 nginx 状æ€�脚本:</p><pre><code>cat &gt; /etc/keepalived/check_nginx.sh &lt;&lt; &quot;EOF&quot; #!/bin/bash count=$(ps -ef |grep nginx |egrep -cv &quot;grep|$$&quot;) if [ &quot;$count&quot; -eq 0 ];then exit 1 else exit 0 fi EOF</code></pre><pre><code>chmod +x /etc/keepalived/check_nginx.sh</code></pre><p>4ã€�Keepalived é…�置(backup)</p><pre><code>cat &gt; /etc/keepalived/keepalived.conf &lt;&lt; EOF global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from fage@qq.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_BACKUP } vrrp_script check_nginx { script &quot;/etc/keepalived/check_nginx.sh&quot; } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 # VRRP 路由 IDå®�例,æ¯�个å®�例是唯一的 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.120/24 } track_script { check_nginx } } EOF</code></pre><p>检查 nginx 状æ€�脚本:</p><pre><code>cat &gt; /etc/keepalived/check_nginx.sh &lt;&lt; &quot;EOF&quot; #!/bin/bash count=$(ps -ef |grep nginx |egrep -cv &quot;grep|$$&quot;) if [ &quot;$count&quot; -eq 0 ];then exit 1 else exit 0 fi EOF</code></pre><pre><code>chmod +x /etc/keepalived/check_nginx.sh</code></pre><p>5ã€�å�¯åŠ¨å¹¶è®¾ç½®å¼€æœºå�¯åЍ</p><pre><code>systemctl daemon-reload systemctl restart nginx &amp;&amp; systemctl enable nginx &amp;&amp; systemctl status nginx systemctl restart keepalived &amp;&amp; systemctl enable keepalived &amp;&amp; systemctl status keepalived</code></pre><p>查看 VIP</p><pre><code>ip a</code></pre><p><img src="/img/remote/1460000042458883" alt="图片" title="图片"></p><p>6ã€�修改 hosts(所有节点)</p><p>å°† cluster-endpoint 之å‰�执行的 ip 修改执行ç�°åœ¨çš„ VIP</p><pre><code>192.168.0.113 k8s-master-168-0-113 192.168.0.114 k8s-node1-168-0-114 192.168.0.115 k8s-node2-168-0-115 192.168.0.116 k8s-master2-168-0-116 192.168.0.120 cluster-endpoint</code></pre><p>7ã€�测试验è¯�</p><p>查看版本(负载å�‡è¡¡æµ‹è¯•验è¯�)</p><pre><code>curl -k https://cluster-endpoint:16443/version</code></pre><p><img src="/img/remote/1460000042458884" alt="图片" title="图片"></p><p>高å�¯ç”¨æµ‹è¯•验è¯�,将 k8s-master-168-0-113 节点关机</p><pre><code>shutdown -h now curl -k https://cluster-endpoint:16443/version kubectl get nodes -A kubectl get pods -A</code></pre><p>ã€�<strong>温馨æ��示</strong>ã€‘å †å� 集群存在耦å�ˆå¤±è´¥çš„é£�险。如æ�œä¸€ä¸ªèŠ‚ç‚¹å�‘生故障,则 etcd æˆ�员和æ�§åˆ¶å¹³é�¢å®�例都将丢失, 并且冗余会å�—到影å“�ã€‚ä½ å�¯ä»¥é€šè¿‡æ·»åŠ æ›´å¤šæ�§åˆ¶å¹³é�¢èŠ‚ç‚¹æ�¥é™�ä½�æ­¤é£�险。</p><h2>k8s 管ç�†å¹³å�° dashboard ç�¯å¢ƒéƒ¨ç½²</h2><h6>dashboard 部署</h6><p>GitHub 地å�€ï¼š<a href="https://link.segmentfault.com/?enc=Cxi6TrjrSojND249XG2amg%3D%3D.vDE8dxmvlQw70ja4Q6g6gHQF8DaiHeaSdACvE38Z6mWW6rdMnWuoh1rtCb%2BZMam9" rel="nofollow">https://github.com/kubernetes...</a></p><pre><code>kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml kubectl get pods -n kubernetes-dashboard</code></pre><p>但是这个å�ªèƒ½å†…部访问,所以è¦�外部访问,è¦�么部署 ingress,è¦�么就是设置 service NodePort ç±»å�‹ã€‚这里选择 service 暴露端å�£ã€‚</p><pre><code>wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml</code></pre><p>修改å��的内容如下:</p><pre><code># Copyright 2017 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an &quot;AS IS&quot; BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. apiVersion: v1 kind: Namespace metadata: name: kubernetes-dashboard --- apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard --- kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 31443 selector: k8s-app: kubernetes-dashboard --- apiVersion: v1 kind: Secret metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard-certs namespace: kubernetes-dashboard type: Opaque --- apiVersion: v1 kind: Secret metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard-csrf namespace: kubernetes-dashboard type: Opaque data: csrf: &quot;&quot; --- apiVersion: v1 kind: Secret metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard-key-holder namespace: kubernetes-dashboard type: Opaque --- kind: ConfigMap apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard-settings namespace: kubernetes-dashboard --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard rules: # Allow Dashboard to get, update and delete Dashboard exclusive secrets. - apiGroups: [&quot;&quot;] resources: [&quot;secrets&quot;] resourceNames: [&quot;kubernetes-dashboard-key-holder&quot;, &quot;kubernetes-dashboard-certs&quot;, &quot;kubernetes-dashboard-csrf&quot;] verbs: [&quot;get&quot;, &quot;update&quot;, &quot;delete&quot;] # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map. - apiGroups: [&quot;&quot;] resources: [&quot;configmaps&quot;] resourceNames: [&quot;kubernetes-dashboard-settings&quot;] verbs: [&quot;get&quot;, &quot;update&quot;] # Allow Dashboard to get metrics. - apiGroups: [&quot;&quot;] resources: [&quot;services&quot;] resourceNames: [&quot;heapster&quot;, &quot;dashboard-metrics-scraper&quot;] verbs: [&quot;proxy&quot;] - apiGroups: [&quot;&quot;] resources: [&quot;services/proxy&quot;] resourceNames: [&quot;heapster&quot;, &quot;http:heapster:&quot;, &quot;https:heapster:&quot;, &quot;dashboard-metrics-scraper&quot;, &quot;http:dashboard-metrics-scraper&quot;] verbs: [&quot;get&quot;] --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard rules: # Allow Metrics Scraper to get metrics from the Metrics server - apiGroups: [&quot;metrics.k8s.io&quot;] resources: [&quot;pods&quot;, &quot;nodes&quot;] verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: kubernetes-dashboard subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubernetes-dashboard subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kubernetes-dashboard --- kind: Deployment apiVersion: apps/v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: kubernetes-dashboard template: metadata: labels: k8s-app: kubernetes-dashboard spec: securityContext: seccompProfile: type: RuntimeDefault containers: - name: kubernetes-dashboard image: kubernetesui/dashboard:v2.6.0 imagePullPolicy: Always ports: - containerPort: 8443 protocol: TCP args: - --auto-generate-certificates - --namespace=kubernetes-dashboard # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. # - --apiserver-host=http://my-address:port volumeMounts: - name: kubernetes-dashboard-certs mountPath: /certs # Create on-disk volume to store exec logs - mountPath: /tmp name: tmp-volume livenessProbe: httpGet: scheme: HTTPS path: / port: 8443 initialDelaySeconds: 30 timeoutSeconds: 30 securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1001 runAsGroup: 2001 volumes: - name: kubernetes-dashboard-certs secret: secretName: kubernetes-dashboard-certs - name: tmp-volume emptyDir: {} serviceAccountName: kubernetes-dashboard nodeSelector: &quot;kubernetes.io/os&quot;: linux # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule --- kind: Service apiVersion: v1 metadata: labels: k8s-app: dashboard-metrics-scraper name: dashboard-metrics-scraper namespace: kubernetes-dashboard spec: ports: - port: 8000 targetPort: 8000 selector: k8s-app: dashboard-metrics-scraper --- kind: Deployment apiVersion: apps/v1 metadata: labels: k8s-app: dashboard-metrics-scraper name: dashboard-metrics-scraper namespace: kubernetes-dashboard spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: dashboard-metrics-scraper template: metadata: labels: k8s-app: dashboard-metrics-scraper spec: securityContext: seccompProfile: type: RuntimeDefault containers: - name: dashboard-metrics-scraper image: kubernetesui/metrics-scraper:v1.0.8 ports: - containerPort: 8000 protocol: TCP livenessProbe: httpGet: scheme: HTTP path: / port: 8000 initialDelaySeconds: 30 timeoutSeconds: 30 volumeMounts: - mountPath: /tmp name: tmp-volume securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1001 runAsGroup: 2001 serviceAccountName: kubernetes-dashboard nodeSelector: &quot;kubernetes.io/os&quot;: linux # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule volumes: - name: tmp-volume emptyDir: {}</code></pre><p><img src="/img/remote/1460000042458885" alt="图片" title="图片"></p><p>é‡�新部署</p><pre><code>kubectl delete -f recommended.yaml kubectl apply -f recommended.yaml kubectl get svc,pods -n kubernetes-dashboard</code></pre><p><img src="/img/remote/1460000042458886" alt="图片" title="图片"></p><h6>创建登录用户</h6><pre><code>cat &gt;ServiceAccount.yaml&lt;&lt;EOFapiVersion: v1kind: ServiceAccountmetadata:cat &gt;ServiceAccount.yaml&lt;&lt;EOF apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard EOF kubectl apply -f ServiceAccount.yaml</code></pre><p>创建并è�·å�–登录 token</p><pre><code>kubectl -n kubernetes-dashboard create token admin-user</code></pre><h6>é…�ç½® hosts 登录 dashboard web</h6><p>192.168.0.120 cluster-endpoint</p><p>登录:<a href="https://link.segmentfault.com/?enc=tV6fW48Cj2oiv9AZqumAJQ%3D%3D.8jSjVXfhxlXJh9AdDqSwvxlBvsR5YV0UwAL2HALohGI%3D" rel="nofollow">https://cluster-endpoint:31443</a><img src="/img/remote/1460000042458887" alt="图片" title="图片">输入上é�¢åˆ›å»ºçš„ token 登录<img src="/img/remote/1460000042458888" alt="图片" title="图片"></p><h2>k8s 镜åƒ�仓库 harbor ç�¯å¢ƒéƒ¨ç½²</h2><p>GitHub 地å�€ï¼š<a href="https://link.segmentfault.com/?enc=8IbrYCCwu3Emi48u16Jz3Q%3D%3D.3yyO50kGKBXBlYWj%2BQG5lOhWXHVZACr1032VdA6tuLcRXy6Yyu0QoDcnV%2BojjgrG" rel="nofollow">https://github.com/helm/helm/...</a></p><p>这使用 helm 安装,所以得先安装 helm</p><h6>安装 helm</h6><pre><code>mkdir -p /opt/k8s/helm &amp;&amp; cd /opt/k8s/helm wget https://get.helm.sh/helm-v3.9.0-rc.1-linux-amd64.tar.gz tar -xf helm-v3.9.0-rc.1-linux-amd64.tar.gz ln -s /opt/k8s/helm/linux-amd64/helm /usr/bin/helm helm version helm help</code></pre><h6>é…�ç½® hosts</h6><pre><code>192.168.0.120 myharbor.com</code></pre><h6>创建 stl è¯�书</h6><pre><code>mkdir /opt/k8s/helm/stl &amp;&amp; cd /opt/k8s/helm/stl # 生æˆ� CA è¯�书ç§�é’¥ openssl genrsa -out ca.key 4096 # 生æˆ� CA è¯�书 openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj &quot;/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com&quot; \ -key ca.key \ -out ca.crt # 创建域å��è¯�书,生æˆ�ç§�é’¥ openssl genrsa -out myharbor.com.key 4096 # 生æˆ�è¯�书签å��请求 CSR openssl req -sha512 -new \ -subj &quot;/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com&quot; \ -key myharbor.com.key \ -out myharbor.com.csr # 生æˆ� x509 v3 扩展 cat &gt; v3.ext &lt;&lt;-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=myharbor.com DNS.2=*.myharbor.com DNS.3=hostname EOF #创建 Harbor 访问è¯�书 openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in myharbor.com.csr \ -out myharbor.com.crt</code></pre><h6>安装 ingress</h6><ul><li>ingress 官方网站:<a href="https://link.segmentfault.com/?enc=jiyNjzZCTCDWr%2FDBhoiZ2Q%3D%3D.0KP7HpVmZLiZ0l0YZP68gFp3aka5C5vNTzbWEdSx8ec6LvGWO7Op9uWF4AIKGS4w" rel="nofollow">https://kubernetes.github.io/...</a></li><li>ingress 仓库地å�€ï¼š<a href="https://link.segmentfault.com/?enc=50ac6RbpzEiw4Rann7%2BMTQ%3D%3D.u84CkBFD57zh5xZFY%2B4GISoeDqz%2F016itq2l1TZ54qB9dUzDf7Mc4ZxLmWRvRvdn" rel="nofollow">https://github.com/kubernetes...</a></li><li>部署文档:<a href="https://link.segmentfault.com/?enc=JW8DABxQdAJ00KkQJ3J5pw%3D%3D.nb33uExT2IbMeDNaG4QmzN8x6X%2FYIT7ygcPH3cX0C4lxqSayiVs2huUwwCL8JdGN88qTSYkiz%2BlO%2FDKBdchuqw%3D%3D" rel="nofollow">https://kubernetes.github.io/...</a></li></ul><p>1ã€�通过 helm 部署</p><pre><code>helm upgrade --install ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx --create-namespace</code></pre><p>2ã€�通过 YAML æ–‡ä»¶å®‰è£…ï¼ˆæœ¬ç« ä½¿ç”¨è¿™ä¸ªæ–¹å¼�安装 ingress)</p><pre><code>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml</code></pre><p>如æ�œä¸‹è½½é•œåƒ�失败,å�¯ä»¥ç”¨ä»¥ä¸‹æ–¹å¼�修改镜åƒ�地å�€å†�安装</p><pre><code># å�¯ä»¥å…ˆæŠŠé•œåƒ�下载,å†�安装 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.2.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1 wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml # 修改镜åƒ�地å�€ sed -i 's@k8s.gcr.io/ingress-nginx/controller:v1.2.0\(.*\)@registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.2.0@' deploy.yaml sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1\(.*\)$@registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@' deploy.yaml ###还需è¦�修改两地方 #1ã€�kind: ç±»å�‹ä¿®æ”¹æˆ�DaemonSet,replicas: 注销æ�‰ï¼Œå› 为DaemonSet模å¼�会æ¯�个节点è¿�行一个pod #2ã€�åœ¨æ·»åŠ ä¸€æ�¡ï¼šhostnetwork:true #3ã€�把LoadBalancer修改æˆ�NodePort #4ã€�在--validating-webhook-key下é�¢æ·»åŠ - --watch-ingress-without-class=true #5ã€�设置master节点å�¯è°ƒåº¦ kubectl taint nodes k8s-master-168-0-113 node-role.kubernetes.io/control-plane:NoSchedule- kubectl taint nodes k8s-master2-168-0-116 node-role.kubernetes.io/control-plane:NoSchedule- kubectl apply -f deploy.yaml</code></pre><p><img src="/img/remote/1460000042458889" alt="图片" title="图片"></p><h6>安装 nfs</h6><p>1ã€�所有节点安装 nfs</p><pre><code>yum -y install  nfs-utils rpcbind</code></pre><p>2ã€�在 master 节点创建共享目录并æ�ˆæ�ƒ</p><pre><code>mkdir /opt/nfsdata # æ�ˆæ�ƒå…±äº«ç›®å½• chmod 666 /opt/nfsdata</code></pre><p>3ã€�é…�ç½® exports 文件</p><pre><code>cat &gt; /etc/exports&lt;&lt;EOF /opt/nfsdata *(rw,no_root_squash,no_all_squash,sync) EOF # é…�置生效 exportfs -r exportfs 命令</code></pre><p>常用选项</p><pre><code>-a 全部挂载或者全部å�¸è½½ -r é‡�新挂载 -u å�¸è½½æŸ�一个目录 -v 显示共享目录 以下æ“�作在æœ�务端上</code></pre><p>4ã€�å�¯åЍ rpc å’Œ nfs(客户端å�ªéœ€è¦�å�¯åЍ rpc æœ�务)(注æ„�顺åº�)</p><pre><code>systemctl start rpcbind systemctl start nfs-server systemctl enable rpcbind systemctl enable nfs-server</code></pre><p>查看</p><pre><code>showmount -e # VIP showmount -e 192.168.0.120 -e #显示 NFS æœ�务器的共享列表 -a #显示本机挂载的文件资æº�的情况 NFS 资æº�的情况 -v #显示版本å�·</code></pre><p>5ã€�客户端</p><pre><code># 安装 yum -y install nfs-utils rpcbind # å�¯åЍrpcæœ�务 systemctl start rpcbind systemctl enable rpcbind # 创建挂载目录 mkdir /mnt/nfsdata # 挂载 echo &quot;192.168.0.120:/opt/nfsdata /mnt/nfsdata nfs defaults 0 1&quot;&gt;&gt; /etc/fstab mount -a</code></pre><p>6ã€�rsync æ•°æ�®å�Œæ­¥</p><p>ã€�1】rsync 安装</p><pre><code># 两端都得安装 yum -y install rsync</code></pre><p>ã€�2】é…�置,在/etc/rsyncd.conf ä¸­æ·»åŠ </p><pre><code>cat &gt;/etc/rsyncd.conf&lt;&lt;EOF uid = root gid = root #ç¦�锢在æº�目录 use chroot = yes #监å�¬åœ°å�€ address = 192.168.0.113 #监å�¬åœ°å�€tcp/udp 873,å�¯é€šè¿‡cat /etc/services | grep rsync查看 port 873 #日志文件ä½�ç½® log file = /var/log/rsyncd.log #存放进程 ID 的文件ä½�ç½® pid file = /var/run/rsyncd.pid #å…�许访问的客户机地å�€ hosts allow = 192.168.0.0/16 #共享模å�—å��ç§° [nfsdata] #æº�目录的å®�际路径 path = /opt/nfsdata comment = Document Root of www.kgc.com #指定客户端是å�¦å�¯ä»¥ä¸Šä¼ 文件,默认对所有模å�—为 true read only = yes #å�Œæ­¥æ—¶ä¸�å†�å�‹ç¼©çš„æ–‡ä»¶ç±»å�‹ dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #æ�ˆæ�ƒè´¦æˆ·ï¼Œå¤šä¸ªè´¦å�·ä»¥ç©ºæ ¼åˆ†éš”,ä¸�åŠ åˆ™ä¸ºåŒ¿å��,ä¸�ä¾�赖系统账å�· auth users = backuper #存放账户信æ�¯çš„æ•°æ�®æ–‡ä»¶ secrets file = /etc/rsyncd_users.db EOF</code></pre><p>é…�ç½® rsyncd\_users.db</p><pre><code>cat &gt;/etc/rsyncd_users.db&lt;&lt;EOF backuper:123456 EOF #官方è¦�求,最好å�ªæ˜¯èµ‹æ�ƒ600ï¼� chmod 600 /etc/rsyncd_users.db</code></pre><p>ã€�3】rsyncd.conf 常用å�‚数详解<img src="/img/remote/1460000042458890" alt="图片" title="图片"></p><p>ã€�4】rsync 常用命令å�‚数详解</p><pre><code>rsync --help rsync [选项] å�Ÿå§‹ä½�ç½® ç›®æ ‡ä½�ç½® 常用选项 说æ˜� -r 递归模å¼�,包å�«ç›®å½•å�Šå­�目录中的所有文件 -l 对äº�符å�·é“¾æ�¥æ–‡ä»¶ä»�ç„¶å¤�制为符å�·é“¾æ�¥æ–‡ä»¶ -v 显示å�Œæ­¥è¿‡ç¨‹çš„详细信æ�¯ -z åœ¨ä¼ è¾“æ–‡ä»¶æ—¶è¿›è¡Œå�‹ç¼©goD -p ä¿�留文件的æ�ƒé™�æ ‡è®° -a 归档模å¼�,递归并ä¿�留对象å±�性,等å�Œäº�-rlpt -t ä¿�ç•™æ–‡ä»¶çš„æ—¶é—´æ ‡è®° -g ä¿�留文件的å±�ç»„æ ‡è®°ï¼ˆä»…è¶…çº§ç”¨æˆ·ä½¿ç”¨ï¼‰ -o ä¿�留文件的å±�ä¸»æ ‡è®°ï¼ˆä»…è¶…çº§ç”¨æˆ·ä½¿ç”¨ï¼‰ -H ä¿�留硬链æ�¥æ–‡ä»¶ -A ä¿�ç•™ACLå±�性信æ�¯ -D ä¿�留设备文件å�Šå…¶ä»–特殊文件 --delete åˆ é™¤ç›®æ ‡ä½�置有而å�Ÿå§‹ä½�置没有的文件 --checksum æ ¹æ�®å¯¹è±¡çš„æ ¡éªŒå’Œæ�¥å†³å®šæ˜¯å�¦è·³è¿‡æ–‡ä»¶</code></pre><p>ã€�5】å�¯åЍæœ�务(数æ�®æº�机器)</p><pre><code>#rsync监å�¬ç«¯å�£ï¼š873 #rsyncè¿�行模å¼�:C/S rsync --daemon --config=/etc/rsyncd.conf netstat -tnlp|grep :873</code></pre><p>ã€�6】执行命令å�Œæ­¥æ•°æ�®</p><pre><code># 在目的机器上执行 # rsync -avz 用户å��@æº�主机地å�€/æº�目录 目的目录 rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/ ã€�7】crontab 定时å�Œæ­¥ # é…�ç½®crontab, æ¯�五分钟å�Œæ­¥ä¸€æ¬¡ï¼Œè¿™ç§�æ–¹å¼�ä¸�好 */5 * * * * rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/</code></pre><p>ã€�温馨æ��示】crontab 定时å�Œæ­¥æ•°æ�®ä¸�太好,å�¯ä»¥ä½¿ç”¨rsync+inotifyå�šæ•°æ�®å®�æ—¶å�Œæ­¥ï¼Œè¿™é‡Œç¯‡å¹…有点长了,先ä¸�讲,如æ�œå��é�¢æœ‰æ—¶é—´ä¼šå‡ºä¸€ç¯‡å�•ç‹¬æ–‡ç« æ�¥è®²ã€‚</p><h6>创建 nfs provisioner å’ŒæŒ�久化存储 SC</h6><p>ã€�温馨æ��示】这里跟我之å‰�çš„æ–‡ç« æœ‰ç‚¹ä¸�å�Œï¼Œä¹‹å‰�的方å¼�也ä¸�适用新版本。</p><p>GitHub 地å�€ï¼š<a href="https://link.segmentfault.com/?enc=jL4okWXTduv7ENHET5X2SQ%3D%3D.iDHLqrWfsQHWCIv8IzWYKVeEtXfAe75fikLiivWf5il5MA2FiWF5lyidswbYkmD3ta%2BXmTUlo0moyMkb%2F74dNMVhSUOBNibQzLzwCylCoWo%3D" rel="nofollow">https://github.com/kubernetes...</a></p><p>helm 部署 nfs-subdir-external-provisioner</p><p>1ã€�æ·»åŠ helm 仓库</p><pre><code>helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/</code></pre><p>2ã€�helm 安装 nfs provisioner</p><p>ã€�温馨æ��示】默认镜åƒ�æ˜¯æ— æ³•è®¿é—®çš„ï¼Œè¿™é‡Œä½¿ç”¨ dockerhub æ�œç´¢åˆ°çš„镜åƒ�willdockerhub/nfs-subdir-external-provisioner:v4.0.2,还有就是 StorageClass ä¸�分命å��空间,所有在所有命å��空间下都å�¯ä»¥ä½¿ç”¨ã€‚</p><pre><code>helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --namespace=nfs-provisioner \ --create-namespace \ --set image.repository=willdockerhub/nfs-subdir-external-provisioner \ --set image.tag=v4.0.2 \ --set replicaCount=2 \ --set storageClass.name=nfs-client \ --set storageClass.defaultClass=true \ --set nfs.server=192.168.0.120 \ --set nfs.path=/opt/nfsdata</code></pre><p>ã€�温馨æ��示】上é�¢ nfs.server 设置为 VIP,å�¯å®�ç�°é«˜å�¯ç”¨ã€‚</p><p>3ã€�查看</p><pre><code>kubectl get pods,deploy,sc -n nfs-provisioner</code></pre><h6>部署 Harbor(Https æ–¹å¼�)</h6><p>1ã€�创建 Namespace</p><pre><code>kubectl create ns harbor</code></pre><p>2ã€�创建è¯�书秘钥</p><pre><code>kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor kubectl get secret myharbor.com -n harbor</code></pre><p>3ã€�æ·»åŠ Chart 库</p><pre><code>helm repo add harbor https://helm.goharbor.io</code></pre><p>4ã€�通过 helm 安装 harbor</p><pre><code>helm install myharbor --namespace harbor harbor/harbor \ --set expose.ingress.hosts.core=myharbor.com \ --set expose.ingress.hosts.notary=notary.myharbor.com \ --set-string expose.ingress.annotations.'nginx\.org/client-max-body-size'=&quot;1024m&quot; \ --set expose.tls.secretName=myharbor.com \ --set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.database.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.redis.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client \ --set persistence.enabled=true \ --set externalURL=https://myharbor.com \ --set harborAdminPassword=Harbor12345</code></pre><p>这里ç¨�等一段时间在查看资æº�状æ€�</p><pre><code>kubectl get ingress,svc,pods,pvc -n harbor</code></pre><p><img src="/img/remote/1460000042458891" alt="图片" title="图片"></p><p>5ã€�ingress 没有 ADDRESS 问题解决</p><p>ã€�分æ��】,å�‘ç�°"error: endpoints “default-http-backendâ€� not found"</p><pre><code>cat &lt;&lt; EOF &gt; default-http-backend.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: default-http-backend labels: app: default-http-backend namespace: harbor spec: replicas: 1 selector: matchLabels: app: default-http-backend template: metadata: labels: app: default-http-backend spec: terminationGracePeriodSeconds: 60 containers: - name: default-http-backend # Any image is permissible as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint image: registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend:1.4 # image: gcr.io/google_containers/defaultbackend:1.4 livenessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 5 ports: - containerPort: 8080 resources: limits: cpu: 10m memory: 20Mi requests: cpu: 10m memory: 20Mi --- apiVersion: v1 kind: Service metadata: name: default-http-backend namespace: harbor labels: app: default-http-backend spec: ports: - port: 80 targetPort: 8080 selector: app: default-http-backend EOF kubectl apply -f default-http-backend.yaml</code></pre><p>6ã€�å�¸è½½é‡�新部署</p><pre><code># å�¸è½½ helm uninstall myharbor -n harbor kubectl get pvc -n harbor| awk 'NR!=1{print $1}' | xargs kubectl delete pvc -n harbor # 部署 helm install myharbor --namespace harbor harbor/harbor \ --set expose.ingress.hosts.core=myharbor.com \ --set expose.ingress.hosts.notary=notary.myharbor.com \ --set-string expose.ingress.annotations.'nginx\.org/client-max-body-size'=&quot;1024m&quot; \ --set expose.tls.secretName=myharbor.com \ --set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.database.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.redis.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client \ --set persistence.enabled=true \ --set externalURL=https://myharbor.com \ --set harborAdminPassword=Harbor12345</code></pre><p><img src="/img/remote/1460000042458892" alt="图片" title="图片"></p><p>5ã€�访问 harbor</p><p><a href="https://link.segmentfault.com/?enc=R0K%2ByebvONdWDlpFgNDkMw%3D%3D.1NHLNlNw22LZQuGxvE1a5pN6I5l4MSqgGW8vElu4ZUs%3D" rel="nofollow">https://myharbor.com</a></p><p>è´¦å�·/密ç �:admin/Harbor12345<img src="/img/remote/1460000042458893" alt="图片" title="图片"></p><p>6ã€�harbor 常è§�æ“�作</p><p>ã€�1】创建项目 bigdata<img src="/img/remote/1460000042458894" alt="图片" title="图片"></p><p>ã€�2】é…�ç½®ç§�有仓库,在文件/etc/docker/daemon.jsonæ·»åŠ å¦‚ä¸‹å†…å®¹ï¼š</p><pre><code>&quot;insecure-registries&quot;:[&quot;https://myharbor.com&quot;]</code></pre><p>é‡�å�¯ docker</p><pre><code>systemctl restart docker</code></pre><p>ã€�3】æœ�务器上登录 harbor</p><p>docker login <a href="https://link.segmentfault.com/?enc=zhbuYbE%2BQfyRTfeWqcf4ow%3D%3D.VK1H3KVFVhfp8Qf2EnAbs9CMcYmmDSaA8z6pyMNzWEI%3D" rel="nofollow">https://myharbor.com</a> #è´¦å�·/密ç �:admin/Harbor12345</p><p><img src="/img/remote/1460000042458895" alt="图片" title="图片"></p><p>ã€�4ã€‘æ‰“æ ‡ç­¾å¹¶æŠŠé•œåƒ�ä¸Šä¼ åˆ° harbor</p><pre><code>docker tag rancher/pause:3.6 myharbor.com/bigdata/pause:3.6 docker push myharbor.com/bigdata/pause:3.6</code></pre><p>7ã€�修改 containerd é…�ç½®</p><p>以å‰�使用 docker-engine 的时候,å�ªéœ€è¦�修改/etc/docker/daemon.json 就行,但是新版的 k8s å·²ç»�使用 containerd 了,所以这里需è¦�å�šç›¸å…³é…�置,è¦�ä¸�ç„¶ containerd 会失败。è¯�书(ca.crt)å�¯ä»¥åœ¨é¡µé�¢ä¸Šä¸‹è½½ï¼š</p><p><img src="/img/remote/1460000042458896" alt="图片" title="图片"></p><p>创建域å��目录</p><pre><code>mkdir /etc/containerd/myharbor.com cp ca.crt /etc/containerd/myharbor.com/</code></pre><p>é…�置文件:/etc/containerd/config.toml</p><pre><code>[plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry] config_path = &quot;&quot; [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.auths] [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.configs] [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.configs.&quot;myharbor.com&quot;.tls] ca_file = &quot;/etc/containerd/myharbor.com/ca.crt&quot; [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.configs.&quot;myharbor.com&quot;.auth] username = &quot;admin&quot; password = &quot;Harbor12345&quot; [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.headers] [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.mirrors] [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry.mirrors.&quot;myharbor.com&quot;] endpoint = [&quot;https://myharbor.com&quot;]</code></pre><p><img src="/img/remote/1460000042458897" alt="图片" title="图片"></p><p>é‡�å�¯ containerd</p><pre><code>#é‡�æ–°åŠ è½½é…�ç½® systemctl daemon-reload #é‡�å�¯ containerdsystemctl restart containerd</code></pre><p>简å�•使用</p><pre><code># 把dockeræ�¢æˆ�crictl 就行,命令都差ä¸�多 crictl pull myharbor.com/bigdata/mysql:5.7.38</code></pre><p>执行 crictl 报如下错误的解决åŠ�法</p><pre><code>WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.ERRO[0000] unable to determine image API version: rpc error: code = Unavailable desc = connection error: desc = &quot;transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory&quot;</code></pre><p>这个报错是 docker 的报错,这里没使用,所以这个错误ä¸�å½±å“�使用,但是还是解决好点,解决方法如下:</p><pre><code>cat &lt;&lt;EOF&gt; /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF</code></pre><p>å†�次拉å�–镜åƒ�</p><pre><code>crictl pull myharbor.com/bigdata/mysql:5.7.38</code></pre><p><img src="/img/remote/1460000042458898" alt="图片" title="图片"></p><p>Kubernetes(k8s)最新版最完整版基础ç�¯å¢ƒéƒ¨ç½²+master 高å�¯ç”¨å®�ç�°è¯¦ç»†æ­¥éª¤å°±åˆ°è¿™é‡Œäº†ï¼Œæœ‰ç–‘问的å°�伙伴欢è¿�给我留言哦~</p><p><em>链æ�¥ï¼šcnblogs.com/liugp/p/16345473.html</em></p><p><img src="/img/bVbHCzg" alt="" title=""></p> æ— éœ€å®‰è£…ã€�注册,一行命令æ��定内网穿é€�ï¼�关键是完全å…�è´¹ https://segmentfault.com/a/1190000041921943 2022-05-31T15:14:54+08:00 2022-05-31T15:14:54+08:00 民工哥 https://segmentfault.com/u/jishuroad 13 <p>内网穿é€�,å�³NATç©¿é€�,网络è¿�æ�¥æ—¶æœ¯è¯­ã€‚外网ä¸�内网的计算机节点需è¦�è¿�æ�¥é€šä¿¡ï¼Œæ˜ 射端å�£èƒ½è®©å¤–网的电脑找到处äº�内网的电脑,æ��高下载速度。</p><h2>内网穿é€�的应用场景</h2><h6>web 应用开å�‘</h6><p>å�‘外网å�‘布开å�‘的一些web demo,或者远程调试 API æ�¥å�£ (如:微信公众å�·ï¼Œä¼�业å�·çš„å¼€å�‘)</p><h6>内网应用的访问</h6><p>å…¬å�¸å†…网部署的应用ã€�æ•°æ�®åº“等,人员出差ã€�或者临时外出,需è¦�远程访问ã€�è¿�æ�¥è°ƒè¯•等情况。</p><h6>远程æ“�æ�§ç¡¬ä»¶è®¾å¤‡</h6><p>物è�”网设备开å�‘ã€�调试</p><p>今天就给大家介ç»�一款更牛逼的ç¥�器:serveo</p><p>牛逼之处就在äº�å®ƒæ— éœ€ä¸‹è½½å®‰è£…ä»»ä½•çš„è½¯ä»¶ï¼Œä¸€æ�¡å‘½ä»¤æ��定ï¼�,更é‡�è¦�的是它完全å…�è´¹ï¼�</p><h2>Serveo概述</h2><p>Serveo 是一个å…�费的内网穿é€�æœ�务,Serveo å�¯ä»¥å°†æœ¬åœ°è®¡ç®—机暴露在互è�”网上,官方称其为 Ngrok çš„ç»�佳替代å“�。</p><p>serveo 最大优点是:<strong>æ— éœ€å®‰è£…ã€�æ— éœ€æ³¨å†Œ</strong>ã€�利用SSHéš§é�“å�³å�¯ç›´æ�¥ä½¿ç”¨ã€‚</p><p><img src="/img/remote/1460000041921945" alt="" title=""></p><h2>Serveo工作å�Ÿç�†</h2><p>Serveo SSH æœ�务器å�ªæ˜¯è¿œç¨‹ç«¯å�£è½¬å�‘,当用户è¿�æ�¥åˆ° Serveo 时,他们得到一个公共URL,任何人都å�¯ä»¥ä½¿ç”¨è¿�æ�¥åˆ° localhost æœ�务器。</p><p>项目地å�€: <a href="https://link.segmentfault.com/?enc=A07KSW%2FioaQWwsyNj7ZH9w%3D%3D.N5f0fca2Y1T%2Fz0rVGRM9QmWFsASM1OIVO6W%2F0dw66ic%3D" rel="nofollow">https://serveo.net</a></p><h2>安装说æ˜�</h2><p>æ— éœ€å®‰è£…ï¼Œå¼€ç®±å�³ç”¨ã€‚</p><h6>æœ�务器å‰�æ��</h6><p>需è¦�具备SSH功能,并且能正常链æ�¥äº’è�”网。</p><h2>Serveo 使用å®�è·µ</h2><h6>将本地应用(HTTPæœ�务)çš„ 3000 端å�£æ˜ 射到公网中</h6><p>将本地应用的3000端å�£æ˜ 射到公网中</p><pre><code># 如æ�œè¦�转å�‘其它端å�£ï¼Œå�ªéœ€æ›¿æ�¢ç«¯å�£ä¸ºå…¶å®ƒå°±å�¯ä»¥äº† $ ssh -R 80:localhost:3000 serveo.net Hi there Forwarding HTTP traffic from https://heryum.serveo.net Press g to start a GUI session and ctrl-c to quit.</code></pre><p>第一次使用会æ��示建立SSH会è¯�,请输入yes确定。</p><p>建立会è¯�æˆ�功å��,它会éš�机生æˆ�一个 xx.serveo.net 二级域å��ã€‚ä½ å°±å�¯ä»¥ä½¿ç”¨æµ�览器访问这个éš�机生æˆ�的二级域å�� heryum.serveo.net å�»è®¿é—®åˆ°æœ¬åœ°è®¡ç®—机 3000 端å�£ä¸Šçš„æœ�务了。</p><p>也å�¯ä»¥ä¸�使用这个éš�机生æˆ�的域å��ï¼Œä½ å�¯ä»¥è‡ªå®šä¹‰ä¸€ä¸ªè‡ªå·±ä¹ 惯的二级域å��,也是å�¯ä»¥çš„,具体æ“�作步骤如下:</p><pre><code>$ ssh -R mingongge:80:localhost:3000 serveo.net Hi there Forwarding HTTP traffic from https://mingongge.serveo.net Press g to start a GUI session and ctrl-c to quit. ... # 这个自定义二级域å��å�¯ä»¥ç®€å†™ï¼Œä¹Ÿå�¯ä»¥å†™å®Œæ•´çš„,如: $ ssh -R mingongge.serveo.net:80:localhost:8080 serveo.net</code></pre><h6>2ã€�将本地 22 端å�£ç©¿é€�到公网中</h6><p>远程访问本地的sshæœ�务其å®�很简å�•,å�ªéœ€è¦�使用下é�¢çš„命令å�³å�¯ã€‚</p><pre><code># å��称为自定义的,这里设置为 mingongge $ ssh -R mingongge:22:localhost:22 serveo.net Hi there Forwarding SSH traffic from alias &quot;mingongge&quot; Press g to start a GUI session and ctrl-c to quit. ...</code></pre><p>è¿�æ�¥æˆ�功å��,æ�¥ä¸‹æ�¥ä½ å°±å�¯ä»¥ä»�公网上对这个内网计算机的 SSH 进行访问了。</p><pre><code>$ ssh -J serveo.net user_name@mingongge Hi there user_name@mingongge's password: Last login: Sun 29 May 23:08:12 2022 from 127.0.0.1 ...</code></pre><p>-J 选项是用在 OpenSSH 7.3 å�Šä»¥ä¸Šç‰ˆæœ¬ä¸­ï¼Œå¦‚æ�œä½ çš„ SSH 客户端版本较ä½�,å�¯ä»¥ä½¿ç”¨ ProxyCommand æ�¥æ›¿ä»£ã€‚</p><pre><code>$ ssh -o ProxyCommand=&quot;ssh -W mingongge:22 serveo.net&quot; user_name@mingongge</code></pre><p><strong>注</strong>:如æ�œä½ æ— æ³•é€šè¿‡ 22 端å�£è®¿é—® Serveo æœ�务,官方还预留了 443 端å�£ï¼Œå…·ä½“更改如下:</p><pre><code>$ ssh -p 443 -R 80:localhost:3000 serveo.net</code></pre><h6>Windows 系统使用</h6><p>Win10 默认自带 OpenSSH ,其它Window系统的è¯�,需è¦�大家å�» OpenSSH çš„ Github 上下载安装,具体的安装方å¼�上é�¢éƒ½æœ‰ï¼Œè¿™é‡Œä¸�介ç»�了。</p><p>如æ�œä½ çš„ Win10 系统 cmd æ— æ³•è¯†åˆ« ssh 命令,å�¯èƒ½æ˜¯ä½ 的系统此功能未å�¯ç”¨ï¼Œéœ€è¦�手工é…�ç½®å�¯ç”¨ä¸€ä¸‹ã€‚</p><h6>å�¯ç”¨æ­¥éª¤å¦‚下</h6><p>设置---应用ã€�å�¯é€‰åŠŸèƒ½---æ·»åŠ å�¯é€‰åŠŸèƒ½</p><p><img src="/img/remote/1460000041921946" alt="" title=""></p><p>ç‚¹å‡»â€œæ·»åŠ åŠŸèƒ½â€�按钮,在å�¯é€‰åŠŸèƒ½åˆ—è¡¨ä¸­çœ‹åˆ°â€œ OpenSSH æœ�务器â€�,选中它,点击“安装â€�</p><p><img src="/img/remote/1460000041921947" alt="" title=""></p><p><img src="/img/remote/1460000041921948" alt="" title=""></p><p>安装æˆ�功之å��,在cmd命令æ��示符窗å�£ä¸­å�³å�¯è¿�行ssh命令。</p><p><img src="/img/remote/1460000041921949" alt="" title=""></p><p><img src="/img/bVbHCzg" alt="" title=""></p> 跨域问题很难å�—?æ�¥ï¼�æ•™ä½ ä½¿ç”¨ Nginx å��å�‘代ç�†è½»æ�¾è§£å†³ https://segmentfault.com/a/1190000041794241 2022-05-05T15:04:45+08:00 2022-05-05T15:04:45+08:00 民工哥 https://segmentfault.com/u/jishuroad 12 <p>å½“ä½ é�‡åˆ°è·¨åŸŸé—®é¢˜ï¼Œä¸�è¦�立刻就选择å¤�制å�»å°�è¯•ã€‚è¯·è¯¦ç»†çœ‹å®Œè¿™ç¯‡æ–‡ç« å†�处ç�†ï¼Œæˆ‘ç›¸ä¿¡å®ƒèƒ½å¸®åˆ°ä½ ã€‚</p><h2>准备</h2><ul><li>å‰�端网站地å�€ï¼š<a href="https://link.segmentfault.com/?enc=qhkCbgxlzlZHC38P%2FZ6WYg%3D%3D.lMhlPH%2FPEbeHxv3SupdOiVnulQeH53quT45lc2PntFs%3D" rel="nofollow">http://localhost:8080</a></li><li>æœ�务端网å�€ï¼š<a href="https://link.segmentfault.com/?enc=Qaxbt%2Fy7vFo2Pt4BBZQ5rg%3D%3D.4%2FKCX5X%2Bph7GzWjbF2t4iAn%2FueC%2FPPBTM%2FqP8w%2BNEqI%3D" rel="nofollow">http://localhost:59200</a></li></ul><p>首先ä¿�è¯�æœ�务端是没有处ç�†è·¨åŸŸçš„,其次,先用postman测试æœ�务端æ�¥å�£æ˜¯æ­£å¸¸çš„</p><p><img src="/img/remote/1460000041794243" alt="图片" title="图片"></p><p>当网站8080å�»è®¿é—®æœ�务端æ�¥å�£æ—¶ï¼Œå°±äº§ç”Ÿäº†è·¨åŸŸé—®é¢˜ï¼Œé‚£ä¹ˆå¦‚何解决?æ�¥ä¸‹æ�¥æˆ‘把跨域é�‡åˆ°çš„å�„ç§�情况都列举出æ�¥å¹¶é€šè¿‡nginx代ç�†çš„æ–¹å¼�解决(å��å�°ä¹Ÿæ˜¯ä¸€æ ·çš„,å�ªè¦�ä½ ç�†è§£çš„å�Ÿç�†ï¼‰ã€‚</p><h2>跨域主è¦�涉å�Š4个å“�应头</h2><ul><li>Access-Control-Allow-Origin 用äº�设置å…�许跨域请求æº�地å�€ (预检请求和正å¼�请求在跨域时候都会验è¯�)</li><li>Access-Control-Allow-Headers 跨域å…�许æ�ºå¸¦çš„特殊头信æ�¯å­—段 (å�ªåœ¨é¢„检请求验è¯�)</li><li>Access-Control-Allow-Methods 跨域å…�许的请求方法或者说HTTP动è¯� (å�ªåœ¨é¢„检请求验è¯�)</li><li>Access-Control-Allow-Credentials 是å�¦å…�许跨域使用cookies,如æ�œè¦�跨域使用cookies,å�¯ä»¥æ·»åŠ ä¸Šæ­¤è¯·æ±‚å“�应头,值设为true(设置或者ä¸�设置,都ä¸�会影å“�请求å�‘é€�,å�ªä¼šå½±å“�在跨域时候是å�¦è¦�æ�ºå¸¦cookies,但是如æ�œè®¾ç½®ï¼Œé¢„检请求和正å¼�请求都需è¦�设置)。ä¸�过ä¸�建议跨域使用(项目中用到过,ä¸�过ä¸�稳定,有些æµ�览器带ä¸�过å�»ï¼‰ï¼Œé™¤é��å¿…è¦�ï¼Œå› ä¸ºæœ‰å¾ˆå¤šæ–¹æ¡ˆå�¯ä»¥ä»£æ›¿ã€‚</li></ul><p>ç½‘ä¸Šå¾ˆå¤šæ–‡ç« éƒ½æ˜¯å‘Šè¯‰ä½ ç›´æ�¥Nginxæ·»åŠ è¿™å‡ ä¸ªå“�应头信æ�¯å°±èƒ½è§£å†³è·¨åŸŸï¼Œå½“然大部分情况是能解决,但是我相信还是有很多情况,æ˜�æ˜�é…�置上了,也å�Œæ ·ä¼šæŠ¥è·¨åŸŸé—®é¢˜ã€‚</p><h2>什么是预检请求?</h2><p>当å�‘生跨域æ�¡ä»¶æ—¶å€™ï¼Œè§ˆå™¨å…ˆè¯¢é—®æœ�务器,当å‰�网页所在的域å��是å�¦åœ¨æœ�务器的许å�¯å��å�•之中,以å�Šå�¯ä»¥ä½¿ç”¨å“ªäº›HTTP动è¯�和头信æ�¯å­—段。å�ªæœ‰å¾—到肯定答å¤�,æµ�览器æ‰�会å�‘出正å¼�çš„XMLHttpRequest请求,å�¦åˆ™å°±æŠ¥é”™ã€‚如下图</p><p><img src="/img/remote/1460000041794244" alt="图片" title="图片"></p><h2>模拟</h2><p>Nginx代ç�†ç«¯å�£ï¼š22222 ,é…�置如下</p><pre><code>server { listen 22222; server_name localhost; location / { proxy_pass http://localhost:59200; } }</code></pre><p>测试代ç�†æ˜¯å�¦æˆ�功,通过Nginx代ç�†ç«¯å�£2222å†�次访问æ�¥å�£ï¼Œå�¯ä»¥çœ‹åˆ°å¦‚下图通过代ç�†å��æ�¥å�£ä¹Ÿæ˜¯èƒ½æ­£å¸¸è®¿é—®</p><p><img src="/img/remote/1460000041794245" alt="图片" title="图片"></p><p>æ�¥ä¸‹æ�¥å¼€å§‹ç”¨ç½‘ç«™8080访问Nginx代ç�†å��çš„æ�¥å�£åœ°å�€ï¼ŒæŠ¥é”™æƒ…况如下↓↓↓</p><h6>情况1</h6><pre><code>Access to XMLHttpRequest at 'http://localhost:22222/api/Login/TestGet' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.</code></pre><p><img src="/img/remote/1460000041794246" alt="图片" title="图片"></p><p>通过错误信æ�¯å�¯ä»¥å¾ˆæ¸…晰的定ä½�到错误(注æ„�çœ‹æ ‡çº¢éƒ¨åˆ†ï¼‰priflight说æ˜�是个预请求,CORS 机制跨域会首先进行 preflight(一个 OPTIONS 请求), 该请求æˆ�功å��æ‰�会å�‘é€�真正的请求。这一设计旨在确ä¿�æœ�务器对 CORS æ ‡å‡†çŸ¥æƒ…ï¼Œä»¥ä¿�护ä¸�支æŒ� CORS 的旧æœ�务器</p><p>通过错误信æ�¯ï¼Œæˆ‘们å�¯ä»¥å¾—到是预检请求的请求å“�应头缺少了 Access-Control-Allow-Origin,错哪里,我们改哪里就好了。修改Nginxé…�置信æ�¯å¦‚ä¸‹ï¼ˆçº¢è‰²éƒ¨åˆ†ä¸ºæ·»åŠ éƒ¨åˆ†ï¼‰ï¼Œç¼ºä»€ä¹ˆå°±è¡¥ä»€ä¹ˆï¼Œå¾ˆç®€å�•æ˜�了</p><pre><code>server { listen 22222; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:8080'; proxy_pass http://localhost:59200; } }</code></pre><p>哈哈,当满怀欢喜的以为能解决å��,å�‘ç�°è¿˜æ˜¯æŠ¥äº†å�Œæ ·çš„问题</p><p><img src="/img/remote/1460000041794246" alt="图片" title="图片"></p><p>ä¸�过我们的é…�置没什么问题,问题在Nginx,下图链æ�¥<a href="https://link.segmentfault.com/?enc=6ed8oumZrR7Y%2FtzZrBooTA%3D%3D.hIO751S%2Bg9Eg24VRFq%2FdtmTkFrm08HlFYRjF7RSXRpxtvWZrzSY6tSs8Aaorj16IZKK3gQIG47W8uW8VZ0ZYBA%3D%3D" rel="nofollow">http://nginx.org/en/docs/http...</a></p><p><img src="/img/remote/1460000041794247" alt="图片" title="图片"></p><p><code>add_header</code> 指令用äº�æ·»åŠ è¿”å›�头字段,当且仅当状æ€�ç �为图中列出的那些时有效。如æ�œæƒ³è¦�æ¯�次å“�应信æ�¯éƒ½æ�ºå¸¦å¤´å­—段信æ�¯ï¼Œéœ€è¦�在最å��æ·»åŠ always(ç»�我测试,å�ªæœ‰Access-Control-Allow-Origin这个头信æ�¯éœ€è¦�åŠ always,其他的ä¸�åŠ always也会æ�ºå¸¦å›�æ�¥ï¼‰ï¼Œé‚£æˆ‘ä»¬åŠ ä¸Šè¯•è¯•</p><pre><code>server { listen 22222; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; proxy_pass http://localhost:59200; } }</code></pre><p>修改了é…�ç½®å��,å�‘ç�°ç”Ÿæ•ˆäº†ï¼Œå½“ç„¶ä¸�是跨域就解决了,是上é�¢è¿™ä¸ªé—®é¢˜å·²ç»�è§£å†³äº†ï¼Œå› ä¸ºæŠ¥é”™å†…å®¹å·²ç»�å�˜äº†</p><h6>情况2</h6><pre><code>Access to XMLHttpRequest at 'http://localhost:22222/api/Login/TestGet' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.</code></pre><p><img src="/img/remote/1460000041794248" alt="图片" title="图片"></p><p>通过报错信æ�¯æ��示å�¯ä»¥å¾—知,是跨域æµ�览器默认行为的预请求(option请求)没有收到ok状æ€�ç �,此时å†�修改é…�置文件,当请求为option请求时候,给æµ�览器返å›�一个状æ€�ç �(一般是204)</p><pre><code> server { listen 22222; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; if ($request_method = 'OPTIONS') { return 204; } proxy_pass http://localhost:59200; } }</code></pre><p>当é…�置完å��,å�‘ç�°æŠ¥é”™ä¿¡æ�¯å�˜äº†</p><h6>情况3</h6><pre><code>Access to XMLHttpRequest at 'http://localhost:22222/api/Login/TestGet' from origin 'http://localhost:8080' has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.</code></pre><p><img src="/img/remote/1460000041794249" alt="图片" title="图片"></p><p>æ„�æ€�就是预请求å“�应头Access-Control-Allow-Headers中缺少头信æ�¯authorization(å�„ç§�情况会ä¸�ä¸€æ ·ï¼Œåœ¨å�‘生跨域å��ï¼Œåœ¨è‡ªå®šä¹‰æ·»åŠ çš„å¤´ä¿¡æ�¯æ˜¯ä¸�å…�许的,需è¦�æ·»åŠ åˆ°è¯·æ±‚å“�应头Access-Control-Allow-Headers中,以便æµ�览器知é�“此头信æ�¯çš„æ�ºå¸¦æ˜¯æœ�务器承认å�ˆæ³•的,我这里æ�ºå¸¦çš„æ˜¯authorization,其他的å�¯èƒ½æ˜¯tokenä¹‹ç±»çš„ï¼Œç¼ºä»€ä¹ˆåŠ ä»€ä¹ˆï¼‰ï¼ŒçŸ¥é�“了问题所在,然å��修改é…�ç½®æ–‡ä»¶ï¼Œæ·»åŠ å¯¹åº”ç¼ºå°‘çš„éƒ¨åˆ†ï¼Œå†�试试</p><pre><code>server { listen 22222; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Headers 'authorization'; #为什么写在if里é�¢è€Œä¸�是æ�¥ç�€Access-Control-Allow-Originå¾€ä¸‹å†™ï¼Ÿå› ä¸ºè¿™é‡Œå�ªæœ‰é¢„检请求æ‰�会检查 return 204; } proxy_pass http://localhost:59200; } }</code></pre><p>此时å�‘ç�°æŠ¥é”™é—®é¢˜å�ˆå›�到了情况1</p><p><img src="/img/remote/1460000041794250" alt="图片" title="图片"></p><p>ç»�测试验è¯�,å�ªè¦�<code>if ($request_method = 'OPTIONS')</code> 里é�¢å†™äº† <code>add_header</code> ,当为预检请求时外部é…�置的都会失效,为什么?↓↓。</p><p>å®˜æ–¹æ–‡æ¡£æ˜¯è¿™æ ·è¯´çš„ï¼š</p><p>There could be several add_header directives. These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.</p><p>æ„�æ€�就是当å‰�å±‚çº§æ— add_header 指令时,则继承上一层级的add_header。相å��的若当å‰�层级有了add_headerï¼Œå°±åº”è¯¥æ— æ³•ç»§æ‰¿ä¸Šä¸€å±‚çš„add_header。</p><p><img src="/img/remote/1460000041794251" alt="图片" title="图片"></p><p>é…�置修改如下:</p><pre><code>server { listen 22222; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080'; add_header Access-Control-Allow-Headers 'authorization'; return 204; } proxy_pass http://localhost:59200; } }</code></pre><p>此时改完å�‘ç�°è·¨åŸŸé—®é¢˜å·²ç»�解决了,</p><p><img src="/img/remote/1460000041794252" alt="图片" title="图片"></p><p>ä¸�过以上虽然解决了跨域问题,但是考虑å��期å�¯èƒ½Nginx版本更新,ä¸�知é�“这个规则会ä¸�ä¼šè¢«ä¿®æ”¹ï¼Œè€ƒè™‘åˆ°è¿™æ ·çš„å†™æ³•å�¯èƒ½ä¼šæ�ºå¸¦ä¸Šä¸¤ä¸ª Access-Control-Allow-Origin ,这ç§�情况也是ä¸�å…�许的,下é�¢ä¼šè¯´åˆ°ã€‚所以é…�置适当修改如下:</p><pre><code>server { listen 22222; server_name localhost; location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080'; add_header Access-Control-Allow-Headers 'authorization'; return 204; } if ($request_method != 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; } proxy_pass http://localhost:59200; } }</code></pre><p>还没完,继续è�Š â†“â†“</p><h6>情况4:</h6><p>比较早期的APIå�¯èƒ½å�ªç”¨åˆ°äº†POSTå’ŒGET请求,而Access-Control-Allow-Methods这个请求å“�应头跨域默认å�ªæ”¯æŒ�POSTå’ŒGET,当出ç�°å…¶ä»–请求类å�‹æ—¶å€™ï¼Œå�Œæ ·ä¼šå‡ºç�°è·¨åŸŸå¼‚常。</p><p>比如,我这里将请求的APIæ�¥å�£è¯·æ±‚æ–¹å¼�ä»�å�Ÿæ�¥çš„GET改æˆ�PUT,在å�‘起一次试试。在æ�§åˆ¶å�°ä¸Šä¼šæŠ›å‡ºé”™è¯¯ï¼š</p><pre><code>Access to XMLHttpRequest at 'http://localhost:22222/api/Login/TestGet' from origin 'http://localhost:8080' has been blocked by CORS policy: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.</code></pre><p><img src="/img/remote/1460000041794253" alt="图片" title="图片"></p><p>报错内容也讲的很清楚,在这个预请求中,PUT方法是ä¸�å…�许在跨域中使用的,我们需è¦�改下Access-Control-Allow-Methodsçš„é…�ç½®(ç¼ºä»€ä¹ˆåŠ ä¸Šä¹ˆï¼Œè¿™é‡Œæˆ‘å�ªåŠ äº†PUT,å�¯ä»¥è‡ªå·±åŠ å…¨ä¸€ç‚¹),让æµ�览器知é�“æœ�务端是å…�许的</p><pre><code>server { listen 22222; server_name localhost; location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080'; add_header Access-Control-Allow-Headers 'content-type,authorization'; add_header Access-Control-Allow-Methods 'PUT';#为这么å�ªåŠ åœ¨è¿™ä¸ªif中,ä¸�å†�下é�¢çš„ifä¹ŸåŠ ä¸Šï¼Ÿå› ä¸ºè¿™é‡Œå�ªæœ‰é¢„æ£€è¯·æ±‚ä¼šæ ¡éªŒï¼Œå½“ç„¶ä½ åŠ ä¸Šä¹Ÿæ²¡äº‹ã€‚ return 204; } if ($request_method != 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; } proxy_pass http://localhost:59200; } }</code></pre><p>这里注æ„�一下,改æˆ�PUTç±»å�‹å��,Access-Control-Allow-Headers请求å“�应头å�ˆä¼šè‡ªåŠ¨æ ¡éªŒcontent-type这个请求头,和情况3æ˜¯ä¸€æ ·çš„ï¼Œç¼ºå•¥è¡¥å•¥å°±è¡Œäº†ã€‚å¦‚æ�œä¸�åŠ ä¸Šcontent-type,则会报如下错误。(想简å�•çš„è¯�,Access-Control-Allow-Headerså’ŒAccess-Control-Allow-Methodså�¯ä»¥è®¾ç½®ä¸º * ,表示全都匹é…�。但是Access-Control-Allow-Originå°±ä¸�建议设置æˆ� * 了,为了安全考虑,é™�制域å��是很有必è¦�的。)</p><p><img src="/img/remote/1460000041794254" alt="图片" title="图片"></p><p>éƒ½åŠ ä¸Šå��,问题就解决了,这里报405是我æœ�务端这个æ�¥å�£å�ªå¼€æ”¾äº†GET,没有开放PUT,而此刻我将此æ�¥å�£ç”¨PUT方法å�»è¯·æ±‚,所以æ�¥å�£ä¼šè¿”å›�这个状æ€�ç �。</p><p><img src="/img/remote/1460000041794255" alt="图片" title="图片"></p><h6>情况5:</h6><p>最å��å†�说一ç§�情况,就是å��端处ç�†äº†è·¨åŸŸï¼Œå°±ä¸�需è¦�自己在处ç�†äº†ï¼ˆè¿™é‡Œå��槽下,æŸ�些å��端工程师自己改æœ�务端代ç �解决跨域,但是å�ˆä¸�ç�†è§£å…¶ä¸­å�Ÿç�†ï¼Œç½‘上éš�便找段代ç �é»�贴,导致å“�应信æ�¯å�¯èƒ½å¤„ç�†ä¸�完全,如methodæ²¡æ·»åŠ å…¨ï¼Œheadersæ²¡åŠ åˆ°ç‚¹ä¸Šï¼Œè‡ªå·±ç”¨çš„é‚£ä¸ªå�¯èƒ½å¤�制过æ�¥çš„å¹¶ä¸�包å�«å®�é™…é¡¹ç›®æ‰€ç”¨åˆ°çš„ï¼Œæ²¡æœ‰æ·»åŠ options请求返å›�状æ€�ç �等,导致Nginxå†�用通用的é…�置就会å�¯èƒ½æŠ¥ä»¥ä¸‹å¼‚常)</p><pre><code>Access to XMLHttpRequest at 'http://localhost:22222/api/Login/TestGet' from origin 'http://localhost:8080' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, http://localhost:8080', but only one is allowed.</code></pre><p><img src="/img/remote/1460000041794256" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041794257" alt="图片" title="图片"></p><p>æ„�æ€�就是此刻Access-Control-Allow-Origin请求å“�应头返å›�了多个,而å�ªå…�许有一个,这ç§�情况当然修改é…�ç½®å�»æ�‰Access-Control-Allow-Origin这个é…�置就å�¯ä»¥äº†ï¼Œä¸�过é�‡åˆ°è¿™ç§�情况,建议Nginxé…�置和æœ�务端自己解决跨域å�ªé€‰å…¶ä¸€ã€‚(这里注æ„�如æ�œæŒ‰æˆ‘上é�¢çš„写法,if $request_method = 'OPTIONS' 这个里é�¢çš„Access-Control-Allow-Originå�¯ä¸�èƒ½åˆ é™¤ï¼Œåˆ é™¤!='OPTIONS'里é�¢çš„å°±å¥½äº†ï¼Œå› ä¸ºè¿™é‡Œå¦‚æ�œæ˜¯é¢„检请求直æ�¥å°±ruturn了,请求ä¸�会å†�转å�‘到59200æœ�务,如æ�œä¹Ÿåˆ 除了,就会报和情况1ä¸€æ ·çš„é”™è¯¯ã€‚æ‰€ä»¥ä¸ºä»€ä¹ˆè¯´è¦�ä¸�æœ�务端代ç �层é�¢è§£å†³è·¨åŸŸï¼Œè¦�ä¸�å°±Nginx代ç�†è§£å†³ï¼Œä¸�è¦�æ··ç�€æ��,ä¸�ç„¶ä¸�æ˜�白å�Ÿç�†çš„人,网上找一段代ç �贴就很å�¯èƒ½è§£å†³ä¸�了问题)</p><p>å†�贴一份完整é…�置(*å�·æ ¹æ�®è‡ªå·±â€˜å–œå¥½â€™å¡«å†™ï¼‰ï¼š</p><pre><code>server { listen 22222; server_name localhost; location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080'; add_header Access-Control-Allow-Headers '*'; add_header Access-Control-Allow-Methods '*'; add_header Access-Control-Allow-Credentials 'true'; return 204; } if ($request_method != 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; add_header Access-Control-Allow-Credentials 'true'; } proxy_pass http://localhost:59200; } }</code></pre><p>或者:</p><pre><code>server { listen 22222; server_name localhost; location / { add_header Access-Control-Allow-Origin 'http://localhost:8080' always; add_header Access-Control-Allow-Headers '*'; add_header Access-Control-Allow-Methods '*'; add_header Access-Control-Allow-Credentials 'true'; if ($request_method = 'OPTIONS') { return 204; } proxy_pass http://localhost:59200; } }</code></pre><p>最å��,这是一篇解决跨域é�‡åˆ°é—®é¢˜è§£å†³é—®é¢˜çš„过程,如æ�œè®¤çœŸçœ‹å®Œäº†ï¼Œæˆ‘相信应该都能很容易的ç�†è§£ï¼Œå¹¶ä¸”在å®�际使用中自己解决该问题,希望能帮助到大家,以上内容都是自己ç�†è§£è‡ªå·±æµ‹è¯•ç �出æ�¥çš„,如有ç�†è§£ä¸�对的地方,望大家指正。</p><blockquote>æ�¥æº�:cnblogs.com/fnz0/p/15803011.html</blockquote><p><strong>如æ�œæœ¬æ–‡å¯¹ä½ 有帮助的è¯�,欢è¿�</strong>点èµ�&转å�‘<strong>,这对我继续分享&åˆ›ä½œä¼˜è´¨æ–‡ç« é��常é‡�è¦�。感谢ğŸ™�ğŸ�»</strong></p><p><img src="/img/bVbHCzg" alt="" title=""></p> 互è�”网å��端技术大全ï¼�建议收è—� https://segmentfault.com/a/1190000041794118 2022-05-05T14:56:19+08:00 2022-05-05T14:56:19+08:00 民工哥 https://segmentfault.com/u/jishuroad 22 <p>工欲善其事,必先利其器;士欲宣其义,必先读其书。å��å�°å¼€å�‘作为互è�”网技术领域的æ�Œä¸Šæ˜�ç� ,一直都是开å�‘者们的追é€�的高峰。本文将ä»�å��å�°å¼€å�‘所涉å�Šåˆ°çš„æŠ€æœ¯æœ¯è¯­å‡ºå�‘,基äº�系统开å�‘ã€�æ�¶æ�„设计ã€�ç½‘ç»œé€šä¿¡ç­‰å‡ ä¸ªæ–¹é�¢è®©å¤§å®¶å¯¹å��å�°å¼€å�‘有一个清晰的了解,讲解全é�¢æ˜“懂。</p><h2>系统开å�‘</h2><h6>1. 高内è�š/ä½�耦å�ˆ</h6><p>高内è�šæŒ‡ä¸€ä¸ªè½¯ä»¶æ¨¡å�—是由相关性很强的代ç �组æˆ�,å�ªè´Ÿè´£ä¸€é¡¹ä»»åŠ¡ï¼Œä¹Ÿå°±æ˜¯å¸¸è¯´çš„å�•一责任å�Ÿåˆ™ã€‚模å�—的内è�šå��æ˜ æ¨¡å�—内部è�”系的紧密程度。</p><p>模å�—之间è�”系越紧密,其耦å�ˆæ€§å°±è¶Šå¼ºï¼Œæ¨¡å�—的独立性则越差。模å�—间耦å�ˆé«˜ä½�å�–决äº�模å�—é—´æ�¥å�£çš„å¤�æ�‚性ã€�调用的方å¼�å�Šä¼ 递的信æ�¯ã€‚一个完整的系统,模å�—ä¸�模å�—之间,尽å�¯èƒ½çš„使其独立存在。通常程åº�结æ�„中å�„模å�—的内è�šç¨‹åº¦è¶Šé«˜ï¼Œæ¨¡å�—间的耦å�ˆç¨‹åº¦å°±è¶Šä½�。</p><h6>2. 过度设计</h6><p>过度设计就是进行了过多的é�¢å�‘未æ�¥çš„设计或者说把相对简å�•的事情想å¤�æ�‚了,过度追求模å�—化ã€�å�¯æ‰©å±•性ã€�设计模å¼�等,为系统å¢�åŠ äº†ä¸�å¿…è¦�çš„å¤�æ�‚度。</p><h6>3. 过早优化</h6><p>过早指的ä¸�是在开å�‘过程的早期,而是在还没弄清楚需求未æ�¥çš„å�˜åŒ–的走å�‘çš„æ—¶å€™ã€‚ä½ çš„ä¼˜åŒ–ä¸�ä»…å�¯èƒ½å¯¼è‡´ä½ æ— æ³•å¾ˆå¥½åœ°å®�ç�°æ–°çš„éœ€æ±‚ï¼Œè€Œä¸”ä½ å¯¹ä¼˜åŒ–çš„é¢„æœŸçš„çŒœæµ‹æœ‰å�¯èƒ½è¿˜æ˜¯é”™çš„,导致å®�é™…ä¸Šä½ é™¤äº†æŠŠä»£ç �å�˜å¤�æ�‚以外什么都没得到。</p><p>正确的方法是,先有质é‡�地å®�ç�°ä½ 的需求,写够testcase,然å��å�šprofileå�»æ‰¾åˆ°æ€§èƒ½çš„瓶颈,这个时候æ‰�å�šä¼˜åŒ–。</p><h6>4. é‡�æ�„ (Refactoring)</h6><p>é‡�æ�„(Refactoring)就是通过调整程åº�代ç �改善软件的质é‡�ã€�性能,使其程åº�的设计模å¼�å’Œæ�¶æ�„æ›´è¶‹å�ˆç�†ï¼Œæ��高软件的扩展性和维护性。</p><h6>5. ç ´çª—æ•ˆåº”</h6><p>å�ˆç§°ç ´çª—ç�†è®ºï¼Œç ´çª—效应(Broken windows theory)是犯罪学的一个ç�†è®ºã€‚æ­¤ç�†è®ºè®¤ä¸ºç�¯å¢ƒä¸­çš„ä¸�良ç�°è±¡å¦‚æ�œè¢«æ”¾ä»»å­˜åœ¨ï¼Œä¼šè¯±ä½¿äººä»¬ä»¿æ•ˆï¼Œç”šè‡³å�˜æœ¬åŠ å�‰ã€‚ä¸€å¹¢æœ‰å°‘è®¸ç ´çª—çš„å»ºç­‘ä¸ºä¾‹ï¼Œå¦‚æ�œé‚£äº›çª—ä¸�被修ç�†å¥½ï¼Œå�¯èƒ½å°†ä¼šæœ‰ç ´å��è€…ç ´å��更多的窗户。最终他们甚至会闯入建筑内,如æ�œå�‘ç�°æ— 人居ä½�,也许就在那里定居或者纵ç�«ã€‚</p><p>应用在软件工程上就是,一定ä¸�能让系统代ç �或者æ�¶æ�„设计的éš�患有冒头的机会,å�¦åˆ™éš�ç�€æ—¶é—´çš„æ�¨ç§»ï¼Œéš�患会越æ�¥è¶Šé‡�。å��之,一个本身优质的系统,会让人ä¸�由自主的写出优质的代ç �。</p><h6>6. 互ä¸�ä¿¡ä»»å�Ÿåˆ™</h6><p>指在程åº�è¿�行上下游的整个链路中,æ¯�个点都是ä¸�能ä¿�è¯�ç»�对å�¯é� 的,任何一个点都å�¯èƒ½éš�æ—¶å�‘生故障或者ä¸�å�¯é¢„知的行为,包括机器网络ã€�æœ�务本身ã€�ä¾�èµ–ç�¯å¢ƒã€�è¾“å…¥å’Œè¯·æ±‚ç­‰ï¼Œå› æ­¤è¦�处处设防。</p><h6>7. æŒ�久化 (Persistence)</h6><p>æŒ�久化是将程åº�æ•°æ�®åœ¨ä¸´æ—¶çжæ€�å’ŒæŒ�久状æ€�间转æ�¢çš„æœºåˆ¶ã€‚通俗的讲,就是临时数æ�®ï¼ˆæ¯”如内存中的数æ�®ï¼Œæ˜¯ä¸�能永久ä¿�存的)æŒ�久化为æŒ�ä¹…æ•°æ�®ï¼ˆæ¯”如æŒ�久化至数æ�®åº“或者本地ç£�盘中,能够长久ä¿�存)。</p><h6>8. 临界区</h6><p>临界区用æ�¥è¡¨ç¤ºä¸€ç§�公共资æº�或者说是共享数æ�®ï¼Œå�¯ä»¥è¢«å¤šä¸ªçº¿ç¨‹ä½¿ç”¨ï¼Œä½†æ˜¯æ¯�一次,å�ªèƒ½æœ‰ä¸€ä¸ªçº¿ç¨‹ä½¿ç”¨å®ƒï¼Œä¸€æ—¦ä¸´ç•ŒåŒºèµ„æº�被å� 用,其他线程è¦�想使用这个资æº�,就必须等待。</p><h6>9. 阻å¡�/é��阻å¡�</h6><p>阻å¡�å’Œé��阻å¡�通常形容多线程间的相互影å“�。比如一个线程å� 用了临界区资æº�,那么其它所有需è¦�这个资æº�的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这ç§�情况就是阻å¡�。此时,如æ�œå� 用资æº�的线程一直ä¸�æ„¿æ„�释放资æº�,那么其它所有阻å¡�在这个临界区上的线程都ä¸�能工作。而é��阻å¡�å…�许多个线程å�Œæ—¶è¿›å…¥ä¸´ç•ŒåŒºã€‚</p><h6>10. å�Œæ­¥/异步</h6><p>通常å�Œæ­¥å’Œå¼‚步是指函数/方法调用方é�¢ã€‚</p><p>å�Œæ­¥å°±æ˜¯åœ¨å�‘出一个函数调用时,在没有得到结æ�œä¹‹å‰�,该调用就ä¸�è¿”å›�。异步调用会ç�¬é—´è¿”å›�,但是异步调用ç�¬é—´è¿”å›�å¹¶ä¸�ä»£è¡¨ä½ çš„ä»»åŠ¡å°±å®Œæˆ�了,他会在å��å�°èµ·ä¸ªçº¿ç¨‹ç»§ç»­è¿›è¡Œä»»åŠ¡ï¼Œç­‰ä»»åŠ¡æ‰§è¡Œå®Œæ¯•å��通过å›�è°ƒcallback或其他方å¼�通知调用方。</p><h6>11. å¹¶å�‘/并行</h6><p>并行(parallel)指在å�Œä¸€æ—¶åˆ»ï¼Œæœ‰å¤šæ�¡æŒ‡ä»¤åœ¨å¤šä¸ªå¤„ç�†å™¨ä¸Šå�Œæ—¶æ‰§è¡Œã€‚æ‰€ä»¥æ— è®ºä»�微观还是ä»�å®�è§‚æ�¥çœ‹ï¼ŒäºŒè€…都是一起执行的。</p><p>å¹¶å�‘(concurrency)指在å�Œä¸€æ—¶åˆ»å�ªèƒ½æœ‰ä¸€æ�¡æŒ‡ä»¤æ‰§è¡Œï¼Œä½†å¤šä¸ªè¿›ç¨‹æŒ‡ä»¤è¢«å¿«é€Ÿçš„è½®æ�¢æ‰§è¡Œï¼Œä½¿å¾—在å®�观上具有多个进程å�Œæ—¶æ‰§è¡Œçš„æ•ˆæ�œï¼Œä½†åœ¨å¾®è§‚上并ä¸�是å�Œæ—¶æ‰§è¡Œçš„,å�ªæ˜¯æŠŠæ—¶é—´åˆ†æˆ�若干段,使多个进程快速交替的执行。</p><h2>æ�¶æ�„设计</h2><h6>1. 高并å�‘ (High Concurrency)</h6><p>ç”±äº�分布å¼�系统的问世,高并å�‘(High Concurrency)通常是指通过设计ä¿�è¯�系统能够å�Œæ—¶å¹¶è¡Œå¤„ç�†å¾ˆå¤šè¯·æ±‚。通俗æ�¥è®²ï¼Œé«˜å¹¶å�‘是指在å�Œä¸€ä¸ªæ—¶é—´ç‚¹ï¼Œæœ‰å¾ˆå¤šç”¨æˆ·å�Œæ—¶çš„访问å�Œä¸€ API æ�¥å�£æˆ–者 Url 地å�€ã€‚它ç»�常会å�‘生在有大活跃用户é‡�,用户高è�šé›†çš„业务场景中。</p><h6>2. 高å�¯ç”¨ (High Availability)</h6><p>高å�¯ç”¨HA(High Availability)是分布å¼�系统æ�¶æ�„è®¾è®¡ä¸­å¿…é¡»è€ƒè™‘çš„å› ç´ ä¹‹ä¸€ï¼Œå®ƒé€šå¸¸æ˜¯æŒ‡ï¼Œä¸€ä¸ªç³»ç»Ÿç»�过专门的设计,以å‡�å°‘å�œå·¥æ—¶é—´ï¼Œè€Œä¿�æŒ�å…¶æœ�务的高度å�¯ç”¨æ€§ã€‚</p><h6>3. 读写分离</h6><p>为了确ä¿�æ•°æ�®åº“产å“�的稳定性,很多数æ�®åº“拥有å�Œæœºçƒ­å¤‡åŠŸèƒ½ã€‚ä¹Ÿå°±æ˜¯ï¼Œç¬¬ä¸€å�°æ•°æ�®åº“æœ�务器,是对外æ��ä¾›å¢�åˆ æ”¹ä¸šåŠ¡çš„ç”Ÿäº§æœ�务器;第二å�°æ•°æ�®åº“æœ�务器,主è¦�进行读的æ“�作。</p><h6>4. 冷备/热备</h6><p>冷备:两个æœ�务器,一å�°è¿�行,一å�°ä¸�è¿�行å�šä¸ºå¤‡ä»½ã€‚è¿™æ ·ä¸€æ—¦è¿�行的æœ�务器宕机,就把备份的æœ�务器è¿�行起æ�¥ã€‚冷备的方案比较容易å®�ç�°ï¼Œä½†å†·å¤‡çš„缺点是主机出ç�°æ•…障时备机ä¸�会自动æ�¥ç®¡ï¼Œéœ€è¦�主动切æ�¢æœ�务。</p><p>热备:å�³æ˜¯é€šå¸¸æ‰€è¯´çš„active/standbyæ–¹å¼�,æœ�务器数æ�®åŒ…括数æ�®åº“æ•°æ�®å�Œæ—¶å¾€ä¸¤å�°æˆ–多å�°æœ�务器写。当activeæœ�务器出ç�°æ•…障的时候,通过软件诊测(一般是通过心跳诊断)将standby机器激活,ä¿�è¯�应用在短时间内完全æ�¢å¤�正常使用。当一å�°æœ�务器宕机å��,自动切æ�¢åˆ°å�¦ä¸€å�°å¤‡ç”¨æœºä½¿ç”¨ã€‚</p><h6>5. 异地多活</h6><p>异地多活一般是指在ä¸�å�ŒåŸ�市建立独立的数æ�®ä¸­å¿ƒï¼Œâ€œæ´»â€�是相对äº�冷备份而言的,冷备份是备份全é‡�æ•°æ�®ï¼Œå¹³æ—¶ä¸�支撑业务需求,å�ªæœ‰åœ¨ä¸»æœºæˆ¿å‡ºç�°æ•…障的时候æ‰�会切æ�¢åˆ°å¤‡ç”¨æœºæˆ¿ï¼Œè€Œå¤šæ´»ï¼Œæ˜¯æŒ‡è¿™äº›æœºæˆ¿åœ¨æ—¥å¸¸çš„业务中也需è¦�èµ°æµ�é‡�,å�šä¸šåŠ¡æ”¯æ’‘ã€‚</p><h6>6. è´Ÿè½½å�‡è¡¡ (Load Balance)</h6><p>è´Ÿè½½å�‡è¡¡ï¼Œæ˜¯å¯¹å¤šå�°æœ�务器进行æµ�é‡�分å�‘的负载å�‡è¡¡æœ�务。å�¯åœ¨å¤šä¸ªå®�例间自动分é…�应用程åº�的对外æœ�务能力,通过消除å�•点故障æ��å�‡åº”用系统的å�¯ç”¨æ€§ï¼Œè®©æ‚¨å®�ç�°æ›´é«˜æ°´å¹³çš„应用程åº�容错能力,ä»�è€Œæ— ç¼�æ��供分é…�应用程åº�æµ�é‡�所需的负载å�‡è¡¡å®¹é‡�,为您æ��供高效ã€�稳定ã€�安全的æœ�务。</p><h6>7. 动é�™åˆ†ç¦»</h6><p>动é�™åˆ†ç¦»æ˜¯æŒ‡åœ¨webæœ�务器æ�¶æ�„中,将é�™æ€�页é�¢ä¸�动æ€�页é�¢æˆ–者é�™æ€�内容æ�¥å�£å’ŒåЍæ€�内容æ�¥å�£åˆ†å¼€ä¸�å�Œç³»ç»Ÿè®¿é—®çš„æ�¶æ�„设计方法,进而æ��å�‡æ•´ä¸ªæœ�务访问性能和å�¯ç»´æŠ¤æ€§ã€‚</p><h6>8. 集群</h6><p>å�•å�°æœ�务器的并å�‘承载能力总是有é™�的,当å�•å�°æœ�务器处ç�†èƒ½åŠ›è¾¾åˆ°æ€§èƒ½ç“¶é¢ˆçš„æ—¶ï¼Œå°†å¤šå�°æœ�务器组å�ˆèµ·æ�¥æ��ä¾›æœ�务,这ç§�组å�ˆæ–¹å¼�称之为集群,集群中æ¯�å�°æœ�务器就å�«å�šè¿™ä¸ªé›†ç¾¤çš„一个“节点â€�,æ¯�个节点都能æ��供相å�Œçš„æœ�务,ä»�而æˆ�å€�çš„æ��å�‡æ•´ä¸ªç³»ç»Ÿçš„å¹¶å�‘处ç�†èƒ½åŠ›ã€‚</p><h6>9. 分布å¼�</h6><p>分布å¼�系统就是将一个完整的系统按照业务功能拆分æˆ�很多独立的å­�系统,æ¯�个å­�系统就被称为“æœ�务â€�,分布å¼�系统将请求分拣和分å�‘到ä¸�å�Œçš„å­�系统,让ä¸�å�Œçš„æœ�务æ�¥å¤„ç�†ä¸�å�Œçš„请求。在分布å¼�系统中,å­�系统独立è¿�行,它们之间通过网络通信è¿�æ�¥èµ·æ�¥å®�ç�°æ•°æ�®äº’通和组å�ˆæœ�务。</p><h6>10. CAPç�†è®º</h6><p>CAPç�†è®ºï¼ŒæŒ‡çš„æ˜¯åœ¨ä¸€ä¸ªåˆ†å¸ƒå¼�系统中,Consistency(一致性)ã€�Availability(å�¯ç”¨æ€§)ã€�Partition Tolerance(分区容错性),ä¸�能å�Œæ—¶æˆ�立。</p><ul><li>一致性:它è¦�求在å�Œä¸€æ—¶åˆ»ç‚¹ï¼Œåˆ†å¸ƒå¼�系统中的所有数æ�®å¤‡ä»½éƒ½ç›¸å�Œæˆ–者都处äº�å�Œä¸€çжæ€�。</li><li>å�¯ç”¨æ€§ï¼šåœ¨ç³»ç»Ÿé›†ç¾¤çš„一部分节点宕机å��,系统ä¾�然能够正确的å“�应用户的请求。</li><li>分区容错性:系统能够容å¿�节点之间的网络通信的故障。</li></ul><p>简å�•çš„æ�¥è¯´ï¼Œåœ¨ä¸€ä¸ªåˆ†å¸ƒå¼�系统中,最多能支æŒ�上é�¢çš„两ç§�å±�性。但显然既然是分布å¼�注定我们是必然è¦�è¿›è¡Œåˆ†åŒºï¼Œæ—¢ç„¶åˆ†åŒºï¼Œæˆ‘ä»¬å°±æ— æ³•ç™¾åˆ†ç™¾é�¿å…�åˆ†åŒºçš„é”™è¯¯ã€‚å› æ­¤ï¼Œæˆ‘ä»¬å�ªèƒ½åœ¨ä¸€è‡´æ€§å’Œå�¯ç”¨æ€§å�»ä½œå‡ºé€‰æ‹©ã€‚</p><p>在分布å¼�系统中,我们往往追求的是å�¯ç”¨æ€§ï¼Œå®ƒçš„é‡�è¦�性比一致性è¦�高,那么如何å®�ç�°é«˜å�¯ç”¨ï¼Œè¿™é‡Œå�ˆæœ‰ä¸€ä¸ªç�†è®ºï¼Œå°±æ˜¯ BASE ç�†è®ºï¼Œå®ƒç»™ CAP ç�†è®ºå�šäº†è¿›ä¸€æ­¥çš„æ‰©å……。</p><h6>11. BASEç�†è®º</h6><p>BASE ç�†è®ºæŒ‡å‡ºï¼š</p><ul><li>Basically Available(基本å�¯ç”¨ï¼‰</li><li>Soft state(软状æ€�)</li><li>Eventually consistent(最终一致性)</li></ul><p>BASE ç�†è®ºæ˜¯å¯¹ CAP 中的一致性和å�¯ç”¨æ€§è¿›è¡Œä¸€ä¸ªæ�ƒè¡¡çš„结æ�œï¼Œç�†è®ºçš„æ ¸å¿ƒæ€�æƒ³å°±æ˜¯ï¼šæˆ‘ä»¬æ— æ³•å�šåˆ°å¼ºä¸€è‡´ï¼Œä½†æ¯�个应用都å�¯ä»¥æ ¹æ�®è‡ªèº«çš„业务特点,采用适当的方å¼�æ�¥ä½¿ç³»ç»Ÿè¾¾åˆ°æœ€ç»ˆä¸€è‡´æ€§ã€‚</p><h6>12. 水平扩展/å�‚直扩展</h6><p>水平扩展 Scale Out通过å¢�åŠ æ›´å¤šçš„æœ�务器或者程åº�å®�例æ�¥åˆ†æ•£è´Ÿè½½ï¼Œä»�而æ��å�‡å­˜å‚¨èƒ½åŠ›å’Œè®¡ç®—èƒ½åŠ›ã€‚</p><p>å�‚直扩展 Scale Up æ��å�‡å�•机处ç�†èƒ½åŠ›ã€‚</p><p>å�‚直扩展的方å¼�å�ˆæœ‰ä¸¤ç§�:</p><ul><li>(1)å¢�强å�•机硬件性能,例如:å¢�åŠ CPUæ ¸æ•°å¦‚32æ ¸ï¼Œå�‡çº§æ›´å¥½çš„网å�¡å¦‚万兆,å�‡çº§æ›´å¥½çš„硬盘如SSD,扩充硬盘容é‡�如2T,扩充系统内存如128G;</li><li>(2)æ��å�‡å�•机软件或者æ�¶æ�„性能,例如:使用Cacheæ�¥å‡�å°‘IO次数,使用异步æ�¥å¢�åŠ å�•æœ�务å��å��é‡�ï¼Œä½¿ç”¨æ— é”�æ•°æ�®ç»“æ�„æ�¥å‡�å°‘å“�应时间;</li></ul><h6>13. 平行扩容</h6><p>ä¸�水平扩展类似。集群æœ�务器中的节点å�‡ä¸ºå¹³è¡Œå¯¹ç­‰èŠ‚ç‚¹ï¼Œå½“éœ€è¦�扩容时,å�¯ä»¥é€šè¿‡æ·»åŠ æ›´å¤šèŠ‚ç‚¹ä»¥æ��高集群的æœ�务能力。一般æ�¥è¯´æœ�务器中关键路径(如æœ�务器中的登录ã€�支付ã€�æ ¸å¿ƒä¸šåŠ¡é€»è¾‘ç­‰ï¼‰éƒ½éœ€è¦�支æŒ�è¿�行时动æ€�平行扩容。</p><h6>14. 弹性扩容</h6><p>指对部署的集群进行动æ€�在线扩容。弹性扩容系统å�¯ä»¥æ ¹æ�®å®�际业务ç�¯å¢ƒæŒ‰ç…§ä¸€å®šç­–ç•¥è‡ªåŠ¨åœ°æ·»åŠ æ›´å¤šçš„èŠ‚ç‚¹ï¼ˆåŒ…æ‹¬å­˜å‚¨èŠ‚ç‚¹ã€�计算节点ã€�网络节点)æ�¥å¢�åŠ ç³»ç»Ÿå®¹é‡�ã€�æ��高系统性能或者å¢�强系统å�¯é� 性,或者å�Œæ—¶å®Œæˆ�è¿™ä¸‰ä¸ªç›®æ ‡ã€‚</p><h6>15. 状æ€�å�Œæ­¥/帧å�Œæ­¥</h6><p>状æ€�å�Œæ­¥ï¼šçжæ€�å�Œæ­¥æ˜¯æŒ‡æœ�务器负责计算全部的游æˆ�逻辑,并且广播这些计算的结æ�œï¼Œå®¢æˆ·ç«¯ä»…ä»…è´Ÿè´£å�‘é€�ç�©å®¶çš„æ“�作,以å�Šè¡¨ç�°æ”¶åˆ°çš„æ¸¸æˆ�结æ�œã€‚</p><p>特å¾�:状æ€�å�Œæ­¥å®‰å…¨æ€§é«˜ï¼Œé€»è¾‘更新方便,断线é‡�è¿�快,但是开å�‘效ç�‡è¾ƒä½�,网络æµ�é‡�éš�游æˆ�å¤�æ�‚度å¢�åŠ ï¼Œæœ�务器需è¦�承载更大å�‹åŠ›ã€‚</p><p>帧å�Œæ­¥ï¼šæœ�务端å�ªè½¬å�‘消æ�¯ï¼Œä¸�å�šä»»ä½•逻辑处ç�†ï¼Œå�„客户端æ¯�秒帧数一致,在æ¯�一帧都处ç�†å�Œæ ·çš„输入数æ�®ã€‚</p><p>特å¾�:帧å�Œæ­¥éœ€è¦�ä¿�è¯�系统在相å�Œçš„输入下,è¦�有相å�Œçš„输出。帧å�Œæ­¥å¼€å�‘效ç�‡é«˜ï¼Œæµ�é‡�消耗ä½�而且稳定,对æœ�务器的å�‹åŠ›é��常å°�。但是网络è¦�求高,断线é‡�è¿�时间长,客户端计算å�‹åŠ›å¤§ã€‚</p><h2>网络通信</h2><h6>1. è¿�æ�¥æ± </h6><p>预先建立一个è¿�æ�¥ç¼“å†²æ± ï¼Œå¹¶æ��供一套è¿�æ�¥ä½¿ç”¨ã€�分é…�ã€�管ç�†ç­–略,使得该è¿�æ�¥æ± 中的è¿�æ�¥å�¯ä»¥å¾—到高效ã€�安全的å¤�用,é�¿å…�了è¿�æ�¥é¢‘ç¹�建立ã€�关闭的开销。</p><h6>2. 断线é‡�è¿�</h6><p>ç”±äº�ç½‘ç»œæ³¢åŠ¨é€ æˆ�用户间歇性的断开ä¸�æœ�务器的è¿�æ�¥ï¼Œå¾…网络æ�¢å¤�之å��æœ�务器å°�试将用户è¿�æ�¥åˆ°ä¸Šæ¬¡æ–­å¼€æ—¶çš„状æ€�和数æ�®ã€‚</p><h6>3. 会è¯�ä¿�æŒ�</h6><p>会è¯�ä¿�æŒ�是指在负载å�‡è¡¡å™¨ä¸Šçš„一ç§�机制,å�¯ä»¥è¯†åˆ«å®¢æˆ·ç«¯ä¸�æœ�务器之间交互过程的关è¿�性,在作负载å�‡è¡¡çš„å�Œæ—¶è¿˜ä¿�è¯�一系列相关è¿�的访问请求都会分é…�到一å�°æœºå™¨ä¸Šã€‚用人è¯�æ�¥è¡¨è¿°å°±æ˜¯ï¼šåœ¨ä¸€æ¬¡ä¼šè¯�过程中å�‘起的多个请求都会è�½åˆ°å�Œä¸€å�°æœºå™¨ä¸Šã€‚</p><h6>4. é•¿è¿�æ�¥/短è¿�æ�¥</h6><p>通常是指TCP的长è¿�æ�¥å’ŒçŸ­è¿�æ�¥ã€‚é•¿è¿�æ�¥å°±æ˜¯å»ºç«‹TCPè¿�æ�¥å��,一直ä¿�æŒ�这个è¿�æ�¥ï¼Œä¸€èˆ¬ä¼šä¸­é—´å½¼æ­¤å�‘é€�心跳æ�¥ç¡®è®¤å¯¹åº”的存在,中间会å�šå¤šæ¬¡ä¸šåŠ¡æ•°æ�®ä¼ 输,一般ä¸�会主动断开è¿�æ�¥ã€‚短è¿�æ�¥ä¸€èˆ¬æŒ‡å»ºç«‹è¿�æ�¥å��,执行一次事务å��(如:http请求),然å��就关æ�‰è¿™ä¸ªè¿�æ�¥ã€‚</p><h6>5. æµ�é‡�æ�§åˆ¶/æ‹¥å¡�æ�§åˆ¶</h6><p>æµ�é‡�æ�§åˆ¶é˜²æ­¢å�‘é€�æ–¹å�‘的太快,耗尽æ�¥æ”¶æ–¹çš„资æº�,ä»�而使æ�¥æ”¶æ–¹æ�¥ä¸�å�Šå¤„ç�†ã€‚</p><p>æ‹¥å¡�æ�§åˆ¶é˜²æ­¢å�‘é€�æ–¹å�‘的太快,使得网络æ�¥ä¸�å�Šå¤„ç�†äº§ç”Ÿæ‹¥å¡�,进而引起这部分乃至整个网络性能下é™�çš„ç�°è±¡ï¼Œä¸¥é‡�时甚至会导致网络通信业务陷入å�œé¡¿ã€‚</p><h6>6. 惊群效应</h6><p>惊群效应也有人å�«å�šé›·é¸£ç¾¤ä½“效应,ä¸�过å�«ä»€ä¹ˆï¼Œç®€è¨€ä¹‹ï¼ŒæƒŠç¾¤ç�°è±¡å°±æ˜¯å¤šè¿›ç¨‹ï¼ˆå¤šçº¿ç¨‹ï¼‰åœ¨å�Œæ—¶é˜»å¡�等待å�Œä¸€ä¸ªäº‹ä»¶çš„æ—¶å€™ï¼ˆä¼‘çœ çŠ¶æ€�),如æ�œç­‰å¾…的这个事件å�‘生,那么他就会唤醒等待的所有进程(或者线程),但是最终å�´å�ªå�¯èƒ½æœ‰ä¸€ä¸ªè¿›ç¨‹ï¼ˆçº¿ç¨‹ï¼‰è�·å¾—这个时间的“æ�§åˆ¶æ�ƒâ€�,对该事件进行处ç�†ï¼Œè€Œå…¶ä»–进程(线程)è�·å�–“æ�§åˆ¶æ�ƒâ€�失败,å�ªèƒ½é‡�æ–°è¿›å…¥ä¼‘çœ çŠ¶æ€�,这ç§�ç�°è±¡å’Œæ€§èƒ½æµªè´¹å°±å�«å�šæƒŠç¾¤ã€‚</p><h6>7. NAT</h6><p>NAT(Network Address Translation,网络地å�€è½¬æ�¢ï¼‰ï¼Œå°±æ˜¯æ›¿æ�¢IP报文头部的地å�€ä¿¡æ�¯ã€‚NAT通常部署在一个组织的网络出å�£ä½�置,通过将内部网络IP地å�€æ›¿æ�¢ä¸ºå‡ºå�£çš„IP地å�€æ��供公网å�¯è¾¾æ€§å’Œä¸Šå±‚å��议的è¿�æ�¥èƒ½åŠ›ã€‚</p><h2>故障异常</h2><h6>1. 宕机</h6><p>宕机,一般情况下指的就是计算机主机出ç�°æ„�外故障而死机。其次,一些æœ�务器例如数æ�®åº“æ­»é”�也å�¯ä»¥ç§°ä¸ºå®•机,一些æœ�务器的æŸ�些æœ�务挂æ�‰äº†ï¼Œå°±å�¯ä»¥è¿™ä¹ˆè¯´ã€‚</p><h6>2. coredump</h6><p>当程åº�出错而异常中断时,OS会把程åº�工作的当å‰�状æ€�存储æˆ�一个coredunmp文件。通常情况下coredump文件包å�«äº†ç¨‹åº�è¿�行时的内存,寄存器状æ€�ï¼Œå †æ ˆæŒ‡é’ˆï¼Œå†…å­˜ç®¡ç�†ä¿¡æ�¯ç­‰ã€‚</p><h6>3. 缓存穿é€�/击穿/雪崩</h6><p>缓存穿é€�:缓存穿é€�是指查询一个一定ä¸�存在的数æ�®ï¼Œç”±äº�缓存是ä¸�命中时需è¦�ä»�æ•°æ�®åº“查询,查ä¸�到数æ�®åˆ™ä¸�写入缓存,这将导致这个ä¸�存在的数æ�®æ¯�次请求都è¦�到数æ�®åº“å�»æŸ¥è¯¢ï¼Œè¿›è€Œç»™æ•°æ�®åº“带æ�¥å�‹åŠ›ã€‚</p><p>缓存击穿:缓存击穿是指热点key在æŸ�个时间点过期的时候,而æ�°å¥½åœ¨è¿™ä¸ªæ—¶é—´ç‚¹å¯¹è¿™ä¸ªKey有大é‡�的并å�‘请求过æ�¥ï¼Œä»�而大é‡�的请求打到db。</p><p>缓存雪崩:缓存雪崩是指缓存中数æ�®å¤§æ‰¹é‡�到过期时间,而查询数æ�®é‡�巨大,引起数æ�®åº“å�‹åŠ›è¿‡å¤§ç”šè‡³down机。</p><p>ä¸�缓存击穿ä¸�å�Œçš„æ˜¯ï¼šå­˜å‡»ç©¿æ˜¯çƒ­ç‚¹key失效,缓存雪崩是大é‡�çš„keyå�Œæ—¶å¤±æ•ˆã€‚</p><h6>4. 500/501/502/503/504/505</h6><p>500 Internal Server Error:内部æœ�务错误,一般是æœ�务器é�‡åˆ°æ„�å¤–æƒ…å†µï¼Œè€Œæ— æ³•å®Œæˆ�请求。å�¯èƒ½å�Ÿå› : </p><ul><li>1ã€�程åº�错误,例如:ASP或者PHP语法错误;</li><li>2ã€�高并å�‘导致,系统资æº�é™�制ä¸�能打开过多的文件所致。</li></ul><p>501 Not implemented:æœ�务器ä¸�ç�†è§£æˆ–ä¸�支æŒ�请求的HTTP请求。</p><p>502 Bad Gateway:WEBæœ�务器故障,å�¯èƒ½æ˜¯ç”±äº�程åº�进程ä¸�够,请求的php-fpmå·²ç»�执行,但是由äº�æŸ�ç§�å�Ÿå› 而没有执行完毕,最终导致php-fpm进程终止。å�¯èƒ½å�Ÿå› :</p><ul><li>1ã€�Nginxæœ�务器,php-cgi进程数ä¸�够用;</li><li>2ã€�PHP执行时间过长;</li><li>3ã€�php-cgi进程死æ�‰ï¼›</li></ul><p>503 Service Unavailable:æœ�务器目å‰�æ— æ³•ä½¿ç”¨ã€‚ç³»ç»Ÿç»´æŠ¤æœ�åŠ¡å™¨æš‚æ—¶çš„æ— æ³•å¤„ç�†å®¢æˆ·ç«¯çš„请求,这å�ªæ˜¯æš‚时状æ€�。å�¯ä»¥è�”系下æœ�务器æ��供商。</p><p>504 Gateway Timeout:æœ�务器504错误表示超时,是指客户端所å�‘出的请求没有到达网关,请求没有到å�¯ä»¥æ‰§è¡Œçš„php-fpm,一般是ä¸�nginx.confçš„é…�置有关。</p><p>505 HTTP Version Not Supported:æœ�务器ä¸�支æŒ�请求中所用的 HTTP å��议版本。(HTTP 版本ä¸�å�—支æŒ�)</p><p>除了500错误å�¯èƒ½æ˜¯ç¨‹åº�语言错误,其余的报错,都大概å�¯ä»¥ç�†è§£ä¸ºæœ�务器或者æœ�务器é…�置出ç�°é—®é¢˜ã€‚</p><h6>5. 内存溢出/内存泄æ¼�</h6><p>内存溢出:内存溢出(Out Of Memory)指程åº�ç”³è¯·å†…å­˜æ—¶ï¼Œæ²¡æœ‰è¶³å¤Ÿçš„å†…å­˜ä¾›ç”³è¯·è€…ä½¿ç”¨ï¼Œæˆ–è€…è¯´ï¼Œç»™äº†ä½ ä¸€å�—存储intç±»å�‹æ•°æ�®çš„å­˜å‚¨ç©ºé—´ï¼Œä½†æ˜¯ä½ å�´å­˜å‚¨longç±»å�‹çš„æ•°æ�®ï¼Œé‚£ä¹ˆç»“æ�œå°±æ˜¯å†…å­˜ä¸�够用,此时就会报错OOM,å�³æ‰€è°“的内存溢出。</p><p>内存泄æ¼�:内存泄æ¼�(Memory Leak)指程åº�中己动æ€�分é…�çš„å †å†…å­˜ç”±äº�æŸ�ç§�å�Ÿå› 程åº�æœªé‡Šæ”¾æˆ–æ— æ³•é‡Šæ”¾ï¼Œé€ æˆ�系统内存的浪费,导致程åº�è¿�行速度å‡�慢甚至系统崩溃等严é‡�å��æ�œã€‚</p><h6>6. å�¥æŸ„泄æ¼�</h6><p>å�¥æŸ„泄æ¼�是进程在调用系统文件之å��,没有释放已ç»�打开的文件å�¥æŸ„。一般å�¥æŸ„泄æ¼�å��çš„ç�°è±¡æ˜¯ï¼Œæœºå™¨å�˜æ…¢ï¼ŒCPU飙å�‡ï¼Œå‡ºç�°å�¥æŸ„泄æ¼�çš„cgi或serverçš„CPU使用ç�‡å¢�åŠ ã€‚</p><h6>7. æ­»é”�</h6><p>æ­»é”�是指两个或两个以上的线程在执行过程中,由äº�ç«�争资æº�或者由äº�å½¼æ­¤é€šä¿¡è€Œé€ æˆ�的一ç§�阻å¡�çš„ç�°è±¡ï¼Œè‹¥æ— 外力作用,它们都抑制处äº�阻å¡�状æ€�å¹¶æ— æ³•è¿›è¡Œä¸‹å�»ï¼Œæ­¤æ—¶ç§°ç³»ç»Ÿå¤„äº�æ­»é”�状æ€�或系统产生了死é”�。</p><h6>8. 软中断/硬中断</h6><p>硬中断:我们通常所说的中断指的是硬中断(hardirq)。</p><p>主è¦�是用æ�¥é€šçŸ¥æ“�作系统系统外设状æ€�çš„å�˜åŒ–。</p><p>软中断:1ã€�通常是硬中断æœ�务程åº�å¯¹å†…æ ¸çš„ä¸­æ–­ï¼›2ã€�为了满足å®�时系统的è¦�求,中断处ç�†åº”该是越快越好。</p><p>linux为了å®�ç�°è¿™ä¸ªç‰¹ç‚¹ï¼Œå½“中断å�‘生的时候,硬中断处ç�†é‚£äº›çŸ­æ—¶é—´å°±å�¯ä»¥å®Œæˆ�的工作,而将那些处ç�†äº‹ä»¶æ¯”较长的工作,放到中断之å��æ�¥å®Œæˆ�,也就是软中断(softirq)æ�¥å®Œæˆ�。</p><h6>9. 毛刺</h6><p>在短暂的æŸ�一刻,æœ�åŠ¡å™¨æ€§èƒ½æŒ‡æ ‡ï¼ˆå¦‚æµ�é‡�ã€�ç£�盘IOã€�CPU使用ç�‡ç­‰ï¼‰è¿œå¤§äº�该时刻å‰�å��时间段。毛刺的出ç�°ä»£è¡¨è¿™æœ�务器资æº�利用ä¸�å�‡åŒ€ï¼Œä¸�充分,容易诱å�‘其他更严é‡�的问题。</p><h6>10. é‡�放攻击</h6><p>攻击者å�‘é€�一个目的主机已æ�¥æ”¶è¿‡çš„包,æ�¥è¾¾åˆ°æ¬ºéª—系统的目的,主è¦�用äº�身份认è¯�è¿‡ç¨‹ï¼Œç ´å��认è¯�的正确性。它是一ç§�攻击类å�‹ï¼Œè¿™ç§�攻击会ä¸�æ–­æ�¶æ„�或欺诈性地é‡�å¤�一个有效的数æ�®ä¼ 输,é‡�放攻击å�¯ä»¥ç”±å�‘起者,也å�¯ä»¥ç”±æ‹¦æˆªå¹¶é‡�å�‘该数æ�®çš„æ•Œæ–¹è¿›è¡Œã€‚攻击者利用网络监å�¬æˆ–者其他方å¼�ç›—å�–认è¯�凭æ�®ï¼Œä¹‹å��å†�把它é‡�æ–°å�‘给认è¯�æœ�务器。</p><h6>11. 网络孤岛</h6><p>网络孤岛指集群ç�¯å¢ƒä¸­ï¼Œéƒ¨åˆ†æœºå™¨ä¸�整个集群失å�»ç½‘络è¿�æ�¥ï¼Œåˆ†è£‚为一个å°�集群并且å�‘生数æ�®ä¸�一致的状况。</p><h6>12. æ•°æ�®å€¾æ–œ</h6><p>对äº�集群系统,一般缓存是分布å¼�的,å�³ä¸�å�ŒèŠ‚ç‚¹è´Ÿè´£ä¸€å®šèŒƒå›´çš„ç¼“å­˜æ•°æ�®ã€‚我们把缓存数æ�®åˆ†æ•£åº¦ä¸�够,导致大é‡�的缓存数æ�®é›†ä¸­åˆ°äº†ä¸€å�°æˆ–è€…å‡ å�°æœ�务节点上,称为数æ�®å€¾æ–œã€‚一般æ�¥è¯´æ•°æ�®å€¾æ–œæ˜¯ç”±äº�è´Ÿè½½å�‡è¡¡å®�施的效æ�œä¸�好引起的。</p><h6>13. 脑裂</h6><p>脑裂是指在集群系统中,部分节点之间网络ä¸�å�¯è¾¾è€Œå¼•起的系统分裂,ä¸�å�Œåˆ†è£‚çš„å°�集群会按照å�„自的状æ€�æ��ä¾›æœ�务,å�Ÿæœ¬çš„集群会å�Œæ—¶å­˜åœ¨ä¸�一致的å��åº”ï¼Œé€ æˆ�节点之间互相争抢资æº�,系统混乱,数æ�®æ�Ÿå��。</p><h2>监æ�§å‘Šè­¦</h2><h6>1. æœ�务监æ�§</h6><p>æœ�务监æ�§ä¸»è¦�目的在æœ�务出ç�°é—®é¢˜æˆ–者快è¦�出ç�°é—®é¢˜æ—¶èƒ½å¤Ÿå‡†ç¡®å¿«é€Ÿåœ°å�‘ç�°ä»¥å‡�å°�å½±å“�范围。æœ�务监æ�§ä¸€èˆ¬æœ‰å¤šç§�手段,按层次å�¯åˆ’分为:</p><ul><li>系统层(CPUã€�网络状æ€�ã€�IOã€�机器负载等)</li><li>应用层(进程状æ€�ã€�错误日志ã€�å��å��é‡�等)</li><li>业务层(æœ�务/æ�¥å�£çš„错误ç �ã€�å“�应时间)</li><li>用户层(用户行为ã€�舆情监æ�§ã€�å‰�端埋点)</li></ul><h6>2. 全链路监æ�§</h6><p>æœ�务拨测:æœ�务拨测是æ�¢æµ‹æœ�务(应用)å�¯ç”¨æ€§çš„监æ�§æ–¹å¼�ï¼Œé€šè¿‡æ‹¨æµ‹èŠ‚ç‚¹å¯¹ç›®æ ‡æœ�务进行周期性æ�¢æµ‹ï¼Œä¸»è¦�通过å�¯ç”¨æ€§å’Œå“�应时间æ�¥åº¦é‡�,拨测节点通常有异地多个。</p><p>节点æ�¢æµ‹ï¼šèŠ‚ç‚¹æ�¢æµ‹æ˜¯ç”¨æ�¥å�‘ç�°å’Œè¿½è¸ªä¸�å�Œçš„æœºæˆ¿ï¼ˆæ•°æ�®ä¸­å¿ƒï¼‰èŠ‚ç‚¹ä¹‹é—´ç½‘ç»œå�¯ç”¨æ€§å’Œé€šç•…性的监æ�§æ–¹å¼�,主è¦�通过å“�应时间ã€�丢包ç�‡ã€�跳数æ�¥åº¦é‡�,æ�¢æµ‹æ–¹æ³•一般是pingã€�mtr或其他ç§�有å��议。</p><p>告警过滤:对æŸ�些å�¯é¢„知的告警进行过滤,ä¸�进入告警统计的数æ�®ï¼Œå¦‚å°‘é‡�爬虫访问导致的httpå“�应500错误,业务系统自定义异常信æ�¯ç­‰ã€‚</p><p>告警å�»é‡�:当一个告警通知负责人å��,在这个告警æ�¢å¤�之å‰�,ä¸�会继续收到相å�Œçš„告警。</p><p>告警抑制:为了å‡�å°‘ç”±äº�系统抖动带æ�¥çš„干扰,还需è¦�å®�ç�°æŠ‘制,例如æœ�务器ç�¬é—´é«˜è´Ÿè½½ï¼Œå�¯èƒ½æ˜¯æ­£å¸¸çš„,å�ªæœ‰æŒ�续一段时间的高负载æ‰�需è¦�得到é‡�视。</p><p>告警æ�¢å¤�:开å�‘/è¿�维人员ä¸�仅需è¦�收到告警通知,还需è¦�收到故障消除告警æ�¢å¤�正常的通知。</p><p>告警å�ˆå¹¶ï¼šå¯¹å�Œä¸€æ—¶åˆ»äº§ç”Ÿçš„多æ�¡ç›¸å�Œå‘Šè­¦è¿›è¡Œå�ˆå¹¶ï¼Œå¦‚æŸ�个微æœ�务集群å�Œä¸€æ—¶åˆ»å‡ºç�°å¤šä¸ªå­�æœ�务负载过高的告警,需è¦�å�ˆå¹¶æˆ�为一æ�¡å‘Šè­¦ã€‚</p><p>告警收敛:有时æŸ�个告警产生时,往往会伴éš�ç�€å…¶å®ƒå‘Šè­¦ã€‚这时å�¯ä»¥å�ªå¯¹æ ¹æœ¬å�Ÿå› 产生告警,其它告警收敛为å­�告警一并å�‘é€�通知。如云æœ�务器出ç�°CPU负载告警时往往伴éš�å…¶æ�­è½½çš„æ‰€æœ‰ç³»ç»Ÿçš„å�¯ç”¨æ€§å‘Šè­¦ã€‚</p><p>故障自愈:å®�æ—¶å�‘ç�°å‘Šè­¦ï¼Œé¢„诊断分æ��,自动æ�¢å¤�故障,并打通周边系统å®�ç�°æ•´ä¸ªæµ�程的闭ç�¯ã€‚</p><h2>æœ�务治ç�†</h2><h6>1. å¾®æœ�务</h6><p>å¾®æœ�务æ�¶æ�„是一ç§�æ�¶æ�„模å¼�,它æ��倡将å�•一应用程åº�划分æˆ�一组å°�çš„æœ�务,æœ�务之间相互å��è°ƒã€�互相é…�å�ˆï¼Œä¸ºç”¨æˆ·æ��供最终价值。æ¯�个æœ�务è¿�行在其独立的进程中,æœ�务和æœ�务之间采用轻é‡�级的通信机制相互沟通(通常是基äº�HTTPçš„Restful API).æ¯�个æœ�务都围绕ç�€å…·ä½“的业务进行æ�„建,并且能够被独立的部署到生产ç�¯å¢ƒã€�类生产ç�¯å¢ƒç­‰ã€‚</p><h6>2. æœ�务å�‘ç�°</h6><p>æœ�务å�‘ç�°æ˜¯æŒ‡ä½¿ç”¨ä¸€ä¸ªæ³¨å†Œä¸­å¿ƒæ�¥è®°å½•分布å¼�系统中的全部æœ�务的信æ�¯ï¼Œä»¥ä¾¿å…¶ä»–æœ�务能够快速的找到这些已注册的æœ�务。æœ�务å�‘ç�°æ˜¯æ”¯æ’‘大规模 SOA 和微æœ�务æ�¶æ�„çš„æ ¸å¿ƒæ¨¡å�—,它应该尽é‡�å�šåˆ°é«˜å�¯ç”¨ã€‚</p><h6>3. æµ�é‡�削峰</h6><p>如æ�œè§‚看抽奖或秒æ�€ç³»ç»Ÿçš„请求监æ�§æ›²çº¿ï¼Œä½ 就会å�‘ç�°è¿™ç±»ç³»ç»Ÿåœ¨æ´»åŠ¨å¼€æ”¾çš„æ—¶é—´æ®µå†…ä¼šå‡ºç�°ä¸€ä¸ªæ³¢å³°ï¼Œè€Œåœ¨æ´»åŠ¨æœªå¼€æ”¾æ—¶ï¼Œç³»ç»Ÿçš„è¯·æ±‚é‡�ã€�机器负载一般都是比较平稳的。为了节çœ�机器资æº�,我们ä¸�å�¯èƒ½æ—¶æ—¶éƒ½æ��供最大化的资æº�能力æ�¥æ”¯æŒ�短时间的高峰请求。所以需è¦�使用一些技术手段,æ�¥å‰Šå¼±ç�¬æ—¶çš„请求高峰,让系统å��å��é‡�在高峰请求下ä¿�æŒ�å�¯æ�§ã€‚削峰也å�¯ç”¨äº�消除毛刺,使æœ�务器资æº�åˆ©ç”¨æ›´åŠ å�‡è¡¡å’Œå……分。常è§�的削峰策略有队列,é™�频,分层过滤,多级缓存等。</p><h6>4. 版本兼容</h6><p>在å�‡çº§ç‰ˆæœ¬çš„过程中,需è¦�考虑å�‡çº§ç‰ˆæœ¬å��,新的数æ�®ç»“æ�„是å�¦èƒ½å¤Ÿç�†è§£å’Œè§£æ��æ—§æ•°æ�®ï¼Œæ–°ä¿®æ”¹çš„å��议是å�¦èƒ½å¤Ÿç�†è§£æ—§çš„å��议以å�Šå�šå‡ºé¢„期内å�ˆé€‚的处ç�†ã€‚这就需è¦�在æœ�务设计过程中å�šå¥½ç‰ˆæœ¬å…¼å®¹ã€‚</p><h6>5. 过载ä¿�护</h6><p>过载是指当å‰�负载已ç»�超过了系统的最大处ç�†èƒ½åŠ›ï¼Œè¿‡è½½çš„å‡ºç�°ï¼Œä¼šå¯¼è‡´éƒ¨åˆ†æœ�务ä¸�å�¯ç”¨ï¼Œå¦‚æ�œå¤„ç½®ä¸�当,æ��有å�¯èƒ½å¼•èµ·æœ�务完全ä¸�å�¯ç”¨ï¼Œä¹ƒè‡³é›ªå´©ã€‚过载ä¿�护正是针对这ç§�异常情况å�šçš„æ�ªæ–½ï¼Œé˜²æ­¢å‡ºç�°æœ�务完全ä¸�å�¯ç”¨çš„ç�°è±¡ã€‚</p><h6>6. æœ�务熔断</h6><p>æœ�务熔断的作用类似äº�我们家用的ä¿�险ä¸�,当æŸ�æœ�务出ç�°ä¸�å�¯ç”¨æˆ–å“�应超时的情况时,为了防止整个系统出ç�°é›ªå´©ï¼Œæš‚æ—¶å�œæ­¢å¯¹è¯¥æœ�务的调用。</p><h6>7. æœ�务é™�级</h6><p>æœ�务é™�级是当æœ�务器å�‹åЛ剧å¢�çš„æƒ…å†µä¸‹ï¼Œæ ¹æ�®å½“å‰�业务情况å�Šæµ�é‡�对一些æœ�务和页é�¢æœ‰ç­–略的é™�级,以此释放æœ�务器资æº�以ä¿�è¯�æ ¸å¿ƒä»»åŠ¡çš„æ­£å¸¸è¿�行。é™�级往往会指定ä¸�å�Œçš„级别,é�¢ä¸´ä¸�å�Œçš„异常等级执行ä¸�å�Œçš„处ç�†ã€‚</p><p>æ ¹æ�®æœ�务方å¼�:å�¯ä»¥æ‹’æ�¥æœ�务,å�¯ä»¥å»¶è¿Ÿæœ�务,也有时候å�¯ä»¥éš�机æœ�务。</p><p>æ ¹æ�®æœ�务范围:å�¯ä»¥ç �æ�‰æŸ�个功能,也å�¯ä»¥ç �æ�‰æŸ�些模å�—。</p><p>总之æœ�务é™�级需è¦�æ ¹æ�®ä¸�å�Œçš„业务需求采用ä¸�å�Œçš„é™�级策略。主è¦�的目的就是æœ�务虽然有æ�Ÿä½†æ˜¯æ€»æ¯”没有好。</p><h6>8. 熔断VSé™�级</h6><p>相å�Œç‚¹ï¼šç›®æ ‡ä¸€è‡´ï¼Œéƒ½æ˜¯ä»�å�¯ç”¨æ€§å’Œå�¯é� 性出å�‘,为了防止系统崩溃;用户体验类似,最终都让用户体验到的是æŸ�些功能暂时ä¸�å�¯ç”¨ï¼›</p><p>ä¸�å�Œç‚¹ï¼šè§¦å�‘å�Ÿå› ä¸�å�Œï¼Œæœ�务熔断一般是æŸ�个æœ�务(下游æœ�务)故障引起,而æœ�务é™�级一般是ä»�整体负è�·è€ƒè™‘ï¼›</p><h6>9. æœ�务é™�æµ�</h6><p>é™�æµ�å�¯ä»¥è®¤ä¸ºæœ�务é™�级的一ç§�,é™�æµ�就是é™�制系统的输入和输出æµ�é‡�已达到ä¿�护系统的目的。一般æ�¥è¯´ç³»ç»Ÿçš„å��å��é‡�是å�¯ä»¥è¢«æµ‹ç®—的,为了ä¿�è¯�系统的稳定è¿�行,一旦达到的需è¦�é™�制的阈值,就需è¦�é™�制æµ�é‡�并采å�–一些æ�ªæ–½ä»¥å®Œæˆ�é™�制æµ�é‡�的目的。比如:延迟处ç�†ï¼Œæ‹’ç»�处ç�†ï¼Œæˆ–者部分拒ç»�处ç�†ç­‰ç­‰ã€‚</p><h6>10. æ•…éšœå±�蔽</h6><p>将故障机器ä»�集群剔除,以ä¿�è¯�新的请求ä¸�会分å�‘到故障机器。</p><h6>测试方法</h6><h6>1. 黑盒/白盒测试</h6><p>黑盒测试ä¸�考虑程åº�内部结æ�„和逻辑结æ�„,主è¦�是用æ�¥æµ‹è¯•系统的功能是å�¦æ»¡è¶³éœ€æ±‚è§„æ ¼è¯´æ˜�书。一般会有一个输入值,一个输入值,和期望值å�šæ¯”è¾ƒã€‚</p><p>白盒测试主è¦�应用在å�•元测试阶段,主è¦�是对代ç �级的测试,针对程åº�内部逻辑结æ�„,测试手段有:语å�¥è¦†ç›–ã€�判定覆盖ã€�æ�¡ä»¶è¦†ç›–ã€�路径覆盖ã€�æ�¡ä»¶ç»„å�ˆè¦†ç›–</p><h6>2. å�•å…ƒ/集æˆ�/系统/验收测试</h6><p>软件测试一般分为4个阶段:å�•元测试ã€�集æˆ�测试ã€�系统测试ã€�验收测试。</p><p>å�•元测试:å�•元测试是对软件中的最å°�å�¯éªŒè¯�å�•元进行检查和验è¯�,如一个模å�—ã€�一个过程ã€�一个方法等。å�•元测试粒度最å°�,一般由开å�‘å°�组采用白盒方å¼�æ�¥æµ‹è¯•,主è¦�测试å�•元是å�¦ç¬¦å�ˆâ€œè®¾è®¡â€�。</p><p>集æˆ�测试:集æˆ�测试也å�«å�šç»„装测试,通常在å�•元测试的基础上,将所有的程åº�模å�—进行有åº�çš„ã€�递å¢�的测试。集æˆ�测试界äº�å�•元测试和系统测试之间,起到“桥æ¢�作用â€�,一般由开å�‘å°�ç»„é‡‡ç”¨ç™½ç›’åŠ é»‘ç›’çš„æ–¹å¼�æ�¥æµ‹è¯•,既验è¯�“设计â€�,å�ˆéªŒè¯�“需求â€�。</p><p>系统测试:系统测试时将ç»�过集æˆ�测试的软件,作为计算机系统的一部分,ä¸�系统中其他部分结å�ˆèµ·æ�¥ï¼Œåœ¨å®�é™…è¿�行ç�¯å¢ƒä¸‹è¿›è¡Œä¸€ç³»åˆ—ä¸¥æ ¼æœ‰æ•ˆçš„æµ‹è¯•ï¼Œä»¥å�‘ç�°è½¯ä»¶æ½œåœ¨çš„问题,ä¿�è¯�系统的正常è¿�行。系统测试的粒度最大,一般由独立测试å°�组采用黑盒方å¼�æ�¥æµ‹è¯•,主è¦�测试系统是å�¦ç¬¦å�ˆâ€œéœ€æ±‚è§„æ ¼è¯´æ˜�书â€�。</p><p>验收测试:验收测试也称交付测试,是针对用户需求ã€�业务æµ�程进行的正å¼�的测试,以确定系统是å�¦æ»¡è¶³éªŒæ”¶æ ‡å‡†ï¼Œç”±ç”¨æˆ·ã€�客户或其他æ�ˆæ�ƒæœºæ�„决定是å�¦æ�¥å�—系统。验收测试ä¸�系统测试相似,主è¦�区别是测试人员ä¸�å�Œï¼ŒéªŒæ”¶æµ‹è¯•由用户执行。</p><h6>3. å›�归测试</h6><p>当å�‘ç�°å¹¶ä¿®æ”¹ç¼ºé™·å��ï¼Œæˆ–åœ¨è½¯ä»¶ä¸­æ·»åŠ æ–°çš„åŠŸèƒ½å��,é‡�新测试。用æ�¥æ£€æŸ¥è¢«å�‘ç�°çš„缺陷是å�¦è¢«æ”¹æ­£ï¼Œå¹¶ä¸”所å�šçš„修改没有引å�‘新的问题。</p><h6>4. 冒烟测试</h6><p>这一术语æº�自硬件行业。对一个硬件或硬件组件进行更改或修å¤�å��,直æ�¥ç»™è®¾å¤‡åŠ ç”µã€‚å¦‚æ�œæ²¡æœ‰å†’烟,则该组件就通过了测试。在软件中,“冒烟测试â€�这一术语æ��述的是在将代ç �更改嵌入到产å“�çš„æº�æ ‘ä¸­ä¹‹å‰�对这些更改进行验è¯�的过程。</p><p>冒烟测试是在软件开å�‘过程中的一ç§�针对软件版本包的快速基本功能验è¯�策略,是对软件基本功能进行确认验è¯�的手段,并é��对软件版本包的深入测试。</p><p>比如:对äº�一个登录系统的冒烟测试,我们å�ªéœ€æµ‹è¯•输入正确的用户å��ã€�密ç �,验è¯�ç™»å½•è¿™ä¸€ä¸ªæ ¸å¿ƒåŠŸèƒ½ç‚¹ï¼Œè‡³äº�输入框ã€�特殊字符等,å�¯ä»¥åœ¨å†’烟测试之å��进行。</p><h6>5. 性能测试</h6><p>性能测试是通过自动化的测试工具模拟多ç§�正常ã€�峰值以å�Šå¼‚常负载æ�¡ä»¶æ�¥å¯¹ç³»ç»Ÿçš„å�„é¡¹æ€§èƒ½æŒ‡æ ‡è¿›è¡Œæµ‹è¯•ã€‚è´Ÿè½½æµ‹è¯•å’Œå�‹åŠ›æµ‹è¯•éƒ½å±�äº�性能测试,两者å�¯ä»¥ç»“å�ˆè¿›è¡Œã€‚</p><p>通过负载测试,确定在å�„ç§�å·¥ä½œè´Ÿè½½ä¸‹ç³»ç»Ÿçš„æ€§èƒ½ï¼Œç›®æ ‡æ˜¯æµ‹è¯•å½“è´Ÿè½½é€�æ¸�å¢�åŠ æ—¶ï¼Œç³»ç»Ÿå�„é¡¹æ€§èƒ½æŒ‡æ ‡çš„å�˜åŒ–情况。</p><p>å�‹åŠ›æµ‹è¯•æ˜¯é€šè¿‡ç¡®å®šä¸€ä¸ªç³»ç»Ÿçš„ç“¶é¢ˆæˆ–è€…ä¸�能æ�¥å�—的性能点,æ�¥è�·å¾—系统能æ��供的最大æœ�务级别的测试。</p><h6>6. 基准测试</h6><p>基准测试(Benchmark)也是一ç§�性能测试方å¼�,用æ�¥æµ‹é‡�机器的硬件最高å®�é™…è¿�行性能,以å�Šè½¯ä»¶ä¼˜åŒ–的性能æ��å�‡æ•ˆæ�œ, å�Œæ—¶ä¹Ÿå�¯ä»¥ç”¨æ�¥è¯†åˆ«æŸ�段代ç �çš„CPU或者内存效ç�‡é—®é¢˜. 许多开å�‘人员会用基准测试æ�¥æµ‹è¯•ä¸�å�Œçš„å¹¶å�‘模å¼�, 或者用基准测试æ�¥è¾…助é…�ç½®å·¥ä½œæ± çš„æ•°é‡�, 以ä¿�è¯�能最大化系统的å��å��é‡�.</p><h6>7. A/B测试</h6><p>A/B测试,是用两组å�Šä»¥ä¸Šéš�机分é…�çš„ã€�æ•°é‡�ç›¸ä¼¼çš„æ ·æœ¬è¿›è¡Œå¯¹æ¯”ï¼Œå¦‚æ�œå®�验组和对比组的å®�验结æ�œç›¸æ¯”ï¼Œåœ¨ç›®æ ‡æŒ‡æ ‡ä¸Šå…·æœ‰ç»Ÿè®¡æ˜¾è‘—æ€§ï¼Œé‚£å°±å�¯ä»¥è¯´æ˜�å®�验组的功能å�¯ä»¥å¯¼è‡´ä½ 想è¦�的结æ�œï¼Œä»�è€Œå¸®ä½ éªŒè¯�å�‡è®¾æˆ–者å�šå‡ºäº§å“�决定。</p><h6>8. 代ç �覆盖测试</h6><p>代ç �覆盖(Code coverage)是软件测试中的一ç§�度é‡�,æ��述程å¼�中æº�代ç �被测试的比例和程度,所得比例称为代ç �覆盖ç�‡ã€‚在å�šå�•元测试时,代ç �覆盖ç�‡å¸¸å¸¸è¢«æ‹¿æ�¥ä½œä¸ºè¡¡é‡�测试好å��çš„æŒ‡æ ‡ï¼Œç”šè‡³ï¼Œç”¨ä»£ç �覆盖ç�‡æ�¥è€ƒæ ¸æµ‹è¯•任务完æˆ�情况,比如,代ç �覆盖ç�‡å¿…须达到80%或 90%。äº�是ä¹�,测试人员费尽心æ€�设计案例覆盖代ç �。</p><h2>å�‘布部署</h2><h6>1. DEV/PRO/FAT/UAT</h6><p>DEV(Development environment):开å�‘ç�¯å¢ƒï¼Œç”¨äº�å¼€å�‘人员调试使用,版本å�˜åŒ–较大。</p><p>FAT(Feature Acceptance Test environment):功能验收测试ç�¯å¢ƒï¼Œç”¨äº�软件测试人员测试使用。</p><p>UAT(User Acceptance Test environment):用户验收测试ç�¯å¢ƒï¼Œç”¨äº�生产ç�¯å¢ƒä¸‹çš„功能验è¯�,å�¯ä½œä¸ºé¢„å�‘布ç�¯å¢ƒã€‚</p><p>PRO(Production environment):生产ç�¯å¢ƒï¼Œæ­£å¼�线上ç�¯å¢ƒã€‚</p><h6>2. ç�°åº¦å�‘布</h6><p>ç�°åº¦å�‘布是指在å�‡çº§ç‰ˆæœ¬è¿‡ç¨‹ä¸­ï¼Œé€šè¿‡åˆ†åŒºæ�§åˆ¶ï¼Œç™½å��å�•æ�§åˆ¶ç­‰æ–¹å¼�对一部分用户先å�‡çº§äº§å“�特性,而其余用户则ä¿�æŒ�ä¸�å�˜ï¼Œå½“一段时间å��å�‡çº§äº§å“�特性的用户没有å��馈问题,就é€�步扩大范围,最终å�‘所有用户开放新版本特性,ç�°åº¦å�‘布å�¯ä»¥ä¿�è¯�整体系统的稳定,在åˆ�å§‹ç�°åº¦çš„æ—¶å€™å°±å�¯ä»¥å�‘ç�°ã€�修改问题,以ä¿�è¯�å…¶å½±å“�度。</p><h6>3. å›�滚 (Rollback)</h6><p>指的是程åº�或数æ�®å¤„ç�†é”™è¯¯æ—¶ï¼Œå°†ç¨‹åº�或数æ�®æ�¢å¤�到上一次正确状æ€�(或者是上一个稳定版本)的行为。</p><blockquote>æ�¥æº�:cloud.tencent.com/developer/article/1477450</blockquote><p><strong>如æ�œæœ¬æ–‡å¯¹ä½ 有帮助的è¯�,欢è¿�</strong>点èµ�&转å�‘<strong>,这对我继续分享&åˆ›ä½œä¼˜è´¨æ–‡ç« é��常é‡�è¦�。感谢ğŸ™�ğŸ�»</strong></p><p><img src="/img/bVbHCzg" alt="" title=""></p> 备份æ�¢å¤�å­¦çš„è¿™ä¹ˆå·®ï¼Œè¯•ç”¨æœŸä½ éƒ½è¿‡ä¸�了 https://segmentfault.com/a/1190000041794087 2022-05-05T14:54:11+08:00 2022-05-05T14:54:11+08:00 民工哥 https://segmentfault.com/u/jishuroad 2 <p>大家好,我是民工哥。</p><p>å‰�å‡ å¤©ï¼Œæœ‰ä¸ªè¯»è€…æ‰¾æˆ‘å��槽,他刚入è�Œä¸€å®¶å…¬å�¸ï¼Œæœ‰ä¸€æ¬¡è€�大和他说了一å�¥è¯�:就一个数æ�®åº“的备份ã€�æ�¢å¤�ä½ éƒ½å­¦çš„è¿™ä¹ˆå·®ï¼Œæ€•æ˜¯è¿�试用期也过ä¸�了ï¼�</p><p>ç¡®å®�,数æ�®æ˜¯ä¼�业的é‡�è¦�之中,这项技能是必须æ�Œæ�¡çš„,æ��的好,å�‡è�ŒåŠ è–ªï¼Œæ��çš„ä¸�å¥½ï¼Œåˆ åº“è·‘è·¯çš„äº‹ä¸�在少数。</p><p>本文结å�ˆè‡ªå·±å·¥ä½œ10年的积累,将Oracle的备份æ�¢å¤�å�šäº†è¯¦ç»†é˜�述。关äº�MySQLæ•°æ�®åº“的备份ä¸�æ�¢å¤�请看这:<a href="https://link.segmentfault.com/?enc=oiOXM2w7VCbzkiAZED%2F9Gw%3D%3D.ROKFZ9C4hMQzjL4%2F9U4Ob%2BtI3W%2FYpb3%2Bd%2BVyVBUoQywBPzDx77UPOrVetm4%2BytyuE8EJ7sKITCn2s9QVqS%2F7pGHk9EXjiu7RrRC19%2BVUjsbk44t8JqOF1uLVHnwgT8Be%2FRa%2BkX%2BO1j0b2lClC3I%2FuwBYbczqY%2FLA7bZkSyB1d9IbaPKlcc9eo2eCyJsZY%2B%2F3ShKhEbvUs1bA0PqSNKw%2FBk2wJdPu8R3sPoemGSWPB0w994IbOHxtmyeM1q%2B1sgYn5gaj4cm20I2CpT0JNsSI6xvlY21ZLBFwjF9Fm1dktjc%3D" rel="nofollow">é«˜é€¼æ ¼ä¼�业级MySQLæ•°æ�®åº“备份方案,å�Ÿæ�¥æ˜¯è¿™æ ·</a>,<a href="https://link.segmentfault.com/?enc=I7R3sB6VHcr2PuqiJvqn4w%3D%3D.9RgdAPnzfqKA2c%2F60csYGQ40PZzFUIDyA%2BNIyTs2DQ%2BeK2m7DrbDnpVipF%2BNfTqHMiQfHs23aS3myfXnBYi7OHrneG4ZwtvU5HK1b%2FJQbRAXRw5fZArfc0l97BIxfS57ivoIa6zOay%2FrFDob0nYjjmhTfF9UjDF346%2B9G3m86%2BJPDhyKu5FNz2VuYKY1AHhj7RM8Ad8D8bgjsVJv4G6E6sNq7d6ggBz2sgbh%2Bo1S5DVkfbjAkXra3DscyBcO95VQ9v8ZVOTKsHAncv%2BqwkCLnSyvVOAJyBiBp2IBDW6hpIQ%3D" rel="nofollow">åˆ åº“ä¸�å†�è·‘è·¯ï¼�我在里é�¢å�«æ³ªå†™ä¸‹ MySQL æ•°æ�®æ�¢å¤�大法</a></p><h2>æ•°æ�®åº“故障类å�‹</h2><ul><li>1)user process failure 用户进程故障:pmon 自动处ç�†</li><li>2)instance failure å®�例故障: smon 自动处ç�†</li><li>3)user errors 用户 错误:需è¦� dba 通过备份æ�¢å¤�解决</li><li>4)media failure 介质故障:必须通过备份和日志æ�¢å¤�</li></ul><p>总结:备份æ�¢å¤�主è¦�是用äº�ä¿�护数æ�®ï¼ˆä»‹è´¨ã€�用户ã€�应用程åº�导致)ã€�ä¿�留数æ�®ã€�ä¼ è¾“æ•°æ�®</p><h2>备份æ�¢å¤�分类</h2><p><img src="/img/remote/1460000041794089" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041794090" alt="图片" title="图片"></p><p>还å�Ÿå�³Restore(é‡�储),æ�¢å¤�å�³æ˜¯Recover(æ�¢å¤�)</p><h6>逻辑备份ä¸�æ�¢å¤�</h6><ul><li>â‘ ä¼ ç»Ÿçš„å¯¼å…¥å¯¼å‡ºï¼šexp/imp:</li><li>â‘¡æ•°æ�®æ³µå¯¼å…¥å¯¼å‡ºï¼šexpdp/impdp</li><li>é�¢å�‘ object,逻辑备份就是热备数æ�®åº“对象æŸ�一时刻状æ€�,</li><li>ä¸�能è¿�用在 media failure 上,逻辑备份的æ�¢å¤�就是还å�Ÿå¤‡ä»½ï¼Œæ²¡æœ‰ recover 的概念。</li></ul><h6>物ç�†å¤‡ä»½ä¸�æ�¢å¤�</h6><ul><li>é�¢å�‘ media failure</li><li>①手工备份ä¸�æ�¢å¤�,也å�«ç”¨æˆ·ç®¡ç�†çš„备份ä¸�æ�¢å¤�(UMAN),</li><li>通过 OS 的命令,完æˆ�备份ä¸�还å�Ÿï¼Œç„¶å��å†�è¿�用日志进行æ�¢å¤�。</li><li>②自动备份ä¸�æ�¢å¤�,利用 oracle 的备份æ�¢å¤�工具 RMAN,使还å�Ÿä¸�æ�¢å¤�过程自动完æˆ�。</li><li>物ç�†å¤‡ä»½ä»�æ–¹å¼�上å�¯ä»¥æœ‰ 一致性备份(冷备) å’Œ é��一致性备份(热备) 完整的备份策略应该以物ç�†å¤‡ä»½ä¸ºä¸»ï¼Œé€»è¾‘备份为辅(用äº�备份一些é‡�è¦�的表)</li></ul><h6>é—ªå›�技术</h6><ul><li>一ç§�利用 undo æ•°æ�®æˆ–é—ªå›�日志的快速æ�¢å¤�技术。</li><li>å�¯ä»¥é’ˆå¯¹ä¸�å�Œå±‚é�¢é—®é¢˜è¿›è¡Œé€»è¾‘æ�¢å¤�,</li><li>11g 支æŒ�七ç§� flashback æ–¹å¼�,</li><li>其中快速æ�¢å¤�区å�ªå’Œé—ªå›�æ•°æ�®åº“有关。</li></ul><h2>完全æ�¢å¤�ä¸�ä¸�完全æ�¢å¤�</h2><h6>1)完全æ�¢å¤�:</h6><ul><li>利用完整备份或部分备份,å�¯ä»¥å°† datafile</li><li>æ�¢å¤�到 failure å‰�得最å��一次 commit,ä¸�会出</li><li>ç�°æ•°æ�®ä¸¢å¤±ã€‚</li></ul><h6>2)ä¸�完全æ�¢å¤�</h6><ul><li>需è¦�è¿�用完整备份和日志将 database</li><li>æ�¢å¤�到过å�»çš„æŸ�个时间点(或 SCN),有数æ�®ä¸¢å¤±ã€‚</li></ul><h2>备份策略</h2><p><img src="/img/remote/1460000041794091" alt="图片" title="图片"></p><ul><li>备份策略:æ¯�周日执行0级全备份,周一至周六æ¯�天执行1级å¢�é‡�备份</li><li>é…�ç½®ä¿�留策略 reduncancy 2,</li><li>å¼€å�¯æ�§åˆ¶æ–‡ä»¶è‡ªåЍ备份</li></ul><pre><code>RMAN&gt; show all; CONFIGURE RETENTION POLICY TO REDUNDANCY 2; CONFIGURE CONTROLFILE AUTOBACKUP ON;</code></pre><h6>备份脚本</h6><pre><code>--创建存放脚本的目录 mkdir /home/oracle/scripts --创建全备份脚本 vi /home/oracle/scripts/rman_level0.sh #!/bin/bash export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=PROD PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH; export PATH rman target / &lt;&lt; EOF run{ crosscheck backup; allocate channel c1 device type disk; allocate channel c2 device type disk; backup incremental level 0 database format '/u01/backup/rman/db_%U.bak' plus archivelog format '/u01/backup/rman/ar_%U.bak'; backup current controlfile format '/u01/backup/rman/ctl_%U.bak'; report obsolete device type disk; delete noprompt obsolete device type disk; delete noprompt expired backup device type disk; release channel c1; release channel c2; } EOF exit</code></pre><p>CROSSCHECK命令:用äº�æ ¸å¯¹ç£�盘和ç£�带上的备份文件</p><p>状æ€�为:AVALIABLEã€�UNAVALIABLEã€�EXPIRED</p><p>赋予æ�ƒé™�</p><pre><code>chmod a+x /home/oracle/scripts/rman_level0.sh chmod a+x /home/oracle/scripts/rman_level1.sh</code></pre><h6>编写 crontab 计划任务</h6><p>测试ç�¯å¢ƒ 整点进行全备份,æ¯� 15 分钟å¢�é‡�备份一次</p><pre><code>0 * * * * /home/oracle/scripts/rman_level0.sh &gt;&gt; /u01/backup/rman/PROD_rman_L0_`date +\%Y\%m\%d_\%H\%M\%S`.log 2&gt;&amp;1 15,30,45 * * * * /home/oracle/scripts/rman_level1.sh &gt;&gt; /u01/backup/rman/PROD_rman_L1_`date +\%Y\%m\%d_\%H\%M\%S`.log 2&gt;&amp;1</code></pre><p>查看备份情况是å�¦æ­£å¸¸ï¼ŒæŸ¥çœ‹ç›¸å…³å¤‡ä»½æ—¥å¿—。</p><p>查看 obsolete 备份ã€�归档是å�¦åˆ 除正常。</p><pre><code>select a.TIME_TAKEN_DISPLAY as &quot;用时&quot;, a.INPUT_BYTES_DISPLAY &quot;大å°�&quot;, a.INPUT_BYTES_PER_SEC_DISPLAY as &quot;速度&quot;, a.INPUT_TYPE &quot;备份类å�‹&quot;, to_char(start_time, 'day') day1, to_char(start_time, 'yyyy-mm-dd hh24:mi:ss') as &quot;开始时间&quot;, to_char(end_time, 'yyyy-mm-dd hh24:mi:ss') &quot;结æ�Ÿæ—¶é—´&quot;, output_device_type, status, input_type from V$RMAN_BACKUP_JOB_DETAILS a</code></pre><blockquote>作者:IT邦德 æ�¥æº�:<br>jeames.blog.csdn.net/article/details/122355707_</blockquote><p><strong>如æ�œæœ¬æ–‡å¯¹ä½ 有帮助的è¯�,欢è¿�</strong>点èµ�&转å�‘<strong>,这对我继续分享&åˆ›ä½œä¼˜è´¨æ–‡ç« é��常é‡�è¦�。感谢ğŸ™�ğŸ�»</strong></p><p><img src="/img/bVbHCzg" alt="" title=""></p> 必备的 6 大计算机网络基础知识点ï¼�会 3 个以上就很牛逼了 https://segmentfault.com/a/1190000041793973 2022-05-05T14:50:40+08:00 2022-05-05T14:50:40+08:00 民工哥 https://segmentfault.com/u/jishuroad 5 <h2>计算机网络概述</h2><p><img src="/img/remote/1460000041793975" alt="图片" title="图片"></p><h6>计算机网络的分类</h6><ul><li>按照网络的作用范围:广域网(WAN)ã€�åŸ�域网(MAN)ã€�局域网(LAN);</li><li>按照网络使用者:公用网络ã€�专用网络。</li></ul><h6>计算机网络的层次结æ�„</h6><p><img src="/img/remote/1460000041793976" alt="图片" title="图片"></p><p>TCP/IP四层模å�‹ä¸�OSI体系结æ�„对比:</p><p><img src="/img/remote/1460000041793977" alt="图片" title="图片"></p><h6>层次结æ�„设计的基本å�Ÿåˆ™</h6><ul><li>å�„层之间是相互独立的;</li><li>æ¯�一层需è¦�有足够的ç�µæ´»æ€§ï¼›</li><li>å�„层之间完全解耦。</li></ul><p><img src="/img/remote/1460000041793978" alt="图片" title="图片"></p><h6>è®¡ç®—æœºç½‘ç»œçš„æ€§èƒ½æŒ‡æ ‡</h6><p>速ç�‡ï¼šbps=bit/s 时延:å�‘é€�æ—¶å»¶ã€�ä¼ æ’­æ—¶å»¶ã€�æ�’队时延ã€�处ç�†æ—¶å»¶ 往返时间RTT:数æ�®æŠ¥æ–‡åœ¨ç«¯åˆ°ç«¯é€šä¿¡ä¸­çš„æ�¥å›�一次的时间。</p><h2>物ç�†å±‚</h2><p>物ç�†å±‚的作用:è¿�æ�¥ä¸�å�Œçš„物ç�†è®¾å¤‡ï¼Œä¼ 输比特æµ�。该层为上层å��è®®æ��ä¾›äº†ä¸€ä¸ªä¼ è¾“æ•°æ�®çš„å�¯é� 的物ç�†åª’体。简å�•的说,物ç�†å±‚ç¡®ä¿�å�Ÿå§‹çš„æ•°æ�®å�¯åœ¨å�„ç§�物ç�†åª’ä½“ä¸Šä¼ è¾“ã€‚</p><h6>物ç�†å±‚设备:</h6><ul><li>中继器ã€�Repeater,也å�«æ”¾å¤§å™¨ã€‘:å�Œä¸€å±€åŸŸç½‘çš„å†�生信å�·ï¼›ä¸¤ç«¯å�£çš„网段必须å�Œä¸€å��议;5-4-3规程:10BASE-5以太网中,最多串è�”4个中继器,5段中å�ªèƒ½æœ‰3个è¿�æ�¥ä¸»æœºï¼›</li><li>集线器:å�Œä¸€å±€åŸŸç½‘çš„å†�生ã€�放大信å�·ï¼ˆå¤šç«¯å�£çš„中继器);å�Šå�Œå·¥ï¼Œä¸�能隔离冲çª�域也ä¸�能隔离广播域。</li></ul><p>ä¿¡é�“的基本概念:信é�“是往一个方å�‘ä¼ è¾“ä¿¡æ�¯çš„媒体,一æ�¡é€šä¿¡ç”µè·¯åŒ…å�«ä¸€ä¸ªå�‘é€�ä¿¡é�“和一个æ�¥å�—ä¿¡é�“。</p><ul><li>å�•工通信信é�“:å�ªèƒ½ä¸€ä¸ªæ–¹å�‘通信,没有å��æ–¹å�‘å��馈的信é�“ï¼›</li><li>å�Šå�Œå·¥é€šä¿¡ä¿¡é�“:å�Œæ–¹éƒ½å�¯ä»¥å�‘é€�å’Œæ�¥å�—ä¿¡æ�¯ï¼Œä½†ä¸�能å�Œæ—¶å�‘é€�也ä¸�能å�Œæ—¶æ�¥æ”¶ï¼›</li><li>å…¨å�Œå·¥é€šä¿¡ä¿¡é�“:å�Œæ–¹éƒ½å�¯ä»¥å�Œæ—¶å�‘é€�å’Œæ�¥æ”¶ã€‚</li></ul><h2>æ•°æ�®é“¾è·¯å±‚</h2><h6>æ•°æ�®é“¾è·¯å±‚概述</h6><p>æ•°æ�®é“¾è·¯å±‚在物ç�†å±‚æ��供的æœ�务的基础上å�‘网络层æ��ä¾›æœ�务,其最基本的æœ�务是将æº�自网络层æ�¥çš„æ•°æ�®å�¯é� åœ°ä¼ è¾“åˆ°ç›¸é‚»èŠ‚ç‚¹çš„ç›®æ ‡æœºç½‘ç»œå±‚ã€‚æ•°æ�®é“¾è·¯å±‚在ä¸�å�¯é� 的物ç�†ä»‹è´¨ä¸Šæ��ä¾›å�¯é� çš„ä¼ è¾“ã€‚</p><ul><li>该层的作用包括:物ç�†åœ°å�€å¯»å�€ã€�æ•°æ�®çš„æˆ�帧ã€�æµ�é‡�æ�§åˆ¶ã€�æ•°æ�®çš„æ£€é”™ã€�é‡�å�‘等。</li><li>有关数æ�®é“¾è·¯å±‚çš„é‡�è¦�知识点:</li><li>æ•°æ�®é“¾è·¯å±‚为网络层æ��ä¾›å�¯é� 的数æ�®ä¼ 输;</li><li>基本数æ�®å�•ä½�为帧;</li><li>主è¦�çš„å��议:以太网å��议;</li><li>两个é‡�è¦�设备å��称:网桥和交æ�¢æœºã€‚</li></ul><p>å°�装æˆ�帧:“帧â€�是数æ�®é“¾è·¯å±‚æ•°æ�®çš„基本å�•ä½�:</p><p><img src="/img/remote/1460000041793979" alt="图片" title="图片"></p><p>é€�æ˜�ä¼ è¾“ï¼šâ€œé€�æ˜�â€�是指å�³ä½¿æ�§åˆ¶å­—符在帧数æ�®ä¸­ï¼Œä½†æ˜¯è¦�当å�šä¸�存在å�»å¤„ç�†ã€‚å�³åœ¨æ�§åˆ¶å­—符å‰�åŠ ä¸Šè½¬ä¹‰å­—ç¬¦ESC。</p><p><img src="/img/remote/1460000041793980" alt="图片" title="图片"></p><h6>æ•°æ�®é“¾è·¯å±‚的差错监测</h6><ul><li>差错检测:奇å�¶æ ¡éªŒç �ã€�循ç�¯å†—ä½™æ ¡éªŒç �CRC</li><li>奇å�¶æ ¡éªŒç �–局é™�性:当出错两ä½�时,检测ä¸�到错误。</li><li>循ç�¯å†—余检验ç �ï¼šæ ¹æ�®ä¼ 输或ä¿�存的数æ�®è€Œäº§ç”Ÿå›ºå®šä½�æ•°æ ¡éªŒç �。</li></ul><h6>æœ€å¤§ä¼ è¾“å�•å…ƒMTU</h6><p>æœ€å¤§ä¼ è¾“å�•å…ƒMTU(Maximum Transmission Unit),数æ�®é“¾è·¯å±‚的数æ�®å¸§ä¸�æ˜¯æ— é™�大的,数æ�®å¸§é•¿åº¦å�—MTUé™�制.</p><p>路径MTU:由链路中MTU的最å°�值决定。</p><p><img src="/img/remote/1460000041793981" alt="图片" title="图片"></p><h6>以太网å��议详解</h6><ul><li>MAC地å�€ï¼šæ¯�一个设备都拥有唯一的MAC地å�€ï¼Œå…±48ä½�,使用å��六进制表示。</li><li>以太网å��议:是一ç§�使用广泛的局域网技术,是一ç§�应用äº�æ•°æ�®é“¾è·¯å±‚çš„å��议,使用以太网å�¯ä»¥å®Œæˆ�相邻设备的数æ�®å¸§ä¼ 输:</li></ul><p><img src="/img/remote/1460000041793982" alt="图片" title="图片"></p><h6>局域网分类</h6><ul><li>Ethernet以太网IEEE802.3:</li><li>以太网第一个广泛部署的高速局域网</li><li>以太网数æ�®é€Ÿç�‡å¿«</li><li>ä»¥å¤ªç½‘ç¡¬ä»¶ä»·æ ¼ä¾¿å®œï¼Œç½‘ç»œé€ ä»·æˆ�本ä½�</li></ul><h6>以太网帧结æ�„</h6><ul><li>ç±»å�‹ï¼šæ ‡è¯†ä¸Šå±‚å��议(2字节)</li><li>目的地å�€å’Œæº�地å�€ï¼šMAC地å�€ï¼ˆæ¯�个6字节)</li><li>æ•°æ�®ï¼šå°�装的上层å��议的分组(46~1500字节)</li><li>CRC:循ç�¯å†—ä½™ç �(4字节)</li><li>以太网最短帧:以太网帧最短64字节;以太网帧除了数æ�®éƒ¨åˆ†18字节;数æ�®æœ€çŸ­46字节;</li></ul><h6>MAC地å�€ï¼ˆç‰©ç�†åœ°å�€ã€�局域网地å�€ï¼‰</h6><ul><li>MAC地å�€é•¿åº¦ä¸º6字节,48ä½�ï¼›</li><li>MAC地å�€å…·æœ‰å”¯ä¸€æ€§ï¼Œæ¯�个网络适é…�器对应一个MAC地å�€ï¼›</li><li>通常采用å��六进制表示法,æ¯�个字节表示一个å��六进制数,用 - 或 : è¿�æ�¥èµ·æ�¥ï¼›</li><li>MAC广播地å�€ï¼šFF-FF-FF-FF-FF-FF。</li></ul><h2>网络层</h2><p>网络层的目的是å®�ç�°ä¸¤ä¸ªç«¯ç³»ç»Ÿä¹‹é—´çš„æ•°æ�®é€�æ˜�ä¼ é€�,具体功能包括寻å�€å’Œè·¯ç”±é€‰æ‹©ã€�è¿�æ�¥çš„建立ã€�ä¿�æŒ�和终止等。数æ�®äº¤æ�¢æŠ€æœ¯æ˜¯æŠ¥æ–‡äº¤æ�¢ï¼ˆåŸºæœ¬ä¸Šè¢«åˆ†ç»„所替代):采用储存转å�‘æ–¹å¼�,数æ�®äº¤æ�¢å�•ä½�是报文。</p><p>网络层中涉å�Šä¼—多的å��议,其中包括最é‡�è¦�çš„å��议,也是TCP/IPçš„æ ¸å¿ƒå��议——IPå��议。IPå��è®®é��常简å�•,仅仅æ��ä¾›ä¸�å�¯é� ã€�æ— è¿�æ�¥çš„ä¼ é€�æœ�务。IPå��议的主è¦�åŠŸèƒ½æœ‰ï¼šæ— è¿�æ�¥æ•°æ�®æŠ¥ä¼ 输ã€�æ•°æ�®æŠ¥è·¯ç”±é€‰æ‹©å’Œå·®é”™æ�§åˆ¶ã€‚</p><p>ä¸�IPå��è®®é…�套使用å®�ç�°å…¶åŠŸèƒ½çš„è¿˜æœ‰åœ°å�€è§£æ��å��è®®ARPã€�逆地å�€è§£æ��å��è®®RARPã€�å› ç‰¹ç½‘æŠ¥æ–‡å��è®®ICMPã€�å› ç‰¹ç½‘ç»„ç®¡ç�†å��è®®IGMP。具体的å��议我们会在æ�¥ä¸‹æ�¥çš„部分进行总结,有关网络层的é‡�点为:</p><ul><li>1ã€�网络层负责对å­�网间的数æ�®åŒ…进行路由选择。此外,网络层还å�¯ä»¥å®�ç�°æ‹¥å¡�æ�§åˆ¶ã€�网际互è¿�等功能;</li><li>2ã€�基本数æ�®å�•ä½�为IPæ•°æ�®æŠ¥ï¼›</li><li>3ã€�包å�«çš„主è¦�å��议:</li><li>IPå��议(Internet Protocolï¼Œå› ç‰¹ç½‘äº’è�”å��议);</li><li>ICMPå��议(Internet Control Message Protocolï¼Œå› ç‰¹ç½‘æ�§åˆ¶æŠ¥æ–‡å��议);</li><li>ARPå��议(Address Resolution Protocol,地å�€è§£æ��å��议);</li><li>RARPå��议(Reverse Address Resolution Protocol,逆地å�€è§£æ��å��议)。</li><li>4ã€�é‡�è¦�的设备:路由器。</li></ul><p><img src="/img/remote/1460000041793983" alt="图片" title="图片"></p><p>路由器相关å��è®®</p><p><img src="/img/remote/1460000041793984" alt="图片" title="图片"></p><h6>IPå��议详解</h6><p>IP网际å��议是 Internet ç½‘ç»œå±‚æœ€æ ¸å¿ƒçš„å��议。虚拟互è�”网络的产生:å®�际的计算机网络错综å¤�æ�‚;物ç�†è®¾å¤‡é€šè¿‡ä½¿ç”¨IPå��议,å±�蔽了物ç�†ç½‘络之间的差异;当网络中主机使用IPå��è®®è¿�æ�¥æ—¶ï¼Œæ— 需关注网络细节,äº�是形æˆ�了虚拟网络。</p><p><img src="/img/remote/1460000041793985" alt="图片" title="图片"></p><p>IPå��议使得å¤�æ�‚çš„å®�际网络å�˜ä¸ºä¸€ä¸ªè™šæ‹Ÿäº’è�”的网络;并且解决了在虚拟网络中数æ�®æŠ¥ä¼ 输路径的问题。</p><p><img src="/img/remote/1460000041793986" alt="图片" title="图片"></p><p>其中,版本指IPå��议的版本,å� 4ä½�,如IPv4å’ŒIPv6;首部ä½�长度表示IP首部长度,å� 4ä½�,最大数值ä½�15;总长度表示IPæ•°æ�®æŠ¥æ€»é•¿åº¦ï¼Œå� 16ä½�,最大数值ä½�65535ï¼›TTL表示IPæ•°æ�®æŠ¥æ–‡åœ¨ç½‘络中的寿命,å� 8ä½�ï¼›å��议表æ˜�IPæ•°æ�®æ‰€æ�ºå¸¦çš„具体数æ�®æ˜¯ä»€ä¹ˆå��议的,如TCPã€�UDP。</p><h6>IPå��议的转å�‘æµ�程</h6><p><img src="/img/remote/1460000041793987" alt="图片" title="图片"></p><h6>IP地å�€çš„å­�网划分</h6><p><img src="/img/remote/1460000041793988" alt="图片" title="图片"></p><p>A类(8网络å�·+24主机å�·ï¼‰ã€�B类(16网络å�·+16主机å�·ï¼‰ã€�C类(24网络å�·+8主机å�·ï¼‰å�¯ä»¥ç”¨äº�æ ‡è¯†ç½‘ç»œä¸­çš„ä¸»æœºæˆ–è·¯ç”±å™¨ï¼ŒD类地å�€ä½œä¸ºç»„广播地å�€ï¼ŒE类是地å�€ä¿�留。</p><p><img src="/img/remote/1460000041793989" alt="图片" title="图片"></p><h6>网络地å�€è½¬æ�¢NAT技术</h6><p>用äº�多个主机通过一个公有IP访问访问互è�”网的ç§�有网络中,å‡�缓了IP地å�€çš„æ¶ˆè€—,但是å¢�åŠ äº†ç½‘ç»œé€šä¿¡çš„å¤�æ�‚度。</p><h6>NAT 工作å�Ÿç�†ï¼š</h6><p>ä»�内网出å�»çš„IPæ•°æ�®æŠ¥ï¼Œå°†å…¶IP地å�€æ›¿æ�¢ä¸ºNATæœ�务器拥有的å�ˆæ³•的公共IP地å�€ï¼Œå¹¶å°†æ›¿æ�¢å…³ç³»è®°å½•到NAT转æ�¢è¡¨ä¸­ï¼›</p><p>ä»�公共互è�”网返å›�çš„IPæ•°æ�®æŠ¥ï¼Œä¾�æ�®å…¶ç›®çš„çš„IP地å�€æ£€ç´¢NAT转æ�¢è¡¨ï¼Œå¹¶åˆ©ç”¨æ£€ç´¢åˆ°çš„内部ç§�有IP地å�€æ›¿æ�¢ç›®çš„IP地å�€ï¼Œç„¶å��å°†IPæ•°æ�®æŠ¥è½¬å�‘到内部网络。</p><h6>ARPå��è®®ä¸�RARPå��è®®</h6><p>地å�€è§£æ��å��è®® ARP(Address Resolution Protocol):为网å�¡ï¼ˆç½‘络适é…�器)的IP地å�€åˆ°å¯¹åº”的硬件地å�€æ��供动æ€�æ˜ å°„ã€‚å�¯ä»¥æŠŠç½‘络层32ä½�地å�€è½¬åŒ–为数æ�®é“¾è·¯å±‚MAC48ä½�地å�€ã€‚</p><p>ARP 是å�³æ�’å�³ç”¨çš„,一个ARP表是自动建立的,ä¸�需è¦�系统管ç�†å‘˜æ�¥é…�置。</p><p><img src="/img/remote/1460000041793990" alt="图片" title="图片"></p><p>RARP(Reverse Address Resolution Protocol)å��议指逆地å�€è§£æ��å��议,å�¯ä»¥æŠŠæ•°æ�®é“¾è·¯å±‚MAC48ä½�地å�€è½¬åŒ–为网络层32ä½�地å�€ã€‚</p><h6>ICMPå��议详解</h6><p>网际æ�§åˆ¶æŠ¥æ–‡å��议(Internet Control Message Protocol),å�¯ä»¥æŠ¥å‘Šé”™è¯¯ä¿¡æ�¯æˆ–者异常情况,ICMP报文å°�装在IPæ•°æ�®æŠ¥å½“中。</p><p><img src="/img/remote/1460000041793991" alt="图片" title="图片"></p><p>ICMPå��议的应用:</p><ul><li>Ping应用:网络故障的æ�’查;</li><li>Traceroute应用:å�¯ä»¥æ�¢æµ‹IPæ•°æ�®æŠ¥åœ¨ç½‘络中走过的路径。</li></ul><h6>网络层的路由概述</h6><p>å…³äº�路由算法的è¦�求:正确的完整的ã€�在计算上应该尽å�¯èƒ½æ˜¯ç®€å�•çš„ã€�å�¯ä»¥é€‚应网络中的å�˜åŒ–ã€�稳定的公平的。</p><p>自治系统AS:指处äº�一个管ç�†æœºæ�„下的网络设备群,AS内部网络自治管ç�†ï¼Œå¯¹å¤–æ��供一个或多个出入å�£ï¼Œå…¶ä¸­è‡ªæ²»ç³»ç»Ÿå†…部的路由å��议为内部网关å��议,如RIPã€�OSPF等;自治系统外部的路由å��议为外部网关å��议,如BGP。</p><ul><li>é�™æ€�路由:人工é…�置,难度和å¤�æ�‚度高;</li><li>动æ€�路由:</li><li>链路状æ€�路由选择算法LS:å�‘所有隔å£�路由å�‘é€�ä¿¡æ�¯æ”¶æ•›å¿«ï¼›å…¨å±€å¼�路由选择算法,æ¯�个路由器计算路由时,需æ�„建整个网络拓扑图;利用Dijkstra算法求æº�端到目的端网络的最短路径;Dijkstra(迪æ�°æ–¯ç‰¹æ‹‰)算法</li><li>è·�离-å�‘é‡�路由选择算法DV:å�‘所有隔å£�路由å�‘é€�ä¿¡æ�¯æ”¶æ•›æ…¢ã€�会存在å›�路;基础是Bellman-Ford方程(简称B-F方程);</li></ul><h6>内部网关路由å��议之RIPå��è®®</h6><p>路由信æ�¯å��è®® RIP(Routing Information Protocol)ã€�应用层】,基äº�è·�离-å�‘é‡�的路由选择算法,较å°�çš„AS(自治系统),适å�ˆå°�å�‹ç½‘络;RIP报文,å°�装进UDPæ•°æ�®æŠ¥ã€‚</p><p>RIPå��议特性:</p><ul><li>RIP在度é‡�路径时采用的是跳数(æ¯�个路由器维护自身到其他æ¯�个路由器的è·�离记录);</li><li>RIP的费用定义在æº�路由器和目的å­�网之间;</li><li>RIP被é™�制的网络直径ä¸�超过15跳;</li><li>和隔å£�交æ�¢æ‰€æœ‰çš„ä¿¡æ�¯ï¼Œ30主动一次(广播)。</li></ul><h6>内部网关路由å��议之OSPFå��è®®</h6><p>开放最短路径优先å��è®® OSPF(Open Shortest Path First)ã€�网络层】,基äº�链路状æ€�的路由选择算法(å�³Dijkstra算法),较大规模的AS ,适å�ˆå¤§å�‹ç½‘络,直æ�¥å°�装在IPæ•°æ�®æŠ¥ä¼ 输。</p><p>OSPFå��议优点:</p><ul><li>安全;</li><li>支æŒ�多æ�¡ç›¸å�Œè´¹ç”¨è·¯å¾„ï¼›</li><li>支æŒ�区别化费用度é‡�ï¼›</li><li>支æŒ�å�•播路由和多播路由;</li><li>分层路由。</li></ul><p>RIPä¸�OSPF的对比(路由算法决定其性质):</p><p><img src="/img/remote/1460000041793992" alt="图片" title="图片"></p><h6>外部网关路由å��议之BGPå��è®®</h6><p>BGP(Border Gateway Protocol)边际网关å��è®®ã€�应用层】:是è¿�行在AS之间的一ç§�å��è®®,寻找一æ�¡å¥½è·¯ç”±ï¼šé¦–次交æ�¢å…¨éƒ¨ä¿¡æ�¯ï¼Œä»¥å��å�ªäº¤æ�¢å�˜åŒ–的部分,BGPå°�装进TCP报文段.</p><h2>ä¼ è¾“å±‚</h2><p>第一个端到端,å�³ä¸»æœºåˆ°ä¸»æœºçš„å±‚æ¬¡ã€‚ä¼ è¾“å±‚è´Ÿè´£å°†ä¸Šå±‚æ•°æ�®åˆ†æ®µå¹¶æ��供端到端的ã€�å�¯é� 的或ä¸�å�¯é� çš„ä¼ è¾“ã€‚æ­¤å¤–ï¼Œä¼ è¾“å±‚è¿˜è¦�处ç�†ç«¯åˆ°ç«¯çš„差错æ�§åˆ¶å’Œæµ�é‡�æ�§åˆ¶é—®é¢˜ã€‚</p><p>ä¼ è¾“å±‚çš„ä»»åŠ¡æ˜¯æ ¹æ�®é€šä¿¡å­�网的特性,最佳的利用网络资æº�,为两个端系统的会è¯�层之间,æ��供建立ã€�维护和å�–æ¶ˆä¼ è¾“è¿�æ�¥çš„功能,负责端到端的å�¯é� æ•°æ�®ä¼ 输。在这一层,信æ�¯ä¼ é€�çš„å��议数æ�®å�•元称为段或报文。</p><p>网络层å�ªæ˜¯æ ¹æ�®ç½‘络地å�€å°†æº�结点å�‘出的数æ�®åŒ…ä¼ é€�åˆ°ç›®çš„ç»“ç‚¹ï¼Œè€Œä¼ è¾“å±‚åˆ™è´Ÿè´£å°†æ•°æ�®å�¯é� åœ°ä¼ é€�到相应的端å�£ã€‚</p><h6>有关网络层的é‡�点:</h6><ul><li>ä¼ è¾“å±‚è´Ÿè´£å°†ä¸Šå±‚æ•°æ�®åˆ†æ®µå¹¶æ��供端到端的ã€�å�¯é� 的或ä¸�å�¯é� çš„ä¼ è¾“ä»¥å�Šç«¯åˆ°ç«¯çš„差错æ�§åˆ¶å’Œæµ�é‡�æ�§åˆ¶é—®é¢˜ï¼›</li><li>包å�«çš„主è¦�å��议:TCPå��议(Transmission Control Protocolï¼Œä¼ è¾“æ�§åˆ¶å��议)ã€�UDPå��议(User Datagram Protocol,用户数æ�®æŠ¥å��议);</li><li>é‡�è¦�设备:网关。</li></ul><p><img src="/img/remote/1460000041793993" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041793994" alt="图片" title="图片"></p><h6>UDPå��议详解</h6><p>UDP(User Datagram Protocol: 用户数æ�®æŠ¥å��è®®),是一个é��常简å�•çš„å��议。</p><p><img src="/img/remote/1460000041793995" alt="图片" title="图片"></p><p>UDPå��议的特点:</p><ul><li>UDPæ˜¯æ— è¿�æ�¥å��议;</li><li>UDPä¸�能ä¿�è¯�å�¯é� 的交付数æ�®ï¼›</li><li>UDP是é�¢å�‘æŠ¥æ–‡ä¼ è¾“çš„ï¼›</li><li>UDP没有拥å¡�æ�§åˆ¶ï¼›</li><li>UDP首部开销很å°�。</li><li>UDPæ•°æ�®æŠ¥ç»“æ�„:</li><li>首部:8B,四字段/2Bã€�æº�端å�£ | 目的端å�£ | UDP长度 | æ ¡éªŒå’Œã€‘ æ•°æ�®å­—段:应用数æ�®</li></ul><p><img src="/img/remote/1460000041793996" alt="图片" title="图片"></p><h6>TCPå��议详解</h6><p>TCP(Transmission Control Protocol: ä¼ è¾“æ�§åˆ¶å��è®®),是计算机网络中é��常å¤�æ�‚的一个å��议。</p><p><img src="/img/remote/1460000041793997" alt="图片" title="图片"></p><p>TCPå��议的功能:</p><ul><li>对应用层报文进行分段和é‡�组;</li><li>é�¢å�‘应用层å®�ç�°å¤�用ä¸�分解;</li><li>å®�ç�°ç«¯åˆ°ç«¯çš„æµ�é‡�æ�§åˆ¶ï¼›</li><li>æ‹¥å¡�æ�§åˆ¶ï¼›</li><li>ä¼ è¾“å±‚å¯»å�€ï¼›</li><li>对收到的报文进行差错检测(首部和数æ�®éƒ¨åˆ†éƒ½æ£€é”™ï¼‰ï¼›</li><li>å®�ç�°è¿›ç¨‹é—´çš„端到端å�¯é� æ•°æ�®ä¼ 输æ�§åˆ¶ã€‚</li><li>TCPå��议的特点:</li><li>TCP是é�¢å�‘è¿�æ�¥çš„å��议;</li><li>TCP是é�¢å�‘字节æµ�çš„å��议;</li><li>TCP的一个è¿�æ�¥æœ‰ä¸¤ç«¯ï¼Œå�³ç‚¹å¯¹ç‚¹é€šä¿¡ï¼›</li><li>TCPæ��ä¾›å�¯é� çš„ä¼ è¾“æœ�务;</li><li>TCPå��è®®æ��供全å�Œå·¥é€šä¿¡ï¼ˆæ¯�æ�¡TCPè¿�æ�¥å�ªèƒ½ä¸€å¯¹ä¸€ï¼‰ï¼›</li></ul><h6>TCP报文段结æ�„:</h6><p>最大报文段长度:报文段中å°�装的应用层数æ�®çš„æœ€å¤§é•¿åº¦ã€‚</p><p><img src="/img/remote/1460000041793998" alt="图片" title="图片"></p><p>TCP首部:</p><ul><li>åº�å�·å­—段:TCPçš„åº�å�·æ˜¯å¯¹æ¯�个应用层数æ�®çš„æ¯�个字节进行编å�·</li><li>确认åº�å�·å­—段:期望ä»�对方æ�¥æ”¶æ•°æ�®çš„字节åº�å�·ï¼Œå�³è¯¥åº�å�·å¯¹åº”的字节尚未收到。用ack\_seqæ ‡è¯†ï¼›</li><li>TCP段的首部长度最短是20B ,最长为60字节。但是长度必须为4B的整数å€�</li></ul><p>TCPæ ‡è®°çš„ä½œç”¨ï¼š</p><p><img src="/img/remote/1460000041793999" alt="图片" title="图片"></p><h6>å�¯é� ä¼ è¾“çš„åŸºæœ¬å�Ÿç�†</h6><p>基本å�Ÿç�†ï¼š</p><ul><li>ä¸�å�¯é� ä¼ è¾“ä¿¡é�“在数æ�®ä¼ 输中å�¯èƒ½å�‘生的情况:比特差错ã€�ä¹±åº�ã€�é‡�ä¼ ã€�丢失</li><li>基äº�ä¸�å�¯é� ä¿¡é�“å®�ç�°å�¯é� æ•°æ�®ä¼ 输采å�–çš„æ�ªæ–½ï¼š</li></ul><p>差错检测:利用编ç �å®�ç�°æ•°æ�®åŒ…ä¼ è¾“è¿‡ç¨‹ä¸­çš„æ¯”ç‰¹å·®é”™æ£€æµ‹ 确认:æ�¥æ”¶æ–¹å�‘å�‘é€�æ–¹å��馈æ�¥æ”¶çжæ€� é‡�ä¼ ï¼šå�‘é€�æ–¹é‡�æ–°å�‘é€�æ�¥æ”¶æ–¹æ²¡æœ‰æ­£ç¡®æ�¥æ”¶çš„æ•°æ�® åº�å�·ï¼šç¡®ä¿�æ•°æ�®æŒ‰åº�æ��交 计时器:解决数æ�®ä¸¢å¤±é—®é¢˜ï¼›</p><p>å�œæ­¢ç­‰å¾…å��议:是最简å�•çš„å�¯é� ä¼ è¾“å��议,但是该å��议对信é�“的利用ç�‡ä¸�高。</p><p>è¿�ç»­ARQ(Automatic Repeat reQuest:自动é‡�ä¼ è¯·æ±‚)å��议:滑动窗å�£+累计确认,大幅æ��高了信é�“的利用ç�‡ã€‚</p><h6>TCPå��议的å�¯é� ä¼ è¾“</h6><p>基äº�è¿�ç»­ARQå��议,在æŸ�些情况下,é‡�ä¼ çš„æ•ˆç�‡å¹¶ä¸�高,会é‡�å¤�ä¼ è¾“éƒ¨åˆ†å·²ç»�æˆ�功æ�¥æ”¶çš„字节。</p><h6>TCPå��议的æµ�é‡�æ�§åˆ¶</h6><p>æµ�é‡�æ�§åˆ¶ï¼šè®©å�‘é€�æ–¹å�‘é€�速ç�‡ä¸�è¦�太快,TCPå��议使用滑动窗å�£å®�ç�°æµ�é‡�æ�§åˆ¶ã€‚</p><p><img src="/img/remote/1460000041794000" alt="图片" title="图片"></p><h6>TCPå��议的拥å¡�æ�§åˆ¶</h6><p>æ‹¥å¡�æ�§åˆ¶ä¸�æµ�é‡�æ�§åˆ¶çš„区别:æµ�é‡�æ�§åˆ¶è€ƒè™‘点对点的通信é‡�çš„æ�§åˆ¶ï¼Œè€Œæ‹¥å¡�æ�§åˆ¶è€ƒè™‘整个网络,是全局性的考虑。拥å¡�æ�§åˆ¶çš„æ–¹æ³•:慢å�¯åŠ¨ç®—æ³•+æ‹¥å¡�é�¿å…�算法。</p><p>慢开始和拥å¡�é�¿å…�:</p><ul><li>ã€�慢开始】拥å¡�窗å�£ä»�1指数å¢�é•¿ï¼›</li><li>到达阈值时进入ã€�æ‹¥å¡�é�¿å…�】,å�˜æˆ�+1å¢�é•¿ï¼›</li><li>ã€�超时】,阈值å�˜ä¸ºå½“å‰�cwnd的一å�Šï¼ˆä¸�能&lt;2);</li><li>å†�ä»�ã€�慢开始】,拥å¡�窗å�£ä»�1指数å¢�长。</li></ul><p><img src="/img/remote/1460000041794001" alt="图片" title="图片"></p><p>å¿«é‡�ä¼ å’Œå¿«æ�¢å¤�:</p><ul><li>å�‘é€�æ–¹è¿�续收到3个冗余ACK,执行ã€�å¿«é‡�ä¼ ã€‘ï¼Œä¸�必等计时器超时;</li><li>执行ã€�å¿«æ�¢å¤�】,阈值å�˜ä¸ºå½“å‰�cwnd的一å�Šï¼ˆä¸�能&lt;2),并ä»�此新的ssthresh点进入ã€�æ‹¥å¡�é�¿å…�】。</li></ul><p><img src="/img/remote/1460000041794002" alt="图片" title="图片"></p><h6>TCPè¿�æ�¥çš„三次æ�¡æ‰‹ï¼ˆé‡�è¦�)</h6><p>TCP三次æ�¡æ‰‹ä½¿ç”¨æŒ‡ä»¤ï¼š</p><p><img src="/img/remote/1460000041794003" alt="图片" title="图片"></p><p>é�¢è¯•常客:为什么需è¦�三次æ�¡æ‰‹ï¼Ÿ</p><ul><li>第一次æ�¡æ‰‹ï¼šå®¢æˆ·å�‘é€�请求,此时æœ�务器知é�“客户能å�‘ï¼›</li><li>第二次æ�¡æ‰‹ï¼šæœ�务器å�‘é€�确认,此时客户知é�“æœ�务器能å�‘能收;</li><li>第三次æ�¡æ‰‹ï¼šå®¢æˆ·å�‘é€�确认,此时æœ�务器知é�“客户能收。</li></ul><p>建立è¿�æ�¥ï¼ˆä¸‰æ¬¡æ�¡æ‰‹ï¼‰ï¼š</p><ul><li>第一次:客户å�‘æœ�务器å�‘é€�è¿�æ�¥è¯·æ±‚段,建立è¿�æ�¥è¯·æ±‚æ�§åˆ¶æ®µï¼ˆSYN=1ï¼‰ï¼Œè¡¨ç¤ºä¼ è¾“çš„æŠ¥æ–‡æ®µçš„ç¬¬ä¸€ä¸ªæ•°æ�®å­—节的åº�列å�·æ˜¯x,此åº�列å�·ä»£è¡¨æ•´ä¸ªæŠ¥æ–‡æ®µçš„åº�å�·ï¼ˆseq=x);客户端进入 SYN_SEND (å�Œæ­¥å�‘é€�状æ€�);</li><li>第二次:æœ�务器å�‘å›�确认报文段,å�Œæ„�建立新è¿�æ�¥çš„确认段(SYN=1),确认åº�å�·å­—段有效(ACK=1),æœ�务器告诉客户端报文段åº�å�·æ˜¯y(seq=y),表示æœ�务器已ç»�收到客户端åº�å�·ä¸ºx的报文段,准备æ�¥å�—客户端åº�列å�·ä¸ºx+1的报文段(ack_seq=x+1);æœ�务器由LISTEN进入SYN_RCVD (å�Œæ­¥æ”¶åˆ°çжæ€�);</li><li>第三次:客户对æœ�务器的å�Œä¸€è¿�æ�¥è¿›è¡Œç¡®è®¤.确认åº�å�·å­—段有效(ACK=1),客户此次的报文段的åº�列å�·æ˜¯x+1(seq=x+1),客户期望æ�¥å�—æœ�务器åº�列å�·ä¸ºy+1的报文段(ack_seq=y+1);当客户å�‘é€�ack时,客户端进入ESTABLISHED 状æ€�;当æœ�务收到客户å�‘é€�çš„ackå��,也进入ESTABLISHED状æ€�;第三次æ�¡æ‰‹å�¯æ�ºå¸¦æ•°æ�®;</li></ul><p><img src="/img/remote/1460000041794004" alt="图片" title="图片"></p><h6>TCPè¿�æ�¥çš„四次挥手(é‡�è¦�)</h6><p>释放è¿�æ�¥ï¼ˆå››æ¬¡æŒ¥æ‰‹ï¼‰</p><ul><li>第一次:客户å�‘æœ�务器å�‘é€�释放è¿�æ�¥æŠ¥æ–‡æ®µï¼Œå�‘é€�端数æ�®å�‘é€�完毕,请求释放è¿�æ�¥ï¼ˆFIN=1ï¼‰ï¼Œä¼ è¾“çš„ç¬¬ä¸€ä¸ªæ•°æ�®å­—节的åº�å�·æ˜¯x(seq=x);客户端状æ€�ç”±ESTABLISHED进入FIN_WAIT_1(终止等待1状æ€�);</li><li>第二次:æœ�务器å�‘客户å�‘é€�确认段,确认字å�·æ®µæœ‰æ•ˆï¼ˆACK=1),æœ�åŠ¡å™¨ä¼ è¾“çš„æ•°æ�®åº�å�·æ˜¯y(seq=y),æœ�务器期望æ�¥æ”¶å®¢æˆ·æ•°æ�®åº�å�·ä¸ºx+1(ack_seq=x+1);æœ�务器状æ€�ç”±ESTABLISHED进入CLOSE_WAIT(关闭等待);客户端收到ACK段å��,由FIN_WAIT_1进入FIN_WAIT_2ï¼›</li><li>第三次:æœ�务器å�‘客户å�‘é€�释放è¿�æ�¥æŠ¥æ–‡æ®µï¼Œè¯·æ±‚释放è¿�æ�¥ï¼ˆFIN=1),确认字å�·æ®µæœ‰æ•ˆï¼ˆACK=1),表示æœ�务器期望æ�¥æ”¶å®¢æˆ·æ•°æ�®åº�å�·ä¸ºx+1(ack_seq=x+1);è¡¨ç¤ºè‡ªå·±ä¼ è¾“çš„ç¬¬ä¸€ä¸ªå­—èŠ‚åº�å�·æ˜¯y+1(seq=y+1);æœ�务器状æ€�ç”±CLOSE_WAIT 进入 LAST_ACK (最å��确认状æ€�);</li><li>第四次:客户å�‘æœ�务器å�‘é€�确认段,确认字å�·æ®µæœ‰æ•ˆï¼ˆACK=1ï¼‰ï¼Œè¡¨ç¤ºå®¢æˆ·ä¼ è¾“çš„æ•°æ�®åº�å�·æ˜¯x+1(seq=x+1),表示客户期望æ�¥æ”¶æœ�务器数æ�®åº�å�·ä¸ºy+1+1(ack_seq=y+1+1);客户端状æ€�ç”±FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状æ€�ï¼›æœ�务器在收到最å��一次ACKå��,由LAST_ACK进入CLOSEDï¼›</li></ul><p><img src="/img/remote/1460000041794005" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041794006" alt="图片" title="图片"></p><h6>为什么需è¦�等待2MSL?</h6><ul><li>最å��一个报文没有确认;</li><li>ç¡®ä¿�å�‘é€�方的ACKå�¯ä»¥åˆ°è¾¾æ�¥æ”¶æ–¹ï¼›</li><li>2MSL时间内没有收到,则æ�¥æ”¶æ–¹ä¼šé‡�å�‘ï¼›</li><li>ç¡®ä¿�当å‰�è¿�æ�¥çš„æ‰€æœ‰æŠ¥æ–‡éƒ½å·²ç»�过期。</li></ul><h2>应用层</h2><p>为æ“�作系统或网络应用程åº�æ��供访问网络æœ�务的æ�¥å�£ã€‚应用层é‡�点:</p><ul><li>æ•°æ�®ä¼ 输基本å�•ä½�为报文;</li><li>包å�«çš„主è¦�å��议:FTPï¼ˆæ–‡ä»¶ä¼ é€�å��议)ã€�Telnet(远程登录å��议)ã€�DNS(域å��è§£æ��å��议)ã€�SMTPï¼ˆé‚®ä»¶ä¼ é€�å��议),POP3å��议(邮局å��议),HTTPå��议(Hyper Text Transfer Protocol)。</li></ul><h6>DNS详解</h6><p>DNS(Domain Name System:域å��系统)ã€�C/S,UDP,端å�£53】:解决IP地å�€å¤�æ�‚难以记忆的问题,存储并完æˆ�自己所管辖范围内主机的 域å�� 到 IP 地å�€çš„æ˜ 射。</p><p>域å��è§£æ��的顺åº�:</p><ul><li>ã€�1】æµ�览器缓存,</li><li>ã€�2】找本机的hosts文件,</li><li>ã€�3】路由缓存,</li><li>ã€�4】找DNSæœ�务器(本地域å��ã€�顶级域å��ã€�æ ¹åŸŸå��)-&gt;迭代解æ��ã€�递归查询。</li></ul><p>IP—&gt;DNSæœ�务—&gt;便äº�记忆的域å��</p><p>域å��由点ã€�å­—æ¯�和数字组æˆ�,分为顶级域(com,cn,net,gov,org)ã€�二级域(baidu,taobao,qq,alibaba)ã€�三级域(www)(12-2-0852)</p><p><img src="/img/remote/1460000041794007" alt="图片" title="图片"></p><h6>DHCPå��议详解</h6><p>DHCP(Dynamic Configuration Protocol:动æ€�主机设置å��议):是一个局域网å��议,是应用UDPå��议的应用层å��议。作用:为临时æ�¥å…¥å±€åŸŸç½‘的用户自动分é…�IP地å�€ã€‚</p><h6>HTTPå��议详解</h6><p>æ–‡ä»¶ä¼ è¾“å��议(FTP):æ�§åˆ¶è¿�æ�¥ï¼ˆç«¯å�£21ï¼‰ï¼šä¼ è¾“æ�§åˆ¶ä¿¡æ�¯ï¼ˆè¿�æ�¥ã€�ä¼ è¾“è¯·æ±‚ï¼‰ï¼Œä»¥7ä½�ASCIIç �çš„æ ¼å¼�。整个会è¯�期间一直打开。</p><p>HTTP(HyperText Transfer Protocol:è¶…æ–‡æœ¬ä¼ è¾“å��议)ã€�TCP,端å�£80】:是å�¯é� 的数æ�®ä¼ 输å��议,æµ�览器å�‘æœ�务器å�‘收报文å‰�,先建立TCPè¿�æ�¥ï¼ŒHTTP使用TCPè¿�æ�¥æ–¹å¼�(HTTPè‡ªèº«æ— è¿�æ�¥ï¼‰ã€‚</p><h6>HTTP请求报文方å¼�:</h6><ul><li>GET:请求指定的页é�¢ä¿¡æ�¯ï¼Œå¹¶è¿”å›�å®�体主体;</li><li>POST:å�‘指定资æº�æ��交数æ�®è¿›è¡Œå¤„ç�†è¯·æ±‚ï¼›</li><li>DELETE:请求æœ�åŠ¡å™¨åˆ é™¤æŒ‡å®šçš„é¡µé�¢ï¼›</li><li>HEAD:请求读å�–URLæ ‡è¯†çš„ä¿¡æ�¯çš„首部,å�ªè¿”å›�报文头;</li><li>OPETION:请求一些选项的信æ�¯ï¼›</li><li>PUT:在指æ˜�çš„URL下存储一个文档。</li></ul><p><img src="/img/remote/1460000041794008" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041794009" alt="图片" title="图片"></p><h6>HTTP工作的结æ�„</h6><p><img src="/img/remote/1460000041794010" alt="图片" title="图片"></p><h6>HTTPSå��议详解</h6><p>HTTPS(Secure)是安全的HTTPå��议,端å�£å�·443。基äº�HTTPå��议,通过SSL或TLSæ��ä¾›åŠ å¯†å¤„ç�†æ•°æ�®ã€�验è¯�对方身份以å�Šæ•°æ�®å®Œæ•´æ€§ä¿�护。</p><blockquote>æ–‡ç« ï¼šblog.csdn.net/Royalic/article/details/119985591</blockquote><p><strong>如æ�œæœ¬æ–‡å¯¹ä½ 有帮助的è¯�,欢è¿�</strong>点èµ�&转å�‘<strong>,这对我继续分享&åˆ›ä½œä¼˜è´¨æ–‡ç« é��常é‡�è¦�。感谢ğŸ™�ğŸ�»</strong></p><p><img src="/img/bVbHCzg" alt="" title=""></p> 常用数æ�®åº“选å�‹ï¼�ä½ å�šå¯¹äº†å�—? https://segmentfault.com/a/1190000041419728 2022-02-17T14:20:07+08:00 2022-02-17T14:20:07+08:00 民工哥 https://segmentfault.com/u/jishuroad 13 <h2>å½±å“�æ•°æ�®åº“é€‰æ‹©çš„å› ç´ </h2><ul><li>æ•°æ�®é‡�:是å�¦æµ·é‡�æ•°æ�®ï¼Œå�•表数æ�®é‡�太大会考验数æ�®åº“的性能</li><li>æ•°æ�®ç»“æ�„:结æ�„化 (æ¯�æ�¡è®°å½•的结æ�„éƒ½ä¸€æ ·) 还是é��结æ�„化的 (ä¸�å�Œè®°å½•的结æ�„å�¯ä»¥ä¸�ä¸€æ ·)</li><li>是å�¦å®½è¡¨ï¼šä¸€æ�¡è®°å½•是 10 个域,还是æˆ�百上å�ƒä¸ªåŸŸ</li><li>æ•°æ�®å±�性:是基本数æ�® (比如用户信æ�¯)ã€�业务数æ�® (比如用户行为)ã€�辅助数æ�® (比如日志)ã€�缓存数æ�®</li><li>是å�¦è¦�求事务性:一个事务由多个æ“�作组æˆ�,必须全部æˆ�功或全部å›�滚,ä¸�å…�许部分æˆ�功</li><li>å®�时性:对写延迟,或读延迟有没有è¦�求,比如有的业务å…�许写延迟高但è¦�求读延迟ä½�</li><li>查询é‡�:比如有的业务è¦�求查询大é‡�记录的少数列,有的è¦�求查询少数记录的所有列</li><li>æ�’åº�è¦�求:比如有的业务是针对时间åº�列æ“�作的</li><li>å�¯é� 性è¦�求:对数æ�®ä¸¢å¤±çš„容å¿�度</li><li>一致性è¦�求:是å�¦è¦�求读到的一定是最新写入的数æ�®</li><li>对å¢�åˆ æŸ¥æ”¹çš„è¦�求:有的业务è¦�能快速的对å�•æ�¡æ•°æ�®å�šå¢�åˆ æŸ¥æ”¹ (比如用户信æ�¯),有的è¦�求批é‡�导入,有的ä¸�需è¦�ä¿®æ”¹åˆ é™¤å�•æ�¡è®°å½• (比如日志ã€�用户行为),有的è¦�求检索少é‡�æ•°æ�® (比如日志),有的è¦�求快速读å�–大é‡�æ•°æ�® (比如展示报表),有的è¦�求大é‡�读å�–并计算数æ�® (比如分æ��用户行为)</li><li>是å�¦éœ€è¦�支æŒ�多表æ“�作</li></ul><p>ä¸�å�Œçš„业务对数æ�®åº“有ä¸�å�Œçš„è¦�求</p><h2>SQL æ•°æ�®åº“ & NoSQL æ•°æ�®åº“</h2><h6>SQL æ•°æ�®åº“å°±æ˜¯ä¼ ç»Ÿçš„å…³ç³»å�‹æ•°æ�®åº“</h6><ul><li>行列å¼�表存储</li><li>结æ�„化数æ�®</li><li>需è¦�预定义数æ�®ç±»å�‹</li><li>æ•°æ�®é‡�和查询é‡�都ä¸�大,如æ�œæ•°æ�®é‡�大è¦�å�šåˆ†è¡¨</li><li>对数æ�®ä¸€è‡´æ€§ã€�完整性约æ�Ÿã€�事务性ã€�å�¯é� 性è¦�求比较高</li><li>支æŒ�多表 Join æ“�作</li><li>支æŒ�多表间的完整性,è¦�åˆ é™¤ A 表的æŸ�æ�¡æ•°æ�®ï¼Œå�¯èƒ½éœ€è¦�å…ˆåˆ é™¤ B 表的æŸ�些数æ�®</li><li>SQL çš„å¢�åˆ æ”¹æŸ¥åŠŸèƒ½å¼º</li><li>较为通用,技术比较æˆ�熟</li><li>大数æ�®é‡�性能ä¸�è¶³</li><li>高并å�‘性能ä¸�è¶³</li><li>æ— æ³•åº”ç”¨äº�é��结æ�„化数æ�®</li><li>扩展困难</li></ul><p>常用的 SQL æ•°æ�®åº“比如 Oracleã€�MySQLã€�PostgreSQLã€�SQLite</p><h6>NoSQL 泛指é��关系å�‹æ•°æ�®åº“</h6><ul><li>表结æ�„较ç�µæ´»ï¼Œæ¯”如列存储,键值对存储,文档存储,图形存储</li><li>支æŒ�é��结æ�„化数æ�®</li><li>有的ä¸�需è¦�预定义数æ�®ç±»å�‹ï¼Œæœ‰çš„甚至ä¸�需è¦�预定义表</li><li>支æŒ�大数æ�®é‡�</li><li>多数都支æŒ�分布å¼�</li><li>扩展性好</li><li>基本查询能力,高并å�‘能力比较强 (å› ä¸ºé‡‡ç”¨é��结æ�„化ã€�分布å¼�,并牺牲一致性ã€�完整性ã€�事务性等功能)</li><li>对数æ�®ä¸€è‡´æ€§è¦�求比较ä½�</li><li>通常ä¸�支æŒ�事务性,或是有é™�支æŒ�</li><li>通常ä¸�支æŒ�完整性,å¤�æ�‚业务场景支æŒ�较差</li><li>通常ä¸�支æŒ�多表 Join,或是有é™�支æŒ�</li><li>é�� SQL 查询语言,或类 SQL 查询语言,但功能都比较弱,有的甚至ä¸�支æŒ�ä¿®æ”¹åˆ é™¤æ•°æ�®</li><li>ä¸�æ˜¯å¾ˆé€šç”¨ï¼ŒæŠ€æœ¯å¤šæ ·ï¼Œå¸‚åœºå�˜åŒ–比较大</li></ul><h6>常用的 NoSQL æ•°æ�®åº“比如</h6><ul><li>列å¼�:HBaseã€�Cassandraã€�ClickHouse</li><li>键值:Redisã€�Memcached</li><li>文档:MongoDB</li><li>æ—¶åº�:InfluxDBã€�Prometheus</li><li>æ�œç´¢ï¼šElasticsearch</li></ul><p>SQL å’Œ NoSQL 是一个互补的关系,应用在ä¸�å�Œçš„场景中。</p><h2>OLTP & OLAP</h2><h6>OLTP (On-Line Transaction Processing)</h6><ul><li>主è¦�å�šå®�时事务处ç�†</li><li>比如处ç�†ç”¨æˆ·åŸºæœ¬ä¿¡æ�¯ã€�处ç�†è®¢å�•å�ˆå�Œã€�处ç�†é“¶è¡Œè½¬è´¦ä¸šåŠ¡ã€�ä¼�业的 ERP 系统和 OA 系统,等等</li><li>频ç¹�地,对少é‡�æ•°æ�®ï¼Œç”šè‡³æ˜¯å�•æ�¡æ•°æ�®ï¼Œå�šå®�æ—¶çš„å¢�åˆ æ”¹æŸ¥</li><li>æ•°æ�®åº“ç»�常更新</li><li>通常对规范化ã€�å®�时性ã€�稳定性ã€�事务性ã€�一致性ã€�完整性等有è¦�求</li><li>æ“�作较为固定,比如订å�•业务,å�¯èƒ½æ°¸è¿œå°±é‚£å‡ 个固定的æ“�作</li><li>æ•°æ�®åº“主è¦�模å�‹æ˜¯ 3NF 或 BCNF 模å�‹</li></ul><p>OLAP (On-Line Analytical Processing)</p><ul><li>æ•°æ�®ä»“库,主è¦�å�šå�†å�²æ•°æ�®åˆ†æ��,为商业决策æ��供支æŒ�</li><li>比如对大é‡�的用户行为å�šåˆ†æ��,对设备的状æ€�ã€�使用ç�‡ã€�性能å�šåˆ†æ��</li><li>频ç�‡è¾ƒä½�地,对大é‡�æ•°æ�®ï¼Œå�šè¯»å�–ã€�è�šå�ˆã€�计算ã€�分æ��,å®�时性è¦�求ä¸�高,对å��å��能力è¦�求较高</li><li>通常列的数é‡�比较多,但æ¯�次分æ��的时候å�ªå�–少部分列的数æ�®</li><li>通常是批é‡�导入数æ�®</li><li>通常数æ�®å¯¼å…¥å��ä¸�会修改,主è¦�是读å�–æ“�作,写少读多</li><li>通常对规范化ã€�事务性ã€�一致性ã€�完整性等è¦�求较ä½�,甚至一个查询æ“�作失败了也ä¸�会有什么影å“�</li><li>æ“�作较为ç�µæ´»ï¼Œæ¯”如一个海é‡�用户行为数æ�®è¡¨ï¼Œå�¯ä»¥æƒ³å‡ºè®¸å¤šä¸�å�Œçš„æ–¹æ³•,ä»�ä¸�å�Œçš„角度对用户å�šåˆ†æ��</li><li>æ•°æ�®åº“主è¦�是星å�‹ã€�雪花模å�‹</li><li>ä¸�使用高性能的 OLAP 之å‰�ï¼Œæ›´ä¼ ç»Ÿçš„å�šæ³•æ˜¯é€šè¿‡ç¦»çº¿ä¸šåŠ¡æ�„建 T+1 的离线数æ�®ï¼Œæ¯”较æ»�å��</li></ul><p>OLTP é€šå¸¸ç”¨ä¼ ç»Ÿçš„å…³ç³»æ•°æ�®åº“,如æ�œæ•°æ�®é‡�大è¦�分表,对事务性ã€�一致性ã€�完整性等è¦�求ä¸�高的è¯�也å�¯ä»¥ç”¨ NoSQL</p><p>OLAP 通常用 NoSQL,数æ�®é‡�ä¸�大的è¯�也å�¯ä»¥ç”¨ä¼ 统的关系数æ�®åº“</p><h2>关系å�‹æ•°æ�®åº“ Oracleã€�SQL Serverã€�MySQLã€�PostgreSQLã€�SQLite</h2><p>Oracle:甲骨文开å�‘的商业数æ�®åº“,ä¸�å¼€æº�,支æŒ�所有主æµ�å¹³å�°ï¼Œæ€§èƒ½å¥½ï¼ŒåŠŸèƒ½å¼ºï¼Œç¨³å®šæ€§å¥½ï¼Œå®‰å…¨æ€§å¥½ï¼Œæ”¯æŒ�大数æ�®é‡�,比较å¤�æ�‚,收费昂贵。</p><p>SQL Server:微软开å�‘的商业数æ�®åº“,å�ªèƒ½åœ¨ Windows è¿�行。</p><p>MySQL:甲骨文拥有的开æº�æ•°æ�®åº“,支æŒ�多ç§�æ“�作系统,体积å°�,功能弱些,简å�•çš„æ“�作性能好,å¤�æ�‚çš„æ“�作性能差些。** PostgreSQL**:使用 BSD å��议的完全开æº�å…�费的项目,支æŒ�多ç§�æ“�作系统,功能更强大,å�¯ä»¥å’Œå¤šç§�å¼€æº�工具é…�å�ˆã€‚</p><p>SQLite:开æº�ã€�è½»å�‹ã€�æ— æœ�务器ã€�é›¶é…�置,一个数æ�®åº“å°±å�ªæ˜¯ä¸€ä¸ªæ–‡ä»¶ï¼Œåœ¨åº”用程åº�内执行æ“�作,å� 用资æº�å°�,å�¯ç”¨äº�嵌入å¼�或å°�å�‹åº”用。</p><h6>应用场景</h6><p>Oracle 多用äº�银行等高è¦�求的领域,è¦�求ä¸�高的比如互è�”网行业多用 MySQL å’Œ PostgreSQL,而 SQLite 用äº�嵌入å¼�或作为应用程åº�内的数æ�®åº“使用,SQL Server 用äº� Window æœ�务器。</p><h2>HBase (宽表ã€�列å¼�存储ã€�键值对存储ã€�NoSQLã€�OLTP)</h2><ul><li>基äº� Hadoop çš„ HDFS 分布å¼�文件系统</li><li>分布å¼�æ•°æ�®åº“,需è¦� ZooKeeper 作为节点间的å��调器</li><li>支æŒ�宽表,支æŒ�é��结æ�„化数æ�®ï¼Œä¸�需è¦�预定义列和数æ�®ç±»å�‹</li><li>列å¼�存储,æ¯�个 HFile 文件å�ªå­˜å‚¨ä¸€ä¸ªåˆ—æ—�的数æ�®ï¼Œä¸€ä¸ªåˆ—æ—�å�¯ä»¥æœ‰å¤šä¸ª HFile,而 HFile 内部按 Key-Value æ ¼å¼�存储,其中 Key 是 rowkey, column family, column, timestamp 的组å�ˆå¹¶ä¸”按 rowkey 在 HFile 中按åº�存储,而 value 就是 Column Cell 的值</li><li>支æŒ�æµ·é‡�æ•°æ�® (å�ƒäº¿çº§æ•°æ�®è¡¨)</li><li>æ•°æ�®å…ˆå†™å…¥å†…存,达到阀值å†�写入ç£�盘,性能好,å� 用内存大</li><li>ä¸�支æŒ� SQL,ä¸�支æŒ� Join,有自己专用的语å�¥ï¼Œæ”¯æŒ�å¢�åˆ æ”¹æŸ¥</li><li>自动分区ã€�è´Ÿè½½å�‡è¡¡ã€�å�¯çº¿æ€§æ‰©å±•</li><li>自动故障è¿�ç§»</li><li>强一致性 (æ¯�个分区 Region å�ªç”±ä¸€ä¸ª Region Server 负责,容易å®�ç�°å¼ºä¸€è‡´æ€§)</li><li>CP 模å�‹ (ä¸�ä¿�è¯�å�¯ç”¨æ€§ï¼Œæ¯�个 Region å�ªç”±ä¸€ä¸ª Region Server 负责,Server 挂了得å�šè¿�移导致暂时ä¸�å�¯ç”¨)</li><li>ä¸�支æŒ�事务ã€�二级索引</li></ul><h6>应用场景</h6><p>组件比较多,比较é‡�,适用äº�已有的 Hadoop å¹³å�°ï¼Œé€‚用äº�æµ·é‡�宽表数æ�®ã€�需è¦�å¢�åˆ æ”¹æŸ¥ã€�OLTP 的场景</p><h2>Phoenix (基äº� HBase 的数æ�®åº“引æ“�ã€�关系å�‹ã€�OLTP)</h2><ul><li>嵌入到 HBase çš„ Region Server 的数æ�®åº“引æ“�</li><li>支æŒ� SQL</li><li>支æŒ� Join</li><li>支æŒ�事务 (需è¦�在定义表的时候é…�ç½®)</li><li>支æŒ�二级索引</li><li>支æŒ�æ’’ç›�</li><li>支æŒ� JDBC</li></ul><h6>应用场景</h6><p>用äº�强化 HBase,主è¦�作为 OLTP,查询性能è¦�求ä¸�高的è¯�也å�¯ä½œä¸º OLAP,多用äº� HDP (HDP 有集æˆ� Phoenix)</p><h2>Cassandra (宽表ã€�键值对存储ã€�NoSQLã€�OLTP)</h2><ul><li>æ— å�•点故障:Cassandra 节点按ç�¯å½¢æ�’列,没有中心节点,æ¯�个节点独立互è�”地扮演相å�Œè§’色,æ¯�个节点都å�¯ä»¥æ�¥å�—读写请求,数æ�®å�¯ä»¥æœ‰å¤šä¸ªå‰¯æœ¬å­˜å‚¨åœ¨å¤šä¸ªèŠ‚ç‚¹ï¼ŒèŠ‚ç‚¹ä¹‹é—´é€šè¿‡ Gossip (P2P) å��议交æ�¢çжæ€�ä¿¡æ�¯ï¼Œé›†ç¾¤ä¸­æœ‰è‹¥å¹²èŠ‚ç‚¹é…�为ç§�å­�节点,用äº�æ–°åŠ å…¥çš„èŠ‚ç‚¹è�·å�–集群拓扑结æ�„å¹¶å�¯åЍ Gossip å��è®®</li><li>æ��供类 SQL 语言 CQL</li><li>适å�ˆç»“æ�„化ã€�é��结æ�„化数æ�®</li><li>Table 需è¦�定义 Partition Keyã€�Clustering Keyã€�以å�Šæ™®é€šåˆ—,其中 Partition Key 用äº�分区和æ�’åº�,å�³æŒ‰ç…§ Partition Key çš„ Hash Token 决定了数æ�®è¢«åˆ†é…�到哪个节点,并且在节点内也是按该 Hash Token 按åº�存储的,有相å�Œ Partition Key 的数æ�®ä¼šå­˜åœ¨ä¸€èµ·ï¼Œå¹¶ä¸”按照 Clustering Key æ�’åº�存储,有点类似äº� HBase çš„ RowKeyã€�ColumnFamilyã€�Column,ä¸�过 HBase 是相å�Œ CF 存一起,内部å†�按 RowKey æ�’åº�存储,å†�å�– Column 值 (Column 值ä¸�æ�’åº�),而 Cassandra 是先按 Partition Key çš„ Token æ�’åº�存储,内部å†�按 Clustering æ�’åº�存储,å†�å�–普通 Column 的值 (Column 值ä¸�æ�’åº�)</li><li>高度å�¯æ‰©å±•,å…�è®¸æ·»åŠ ç¡¬ä»¶ã€�节点以æ��高数æ�®å®¹é‡�,å�Œæ—¶ä¿�æŒ�快速的å“�应时间</li><li>通过 Consistency 命令å�¯ä»¥é…�置一致性级别,主è¦�是通知客户端æ“�作å‰�,必须确ä¿�çš„ replica çš„æˆ�功数é‡�</li><li>Cassandra 采用的是最终一致性,是 CAP ç�†è®ºé‡Œçš„ AP</li><li>Cassandra ä¸�支æŒ� Join å’Œå­�查询</li></ul><h6>应用场景</h6><p>主è¦�用äº� OLTP,è¦�求ä¸�高的è¯�也å�¯ä»¥ä½œä¸º OLAP 使用,和 HBase 比需è¦�的组件比较少,维护比较容易</p><h2>Redis (基äº�内存的 Key-Value çš„ NoSQL æ•°æ�®åº“,OLTP)</h2><ul><li>ç”± C 语言编写</li><li>支æŒ�多ç§�æ•°æ�®ç±»å�‹å¦‚ strings,hashes,lists,sets,sorted sets,bitmaps,hyperloglogs,geospatial ç­‰</li><li>æ“�作å�Ÿå­�性,ä¿�è¯�了两个客户端å�Œæ—¶è®¿é—®æœ�务器将è�·å¾—æ›´æ–°å��的值</li><li>æ•°æ�®å­˜å‚¨åœ¨å†…存中</li><li>å�¯ä»¥é…�ç½®æŒ�久化,周期性的把更新数æ�®å†™å…¥ç£�盘,或周期性地把修改æ“�ä½œå†™å…¥è¿½åŠ è®°å½•æ–‡ä»¶ï¼Œä¹Ÿå�¯ä»¥å…³é—­æŒ�久化功能,将 Redis 作为一个高效的网络缓存数æ�®åŠŸèƒ½ä½¿ç”¨</li><li>支æŒ�主ä»�å�Œæ­¥ï¼Œæ•°æ�®å�¯ä»¥ä»�主æœ�务器å�‘ä»»æ„�æ•°é‡�çš„ä»�æœ�务器å�Œæ­¥ï¼Œä»�æœ�务器å�¯ä»¥æ˜¯å…³è�”å…¶ä»–ä»�æœ�务器的主æœ�务器,这使得 Redis å�¯æ‰§è¡Œå�•å±‚æ ‘å¤�制,存盘å�¯ä»¥æœ‰æ„�æ— æ„�的对数æ�®è¿›è¡Œå†™æ“�作,由äº�完全å®�ç�°äº†å�‘布/订阅机制,使得ä»�æ•°æ�®åº“在任何地方å�Œæ­¥æ ‘时,å�¯è®¢é˜…一个频é�“å¹¶æ�¥æ”¶ä¸»æœ�务器完整的消æ�¯å�‘布记录,å�Œæ­¥å¯¹è¯»å�–æ“�作的å�¯æ‰©å±•性和数æ�®å†—余很有帮助</li><li>支æŒ�消æ�¯çš„å�‘布/订阅(Pub/Sub)模å¼�</li><li>å�•线程模å¼�,å�³ç½‘络 IOã€�æ•°æ�®è¯»å†™ï¼Œéƒ½ç”±ä¸€ä¸ªçº¿ç¨‹å®Œæˆ�ï¼Œæ­£å› ä¸ºå¦‚æ­¤ä¿�è¯�了å�Ÿå­�性ã€�稳定性ã€�代ç �容易维护,之所以å�•线程ä¸�å½±å“�æ€§èƒ½ï¼Œæ˜¯å› ä¸ºæ•°æ�®éƒ½åœ¨å†…存,æ“�作本æ�¥å°±é«˜æ•ˆï¼Œå½“然这里的å�•线程指网络 IOã€�æ•°æ�®è¯»å†™è¿™ä¸ªä¸»åŠŸèƒ½ï¼Œå®�际上还有其他线程,比如周期性写入硬盘的线程</li><li>高版本在网络 IO è¿™å�—使用了多线程 (å› ä¸ºåœ¨é«˜å¹¶å�‘æ“�作时,网络 IO æˆ�为了瓶颈),但读写æ“�作还是å�•线程 (æ“�作内存数æ�®æ€§èƒ½è¿˜æ˜¯é��常高的,能应付高并å�‘场景)</li></ul><h6>应用场景</h6><p>通常作为高性能内存数æ�®åº“ã€�缓存ã€�消æ�¯ä¸­é—´ä»¶ç­‰ä½¿ç”¨</p><h2>memcached (基äº�内存的 Key-Value çš„ NoSQL æ•°æ�®åº“,OLTP)</h2><ul><li>å¼€æº�ã€�高性能ã€�分布å¼�的基äº�内存的 Key-Value æ•°æ�®å­˜å‚¨ï¼Œä½œç”¨ç±»ä¼¼äº� Redis</li><li>存储 String/RawData,ä¸�定义数æ�®ç»“æ�„ (Redis 有 hashã€�listã€�set 等多ç§�结æ�„)</li><li>æ•°æ�®é€šå¸¸ç”± key,flags,expire time,bytes,value 组æˆ�</li><li>æœ�务端基本上å�ªèƒ½ç®€å�•的读写数æ�®ï¼Œæœ�务端能支æŒ�çš„æ“�作比较少</li><li>包å�« Server 组件和 Client 组件,å�¯ä»¥æœ‰å¤šä¸ª server 但 server 之间是独立的,没有å�Œæ­¥å¹¿æ’­ç­‰æœºåˆ¶ï¼Œéœ€è¦�选择哪个 server ç”± client çš„ API 决定的</li><li>æ•°æ�®å�ªåœ¨å†…存,ä¸�会è�½åˆ°ç¡¬ç›˜</li><li>没有安全机制</li><li>å��议简å�•性能高效</li></ul><h6>应用场景</h6><p>memcached 比较简å�•,作为纯粹的 Key-Value 缓存性能会比 Redis 好些,但功能没有 Redis 强大</p><h2>MongoDB (文档数æ�®åº“,NoSQL,OLTP)</h2><p>之所以说是文档数æ�®åº“ï¼Œæ˜¯å› ä¸ºå®ƒçš„æ•°æ�®æ˜¯ä»¥ JSON 文档的形å¼�存储</p><p>MongoDB 的概念和很多数æ�®åº“ä¸�ä¸€æ ·ï¼Œå®ƒçš„ collection 相当äº�表,document 相当äº�行,field 相当äº�列,比如:</p><pre><code>db.user.insert( { &quot;name&quot;: &quot;Lin&quot;, &quot;age&quot;: 30 &quot;address&quot;: { &quot;street&quot;: &quot;Zhongshan Road&quot;, &quot;city&quot;: &quot;Guangzhou&quot;, &quot;zip&quot;: 510000 }, &quot;hobbies&quot;: [&quot;surfing&quot;, &quot;coding&quot;] } )</code></pre><p>这是一æ�¡æ�’入语å�¥ï¼Œè¿™é‡Œçš„ db 是指当å‰�æ•°æ�®åº“,user 就是 collection 相当äº�表,insert 语å�¥é‡Œé�¢çš„ JSON 就是 document 相当äº�å…¶ä»–æ•°æ�®åº“的行,name,age,street 这些就是 field 相当äº�列</p><p>相å�Œçš„æ–‡æ¡£å�¯ä»¥æ�’入多次而ä¸�会被覆盖,å®�际上 mongodb 会自动创建 \_id 字段作为 primary key,并分é…�ä¸�å�Œçš„æ•°å€¼ï¼Œæ‰€ä»¥ä¸�会é‡�å¤�,也å�¯ä»¥ insert 的时候指定 \_id,但如æ�œ \_id å·²ç»�存在则会报错</p><ul><li>å�¯ä»¥çœ‹åˆ°ï¼Œmongodb 是é��结æ�„化数æ�®ï¼Œä¸�需è¦�预定义 collection,也ä¸�需è¦�预定义数æ�®ç»“æ�„</li><li>æ��供丰富的查询表达å¼�</li><li>支æŒ�二级索引,自动负载平衡,读效ç�‡æ¯”写高</li><li>支æŒ�分布å¼�ã€�支æŒ�æ•…éšœæ�¢å¤�ã€�æ•°æ�®å†—ä½™ã€�分片ã€�水平扩展</li><li>å�¯ä»¥é…�置存储引æ“�,WiredTiger Storage Engine (默认) 会å�šå†…å­˜åˆ°æ–‡ä»¶çš„æ˜ å°„ä»¥æ��高性能,但内存消耗大,In-Memory Storage Engine (ä¼�业版支æŒ�) å�ªå­˜åœ¨å†…存,ä¸�会è�½ç›˜</li><li>高版本支æŒ� Join,支æŒ�事务</li><li>支æŒ�安全认è¯�功能</li><li>æ��供扩展,比如å®�ç�°å�¯è§†åŒ–的工具,å®�ç�° BI 集æˆ�的工具</li></ul><h6>应用场景</h6><p>mongodb 更适用äº�高度é��结æ�„化,或者æº�æ•°æ�®å°±æ˜¯ JSON,æ¯�æ�¡æ•°æ�®æ¯”较大,以 OLTP 为主的场景,ä¸�适å�ˆäº�事务è¦�求比较高,或比较å¤�æ�‚的大数æ�®é‡�的查询的场景,å�¦å¤–ç”±äº� mongodb 的语法和其他数æ�®åº“差异比较大,需è¦�ä¸€å®šçš„å­¦ä¹ æˆ�本</p><h2>Hive (基äº� HDFS 的数æ�®åº“引æ“�ã€�关系å�‹ã€�OLAP)</h2><ul><li>Hive 是基äº� Hadoop 的一个数æ�®ä»“库工具</li><li>æ•°æ�®å­˜å‚¨åœ¨ HDFS,创建表的时候è¦�通过 STORED AS å‘½ä»¤æŒ‡å®šå­˜å‚¨æ ¼å¼�比如 TEXTFILEã€�ORCFILEã€�PARQUET,也å�¯ä»¥é€šè¿‡ STORED BY 命令指定为 HBase,å�¯ä»¥åˆ›å»ºæ–°è¡¨ä¹Ÿå�¯ä»¥åˆ›å»ºå·²æœ‰ HBase è¡¨çš„æ˜ å°„</li><li>查询通过 MapReduceã€�Spark 等作业完æˆ�</li><li>æ��供了类 SQL 查询语言 HQL (HiveQL),支æŒ�用户定义函数 (UDF)</li><li>高版本支æŒ�事务 (需è¦�创建表时指定)</li><li>支æŒ�æµ·é‡�æ•°æ�®</li><li>结æ�„化数æ�®</li><li>支æŒ�å¢�åˆ æ”¹æŸ¥</li></ul><h6>应用场景</h6><ul><li>ä¸�适å�ˆäº� OLTP,主è¦�作为 OLAP 用äº�大数æ�®æ‰¹é‡�查询使用,需è¦�有 Hadoop å¹³å�°</li></ul><h2>Impala (基äº� HDFSã€�HBaseã€�Kudu 存储,并行计算,关系å�‹ï¼ŒOLAP)</h2><ul><li>Cloudera å¼€å�‘的基äº�内存的分布å¼�并行计算的数æ�®åº“查询引æ“�</li><li>主è¦�ç”± C++ å®�ç�°ï¼Œå’Œ Hadoop 的交互使用 JNI</li><li>Impala 使用和 Hive ä¸€æ ·çš„ metadataã€�SQLã€�ODBC driverã€�UIï¼Œè¿™æ ·åœ¨æ��高了 HDFS çš„ SQL 查询性能的å�Œæ—¶ï¼Œå�ˆæ��供了相似的用户使用体验</li><li>å’Œ Hive ä¸€æ ·å�¯ä»¥é€šè¿‡ STORED AS 指定 HDFS çš„å­˜å‚¨æ ¼å¼�比如 TEXTFILEã€�ORCFILEã€�PARQUET</li><li>通过 Hive æ“�作的表,需è¦�手动å�Œæ­¥åˆ° Impala</li><li>Impala ä¸�ä»… SQL å’Œ Hive ä¸€æ ·ï¼Œå®�际上元数æ�®ä¹Ÿå­˜åœ¨ Hive 中</li><li>表数æ�®é™¤äº† HDFS,也å�¯ä»¥å­˜å‚¨åˆ° HBase,但需è¦�在 HBase 建表,然å��在 Hive 通过 STORED BY å»ºç«‹æ˜ å°„è¡¨ï¼Œç”±äº� Impala å’Œ Hive ä½¿ç”¨ä¸€æ ·çš„ metadata,在 Hive 建好表å��,å�ªè¦�在 Impala 执行刷新命令 INVALIDATE METADATA,就å�¯ä»¥çœ‹åˆ°å¯¹åº”çš„ HBase 表</li><li>支æŒ� Joinã€�Aggregate 等功能</li><li>支æŒ� JDBCã€�ODBC</li><li>å’Œ Hive ä¸�å�Œï¼ŒImpala ä¸�ä¾�èµ–äº� MapReduce,而是在æ¯�个 HDFS DataNode 上è¿�行自己的引æ“�å®�ç�°å¹¶è¡Œå¤„ç�†</li><li>Impala 的并行处ç�†å¼•æ“�主è¦�ç”± state storeã€�catalog serviceã€�多个 impala daemon 组æˆ�</li><li>æ¯�个 impala daemon 都å�¯ä»¥æ�¥æ”¶ client 的请求,impala daemon ç”± query plannerã€�query coordinatorã€�query executor 组æˆ�,planner æ�¥æ”¶ client çš„ SQL 查询,然å��分解为多个å­�查询,由 coordinator å°†å­�查询分å�‘到å�„个 daemon çš„ executor 执行,daemon è�·å�– HDFSã€�HBase æ•°æ�®ã€�计算ã€�ç„¶å��è¿”å›�ç»™ coordinator,然å��ç”± coordinator è�šå�ˆå��将最终结æ�œè¿”å›�ç»™ client</li><li>Impala æ˜¯æ— ä¸­å¿ƒç»“æ�„,æ¯�个 daemon 都å�¯ä»¥æ�¥å�—è¿�æ�¥æŸ¥è¯¢ï¼Œå�¯ä»¥é€šè¿‡ HA Proxy å®�ç�°å¤šä¸ª daemon 的负载å�‡è¡¡</li><li>state store 用äº�收集监æ�§å�„个 daemon 的状æ€�</li><li>catalog service å°† SQL å�šå‡ºçš„元数æ�®å�˜åŒ–通知给集群中所有的 impala daemon</li><li>Impala 的计算都在内存进行,对内存è¦�求比较高</li><li>Impala 在 2.8 以å��æ‰�支æŒ� update æ“�作,但是å�ªé™�äº� Kudu 存储,需è¦�安装 Kudu,并通过 STORED AS 指定 Kudu 作为数æ�®åº“的存储,Kudu 是 Cloudera å¼€å�‘的列å¼�存储管ç�†å™¨ï¼Œç›®çš„æ˜¯å�š OLAP,并且平衡 HDFS å’Œ HBase 的性能,Kude çš„éš�机读写性能比 HDFS(比如 Parquet)好,但是比 HBase 差,而大数æ�®é‡�查询性能比 HDFS(比如 Parquet)差,但比 HBase 好,Kude å’Œ Impala 高度集æˆ�,也å�¯ä»¥å’Œ MapReduce/Spark 集æˆ�,用 Kudu 替æ�¢ HDFS/HBase è¿™æ · Impala å°±å�¯ä»¥å�š update,兼顾 OLAP 和改数æ�®çš„需求,适å�ˆäº�以 OLAP 为主å�ˆæœ‰ä¸€å®šçš„ Update 需求的场景,Kudu å�¯ä»¥é…�置一致性,采用结æ�„化表数æ�®æ¨¡å�‹ï¼Œéœ€è¦�定义主键,ä¸�使用 HDFS 而是有自己的组件存储和管ç�†æ•°æ�®, 采用 c++ 没有 full gc é£�险</li></ul><h6>应用场景</h6><ul><li>Impala ä¸�适å�ˆäº� OLTP,主è¦�作为 OLAP 用äº�大数æ�®æ‰¹é‡�查询使用</li><li>需è¦�有 Hadoop å¹³å�°å’Œ Hive</li><li>性能比 Hive 好很多</li><li>作为 OLAP 的性能比 Phoenix 之类的好</li><li>主è¦�是 CDH 在æ�¨ï¼ŒCDH 有集æˆ� Impala</li></ul><h2>Presto (基äº�多ç§�æ•°æ�®æº�,并行计算,关系å�‹ï¼ŒOLAP)</h2><ul><li>Facebook æ�¨å‡ºçš„基äº�内存的分布å¼�并行计算的数æ�®åº“查询引æ“�</li><li>ç”± coordinator serverã€�discovery server (通常集æˆ�在 coordinator 里,也å�¯ä»¥ç‹¬ç«‹)ã€�多个 worker server 组æˆ�</li><li>coordinator è´Ÿè´£ä¸� client 交互,负责管ç�† worker,负责解æ�� statementã€�规划 queryã€�创建一系列的 stageã€�å†�转æ�¢æˆ�一系列的 task 分å�‘到ä¸�å�Œ worker å¹¶å�‘执行</li><li>worker 负责执行 task 和处ç�†æ•°æ�®ï¼Œä¼šé€šè¿‡ connector è�·å�–æ•°æ�®ï¼Œå’Œå…¶ä»– worker 交互中间数æ�®ï¼Œæœ€ç»ˆç»“æ�œä¼šç”± coordinator è¿”å›�ç»™ client</li><li>connector 是适é…�器,使得 Presto å�¯ä»¥è®¿é—®ä¸�å�Œçš„æ•°æ�®åº“</li><li>内建的 connector 主è¦�是 Hive,此外有很多三方开å�‘çš„ connector 比如 cassandraã€�esã€�kafkaã€�kuduã€�redisã€�mysqlã€�postgresql 等等</li><li>需è¦�在é…�置文件é…�ç½® catalog,这里 catalog 维护 schema 并通过 connector 指å�‘一个数æ�®æº�,定ä½� presto 表都是ä»� catalog 开始的,比如 hive.test\_data.test 指的是 hive catalog 下的 test\_data schema 下é�¢çš„ test 表,而 schema 的概念则ä¾�èµ–äº�具体的 connector,比如对äº� mysql 而言,presto çš„ schema 就是 mysql çš„ schema,而对äº� cassandra 而言,presto çš„ schema 就是 cassandra çš„ keyspace,å�¯ä»¥å»ºç«‹å¤šä¸ª catalog å…³è�”å�Œä¸€ä¸ª connector 比如ç�¯å¢ƒé‡Œæœ‰å¤šä¸ª kafka 集群那å�¯ä»¥æœ‰ kafka1 å’Œ kafka2 两个 catalog</li><li>statement å�¯ä»¥è®¤ä¸ºå°±æ˜¯ presto 收到的 sql 语å�¥ï¼Œç„¶å��会解æ��æˆ� query plan,然å�� query å�ˆè¢«åˆ†ä¸ºå¤šä¸ª stages,这些 stages 组æˆ�ä¸€ä¸ªæ ‘çš„ç»“æ�„,æ¯�个 stage 会è�šå�ˆè®¡ç®—它下é�¢çš„å…¶ä»– stages 的结æ�œï¼Œæ¯�个 stage å�ˆåˆ†ä¸ºä¸€ä¸ªæˆ–多个 tasks,这些 task 会分å�‘到ä¸�å�Œçš„ worker 并行执行,æ¯�个 task 处ç�†ä¸�å�Œçš„æ•°æ�®åˆ†ç‰‡ï¼Œæ¯�个 task å�ˆæœ‰ä¸€ä¸ªæˆ–多个 driver å¹¶å�‘处ç�†æ•°æ�®</li><li>Presto 支æŒ� JDBC æ�¥å�£ï¼ŒJDBC çš„ URL æ ¼å¼�为 jdbc:presto://host:port/catalog/schema 或 jdbc:presto://host:port/catalog 或 jdbc:presto://host:port</li><li>支æŒ� Join 查询,并且支æŒ�多数æ�®æº�çš„ join 查询 (å¤šå¼ å¤§è¡¨çš„ join å�¯èƒ½ä¼šå½±å“�性能),跨数æ�®æº�查询的时候需è¦�指定完整的表å��å�³ [catalog].[schema].[table],并且使用 presto://host:port è¿�æ�¥ JDBC,ä¸�指定 catalog å’Œ schema</li><li>有é™�支æŒ�å­�查询</li><li>ä¸�支æŒ� update æ“�作</li><li>支æŒ�安全机制</li><li>支æŒ�æ ‡å‡†çš„ ANSI SQL</li><li>扩展性好</li><li>å�¯ä»¥å’Œ Tableau 集æˆ�</li><li>支æŒ� Spark</li></ul><h6>应用场景</h6><ul><li>适å�ˆæœ‰å¤šç§�æ•°æ�®æº�的大数æ�®é‡�çš„ OLAP 查询</li><li>性能和 Impala å�¯èƒ½å·®ä¸�多,但支æŒ�多ç§�æ•°æ�®æº�,ä¸�ä¾�èµ– Hadoop</li></ul><h2>Greenplum (基äº�多个 PostgreSQL,并行计算,关系å�‹ï¼ŒOLAP)</h2><ul><li>基äº�多个 PostgreSQL 的分布å¼�并行计算的数æ�®åº“查询引æ“�</li><li>内部的 PostgreSQL 有å�šæ”¹åŠ¨ä»¥é€‚åº”å¹¶è¡Œåˆ†å¸ƒå¼�计算</li><li>主è¦�由一个 masterã€�多个 segmentsã€�一个 interconnect 组æˆ�</li><li>master 维护元数æ�®ï¼Œæ�¥æ”¶å¹¶è®¤è¯� client 的链æ�¥ï¼Œæ�¥æ”¶ SQL 请求,解æ�� SQL,生æˆ� query plan,并将任务分å�‘到 segments,å��è°ƒè�šå�ˆ segments 的返å›�结æ�œï¼Œå¹¶å°†æœ€ç»ˆç»“æ�œè¿”å›�ç»™ client,å�¯ä»¥è®¾ç½® master 为主ä»�é…�ç½®</li><li>æ¯�个 segment 有个独立的 PostgreSQL æ•°æ�®åº“,æ¯�个 segment 负责存储部分数æ�®ï¼Œå¹¶æ‰§è¡Œç›¸åº”的查询计算,segment 也å�¯ä»¥é…�置备份机制</li><li>Interconnect 是 Greenplum 的网络层,负责 master å’Œ segment 的链æ�¥ï¼Œä»¥å�Šå�„个 segment 之间的链æ�¥</li><li>链æ�¥å’Œ SQL 语法都和 PostgreSQL 兼容,支æŒ� JDBCã€�ODBC</li><li>创建表时å�¯ä»¥æŒ‡å®šæ˜¯ç”¨åˆ—存储ã€�行存储ã€�外部表 (æ•°æ�®åœ¨å…¶ä»–系统比如 HDFS 而 GP å�ªå­˜å‚¨å…ƒæ•°æ�®)</li><li>æ“�作外部数æ�®ï¼Œéœ€è¦�安装 PXF (Platform Extension Framework),有了 PXF å�¯ä»¥æ”¯æŒ� Hiveã€�HBaseã€�Parquetã€�S3ã€�MySQLã€�ORACLE 等等</li><li>支æŒ�安全ã€�æ�ƒé™�é…�ç½®</li><li>支æŒ�分布å¼�事务,支æŒ� ACID,ä¿�è¯�æ•°æ�®çš„强一致性,ä¸�是使用é”�,而是使用 MVCC (Multi-Version Concurrency Control) æ�¥ä¿�è¯�æ•°æ�®ä¸€è‡´æ€§</li><li>shared-nothing æ�¶æ�„</li></ul><h6>应用场景</h6><p>å’Œ Impalaã€�Presto 类似都是并行内存计算,但 Greenplum 性能å�¯èƒ½ç¨�差一点点,并且 Greenplum 还分开æº�版和商业版,有的功能å�ªæœ‰å•†ä¸šç‰ˆæ‰�支æŒ�</p><h2>Kylin (基äº� Hiveã€�HBase,并行计算,关系å�‹ï¼Œå¤šç»´åº¦ã€�预计算 OLAP)</h2><p>ä¼ ç»Ÿ OLAP æ ¹æ�®æ•°æ�®å­˜å‚¨æ–¹å¼�çš„ä¸�å�Œåˆ†ä¸º ROLAP(Relational OLAP)以å�Š MOLAP(Multi-Dimension OLAP),ROLAP 以关系模å�‹çš„æ–¹å¼�存储数æ�®ï¼Œä¼˜ç‚¹åœ¨äº�体积å°�,查询方å¼�ç�µæ´»ï¼Œç¼ºç‚¹æ˜¯æ¯�次查询都需è¦�对数æ�®è¿›è¡Œè�šå�ˆè®¡ç®—,而 Kylin å±�äº� MOLAP</p><p>Kylin 将数æ�®æŒ‰ç»´åº¦çš„ä¸�å�Œç»„å�ˆï¼Œæ��å‰�计算好结æ�œï¼Œå½¢æˆ� Cube (立方体) 结æ�„ï¼Œè¿™æ ·æŸ¥è¯¢é€Ÿåº¦å¿«ï¼Œç¼ºç‚¹æ˜¯æ•°æ�®é‡�ä¸�容易æ�§åˆ¶ï¼ŒN 个维度å�¯ä»¥æœ‰ 2**N ç§�组å�ˆï¼Œå�¯èƒ½ä¼šå‡ºç�°ç»´åº¦çˆ†ç‚¸çš„问题,而且数æ�®æœ‰æ”¹åŠ¨çš„è¯�需è¦�é‡�新计算</p><p>比如有 Phone å’Œ Country ä¸¤å¼ ç»´åº¦è¡¨ï¼Œä»¥å�Š Sale 事å®�表 (æ˜�细表),å�–手机å“�牌ã€�国家ã€�日期作为三个维度,有 (null)ã€�(å“�牌)ã€�(国家)ã€�(日期)ã€�(å“�牌ã€�国家)ã€�(å“�牌ã€�日期)ã€�(国家ã€�日期)ã€�(å“�牌ã€�国家ã€�日期) å…± 8 ç§�组å�ˆï¼Œå�¯ä»¥æ��å‰�计算好这 8 ç§� group by 组å�ˆçš„ sale çš„å�„ç§�汇总信æ�¯ (sumã€�count ç­‰),一个维度组å�ˆçš„一个汇总信æ�¯ç§°ä¸ºä¸€ä¸ª cuboid,所有的 cuboid å�ˆèµ·æ�¥å°±è¢«ç§°ä¸ºä¸€ä¸ª Cube</p><p>Kylin 的数æ�®æº�å�¯ä»¥æ˜¯ Hive 或 Kafka (Json æ ¼å¼�消æ�¯ï¼Œkey 就是列å��)</p><p>Kylin 的预计算结æ�œå­˜åˆ° HBase,RowKey 就是å�„ç§�维度的组å�ˆï¼Œç›¸åº”çš„æ˜�细汇总存在 Column ä¸­ï¼Œè¿™æ · SQL å°±å�˜æˆ�对 RowKey 的扫æ��,并进一步的对 Column 计算 (如æ�œéœ€è¦�çš„è¯�)ï¼Œè¿™æ ·æŸ¥è¯¢æ€§èƒ½è‡ªç„¶å°±æ��å�‡äº†ï¼Œå�¯ä»¥æ”¯æŒ�亚秒级查询</p><p>Kylin 支æŒ� ODBC,JDBC,RESTful API ç­‰æ�¥å�£</p><p>Kylin å�¯ä»¥å’Œ Tableauã€�PowerBI ç­‰ BI 工具集æˆ�</p><h6>使用步骤如下</h6><ul><li>创建 Project</li><li>å�Œæ­¥ Hive 表或 Kafka 表</li><li>创建 Data Model</li><li>创建并命å�� Model</li><li>选择 Fact Table (事å®�表) å’Œ Lookup Table (查找表,主è¦�是维度信æ�¯),以å�Š Join 字段</li><li>ä»� Fact Table å’Œ Lookup Table 中挑选维度列 (å�¯ä»¥è¢« Cube å�š group by)</li><li>ä»� Fact Table é€‰æ‹©æŒ‡æ ‡åˆ— (å�¯ä»¥è¢« Cube å�š aggregation)</li><li>ä»� Fact Table 选择用äº�日期分区的列,ä¸�需è¦�就留空</li><li>æ·»åŠ Filter (å�¯ä»¥è¢« Cube 用æ�¥å�š Where æ“�作)</li><li>创建 Cube</li><li>创建并命å�� Cube,并选择è¦�å…³è�”çš„ Data Model</li><li>æ·»åŠ ç»´åº¦åˆ— (å¿…é¡»ä»� Data Model é…�置的维度列中选择)</li><li>æ·»åŠ æŒ‡æ ‡åˆ— (å¿…é¡»ä»� Data Model é…�ç½®çš„æŒ‡æ ‡åˆ—ä¸­é€‰æ‹©)</li><li>共有 8 ç§� aggregation æ“�作å�¯ä»¥é…�ç½®ç»™æŒ‡æ ‡åˆ—ï¼šSUM, MAX, MIN, COUNT, COUNT\_DISTINCT, TOP\_N, EXTENDED\_COLUMN and PERCENTILE (如æ�œè¦�查 avg å®�际上就是用 sum 除以 count 得出,所以这里ä¸�需è¦�é…�ç½® avg ç­‰å�¯ä»¥é€šè¿‡é¢„计算结æ�œè¿›ä¸€æ­¥è®¡ç®—出的æ“�作)</li></ul><p>build Cube,å®�际是通过 MapReduce/Spark 计算,任务完æˆ�å��结æ�œä¼šå†™å…¥ HBase</p><p>build æˆ�功å��å�³å�¯ç›´æ�¥ç”¨ SQL 查询了,å®�é™…æ˜¯æ ¹æ�®ç»´åº¦æŸ¥ RowKey,然å��把 Column 存的è�šå�ˆç»“æ�œå�–出,如æ�œå¿…è¦�çš„è¯�å†�å�šè¿›ä¸€æ­¥è®¡ç®—</p><p>如æ�œæ•°æ�®æº�有改动,需è¦�é‡�æ–° build Cube</p><p>å�¯ä»¥çœ‹åˆ° Kylin 是一个纯粹的 OLAP 工具,通过预计算æ��å�‡æŸ¥è¯¢æ€§èƒ½ï¼Œä½†æ— 法å�Šæ—¶å��应出数æ�®æº�的改å�˜ï¼Œé¢„计算å�¯èƒ½å¾ˆè€—时并且å�¯èƒ½ä¼šå� 用大é‡�空间,且需è¦�å’Œ Hadoop 集æˆ�</p><p>基äº�预计算的 OLAP æ•°æ�®æŸ¥è¯¢å¼•æ“�还有 Druid</p><h2>ClickHouse (列存储,å�‘é‡�化计算,并行计算,OLAP)</h2><p>ä¿„ç½—æ–¯ä¼�业 Yandex å¼€å�‘çš„ OLAP æ•°æ�®åº“</p><ul><li>列存储对äº� OLAP 的好处</li><li>ç”±äº� OLAP ç»�常是在大é‡�æ•°æ�®åˆ—中检索少é‡�列,如æ�œé‡‡ç”¨è¡Œå­˜å‚¨ï¼Œæ„�味ç�€è¦�é€�行扫æ��,并且æ¯�行都很大,而采用列存储å�ªéœ€è¦�扫æ��è¦�检索的列,能å‡�å°‘ IO</li><li>å�‡è®¾æœ‰çš„记录并没有存储è¦�检索的列,行存储ä¾�ç„¶è¦�扫æ��该记录æ‰�知é�“,而对äº�列存储则ä¸�å­˜åœ¨è¿™æ ·çš„é—®é¢˜ï¼Œå› ä¸ºæ²¡å­˜å‚¨ï¼Œè‡ªçƒ­è€Œç„¶å°±ä¸�会扫æ��到</li><li>å› ä¸ºå�Œä¸€åˆ—的数æ�®ç±»å�‹ã€�大å°�比较一致,列存储更容易å�‹ç¼©ï¼Œæ•ˆç�‡æ›´é«˜ï¼Œè¿›ä¸€æ­¥å‡�å°‘ IO</li><li>IO çš„å‡�少还æ„�味ç�€æœ‰æ›´å¤šæ•°æ�®å�¯ä»¥è¢«ç¼“存到内存</li><li>å�‘é‡�化计算</li><li>SIMD (Single Instruction,Multiple Data,å�•指令æµ�多数æ�®æµ�),ç�°åœ¨çš„ CPU 支æŒ�è¿™æ ·çš„åŠŸèƒ½ï¼Œé€šè¿‡ä¸€æ�¡æŒ‡ä»¤å�³å�¯åˆ©ç”¨å¤šæ ¸å¯¹ä¸€ç»„æ•°æ�® (也就是å�‘é‡�) 进行 CPU 层é�¢çš„å¹¶å�‘计算,适用äº�纯基础计算的场景,如æ�œæœ‰åˆ¤æ–­ã€�跳转ã€�分支的场景则ä¸�å�ˆé€‚</li><li>ClickHouse 有一个å�‘é‡�计算引æ“�,尽å�¯èƒ½åœ°ä½¿ç”¨ SMID 指令,批é‡�并行地处ç�†æ•°æ�®ï¼Œå¤§å¤§æ��å�‡äº†å¤„ç�†èƒ½åŠ›</li><li>主è¦�ç”± C++ å®�ç�°</li><li>æ— ä¸­å¿ƒåŒ–ç»“æ�„,由一个集群的 server 组æˆ�,并且æ¯�个 server 都å�¯ä»¥æ�¥å�—客户端的链æ�¥æŸ¥è¯¢ï¼Œserver 收到请求å��会和其他 server å��è°ƒå�šå¹¶è¡Œè®¡ç®—,æ¯�个 server 都是多线程的,server 之间通过 ZooKeeper å��è°ƒå�Œæ­¥</li><li>支æŒ�分片(shard),数æ�®å�¯ä»¥è·¨èŠ‚ç‚¹å­˜å‚¨åœ¨ä¸�å�Œåˆ†ç‰‡ä¸­ï¼Œä¸€ä¸ªåˆ†ç‰‡å°±æ˜¯ä¸€ä¸ªèŠ‚ç‚¹ï¼Œæˆ–è€…å¤šä¸ªèŠ‚ç‚¹ç»„æˆ�一个有副本备份的分片,由é…�置文件é…�ç½®</li><li>支æŒ�分区,通过 Partition By 命令创建表</li><li>分片和分区有时候ä¸�好区分,分片更多指的是表的数æ�®åˆ†å¸ƒåœ¨ä¸�å�ŒèŠ‚ç‚¹ï¼Œè€Œä¸”ä¸€ä¸ªèŠ‚ç‚¹å�¯ä»¥å­˜å‚¨å¤šä¸ªæ•°æ�®åº“ã€�多个表的数æ�®ï¼Œè€Œåˆ†åŒºæ›´å¤šæŒ‡çš„æ˜¯æŒ‰æŸ�列数æ�®å°†ä¸€ä¸ªå¤§è¡¨åˆ†æˆ�多个å°�表,比如按日期列分区,æ¯�天一个分区表,既å�¯ä»¥æŸ¥åˆ†åŒºè¡¨ï¼Œä¹Ÿå�¯ä»¥æŸ¥å¤§è¡¨</li><li>支æŒ�副本备份ã€�支æŒ�æ•°æ�®å®Œæ•´æ€§</li><li>表引æ“�(Table Engine)</li><li>在æŸ�个 server 创建的表å�ªæ˜¯è¯¥ server 的本地表,ä¸�是分布å¼�的,如æ�œè¦�创建分布å¼�表,需è¦�在æ¯�个 server 创建相å�Œå��字的表,å†�在其中一å�° server 上创建分布å¼�表(会自动在所有 server 上都创建),这个分布å¼�表是个逻辑表,ä¸�真正存储数æ�®ï¼Œè€Œæ˜¯æ˜ 射到å�„个 server 的本地表,会自动å�šå¹¶è¡Œè®¡ç®—</li><li>ENGINE = Distributed(cluster\_name, database, table, [sharding\_key])</li><li>cluster\_name 是在é…�置文件里é…�置的</li><li>ENGINE = Memory æ•°æ�®å­˜åœ¨å†…å­˜</li><li>ENGINE = ODBC(connection\_settings, external\_database, external\_table)</li><li>ENGINE = JDBC(dbms\_uri, external\_database, external\_table)</li><li>ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password')</li><li>ENGINE = PostgreSQL('host:port', 'database', 'table', 'user', 'password')</li><li>ENGINE = MongoDB(host:port, database, collection, user, password)</li><li>ENGINE = HDFS(URI, format)</li><li>ENGINE = Kafka() SETTINGS kafka\_broker\_list = 'host:port', kafka\_topic\_list = 'topic1'</li><li>ENGINE = Log;</li><li>ENGINE = TinyLog;</li><li>ENGINE = MergeTree()</li><li>ENGINE = AggregatingMergeTree()</li><li>创建表的时候è¦�通过 Engine 命令指定è¦�用的表引æ“�,决定如何存储数æ�®</li><li>最常用的是 MergeTree 系列引æ“�,比如</li><li>比较轻é‡�级的 Log 系列引æ“�</li><li>å…�许ä»�å…¶ä»–æ•°æ�®æº�查询,比如</li><li>特殊类å�‹ï¼Œæ¯”如</li><li>分布å¼�</li><li>通常使用 MergeTree 存储,数æ�®å�¯ä»¥å¿«é€Ÿåœ°æŒ‰åº� append 到一颗 MergeTree çš„å��é�¢ï¼Œå��å�°ä¼šå�šå�ˆå¹¶å’Œå�‹ç¼©æ“�ä½œï¼Œè¿™æ ·æ��å�‡äº†æ•°æ�®æ�’入的性能</li><li>主索引,数æ�®æŒ‰ Primary Key æ�’åº�</li><li>也å�¯ä»¥åœ¨åˆ›å»ºè¡¨æ—¶é€šè¿‡ Order By 指定æ�’åº�的字段</li><li>支æŒ�二级索引,也å�«è·³æ•°ç´¢å¼• data skipping index,比如 minmax 索引,会统计æ¯�一段数æ�®å†…æŸ�列数æ�®ï¼ˆæˆ–是æŸ�个表达å¼�)的最大值和最å°�值,检索的时候å�¯ä»¥ä¾�æ�® minmax 决定是å�¦è·³è¿‡è¿™æ®µæ•°æ�®ï¼ˆæ„Ÿè§‰æ¯”较怪,性能应该比é‡�å»ºä¸€å¼ ç´¢å¼•è¡¨çš„å�𿳕è¦�å·®å�§ï¼‰</li><li>支æŒ� TTL,包括列级别ã€�行级别ã€�分区级别的 TTL</li><li>支æŒ� HTTPã€�TCP æ�¥å�£</li><li>支æŒ� JDBCã€�ODBC</li><li>有三方工具支æŒ�将其他数æ�®åº“如 PG 的数æ�®å¯¼å…¥ ClickHouse</li><li>有三方工具支æŒ�和一些å�¯è§†åŒ–工具如 Grafanaã€�DBeaverã€�Tabix 集æˆ�</li><li>有三方工具支æŒ� Kafkaã€�Flinkã€�Spark ç­‰</li><li>支æŒ� SQL,支æŒ� group byã€�order byã€�joinã€�部分å­�查询等功能</li><li>支æŒ� arrayã€�jsonã€�tupleã€�set ç­‰å¤�æ�‚æ•°æ�®ç±»å�‹</li><li>支æŒ�近似计算,比如计算平å�‡å€¼ï¼Œå�¯ä»¥å�–部分数æ�®è®¡ç®—ï¼Œè¿™æ ·æ��å�‡äº†æ€§èƒ½ï¼Œä½†é™�ä½�了准度</li><li>自适应 Join 算法,比如优先使用 Hash-Join,如æ�œæœ‰å¤šå¼ 大表则自动改用 Merge-Join</li><li>安全机制ã€�基äº� Role çš„æ�ƒé™�æ�§åˆ¶</li><li>支æŒ�错误æ�¢å¤�ã€�扩展性好</li></ul><h6>ä¸�足的地方</h6><ul><li>对高并å�‘的支æŒ�ä¸�è¶³</li><li>没有æˆ�熟的事务功能</li><li>修改ã€�åˆ é™¤æ•°æ�®çš„æ€§èƒ½æ¯”较差,并且仅æ��供有é™�支æŒ�</li><li>Primary Key 是采用稀ç–�索引,å�³ç´¢å¼•å�ªèƒ½æŒ‡å�‘一段数æ�®ï¼Œå…·ä½“的数æ�®è¿˜å¾—一æ�¡æ�¡æŸ¥ï¼Œæ‰€ä»¥å¦‚æ�œæ˜¯æŸ¥å°‘é‡�æ•°æ�®ï¼Œæˆ–者查询å�•æ�¡æ•°æ�®ï¼Œæ€§èƒ½ä¼šæ¯”较差</li></ul><p>ä¸�ä¾�èµ– Hadoopã€�列存储ã€�å�‘é‡�化ã€�并行ã€�多线程ã€�多存储引æ“�</p><p>å�•表查询性能æ��好,比 Impalaã€�Presto 之类的è¦�好很多</p><p>多表查询性能差些,比 Impalaã€�Presto 之类的è¦�å·®</p><h2>Elasticsearch (倒索引ã€�分è¯�ã€�æ�œç´¢å¼•æ“�)</h2><ul><li>Elastic Stack 是一组组件包括 Elasticsearchã€�Logstashã€�Filebeatã€�Kibana ç­‰</li><li>Elasticsearch 是基äº� Apache Lucene å¼€å�‘çš„æ�œç´¢å¼•æ“�,主è¦�ç”± Java å¼€å�‘</li><li>Elasticsearch 集群主è¦�ç”± masterã€�dataã€�ingestã€�coordinating 节点组æˆ�</li><li>æ¯�个节点å�¯ä»¥å�Œæ—¶é…�置多ç§�角色,比如å�³æ˜¯ master å�ˆæ˜¯ data,但在大å�‹é›†ç¾¤ä¸­ï¼Œé€šå¸¸æ¯�个节点å�ªè´Ÿæ‹…一ç§�功能</li><li>coordinating 是æ¯�个节点都会有的功能,ä¸�需è¦�é…�置,å�³æ— 论 master 还是 data 都会有 coordinating 功能,用äº�æ�¥æ”¶ client 的读写请求,然å��将请求转å�‘给相应节点处ç�†ï¼Œç„¶å��将处ç�†ç»“æ�œå�ˆå¹¶å��è¿”å›�ç»™ client,在大å�‹é›†ç¾¤ä¸­ä¸ºäº†ä¸�对 master/data ç­‰èŠ‚ç‚¹é€ æˆ�太大å�‹åŠ›ï¼Œå�¯ä»¥é…�置多个专门的 coordinating,通过将 role é…�置为空或是将 masterã€�dataã€�ingest 设置为 false (å�–决äº�ä¸�å�Œç‰ˆæœ¬) å�³å�¯ï¼Œè¿™æ ·è¿™äº› coordinating 节点就å�ªè´Ÿè´£æ�¥æ”¶å“�应 client 请求ä¸�å�šå…¶ä»–工作,就åƒ�是一个å��å�‘代ç�†çš„è´Ÿè½½å�‡è¡¡ä¸€æ ·ï¼Œèƒ½æ��高并å�‘性能</li><li>master 负责管ç�†æ•´ä¸ªé›†ç¾¤ï¼Œè´Ÿè´£å¯¹ index çš„åˆ›å»ºåˆ é™¤ç­‰ç®¡ç�†æ“�作,决定数æ�®è¦�分片到哪个节点,管ç�†å…¶ä»–节点的状æ€�等等,å�¯ä»¥é…�置多个 master å�š HA,需è¦�å�•数个,至少è¦� 3 个,系统å®�际上自动选举其中一个å�š master,如æ�œè¯¥ master 挂了,会ä»�å…¶ä»–é…�置为 master 的节点中é‡�新选举一个,master çš„é…�ç½®å�¯ä»¥ä½�一些</li><li>data 负责存储ã€�计算ã€�处ç�†æ•°æ�®ï¼Œå¯¹èµ„æº�è¦�求比较高,data 还å�¯ä»¥è¿›ä¸€æ­¥é…�置,指定节点用äº�存储 hot dataã€�warm dataã€�cold data 等等</li><li>Ingest 是å�¯é€‰èŠ‚ç‚¹ï¼Œä¸“é—¨ç”¨äº�针对æŸ�些数æ�®å’Œæ“�作,å�šæµ�水线预处ç�†</li><li>Elasticsearch 的数æ�®å­˜å‚¨ä¸»è¦�ç”± index,type,document 组æˆ�</li><li>index 就类似äº� SQL 中的一个数æ�®åº“,å�¯ä»¥ç›´æ�¥åˆ›å»º index,也å�¯ä»¥é€šè¿‡ index template 作为模æ�¿åˆ›å»º index,模æ�¿é€šå¸¸ç”¨äº�具有相å�Œé…�置的多个 index,比如æ¯�天都建立一个 index 用äº�存储当天的日志</li><li>type 就类似äº� SQL 中的表 (è¿™ç§�说法ä¸�å®Œå…¨å¯¹ï¼Œå®˜æ–¹æœ‰æ¾„æ¸…è¿‡ï¼Œå› ä¸ºä¸�å�Œçš„ type å¹¶ä¸�æ˜¯å®Œå…¨ç‹¬ç«‹æ— å…³çš„),早期版本中,一个 index 下å�¯ä»¥æœ‰å¤šä¸ª type,ä»� 6.0 开始å�ªèƒ½æœ‰ä¸€ä¸ª type,ä»� 7.0 å¼€ä¸�建议使用 type 这个概念,æ�®è¯´ä»� 8.0 开始将完全ä¸�支æŒ� type</li><li>document 就是åƒ�是 SQL 中的一行记录,document 使用的是é��结æ�„化的数æ�®ï¼Œç”± JSON æ ¼å¼�表示,JSON çš„æ¯�个 field 就相当äº�一个列</li><li>æ¯�个 document 会一个唯一的 \_id,如æ�œä¸�指定则由系统自动生æˆ�</li><li>æ¯�个 document æœ‰ä¸¥æ ¼é€’å¢�çš„åº�å�· \_seq\_no 代表文档写入/更新的先å��顺åº�</li><li>æ¯�个 document 有 \_version 字段,æ¯�æ¬¡æ›´æ”¹è¿™ä¸ªå­—æ®µå°±åŠ 1</li><li>å�¯ä»¥å…ˆå»ºç«‹ index,也å�¯ä»¥ä¸�æ��å‰�建立 index,写入数æ�®æ—¶è‡ªåŠ¨åˆ›å»º</li><li>ä¸�需è¦�æ��å‰�设置 document çš„ field,写入数æ�®æ—¶è‡ªåŠ¨åˆ›å»ºï¼Œæ¯�个 document çš„ field å�¯ä»¥ä¸�ä¸€æ ·ï¼Œä¹Ÿå�¯ä»¥æ��å‰�设置 field,使得æ¯�个 document çš„ field å¿…é¡»ä¸€æ ·</li><li>Elasticsearch 会自动对所有 field 建立索引,并且会自动å�šåˆ†è¯�处ç�†ï¼Œå�³æŠŠä¸€ä¸ªå�¥å­�比如 "hello world" 自动分æˆ� "hello" å’Œ "world" 两个è¯�å�šç´¢å¼•,没有分è¯�çš„ "hello world" 是 keyword,大å°�é™�制是 256,ç»�过分è¯�的比如 "hello" 是一个 text</li><li>Elasticsearch 采用倒索引 (inverted index),主è¦�由三部分组æˆ�:Term Index (å�•è¯�索引)ã€�Term Dictionary (å�•è¯�å­—å…¸)ã€�Posting List (索引项列表)</li><li>Term Index 存在内存中,ä¸�ä¿�存所有å�•è¯�,而是ä¿�å­˜å�•è¯�çš„å‰�缀,比如ä¿�å­˜ heã€�worã€�adã€�sar 等等,指出以这些å‰�缀作为开头的å�•è¯�在 Term Dictionary 中的起始ä½�ç½®ï¼Œè¿™æ · Term Index 的大å°�就比较å°�,å�¯ä»¥å­˜åœ¨å†…存中,并且å�¯ä»¥å¸®åŠ©å¿«é€Ÿå®šä½�è¦�读å�–的内容在 Term Dictionary 中的ä½�置,å�¯ä»¥å¤§å¤§å‡�å°‘ç£�盘 IO 的次数</li><li>Term Dictionary 存在ç£�盘中,通常å�•è¯�é‡�会é��常大,记录ç�€ index çš„æ¯�个å�•è¯�到 Posting List 的关è�”关系,通过 B+ æ ‘æˆ– Hash 表方å¼�以满足高性能的æ�’å…¥ä¸�查询</li><li>Posting List 记录ç�€ï¼šå‡ºç�°è¯¥å�•è¯�的所有 document çš„ id,该å�•è¯�在该 document 中出ç�°çš„æ¬¡æ•°ï¼Œè¯¥å�•è¯�在该 document 中的ä½�ç½®</li><li>æ�œç´¢å¼•æ“�é€šè¿‡è¿™æ ·çš„å€’æ�’åº�索引找到对应的 document,å†�å�šè¿›ä¸€æ­¥å¤„ç�†</li><li>ç”±äº�会对所有 field å�šç´¢å¼•,数æ�®é‡�会é��常大</li><li>æ•°æ�®å…ˆå†™å…¥å†…存,然å��定期将数æ�®è�½ç›˜å½¢æˆ�一个个 segment,当 segment 多了之å��会进行 merge 组æˆ�更大的 segment</li><li>为了防止内存中还没è�½ç›˜çš„æ•°æ�®ä¸¢å¤±ï¼Œä¼šå†™å…¥ translog,类似äº� HBase çš„ WAL,其å®�这也需è¦�ç£�盘 IO,会影å“�性能,但比è�½ç›˜æ•°æ�®è¦�简å�•</li><li>segment 由多个文件组æˆ�,记录ç�€å…ƒæ•°æ�®ã€�field ä¿¡æ�¯ã€�æ­£æ�’åº�的索引信æ�¯ (å�³ä»� document id 找到相应的数æ�®)ã€�field æ•°æ�® (相当äº�按列存储)ã€�倒æ�’åº�索引数æ�®ã€�等等</li><li>支æŒ� REST API æ�¥å�£æ“�作,通过在 Body çš„ JSON æ ¼å¼�æ•°æ�®æ��高丰富的语法,å�¯ä»¥æ‰§è¡Œå¾ˆå¤šæ“�作</li><li>支æŒ� Event Query Language (EQL):for event-based time series data, such as logs, metrics, and traces, 通过 REST API çš„ Body 指定</li><li>支æŒ� JDBCã€�ODBC,这里 table 指定的是 index,而 column 指定的是 field,这里的 SQL ä¸�支æŒ� JOIN</li><li>ä¸�支æŒ�事务</li><li>跨表查询ä¸�完全支æŒ�,而且è¦�定义父å­�文档,è¦�定义 join ç±»å�‹çš„ field,比较å¤�æ�‚</li><li>读写有一定延时性,å�³å†™å…¥çš„æ•°æ�®æ— 法立刻索引到,至少è¦�ç­‰ 1 ç§’é’Ÿ</li><li>å’Œä¼ ç»Ÿçš„æ•°æ�®åº“有一定差异,需è¦�ä¸€å®šçš„å­¦ä¹ æˆ�本</li></ul><h6>部分 REST API æ“�作的例å­�</h6><pre><code>curl localhost:9200 # 查看集群基本信æ�¯ curl localhost:9200/_cluster/health?pretty # 查看集群å�¥åº· (pretty 是 JSON æ ¼å¼�化输出) curl localhost:9200/_cluster/state?pretty # 查看集群状æ€� curl localhost:9200/_cluster/stats?pretty # 查看统计信æ�¯ curl localhost:9200/_nodes?pretty # 查看节点信æ�¯ curl localhost:9200/_cat # 列出å�¯ä»¥æŸ¥çœ‹çš„å�„ç§�ä¿¡æ�¯ (cat 命令列出的信æ�¯æ¯”较简化) curl localhost:9200/_cat/health curl localhost:9200/_cat/nodes curl localhost:9200/_cat/indices curl -X PUT 'http://localhost:9200/my_index/my_doc/123' -H 'Content-Type: application/json' -d '{ &quot;name&quot;: &quot;Lin&quot;, &quot;title&quot;: &quot;senior designer&quot;, &quot;age&quot;: 30 }' ## 指定 document id 为 123,会自动创建 my_index,my_doc 以å�Šå�„个 fields curl -X POST 'http://localhost:9200/my_index/my_doc' -H 'Content-Type: application/json' -d '{ &quot;name&quot;: &quot;Wang&quot;, &quot;title&quot;: &quot;senior designer&quot;, &quot;age&quot;: 35 }' ## 由系统自动创建 document id curl -X POST 'http://localhost:9200/my_index/my_doc_2' -H 'Content-Type: application/json' -d '{ &quot;name&quot;: &quot;n_1&quot;, &quot;type&quot;: &quot;t_1&quot;, &quot;value&quot;: 1 }' ## 报错,ä¸�å…�许 index 下有两个 type curl -X POST 'http://localhost:9200/my_index/_doc' -H 'Content-Type: application/json' -d '{ &quot;name&quot;: &quot;n_1&quot;, &quot;type&quot;: &quot;t_1&quot;, &quot;value&quot;: 1 }' ## å…�许,_doc 就是 my_doc(å�¯ä»¥ä¸€å¼€å§‹å°±å�ªç”¨ _doc 而ä¸�需è¦� type å��) curl -X POST 'http://localhost:9200/my_index/_doc' -H 'Content-Type: application/json' -d '{ &quot;name&quot;: &quot;Li&quot;, &quot;address&quot;: {&quot;city&quot;: &quot;guangzhou&quot;, &quot;district&quot;: &quot;tianhe&quot;} }' ## å…�许新的 fields,å…�许å¤�æ�‚ç±»å�‹ï¼Œè²Œä¼¼ä¸�支æŒ�列表 &quot;address&quot;: [&quot;xxx&quot;] curl localhost:9200/my_index/my_doc/123?pretty ## 查看 id 为 123 的记录 curl localhost:9200/my_index/my_doc/_search?pretty ## 查看所有记录 curl localhost:9200/my_index/_search?pretty curl localhost:9200/_all?pretty ## 列出所有 index 的设置和 mapping (就是 field 的信æ�¯) curl localhost:9200/my_index?pretty ## 查看 my_index 的设置和 mapping curl localhost:9200/my_index/_mapping?pretty ## 查看 my_index çš„ mapping curl -X GET -H &quot;Content-Type: application/json&quot; localhost:9200/my_index/_search?pretty -d '{ &quot;query&quot;: { &quot;term&quot;:{ &quot;name&quot;:&quot;lin&quot; } } }' ## 简å�•的查询,还有更多的语法和功能 curl -X GET -H &quot;Content-Type: application/json&quot; localhost:9200/my_index/_search?pretty -d '{ &quot;query&quot;: { &quot;term&quot;:{ &quot;title.keyword&quot;:&quot;senior designer&quot; } } }' ## 默认查询的是分è¯�,如æ�œè¦�查没分è¯�çš„ï¼Œåº”è¯¥åŠ ä¸Š keyword curl -X GET -H &quot;Content-Type: application/json&quot; localhost:9200/my_index/_search?pretty -d '{ &quot;query&quot;: { &quot;term&quot;:{ &quot;address.city&quot;:&quot;guangzhou&quot; } } }' ## 查询嵌套的字段 curl localhost:9200/_search?pretty ## 在所有 index 中查找 curl -H &quot;Content-Type: application/json&quot; localhost:9200/my_index/_analyze?pretty -d '{ &quot;analyzer&quot; : &quot;standard&quot;, &quot;text&quot; : &quot;This is the apple&quot; }' ## 如何分æ��一段文字 curl -X PUT 'http://localhost:9200/my_index_3' ## 创建 index curl -X PUT -H &quot;Content-Type: application/json&quot; 'http://localhost:9200/my_index_6' -d '{ &quot;settings&quot;: { &quot;number_of_shards&quot;: 1, &quot;number_of_replicas&quot;: 1 }, &quot;mappings&quot;: { &quot;properties&quot;: { &quot;name&quot;: { &quot;type&quot;: &quot;text&quot; }, &quot;title&quot;: { &quot;type&quot;: &quot;text&quot; }, &quot;value&quot;: { &quot;type&quot;: &quot;long&quot; } } } }' ## 创建 index å�Œæ—¶æŒ‡å®š field,在版本 7 以å��ä¸�需è¦�指定 type (ä¸�需è¦�指定 my_doc 之类的)</code></pre><h6>应用场景</h6><p>适å�ˆäº�以æ�œç´¢ä¸ºä¸»çš„业务场景,最开始 ELK (Elasticsearch + Logstash + Kibana) 就是用äº�日志收集和æ�œç´¢</p><h2>Spark/Flink</h2><p>æ•°æ�®åº“虽然强大,但如æ�œé�‡åˆ°å¤�æ�‚çš„é€»è¾‘è®¡ç®—ä¹Ÿæ˜¯æ— èƒ½ä¸ºåŠ›ï¼Œè¿™ç§�情况,就需è¦�有专门的计算工具</p><p>Spark å’Œ Flink 都是高性能的并行计算引æ“�,Flink æ›´å��å�‘å®�æ—¶æµ�业务,Spark æ›´å��å�‘批处ç�†ä¸šåŠ¡ï¼Œéƒ½å�¯ä»¥ç”¨æ�¥é«˜æ•ˆåœ°å¤„ç�†æ•°æ�®</p><h2>BI</h2><p>æ•°æ�®é€šå¸¸è¦�å�¯è§†åŒ–,比较常用的 BI 工具有 Tableau (收费的) å’Œ PowerBI</p><h2>整体系统æ�¶æ�„</h2><p>K8S (容器部署) + SpringCloud (å¾®æœ�务) + Keycloak (认è¯�) + Kafka (æ•°æ�®æµ�) + Spark/Flink (æ•°æ�®å¤„ç�†) + ELK (日志收集) + PG/MySQL (基本数æ�®) + NoSQL-OLTP (大数æ�®é‡�业务数æ�®) + OLAP (分æ��业务) + BI (æ•°æ�®å�¯è§†åŒ–)</p><p><img src="/img/bVbHCzg" alt="" title=""></p> 17 个å®�用 shell 脚本,建议收è—�ï¼� https://segmentfault.com/a/1190000041370811 2022-02-07T21:16:51+08:00 2022-02-07T21:16:51+08:00 民工哥 https://segmentfault.com/u/jishuroad 41 <h2>1ã€�æœ�务器系统é…�ç½®åˆ�始化</h2><pre><code>#/bin/bash # 安装系统性能分æ��工具å�Šå…¶ä»– yum install gcc make autoconf vim sysstat net-tools iostat iftop iotp wget lrzsz lsof unzip openssh-clients net-tool vim ntpdate -y # 设置时区并å�Œæ­¥æ—¶é—´ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab -l |grep ntpdate &amp;&gt;/dev/null ; then (echo &quot;* 1 * * * ntpdate time.windows.com &gt;/dev/null 2&gt;&amp;1&quot;;crontab -l) |crontab fi # ç¦�用selinux sed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinux/config # 关闭防ç�«å¢™ if egrep &quot;7.[0-9]&quot; /etc/redhat-release &amp;&gt;/dev/null; then systemctl stop firewalld systemctl disable firewalld elif egrep &quot;6.[0-9]&quot; /etc/redhat-release &amp;&gt;/dev/null; then service iptables stop chkconfig iptables off fi # å�†å�²å‘½ä»¤æ˜¾ç¤ºæ“�作时间 if ! grep HISTTIMEFORMAT /etc/bashrc; then echo 'export HISTTIMEFORMAT=&quot;%Y-%m-%d %H:%M:%S `whoami` &quot;' &gt;&gt; /etc/bashrc fi # SSHè¶…æ—¶æ—¶é—´ if ! grep &quot;TMOUT=600&quot; /etc/profile &amp;&gt;/dev/null; then echo &quot;export TMOUT=600&quot; &gt;&gt; /etc/profile fi # ç¦�æ­¢root远程登录 åˆ‡è®°ç»™ç³»ç»Ÿæ·»åŠ æ™®é€šç”¨æˆ·ï¼Œç»™su到rootçš„æ�ƒé™� sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config # ç¦�止定时任务å�‘å�‘é€�邮件 sed -i 's/^MAILTO=root/MAILTO=&quot;&quot;/' /etc/crontab # 设置最大打开文件数 if ! grep &quot;* soft nofile 65535&quot; /etc/security/limits.conf &amp;&gt;/dev/null; then cat &gt;&gt; /etc/security/limits.conf &lt;&lt; EOF * soft nofile 65535 * hard nofile 65535 EOF fi # ç³»ç»Ÿå†…æ ¸ä¼˜åŒ– cat &gt;&gt; /etc/sysctl.conf &lt;&lt; EOF net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_tw_buckets = 20480 net.ipv4.tcp_max_syn_backlog = 20480 net.core.netdev_max_backlog = 262144 net.ipv4.tcp_fin_timeout = 20 EOF # å‡�å°‘SWAP使用 echo &quot;0&quot; &gt; /proc/sys/vm/swappiness</code></pre><h2>2ã€�批é‡�创建多个用户并设置密ç �</h2><pre><code>#!/bin/bash USER_LIST=$@ USER_FILE=./user.info for USER in $USER_LIST;do if ! id $USER &amp;&gt;/dev/null; then PASS=$(echo $RANDOM |md5sum |cut -c 1-8) useradd $USER echo $PASS | passwd --stdin $USER &amp;&gt;/dev/null echo &quot;$USER $PASS&quot; &gt;&gt; $USER_FILE echo &quot;$USER User create successful.&quot; else echo &quot;$USER User already exists!&quot; fi done</code></pre><h2>3ã€�一键查看æœ�务器利用ç�‡</h2><pre><code>#!/bin/bash function cpu(){ util=$(vmstat | awk '{if(NR==3)print $13+$14}') iowait=$(vmstat | awk '{if(NR==3)print $16}') echo &quot;CPU -使用ç�‡ï¼š${util}% ,等待ç£�盘IO相应使用ç�‡ï¼š${iowait}:${iowait}%&quot; } function memory (){ total=`free -m |awk '{if(NR==2)printf &quot;%.1f&quot;,$2/1024}'` used=`free -m |awk '{if(NR==2) printf &quot;%.1f&quot;,($2-$NF)/1024}'` available=`free -m |awk '{if(NR==2) printf &quot;%.1f&quot;,$NF/1024}'` echo &quot;内存 - 总大å°�: ${total}G , 使用: ${used}G , 剩余: ${available}G&quot; } disk(){ fs=$(df -h |awk '/^\/dev/{print $1}') for p in $fs; do mounted=$(df -h |awk '$1==&quot;'$p'&quot;{print $NF}') size=$(df -h |awk '$1==&quot;'$p'&quot;{print $2}') used=$(df -h |awk '$1==&quot;'$p'&quot;{print $3}') used_percent=$(df -h |awk '$1==&quot;'$p'&quot;{print $5}') echo &quot;硬盘 - 挂载点: $mounted , 总大å°�: $size , 使用: $used , 使用ç�‡: $used_percent&quot; done } function tcp_status() { summary=$(ss -antp |awk '{status[$1]++}END{for(i in status) printf i&quot;:&quot;status[i]&quot; &quot;}') echo &quot;TCPè¿�æ�¥çжæ€� - $summary&quot; } cpu memory disk tcp_status</code></pre><h2>4ã€�找出å� 用CPU 内存过高的进程</h2><pre><code>#!/bin/bash echo &quot;-------------------CUPå� 用å‰�10æ�’åº�--------------------------------&quot; ps -eo user,pid,pcpu,pmem,args --sort=-pcpu |head -n 10 echo &quot;-------------------内存å� 用å‰�10æ�’åº�--------------------------------&quot; ps -eo user,pid,pcpu,pmem,args --sort=-pmem |head -n 10</code></pre><h2>5ã€�查看网å�¡çš„å®�æ—¶æµ�é‡�</h2><pre><code>#!/bin/bash eth0=$1 echo -e &quot;æµ�é‡�进入--æµ�é‡�ä¼ å‡º &quot; while true; do old_in=$(cat /proc/net/dev |grep $eth0 |awk '{print $2}') old_out=$(cat /proc/net/dev |grep $eth0 |awk '{print $10}') sleep 1 new_in=$(cat /proc/net/dev |grep $eth0 |awk '{print $2}') new_out=$(cat /proc/net/dev |grep $eth0 |awk '{print $10}') in=$(printf &quot;%.1f%s&quot; &quot;$((($new_in-$old_in)/1024))&quot; &quot;KB/s&quot;) out=$(printf &quot;%.1f%s&quot; &quot;$((($new_out-$old_out)/1024))&quot; &quot;KB/s&quot;) echo &quot;$in $out&quot; done</code></pre><h2>6ã€�监æ�§å¤šå�°æœ�务器ç£�盘利用ç�‡è„šæœ¬</h2><pre><code>#!/bin/bash HOST_INFO=host.info for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do #å�–出用户å��和端å�£ USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO) PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO) #创建临时文件,ä¿�存信æ�¯ TMP_FILE=/tmp/disk.tmp #通过公钥登录è�·å�–主机ç£�盘信æ�¯ ssh -p $PORT $USER@$IP 'df -h' &gt; $TMP_FILE #分æ��ç£�盘å� 用空间 USE_RATE_LIST=$(awk 'BEGIN{OFS=&quot;=&quot;}/^\/dev/{print $NF,int($5)}' $TMP_FILE) #循ç�¯ç£�盘列表,进行判断 for USE_RATE in $USE_RATE_LIST; do #å�–出等å�·ï¼ˆ=)å�³è¾¹çš„值 挂载点å��ç§° PART_NAME=${USE_RATE%=*} #å�–出等å�·ï¼ˆ=)左边的值 ç£�盘利用ç�‡ USE_RATE=${USE_RATE#*=} #进行判断 if [ $USE_RATE -ge 80 ]; then echo &quot;Warning: $PART_NAME Partition usage $USE_RATE%!&quot; echo &quot;æœ�务器$IPçš„ç£�盘空间å� 用过高,请å�Šæ—¶å¤„ç�†&quot; | mail -s &quot;空间ä¸�足警告&quot; ä½ çš„qq@qq.com else echo &quot;æœ�务器$IPçš„$PART_NAME目录空间良好&quot; fi done done</code></pre><h2>7ã€�批é‡�检测网站是å�¦å¼‚常并邮件通知</h2><pre><code>#!/bin/bash URL_LIST=&quot;www.baidu.com www.ctnrs.com www.der-matech.net.cn www.der-matech.com.cn www.der-matech.cn www.der-matech.top www.der-matech.org&quot; for URL in $URL_LIST; do FAIL_COUNT=0 for ((i=1;i&lt;=3;i++)); do HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w &quot;%{http_code}&quot; $URL) if [ $HTTP_CODE -eq 200 ]; then echo &quot;$URL OK&quot; break else echo &quot;$URL retry $FAIL_COUNT&quot; let FAIL_COUNT++ fi done if [ $FAIL_COUNT -eq 3 ]; then echo &quot;Warning: $URL Access failure!&quot; echo &quot;网站$URLå��æ�‰ï¼Œè¯·å�Šæ—¶å¤„ç�†&quot; | mail -s &quot;$URL网站高å�±&quot; 1794748404@qq.com fi done</code></pre><h2>8ã€�批é‡�主机远程执行命令脚本</h2><pre><code>#!/bin/bash COMMAND=$* HOST_INFO=host.info for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO) PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO) PASS=$(awk -v ip=$IP 'ip==$1{print $4}' $HOST_INFO) expect -c &quot; spawn ssh -p $PORT $USER@$IP expect { \&quot;(yes/no)\&quot; {send \&quot;yes\r\&quot;; exp_continue} \&quot;password:\&quot; {send \&quot;$PASS\r\&quot;; exp_continue} \&quot;$USER@*\&quot; {send \&quot;$COMMAND\r exit\r\&quot;; exp_continue} } &quot; echo &quot;-------------------&quot; done</code></pre><h2>9ã€�一键部署LNMP网站平å�°è„šæœ¬</h2><pre><code>#!/bin/bash NGINX_V=1.15.6 PHP_V=5.6.36 TMP_DIR=/tmp INSTALL_DIR=/usr/local PWD_C=$PWD echo echo -e &quot;\tMenu\n&quot; echo -e &quot;1. Install Nginx&quot; echo -e &quot;2. Install PHP&quot; echo -e &quot;3. Install MySQL&quot; echo -e &quot;4. Deploy LNMP&quot; echo -e &quot;9. Quit&quot; function command_status_check() { if [ $? -ne 0 ]; then echo $1 exit fi } function install_nginx() { cd $TMP_DIR yum install -y gcc gcc-c++ make openssl-devel pcre-devel wget wget http://nginx.org/download/nginx-${NGINX_V}.tar.gz tar zxf nginx-${NGINX_V}.tar.gz cd nginx-${NGINX_V} ./configure --prefix=$INSTALL_DIR/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-stream command_status_check &quot;Nginx - å¹³å�°ç�¯å¢ƒæ£€æŸ¥å¤±è´¥ï¼�&quot; make -j 4 command_status_check &quot;Nginx - 编译失败ï¼�&quot; make install command_status_check &quot;Nginx - 安装失败ï¼�&quot; mkdir -p $INSTALL_DIR/nginx/conf/vhost alias cp=cp ; cp -rf $PWD_C/nginx.conf $INSTALL_DIR/nginx/conf rm -rf $INSTALL_DIR/nginx/html/* echo &quot;ok&quot; &gt; $INSTALL_DIR/nginx/html/status.html echo '&lt;?php echo &quot;ok&quot;?&gt;' &gt; $INSTALL_DIR/nginx/html/status.php $INSTALL_DIR/nginx/sbin/nginx command_status_check &quot;Nginx - å�¯åŠ¨å¤±è´¥ï¼�&quot; } function install_php() { cd $TMP_DIR yum install -y gcc gcc-c++ make gd-devel libxml2-devel \ libcurl-devel libjpeg-devel libpng-devel openssl-devel \ libmcrypt-devel libxslt-devel libtidy-devel wget http://docs.php.net/distributions/php-${PHP_V}.tar.gz tar zxf php-${PHP_V}.tar.gz cd php-${PHP_V} ./configure --prefix=$INSTALL_DIR/php \ --with-config-file-path=$INSTALL_DIR/php/etc \ --enable-fpm --enable-opcache \ --with-mysql --with-mysqli --with-pdo-mysql \ --with-openssl --with-zlib --with-curl --with-gd \ --with-jpeg-dir --with-png-dir --with-freetype-dir \ --enable-mbstring --enable-hash command_status_check &quot;PHP - å¹³å�°ç�¯å¢ƒæ£€æŸ¥å¤±è´¥ï¼�&quot; make -j 4 command_status_check &quot;PHP - 编译失败ï¼�&quot; make install command_status_check &quot;PHP - 安装失败ï¼�&quot; cp php.ini-production $INSTALL_DIR/php/etc/php.ini cp sapi/fpm/php-fpm.conf $INSTALL_DIR/php/etc/php-fpm.conf cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm /etc/init.d/php-fpm start command_status_check &quot;PHP - å�¯åŠ¨å¤±è´¥ï¼�&quot; } read -p &quot;请输入编å�·ï¼š&quot; number case $number in 1) install_nginx;; 2) install_php;; 3) install_mysql;; 4) install_nginx install_php ;; 9) exit;; esac</code></pre><h2>10ã€�监æ�§MySQL主ä»�å�Œæ­¥çжæ€�是å�¦å¼‚常脚本</h2><pre><code>#!/bin/bash HOST=localhost USER=root PASSWD=123.com IO_SQL_STATUS=$(mysql -h$HOST -u$USER -p$PASSWD -e 'show slave status\G' 2&gt;/dev/null |awk '/Slave_.*_Running:/{print $1$2}') for i in $IO_SQL_STATUS; do THREAD_STATUS_NAME=${i%:*} THREAD_STATUS=${i#*:} if [ &quot;$THREAD_STATUS&quot; != &quot;Yes&quot; ]; then echo &quot;Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!&quot; |mail -s &quot;Master-Slave Staus&quot; xxx@163.com fi done</code></pre><h2>11ã€�MySqlæ•°æ�®åº“备份脚本</h2><h6>分库备份</h6><pre><code>mysqldump -uroot -pxxx -B A &gt; A.sql #!/bin/bash DATE=$(date +%F_%H-%M-%S) HOST=localhost USER=backup PASS=123.com BACKUP_DIR=/data/db_backup DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e &quot;show databases;&quot; 2&gt;/dev/null |egrep -v &quot;Database|information_schema|mysql|performance_schema|sys&quot;) for DB in $DB_LIST; do BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB &gt; $BACKUP_NAME 2&gt;/dev/null; then echo &quot;$BACKUP_NAME 备份失败!&quot; fi done</code></pre><h6>分表备份</h6><pre><code>mysqldump -uroot -pxxx -A t &gt; t.sql #!/bin/bash DATE=$(date +%F_%H-%M-%S) HOST=localhost USER=backup PASS=123.com BACKUP_DIR=/data/db_backup DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e &quot;show databases;&quot; 2&gt;/dev/null |egrep -v &quot;Database|information_schema|mysql|performance_schema|sys&quot;) for DB in $DB_LIST; do BACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE} [ ! -d $BACKUP_DB_DIR ] &amp;&amp; mkdir -p $BACKUP_DB_DIR &amp;&gt;/dev/null TABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e &quot;use $DB;show tables;&quot; 2&gt;/dev/null) for TABLE in $TABLE_LIST; do BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql if ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE &gt; $BACKUP_NAME 2&gt;/dev/null; then echo &quot;$BACKUP_NAME 备份失败!&quot; fi done done</code></pre><h2>12ã€�Nginx访问日志分æ��</h2><pre><code>#!/bin/bash # æ—¥å¿—æ ¼å¼�: $remote_addr - $remote_user [$time_local] &quot;$request&quot; $status $body_bytes_sent &quot;$http_referer&quot; &quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot; LOG_FILE=$1 echo &quot;统计访问最多的10个IP&quot; awk '{a[$1]++}END{print &quot;UV:&quot;,length(a);for(v in a)print v,a[v]}' $LOG_FILE |sort -k2 -nr |head -10 echo &quot;----------------------&quot; echo &quot;统计时间段访问最多的IP&quot; awk '$4&gt;=&quot;[01/Dec/2018:13:20:25&quot; &amp;&amp; $4&lt;=&quot;[27/Nov/2018:16:20:49&quot;{a[$1]++}END{for(v in a)print v,a[v]}' $LOG_FILE |sort -k2 -nr|head -10 echo &quot;----------------------&quot; echo &quot;统计访问最多的10个页é�¢&quot; awk '{a[$7]++}END{print &quot;PV:&quot;,length(a);for(v in a){if(a[v]&gt;10)print v,a[v]}}' $LOG_FILE |sort -k2 -nr echo &quot;----------------------&quot; echo &quot;统计访问页é�¢çжæ€�ç �æ•°é‡�&quot; awk '{a[$7&quot; &quot;$9]++}END{for(v in a){if(a[v]&gt;5)print v,a[v]}}' $LOG_FILE |sort -k3 -nr</code></pre><h2>13ã€�Nginx访问日志自动按天(周ã€�月)切割</h2><pre><code>#!/bin/bash #nginx日志目录 LOG_DIR=/www/server/nginx/logs #è�·å�–到上一天的时间 YESTERDAY_TIME=$(date -d &quot;yesterday&quot; +%F) #归档日志å�–æ—¶é—´ LOG_MONTH_DIR=$LOG_DIR/$(date +&quot;%Y-%m&quot;) #归档日志的å��ç§° LOG_FILE_LIST=&quot;access.log&quot; for LOG_FILE in $LOG_FILE_LIST; do [ ! -d $LOG_MONTH_DIR ] &amp;&amp; mkdir -p $LOG_MONTH_DIR mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME} done kill -USR1 $(cat $LOG_DIR/nginx.pid)</code></pre><h2>14ã€�自动å�‘布Java项目(Tomcat)</h2><pre><code>#!/bin/bash DATE=$(date +%F_%T) TOMCAT_NAME=$1 TOMCAT_DIR=/usr/local/$TOMCAT_NAME ROOT=$TOMCAT_DIR/webapps/ROOT BACKUP_DIR=/data/backup WORK_DIR=/tmp PROJECT_NAME=tomcat-java-demo # 拉å�–代ç � cd $WORK_DIR if [ ! -d $PROJECT_NAME ]; then git clone https://github.com/lizhenliang/tomcat-java-demo cd $PROJECT_NAME else cd $PROJECT_NAME git pull fi # æ�„建 mvn clean package -Dmaven.test.skip=true if [ $? -ne 0 ]; then echo &quot;maven build failure!&quot; exit 1 fi # 部署 TOMCAT_PID=$(ps -ef |grep &quot;$TOMCAT_NAME&quot; |egrep -v &quot;grep|$$&quot; |awk 'NR==1{print $2}') [ -n &quot;$TOMCAT_PID&quot; ] &amp;&amp; kill -9 $TOMCAT_PID [ -d $ROOT ] &amp;&amp; mv $ROOT $BACKUP_DIR/${TOMCAT_NAME}_ROOT$DATE unzip $WORK_DIR/$PROJECT_NAME/target/*.war -d $ROOT $TOMCAT_DIR/bin/startup.sh</code></pre><h2>15ã€�自动å�‘布PHP项目</h2><pre><code>#!/bin/bash DATE=$(date +%F_%T) WWWROOT=/usr/local/nginx/html/$1 BACKUP_DIR=/data/backup WORK_DIR=/tmp PROJECT_NAME=php-demo # 拉å�–代ç � cd $WORK_DIR if [ ! -d $PROJECT_NAME ]; then git clone https://github.com/lizhenliang/php-demo cd $PROJECT_NAME else cd $PROJECT_NAME git pull fi # 部署 if [ ! -d $WWWROOT ]; then mkdir -p $WWWROOT rsync -avz --exclude=.git $WORK_DIR/$PROJECT_NAME/* $WWWROOT else rsync -avz --exclude=.git $WORK_DIR/$PROJECT_NAME/* $WWWROOT fi</code></pre><h2>16ã€�DOS攻击防范(自动å±�蔽攻击IP)</h2><pre><code>#!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) #nginx日志 LOG_FILE=/usr/local/nginx/logs/demo2.access.log #分æ��ip的访问情况 ABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]&gt;10)print i}') for IP in $ABNORMAL_IP; do if [ $(iptables -vnL |grep -c &quot;$IP&quot;) -eq 0 ]; then iptables -I INPUT -s $IP -j DROP echo &quot;$(date +'%F_%T') $IP&quot; &gt;&gt; /tmp/drop_ip.log fi done</code></pre><h2>17ã€�目录入侵检测ä¸�告警</h2><pre><code>#!/bin/bash MON_DIR=/opt inotifywait -mqr --format %f -e create $MON_DIR |\ while read files; do #å�Œæ­¥æ–‡ä»¶ rsync -avz /opt /tmp/opt #检测文件是å�¦è¢«ä¿®æ”¹ #echo &quot;$(date +'%F %T') create $files&quot; | mail -s &quot;dir monitor&quot; xxx@163.com done</code></pre><p>作者:å�—宫乘é£�<br>链æ�¥ï¼šblog.csdn.net/heian_99/article/details/104027379</p><p><img src="/img/bVbHCzg" alt="" title=""></p> 比 Xshell 还好用的 SSH 客户端ç¥�器ï¼�爱了 https://segmentfault.com/a/1190000041370721 2022-02-07T21:15:09+08:00 2022-02-07T21:15:09+08:00 民工哥 https://segmentfault.com/u/jishuroad 5 <p>ç”±äº�需è¦�è¿�æ�¥è¿œç¨‹ Linux æœ�务器,早期使用过 Putty,SecureCRT,å��é�¢ä¸»è¦�使用 Xshell。之å‰�民工哥也给大家æ�¨è��è¿‡å‡ æ¬¾SSH客户端:</p><p>自ä»�æ�¥è§¦äº† MobaXterm之å��,个人感觉比 Xshell æ›´å¥½ç”¨ï¼Œå ªç§°SSH客户端的ç¥�器啊ï¼�</p><p>MobaXterm å’Œ Xshell 的关系,就åƒ� IntelliJ IDEA å’Œ Eclipse çš„å…³ç³»ä¸€æ ·ï¼ŒåŠŸèƒ½æ›´åŠ å¼ºå¤§ï¼Œæ•ˆæ�œæ›´åŠ ç‚«é…·ã€‚</p><p>æ�¥ä¸‹æ�¥ï¼Œä»‹ç»� MobaXterm 的下载ã€�安装ã€�简å�•使用,以å�Šå…¶å¼ºå¤§çš„功能亮点(优点)。</p><h2>MobaXterm 下载</h2><p>如æ�œæ˜¯ä¸ªäººä½¿ç”¨ï¼Œä¸‹è½½å®¶åº­ç‰ˆï¼ˆå…�费的)就å�¯ä»¥æ»¡è¶³åŸºæœ¬å·¥ä½œéœ€æ±‚;如æ�œæƒ³è¦�使用更丰富的功能,å�¯ä»¥ä½¿ç”¨ä¸“业版(收费的)。</p><p>个人使用的是家庭版 v12.3,已ç»�足够满足工作需求了。</p><h6>1ã€�以下是MobaXterm家庭版的下载地å�€ï¼ˆå½“å‰�最新版本是 v12.4):</h6><p><a href="https://link.segmentfault.com/?enc=cV5D4p0iIZoPKzYCyBhfrA%3D%3D.kiXQrswxREQ6TvN2pidshExXS8deJsy9xhH1CvJy4VX0hJZg8HWAOOU0mBTUZVynrzpBMp5c38rlBh1INFrFrQ%3D%3D" rel="nofollow">https://mobaxterm.mobatek.net...</a></p><p><img src="/img/remote/1460000041370723" alt="" title=""></p><h2>MobaXterm 安装</h2><p>下载的是一个zipæ ¼å¼�çš„å�‹ç¼©æ–‡ä»¶ï¼Œå¦‚下:</p><p><img src="/img/remote/1460000041370724" alt="" title=""></p><p>è§£å�‹å��,å�Œå‡» msi 文件进行安装</p><p><img src="/img/remote/1460000041370725" alt="" title=""></p><p>以下是安装界é�¢ï¼ˆå®‰è£…一路选择“nextâ€�å�³å�¯ï¼‰ï¼š</p><p><img src="/img/remote/1460000041370726" alt="" title=""></p><p><img src="/img/remote/1460000041370727" alt="" title=""></p><p><img src="/img/remote/1460000041370728" alt="" title=""></p><p><img src="/img/remote/1460000041370729" alt="" title=""></p><p>安装完毕å��,å�³å�¯åœ¨æ¡Œé�¢ä¸Šçœ‹åˆ° MobaXterm 的桌é�¢å¿«æ�·å›¾æ ‡ï¼Œå¦‚下图:</p><p><img src="/img/remote/1460000041370730" alt="" title=""></p><h2>MobaXterm 简å�•使用</h2><h6>1ã€�å�Œå‡»æ¡Œé�¢ä¸Šçš„ MobaXterm å›¾æ ‡ï¼Œè¿›å…¥ä½¿ç”¨ç•Œé�¢ï¼Œé€‰æ‹© Session --&gt; SSH,如下图:</h6><p><img src="/img/remote/1460000041370731" alt="" title=""></p><h6>2ã€�填写需è¦�è¿�æ�¥çš„远程主机 IP å’Œ 用户å��,如下图:</h6><p><img src="/img/remote/1460000041370732" alt="" title=""></p><h6>3ã€�点击 “OKâ€�,进入到远程机器的密ç �输入页é�¢ï¼Œè¾“入主机的正确登录密ç �。</h6><p>选择“Yesâ€�,å�³å�¯ä¿�存密ç �,以å��访问该主机,ä¸�用æ¯�次å†�输入主机密ç �。</p><p><img src="/img/remote/1460000041370733" alt="" title=""></p><p>至此,å�³å�¯æ“�作远程的主机,进行相应的工作。</p><h2>MobaXterm 功能亮点(优点)</h2><h6>1ã€�内嵌Sftp模å�—,å�¯ä»¥å¾ˆæ–¹ä¾¿åœ°è¿›è¡Œä¸Šä¼ 或者下载文件(支æŒ�拖拽)</h6><p>在命令窗å�£è¿›å…¥éœ€è¦�æ–‡ä»¶ä¸Šä¼ æˆ–è€…ä¸‹è½½çš„ç›®å½•ï¼Œå‹¾é€‰â€œFollow terminal folderâ€�,左侧的 Sftp 目录就会跳转到相应的目录。</p><ul><li><p>1)<strong>æ–‡ä»¶ä¸Šä¼ çš„ä¸¤ç§�æ–¹å¼�</strong>:</p><ul><li>a)点击 MobaXterm çš„æ–‡ä»¶ä¸Šä¼ æŒ‰é’®ï¼Œåœ¨æœ¬åœ°ç›®å½•ä¸‹ï¼Œé€‰ä¸­éœ€è¦�ä¸Šä¼ çš„æ–‡ä»¶ï¼Œç‚¹å‡»ç¡®å®šï¼Œå�³å�¯å®Œæˆ�ä¸Šä¼ ã€‚</li><li>b)在本地目录下,选中需è¦�ä¸Šä¼ çš„æ–‡ä»¶ï¼Œå°†æ–‡ä»¶æ‹–åˆ° Sftp 的远程目录下,å�³å�¯å®Œæˆ�ä¸Šä¼ ã€‚</li></ul></li><li><p>2)<strong>文件下载的两ç§�æ–¹å¼�</strong>:</p><ul><li>a)在远程æœ�务器目录下,选中需è¦�下载的文件,点击下载功能按钮,å†�选择相应的ä¿�存路径,å�³å�¯ä¸‹è½½ã€‚</li><li>b)在远程æœ�务器目录下,选中需è¦�下载的文件,将文件拖出到本地目录下,å�³å�¯å®Œæˆ�下载。</li></ul></li></ul><p><img src="/img/remote/1460000041370734" alt="" title=""></p><h6>2ã€�自带监æ�§åŠŸèƒ½ï¼Œå�¯ä»¥å¾ˆæ–¹ä¾¿åœ°æ£€æµ‹è¿œç¨‹æœºå™¨èµ„æº�的使用情况</h6><p>左侧è�œå�•æ �下方,点击“<strong>Remote monitoring</strong>â€�,å�³å�¯çœ‹åˆ°è¿œç¨‹æœºå™¨èµ„æº�çš„å®�时使用情况;å†�次点击,使用情况将会被éš�è—�。</p><p><img src="/img/remote/1460000041370735" alt="" title=""></p><h6>3ã€�å�¯ä»¥å¾ˆæ–¹ä¾¿åœ°æŸ¥çœ‹ Session 列表</h6><p>ç”±äº�工作中å�¯èƒ½ä¼šæ�¥è§¦ä¸�å�Œçš„项目,需è¦�è¿�æ�¥ä¸�å�Œçš„远程ç�¯å¢ƒã€‚我们ç»�常会创建多个文件夹ä¿�存远程机器的 Session ä¿¡æ�¯ </p><p><img src="/img/remote/1460000041370736" alt="" title=""></p><h6>4ã€�è¿�æ�¥æ–¹å¼�ç§�类丰富</h6><p>ä¸�ä»…å�¯ä»¥ä½¿ç”¨SSH,还有其他多ç§�è¿�æ�¥æ–¹å¼�</p><p><img src="/img/remote/1460000041370737" alt="" title=""></p><h6>5ã€�å�¯ä»¥åƒ�看Linuxç³»ç»Ÿä¸€æ ·ï¼Œä½¿ç”¨Linux命令查看 windows本地目录和文件</h6><p><img src="/img/remote/1460000041370738" alt="" title=""></p><h6>6ã€�字体高亮显示效æ�œç‚«é…·</h6><p>以 Tomcat 的日志文件内容为例,一些关键字会高亮æˆ�ä¸�å�Œçš„颜色,方便问题查找:</p><p><img src="/img/remote/1460000041370739" alt="" title=""></p><h6>7ã€� 支æŒ�快速å¤�制 Session 窗å�£</h6><p>在 Session页签上å�³é”®ç‚¹å‡»ï¼Œé€‰æ‹©â€œ<strong>Duplicate tab</strong>â€�,å�³å�¯å®Œæˆ�å¤�制</p><p><img src="/img/remote/1460000041370740" alt="" title=""></p><p><img src="/img/remote/1460000041370741" alt="" title=""></p><h6>8ã€�å�¯ä»¥ç»™ä¸�å�Œçš„ Session 页签设置ä¸�å�Œçš„颜色</h6><p>在 Session页签上å�³é”®ç‚¹å‡»ï¼Œé€‰æ‹©â€œ<strong>Set tab color</strong>â€�,å�¯ä»¥é€‰æ‹©è‡ªå·±å–œæ¬¢çš„颜色</p><p><img src="/img/remote/1460000041370742" alt="" title=""></p><p>å�¯ä»¥é€‰æ‹©åŸºæœ¬é¢œè‰²æˆ–者自定义的颜色:</p><p><img src="/img/remote/1460000041370743" alt="" title=""></p><p>修改å��,效æ�œå¦‚下:</p><p><img src="/img/remote/1460000041370744" alt="" title=""></p><h6>9ã€�支æŒ�多个Session 窗å�£åˆ—表展示</h6><p>å…�费的家庭版也支æŒ�å�Œæ—¶æ‰“开多个Session窗å�£ï¼Œå½“打开了多个窗å�£çš„æ—¶å€™ï¼Œå�¯èƒ½ä¸�方便查看具体想看的Session窗å�£ã€‚</p><p>点击 MobaXterm å�³ä¸Šæ–¹çš„“å›�形针â€�按钮,å�³å�¯çœ‹åˆ°æ‰€æœ‰æ‰“开的 Session 窗å�£</p><p><img src="/img/remote/1460000041370745" alt="" title=""></p><h6>10ã€�左侧è�œå�•æ �å�¯ä»¥å¾ˆæ–¹ä¾¿åœ°å¼¹å‡ºå’Œéš�è—�</h6><p>1)点击左侧的收缩按钮,å�³å�¯å®Œæˆ�左侧è�œå�•æ �çš„éš�è—�</p><p><img src="/img/remote/1460000041370746" alt="" title=""></p><p>收缩å��效æ�œå¦‚下:</p><p><img src="/img/remote/1460000041370747" alt="" title=""></p><p>2)点击左侧的“弹出â€�按钮,å�³å�¯å¼¹å‡ºè�œå�•æ �</p><p><img src="/img/remote/1460000041370748" alt="" title=""></p><h6>11ã€�MobaXterm å°�游æˆ�</h6><p>在左侧的Tools工具æ �里æ��ä¾›äº†å‡ æ¬¾å°�游æˆ�</p><p><img src="/img/remote/1460000041370749" alt="" title=""></p><p><img src="/img/remote/1460000041370750" alt="" title=""></p><ul><li>1)俄罗斯方å�—</li></ul><p><img src="/img/remote/1460000041370751" alt="" title=""></p><p><img src="/img/remote/1460000041370752" alt="" title=""></p><ul><li>2)数独</li></ul><p><img src="/img/remote/1460000041370753" alt="" title=""></p><h6>12ã€�支æŒ�å››ç§� Session 窗å�£åˆ†å±�效æ�œ</h6><p>支æŒ�å››ç§�分å±�效æ�œï¼š<strong>å�•一直æ�’ã€�å�‚直分å±�ã€�水平分å±� å’Œ 四象é™�分å±�</strong></p><ul><li>1)å�•一直æ�’效æ�œï¼ˆä¼ 统效æ�œï¼Œæ¯”较常用å®�用)</li></ul><p><img src="/img/remote/1460000041370754" alt="" title=""></p><ul><li>2)å�‚直分å±�效æ�œï¼ˆå�¯ç”¨äº�两个主机的文件对比)</li></ul><p><img src="/img/remote/1460000041370755" alt="" title=""></p><ul><li>3)水平分å±�</li></ul><p><img src="/img/remote/1460000041370756" alt="" title=""></p><ul><li>4)四象é™�分å±�</li></ul><p><img src="/img/remote/1460000041370757" alt="" title=""></p><h6>13ã€�Session æ–­å¼€è¿�æ�¥å��,å�¯ä»¥å¾ˆæ–¹ä¾¿åœ°å†�次è¿�æ�¥</h6><p>ç»�常会é�‡åˆ°æ‰“开一个Session窗å�£ï¼Œå¦‚æ�œé•¿æ—¶é—´ä¸�æ“�作或者网络中途断开,需è¦�é‡�新登录远程机器的场景。</p><p>此时ä¸�需è¦�关闭窗å�£ï¼Œé‡�新打开一个。</p><p>MobaXtermæ��供了便æ�·æ–¹å¼�:å�ªéœ€è¦� 输入<strong>R</strong> å�³å�¯<strong>é‡�å�¯ Session</strong></p><p><img src="/img/remote/1460000041370758" alt="" title=""></p><p>输入Rå��,å�³å�¯å†�次è¿�æ�¥åˆ°ä¹‹å‰�çš„Session</p><p><img src="/img/remote/1460000041370759" alt="" title=""></p><h2>PS</h2><p>MobaXterm 真的是一款 SSH客户端ç¥�器,强烈æ�¨è��大家使用ï¼�</p><p>如æ�œæƒ³ç‚«é…·åœ°æ“�作 Linux 远程机器,赶快å°�试体验一下 MobaXterm çš„å�„ç§�“ç¥�技â€�å�§ï¼�</p><p>MobaXterm å¼ºå¤§çš„åŠŸèƒ½ï¼Œä¸€å®šä¼šè®©ä½ èµ�å�¹ä¸�å·²ï¼� </p><p>希望能帮到大家,谢谢ï¼�</p><p>æ�¥æº�:cnblogs.com/miracle-luna/p/12008869.html</p><p><img src="/img/bVbHCzg" alt="" title=""></p> 如æ�œä½ è§‰å¾—å­¦ä¹ Git 很æ�¯ç‡¥ï¼Œé‚£æ˜¯å› ä¸ºä½ è¿˜æ²¡ç�©è¿‡è¿™æ¬¾æ¸¸æˆ�ï¼� https://segmentfault.com/a/1190000041330870 2022-01-24T11:36:10+08:00 2022-01-24T11:36:10+08:00 民工哥 https://segmentfault.com/u/jishuroad 15 <p>大家好ï¼�我是民工哥。</p><p>对äº�Git,相信大多数程åº�员并ä¸�会感到陌生。</p><p>作为目å‰�世界上最先进的分布å¼�版本æ�§åˆ¶ç³»ç»Ÿï¼ˆæ²¡æœ‰ä¹‹ä¸€ï¼‰ï¼ŒGit 是一个开æº�的分布å¼�版本æ�§åˆ¶è½¯ä»¶,用以有效ã€�高速的处ç�†ä»�很å°�到é��常大的项目版本管ç�†ã€‚ Git 最åˆ�是由Linus Torvalds设计开å�‘的,用äº�管ç�†Linuxå†…æ ¸å¼€å�‘。éš�ç�€æ—¶é—´çš„æ�¨ç§»ï¼ŒGit å�‘展到今天,已ç»�æˆ�为了众多开å�‘者必备的开å�‘工具。</p><p><img src="/img/remote/1460000041330872" alt="" title=""></p><p>如æ�œä½ å¹³æ—¶å­¦ä¹ Git时感觉到æ�¯ç‡¥ä¹�味,ä¸�妨试一试这个好ç�©çš„å°�游æˆ�,通过别一ç§�æ–¹å¼�,在娱ä¹�中å�»å­¦ä¹ 。</p><p><img src="/img/remote/1460000041330873" alt="" title=""></p><p><img src="/img/remote/1460000041330874" alt="" title=""></p><p>下é�¢æ˜¯å…¶ä¸­çš„æ¼”示例å­�:<br><img src="/img/bVcXAc4" alt="image.png" title="image.png"><br>需è¦�这款游æˆ�的读者å�¯ä»¥ç‚¹å‡»ä¸‹æ–¹å…¬ä¼—å�·å��片å›�å¤�关键è¯� Gitå°�游æˆ� è�·å�–<br><img src="/img/bVbHCzg" alt="" title=""></p><h2>Git 简介</h2><p>Git 是一个开æº�的分布å¼�版本æ�§åˆ¶ç³»ç»Ÿã€‚</p><h6>什么是版本æ�§åˆ¶ï¼Ÿ</h6><p>版本æ�§åˆ¶æ˜¯ä¸€ç§�记录一个或若干文件内容å�˜åŒ–,以便将æ�¥æŸ¥é˜…特定版本修订情况的系统。</p><h5>什么是分布å¼�版本æ�§åˆ¶ç³»ç»Ÿï¼Ÿ</h5><p>介ç»�分布å¼�版本æ�§åˆ¶ç³»ç»Ÿå‰�,有必è¦�å…ˆäº†è§£ä¸€ä¸‹ä¼ ç»Ÿçš„é›†ä¸­å¼�版本æ�§åˆ¶ç³»ç»Ÿã€‚</p><p>集中化的版本æ�§åˆ¶ç³»ç»Ÿï¼Œè¯¸å¦‚ CVS,Subversion 等,都有一个å�•一的集中管ç�†çš„æœ�务器,ä¿�存所有文件的修订版本,而å��å�Œå·¥ä½œçš„人们都通过客户端è¿�到这å�°æœ�务器,å�–出最新的文件或者æ��交更新。</p><p>这么å�šæœ€æ˜¾è€Œæ˜“è§�的缺点是中央æœ�务器的å�•点故障。如æ�œå®•机一å°�时,那么在这一å°�时内,è°�éƒ½æ— æ³•æ��äº¤æ›´æ–°ï¼Œä¹Ÿå°±æ— æ³•å��å�Œå·¥ä½œã€‚è¦�是中央æœ�务器的ç£�盘å�‘生故障,碰巧没å�šå¤‡ä»½ï¼Œæˆ–者备份ä¸�够å�Šæ—¶ï¼Œå°±ä¼šæœ‰ä¸¢å¤±æ•°æ�®çš„é£�险。最å��的情况是彻底丢失整个项目的所有å�†å�²æ›´æ”¹è®°å½•。</p><p><img src="/img/remote/1460000039921597" alt="" title=""></p><p>分布å¼�版本æ�§åˆ¶ç³»ç»Ÿçš„客户端并ä¸�å�ªæ��å�–最新版本的文件快照,而是把代ç �仓库完整地镜åƒ�下æ�¥ã€‚这么一æ�¥ï¼Œä»»ä½•一处å��å�Œå·¥ä½œç”¨çš„æœ�务器å�‘生故障,事å��都å�¯ä»¥ç”¨ä»»ä½•一个镜åƒ�出æ�¥çš„æœ¬åœ°ä»“库æ�¢å¤�ã€‚å› ä¸ºæ¯�一次的æ��å�–æ“�作,å®�际上都是一次对代ç �仓库的完整备份。</p><p><img src="/img/remote/1460000039921598" alt="" title=""></p><p>å�¯å�‚考:<a href="https://link.segmentfault.com/?enc=vNMQqeq2p8fG3zjw0zL6Lw%3D%3D.tJPBeMfnEufSBnLDJiYPOBcQuXudWj0bhJVptGKHpATPJGyEgHL1GxRzwHT%2FMWzJstjuQLZwh%2Bvz2f199Y4KSQXkkcQCMSCNKtAs8Y5BRhcZv0PvJzWiST09F9CO1qc0kFgFTyy4j7cKNu%2Bv2ZxjII7Bj9GzG7t8h2S2aF0gBboABnObT2bLSJNmUgtvH3PWBSJJXnmxk9LlhXPQzs7MNtKXL1tTlqfvH3tQOslF568UHSNAlkYj3FbDUAcZ0XMhOXKwxapBFAP349tRaANoeTmy9VU620rdZLzN7e2ZVQvniR5fCXPwZCSIt5sYAgXkXy%2B7LZnfwW6aKX88dkFBfA%3D%3D" rel="nofollow">Git ä»�入门到精通</a></p><h2>Git vs SVN</h2><p>Git å’Œ SVN 孰优孰好,æ¯�个人有ä¸�å�Œçš„体验。</p><p>Git是分布å¼�的,SVN是集中å¼�çš„</p><p>这是 Git å’Œ SVN 最大的区别。若能æ�Œæ�¡è¿™ä¸ªæ¦‚念,两者区别基本æ��懂大å�Šã€‚å› ä¸º Git 是分布å¼�的,所以 Git 支æŒ�离线工作,在本地å�¯ä»¥è¿›è¡Œå¾ˆå¤šæ“�作,包括æ�¥ä¸‹æ�¥å°†è¦�é‡�磅æ�¨å‡ºçš„分支功能。而 SVN å¿…é¡»è�”网æ‰�能正常工作。</p><ul><li>Gitå¤�æ�‚概念多,SVN简å�•易上手</li></ul><p>所有å�Œæ—¶æ�Œæ�¡ Git å’Œ SVN 的开å�‘者都必须承认,Git 的命令å®�在太多了,日常工作需è¦�æ�Œæ�¡add,commit,status,fetch,push,rebase等,若è¦�熟练æ�Œæ�¡ï¼Œè¿˜å¿…é¡»æ�Œæ�¡rebaseå’Œmerge的区别,fetchå’Œpull的区别等,除此之外,还有cherry-pick,submodule,stash等功能,仅是这些å��è¯�å�¬ç�€éƒ½å¾ˆç»•。</p><p>在易用性这方é�¢ï¼ŒSVN对äº�新手æ�¥è¯´ä¼šæ›´æœ‰å¥½ä¸€äº›ã€‚但是ä»�å�¦å¤–一方é�¢çœ‹ï¼ŒGit 命令多æ„�味ç�€åŠŸèƒ½å¤šï¼Œè‹¥æˆ‘ä»¬èƒ½æ�Œæ�¡å¤§éƒ¨åˆ† Git 的功能,体会到其中的奥妙,会å�‘ç�°å†�也å›�ä¸�å�» SVN 的时代了。</p><ul><li>Git分支廉价,SVN分支昂贵</li></ul><p>在版本管ç�†é‡Œï¼Œåˆ†æ”¯æ˜¯å¾ˆå¸¸ä½¿ç”¨çš„功能。在å�‘布版本å‰�,需è¦�å�‘布分支,进行大需求开å�‘,需è¦� feature 分支,大团队还会有开å�‘分支,稳定分支等。在大团队开å�‘过程中,常常存在创建分支,切æ�¢åˆ†æ”¯çš„æ±‚。</p><p>Git 分支是指针指å�‘æŸ�次æ��交,而 SVN 分支是拷è´�的目录。这个特性使 Git 的分支切æ�¢é��常迅速,并且创建æˆ�本é��常ä½�。</p><p>而且 Git 有本地分支,SVN æ— æœ¬åœ°åˆ†æ”¯ã€‚åœ¨å®�é™…å¼€å�‘过程中,ç»�常会é�‡åˆ°æœ‰äº›ä»£ç �没写完,但是需紧急处ç�†å…¶ä»–问题,若我们使用 Git,便å�¯ä»¥åˆ›å»ºæœ¬åœ°åˆ†æ”¯å­˜å‚¨æ²¡å†™å®Œçš„代ç �,待问题处ç�†å®Œå��,å†�å›�到本地分支继续完æˆ�代ç �。</p><p>更多关注Gitä¸�Svn的比较请å�‚阅:<a href="https://link.segmentfault.com/?enc=LKu8SVuRb41podlC2yhihg%3D%3D.hpjp%2BGrNiDgY1C4TMNI11P8QgYmTUB%2FM1maRH653ZUr%2Fk4moaDljjaElRY9LyBc1an1R3gBb7jXUzcLUYWQrgkGEcQHmVNAQeKZFXNeQDOoM9jh%2FoLnOzjJZA6wZW7HRLdCczD%2BbzdxjMsV0efrOrM7Yr4G3BdFzS3ID04ebviMnG29Mu75nvmSsA%2BLjUQ%2FQTg4vl63Ad%2BEPEy1cLU9rLzzPylyNod05rC4SRwxcl7DVKP1GVhCN%2BiHhK64BKQQYdfJY22iAV1%2FFFcfwmZn4IqLwGVF%2FzYjwYQMPULQRBbGOyXekcWGJbj4mleHQhxh7CaDZAamRycniFjYEs%2BtH3w%3D%3D" rel="nofollow">通俗易懂|用好Git å’Œ SVN ,è½»æ�¾é©¾é©­ç‰ˆæœ¬ç®¡ç�†</a></p><h2>Git 工作å�Ÿç�†</h2><p>文字ä¸�好ç�†è§£ï¼Œè¯·çœ‹ <a href="https://link.segmentfault.com/?enc=8VsTMBx8Bfe4lqaf8T%2Bc0g%3D%3D.P%2Fd0inhpgGA73CBXEKGDbAKxCw0gQE9Nr6%2FaExlGEmze1Af1kAcQJztmaYSbjfIDCxda1OXl8kXu%2BFDpB6e77y%2BTwLmEZK5IsI5JPOjD4WW%2Bp%2FZV4vf2OZCIWi4Ei6TaL1%2B7Pphc9PZCGlS6l3wdfTqjoIGcZR6cJSxnFlBjR%2BaChVPebDTDr7lDwduI6DB4q5GhXiZCAhKtzyonDOO%2B7CDNtoInQVJ9f0c46mZR2pWMGQ6RXttcI4F%2FLLaTmWybzLU1np9ObLUmpHEZ%2BRXWJ42yTk11Uxhclp%2BM41SqZ6irjlwtVy6cCJyQPWRWvhNw4DMYdhrxu0hklacR6KnD5A%3D%3D" rel="nofollow">图文详解 Git 工作å�Ÿç�†</a></p><h2>Git 安装</h2><ul><li>Debian/Ubuntu ç�¯å¢ƒå®‰è£…</li></ul><p>如æ�œä½ 使用的系统是 Debian/Ubuntu , 安装命令为:</p><pre><code>$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ &gt; libz-dev libssl-dev $ apt-get install git-core $ git --version git version 1.8.1.2</code></pre><ul><li>Centos/RedHat ç�¯å¢ƒå®‰è£…</li></ul><p>如æ�œä½ 使用的系统是 Centos/RedHat ,安装命令为:</p><pre><code>$ yum install curl-devel expat-devel gettext-devel \ &gt; openssl-devel zlib-devel $ yum -y install git-core $ git --version git version 1.7.1</code></pre><ul><li>Windows ç�¯å¢ƒå®‰è£…</li></ul><p>在 Git 官方下载地å�€ä¸‹è½½ exe 安装包。按照安装å�‘导安装å�³å�¯ã€‚</p><p>建议安装 Git Bash 这个 git 的命令行工具。</p><ul><li>Mac ç�¯å¢ƒå®‰è£…</li></ul><p>在 Git 官方下载地å�€ä¸‹è½½ mac 安装包。按照安装å�‘导安装å�³å�¯ã€‚</p><h2>Gité…�ç½®</h2><p>Git 自带一个 git config 的工具æ�¥å¸®åŠ©è®¾ç½®æ�§åˆ¶ Git 外观和行为的é…�ç½®å�˜é‡�。这些å�˜é‡�存储在三个ä¸�å�Œçš„ä½�置:</p><pre><code>/etc/gitconfig 文件: 包å�«ç³»ç»Ÿä¸Šæ¯�一个用户å�Šä»–们仓库的通用é…�置。如æ�œä½¿ç”¨å¸¦æœ‰ --system 选项的 git config 时,它会ä»�此文件读写é…�ç½®å�˜é‡�。 \~/.gitconfig 或 \~/.config/git/config 文件:å�ªé’ˆå¯¹å½“å‰�用户。å�¯ä»¥ä¼ 递 --global 选项让 Git 读写此文件。</code></pre><p>当å‰�使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。</p><p>æ¯�一个级别覆盖上一级别的é…�置,所以 .git/config çš„é…�ç½®å�˜é‡�会覆盖 /etc/gitconfig 中的é…�ç½®å�˜é‡�。</p><p>在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。Git å�Œæ ·ä¹Ÿä¼šå¯»æ‰¾ /etc/gitconfig 文件,但å�ªé™�äº� MSys çš„æ ¹ç›®å½•ä¸‹ï¼Œå�³å®‰è£… Git æ—¶æ‰€é€‰çš„ç›®æ ‡ä½�置。</p><h2>Git 基本概念</h2><ul><li>版本库</li></ul><p>å½“ä½ ä¸€ä¸ªé¡¹ç›®åˆ°æœ¬åœ°æˆ–åˆ›å»ºä¸€ä¸ª git 项目,项目目录下会有一个éš�è—�çš„ .git å­�目录。这个目录是 git 用æ�¥è·Ÿè¸ªç®¡ç�†ç‰ˆæœ¬åº“的,å�ƒä¸‡ä¸�è¦�手动修改。</p><ul><li>哈希值</li></ul><p>Git 中所有数æ�®åœ¨å­˜å‚¨å‰�éƒ½è®¡ç®—æ ¡éªŒå’Œï¼Œç„¶å��ä»¥æ ¡éªŒå’Œæ�¥å¼•用。这æ„�味ç�€ä¸�å�¯èƒ½åœ¨ Git ä¸�知情时更改任何文件内容或目录内容。这个功能建æ�„在 Git 底层,是æ�„æˆ� Git 哲学ä¸�å�¯æˆ–ç¼ºçš„éƒ¨åˆ†ã€‚è‹¥ä½ åœ¨ä¼ é€�过程中丢失信æ�¯æˆ–æ�Ÿå��文件,Git 就能å�‘ç�°ã€‚</p><p>Git ç”¨ä»¥è®¡ç®—æ ¡éªŒå’Œçš„æœºåˆ¶å�«å�š SHA-1 散列(hash,哈希)。这是一个由 40 个å��六进制字符(0-9 å’Œ a-f)组æˆ�字符串,基äº� Git 中文件的内容或目录结æ�„计算出æ�¥ã€‚SHA-1 哈希看起æ�¥æ˜¯è¿™æ ·ï¼š</p><p>24b9da6552252987aa493b52f8696cd6d3b00373<br>Git 中使用这ç§�å“ˆå¸Œå€¼çš„æƒ…å†µå¾ˆå¤šï¼Œä½ å°†ç»�常看到这ç§�哈希值。å®�际上,Git æ•°æ�®åº“中ä¿�存的信æ�¯éƒ½æ˜¯ä»¥æ–‡ä»¶å†…容的哈希值æ�¥ç´¢å¼•,而ä¸�是文件å��。</p><ul><li>文件状æ€�</li></ul><p>在 GIt ä¸­ï¼Œä½ çš„æ–‡ä»¶å�¯èƒ½ä¼šå¤„äº�三ç§�状æ€�之一:</p><ul><li><strong>已修改(modified)</strong> - 已修改表示修改了文件,但还没ä¿�存到数æ�®åº“中。</li><li><strong>已暂存(staged)</strong> - 已暂存表示对一个已修改文件的当å‰�版本å�šäº†æ ‡è®°ï¼Œä½¿ä¹‹åŒ…å�«åœ¨ä¸‹æ¬¡æ��交的快照中。</li><li><strong>å·²æ��交(committed)</strong> - å·²æ��交表示数æ�®å·²ç»�安全的ä¿�存在本地数æ�®åº“中。</li><li>工作区域</li></ul><p>ä¸�文件状æ€�对应的,ä¸�å�Œçжæ€�的文件在 Git 中处äº�ä¸�å�Œçš„工作区域。</p><ul><li><strong>工作区(working</strong>) - å½“ä½ git clone 一个项目到本地,相当äº�在本地克隆了项目的一个副本。工作区是对项目的æŸ�个版本独立æ��å�–出æ�¥çš„内容。这些ä»� Git 仓库的å�‹ç¼©æ•°æ�®åº“中æ��å�–出æ�¥çš„æ–‡ä»¶ï¼Œæ”¾åœ¨ç£�ç›˜ä¸Šä¾›ä½ ä½¿ç”¨æˆ–ä¿®æ”¹ã€‚</li><li><strong>暂存区(staging)</strong>- 暂存区是一个文件,ä¿�存了下次将æ��交的文件列表信æ�¯ï¼Œä¸€èˆ¬åœ¨ Git 仓库目录中。有时候也被称作 `‘索引’',ä¸�过一般说法还是å�«æš‚存区。</li><li><strong>本地仓库(local)</strong> - æ��交更新,找到暂存区域的文件,将快照永久性存储到 Git 本地仓库。</li><li><strong>远程仓库(remote)</strong> - ä»¥ä¸Šå‡ ä¸ªå·¥ä½œåŒºéƒ½æ˜¯åœ¨æœ¬åœ°ã€‚ä¸ºäº†è®©åˆ«äººå�¯ä»¥çœ‹åˆ°ä½ çš„ä¿®æ”¹ï¼Œä½ éœ€è¦�å°†ä½ çš„æ›´æ–°æ�¨é€�到远程仓库。å�Œç�†ï¼Œå¦‚æ�œä½ 想å�Œæ­¥åˆ«äººçš„ä¿®æ”¹ï¼Œä½ éœ€è¦�ä»�远程仓库拉å�–更新。</li></ul><p><img src="/img/remote/1460000039921599" alt="" title=""></p><ul><li>分支(Branch)</li></ul><p>分支是为了将修改记录的整个æµ�程分开存储,让分开的分支ä¸�å�—其它分支的影å“�,所以在å�Œä¸€ä¸ªæ•°æ�®åº“里å�¯ä»¥å�Œæ—¶è¿›è¡Œå¤šä¸ªä¸�å�Œçš„修改</p><p><img src="/img/remote/1460000039921600" alt="" title=""></p><p>主分支(Master)å‰�é�¢æ��到过 master 是 Git 为我们自动创建的第一个分支,也å�«ä¸»åˆ†æ”¯ï¼Œå…¶å®ƒåˆ†æ”¯å¼€å�‘完æˆ�å��都è¦�å�ˆå¹¶åˆ° master</p><p><img src="/img/remote/1460000039921601" alt="" title=""></p><ul><li>æ ‡ç­¾ï¼ˆTag)</li></ul><p>æ ‡ç­¾æ˜¯ç”¨äº�æ ‡è®°ç‰¹å®šçš„ç‚¹æˆ–æ��交的å�†å�²ï¼Œé€šå¸¸ä¼šç”¨æ�¥æ ‡è®°å�‘布版本的å��称或版本å�·ï¼ˆå¦‚:publish/0.0.1ï¼‰ï¼Œè™½ç„¶æ ‡ç­¾çœ‹èµ·æ�¥æœ‰ç‚¹åƒ�åˆ†æ”¯ï¼Œä½†æ‰“ä¸Šæ ‡ç­¾çš„æ��交是固定的,ä¸�能éš�æ„�的改动,å�‚è§�上图中的1.0 / 2.0 / 3.0</p><ul><li>HEAD</li></ul><p>HEAD 指å�‘的就是当å‰�分支的最新æ��交图片</p><p><img src="/img/remote/1460000039921602" alt="" title=""></p><p>以上概念了解的差ä¸�多,那就å�¯ä»¥ç»§ç»­å¾€ä¸‹çœ‹ã€‚</p><h2>Git 命令</h2><p><img src="/img/remote/1460000039921603" alt="" title=""></p><ul><li>创建仓库</li></ul><p>克隆一个已创建的仓库:</p><pre><code># 通过 SSH $ git clone ssh://user@domain.com/repo.git #通过 HTTP $ git clone http://domain.com/user/repo.git</code></pre><p>创建一个新的本地仓库:</p><pre><code>$ git init</code></pre><ul><li><p>æ·»åŠ ä¿®æ”¹<br>æ·»åŠ ä¿®æ”¹åˆ°æš‚å­˜åŒºï¼š</p><pre><code># æŠŠæŒ‡å®šæ–‡ä»¶æ·»åŠ åˆ°æš‚å­˜åŒº $ git add xxx # 把当å‰�æ‰€æœ‰ä¿®æ”¹æ·»åŠ åˆ°æš‚å­˜åŒº $ git add . # æŠŠæ‰€æœ‰ä¿®æ”¹æ·»åŠ åˆ°æš‚å­˜åŒº $ git add -A</code></pre><p>æ��交修改到本地仓库:</p><pre><code># æ��交本地的所有修改 $ git commit -a # æ��交之å‰�å·²æ ‡è®°çš„å�˜åŒ– $ git commit # é™„åŠ æ¶ˆæ�¯æ��交 $ git commit -m 'commit message'</code></pre></li><li>储è—�</li></ul><p>有时,我们需è¦�在å�Œä¸€ä¸ªé¡¹ç›®çš„ä¸�å�Œåˆ†æ”¯ä¸Šå·¥ä½œã€‚当需è¦�切æ�¢åˆ†æ”¯æ—¶ï¼Œå��å��本地的工作还没有完æˆ�,此时,æ��交修改显得ä¸�严谨,但是ä¸�æ��交代ç �å�ˆæ— 法切æ�¢åˆ†æ”¯ã€‚è¿™æ—¶ï¼Œä½ å�¯ä»¥ä½¿ç”¨ git stash 将本地的修改内容作为è�‰ç¨¿å‚¨è—�èµ·æ�¥ã€‚</p><p>官方称之为储è—�,但我个人更喜欢称之为存è�‰ç¨¿ã€‚</p><pre><code># 1. 将修改作为当å‰�分支的è�‰ç¨¿ä¿�å­˜ $ git stash # 2. 查看è�‰ç¨¿åˆ—表 $ git stash list stash@{0}: WIP on master: 6fae349 :memo: Writing docs. # 3.1 åˆ é™¤è�‰ç¨¿ $ git stash drop stash@{0} # 3.2 读å�–è�‰ç¨¿ $ git stash apply stash@{0}</code></pre><ul><li>撤销修改</li></ul><p>撤销本地修改:</p><pre><code># 移除缓存区的所有文件(i.e. 撤销上次git add) $ git reset HEAD # å°†HEADé‡�置到上一次æ��交的版本,并将之å��çš„ä¿®æ”¹æ ‡è®°ä¸ºæœªæ·»åŠ åˆ°ç¼“å­˜åŒºçš„ä¿®æ”¹ $ git reset &lt;commit&gt; # å°†HEADé‡�置到上一次æ��交的版本,并ä¿�留未æ��交的本地修改 $ git reset --keep &lt;commit&gt; # 放弃工作目录下的所有修改 $ git reset --hard HEAD # å°†HEADé‡�置到指定的版本,并抛弃该版本之å��的所有修改 $ git reset --hard &lt;commit-hash&gt; # 用远端分支强制覆盖本地分支 $ git reset --hard &lt;remote/branch&gt; e.g., upstream/master, origin/my-feature # 放弃æŸ�个文件的所有本地修改 $ git checkout HEAD &lt;file&gt;</code></pre><p>åˆ é™¤æ·»åŠ .gitignore文件å‰�错误æ��交的文件:</p><pre><code>$ git rm -r --cached . $ git add . $ git commit -m "remove xyz file"</code></pre><p>撤销远程修改(创建一个新的æ��交,并å›�滚到指定版本):</p><pre><code>$ git revert &lt;commit-hash&gt;</code></pre><p>å½»åº•åˆ é™¤æŒ‡å®šç‰ˆæœ¬ï¼š</p><pre><code># 执行下é�¢å‘½ä»¤å��,commit-hash æ��交å��çš„è®°å½•éƒ½ä¼šè¢«å½»åº•åˆ é™¤ï¼Œä½¿ç”¨éœ€è°¨æ…� $ git reset --hard &lt;commit-hash&gt; $ git push -f</code></pre><ul><li>æ›´æ–°ä¸�æ�¨é€�</li></ul><p>更新:</p><pre><code># 下载远程端版本,但ä¸�å�ˆå¹¶åˆ°HEAD中 $ git fetch &lt;remote&gt; # 将远程端版本å�ˆå¹¶åˆ°æœ¬åœ°ç‰ˆæœ¬ä¸­ $ git pull origin master # 以rebaseæ–¹å¼�将远端分支ä¸�本地å�ˆå¹¶ $ git pull --rebase &lt;remote&gt; &lt;branch&gt;</code></pre><p>æ�¨é€�:</p><pre><code># 将本地版本æ�¨é€�到远程端 $ git push remote &lt;remote&gt; &lt;branch&gt; # åˆ é™¤è¿œç¨‹ç«¯åˆ†æ”¯ $ git push &lt;remote&gt; :&lt;branch&gt; (since Git v1.5.0) $ git push &lt;remote&gt; --delete &lt;branch&gt; (since Git v1.7.0) # å�‘å¸ƒæ ‡ç­¾ $ git push --tags</code></pre><ul><li>查看信æ�¯</li></ul><p>显示工作路径下已修改的文件:</p><pre><code>$ git status</code></pre><p>显示ä¸�上次æ��交版本文件的ä¸�å�Œï¼š</p><pre><code>$ git diff</code></pre><p>显示æ��交å�†å�²ï¼š</p><pre><code># ä»�最新æ��交开始,显示所有的æ��交记录(显示hash, 作者信æ�¯ï¼Œæ��äº¤çš„æ ‡é¢˜å’Œæ—¶é—´ï¼‰ $ git log # 显示æŸ�个用户的所有æ��交 $ git log --author="username" # 显示æŸ�个文件的所有修改 $ git log -p &lt;file&gt;</code></pre><ul><li><p>显示æ�œç´¢å†…容:</p><pre><code># ä»�当å‰�目录的所有文件中查找文本内容 $ git grep "Hello" # 在æŸ�一版本中æ�œç´¢æ–‡æœ¬ $ git grep "Hello" v2.5</code></pre></li><li>分支</li></ul><p>å¢�åˆ æŸ¥åˆ†æ”¯ï¼š</p><pre><code># 列出所有的分支 $ git branch # 列出所有的远端分支 $ git branch -r # 基äº�当å‰�分支创建新分支 $ git branch &lt;new-branch&gt; # 基äº�远程分支创建新的å�¯è¿½æº¯çš„分支 $ git branch --track &lt;new-branch&gt; &lt;remote-branch&gt; # åˆ é™¤æœ¬åœ°åˆ†æ”¯ $ git branch -d &lt;branch&gt; # å¼ºåˆ¶åˆ é™¤æœ¬åœ°åˆ†æ”¯ï¼Œå°†ä¼šä¸¢å¤±æœªå�ˆå¹¶çš„修改 $ git branch -D &lt;branch&gt;</code></pre><p>切æ�¢åˆ†æ”¯ï¼š</p><pre><code># 切æ�¢åˆ†æ”¯ $ git checkout &lt;branch&gt; # 创建并切æ�¢åˆ°æ–°åˆ†æ”¯ $ git checkout -b &lt;branch&gt;</code></pre><p>æ ‡ç­¾</p><pre><code># 给当å‰�ç‰ˆæœ¬æ‰“æ ‡ç­¾ $ git tag &lt;tag-name&gt; # 给当å‰�ç‰ˆæœ¬æ‰“æ ‡ç­¾å¹¶é™„åŠ æ¶ˆæ�¯ $ git tag -a &lt;tag-name&gt;</code></pre><p>å�ˆå¹¶ä¸�é‡�ç½®</p><p>merge ä¸� rebase 虽然是 git 常用功能,但是强烈建议ä¸�è¦�使用 git 命令æ�¥å®Œæˆ�这项工作。</p><p>å› ä¸ºå¦‚æ�œå‡ºç�°ä»£ç �冲çª�,在没有代ç �比对工具的情况下,å®�在太艰难了。</p><p>ä½ å�¯ä»¥è€ƒè™‘使用å�„ç§� Git GUI 工具。</p><p>å�ˆå¹¶ï¼š</p><pre><code># 将分支å�ˆå¹¶åˆ°å½“å‰�HEAD中 $ git merge &lt;branch&gt;</code></pre><p>é‡�置:</p><pre><code># 将当å‰�HEAD版本é‡�置到分支中,请勿é‡�置已å�‘布的æ��交 $ git rebase &lt;branch&gt;</code></pre><p>更多命令å�‚考:<a href="https://link.segmentfault.com/?enc=Xoit5lCCbX%2BJQ%2BbK%2BiucLg%3D%3D.sMqwH%2BjnNQPsFDEHheSyeF86LGzYYQ03gd1qS6FzS2p4QAkHHDlyoCwlduaYjnI6noEusVMQjDq5HzwGHgjhiI5QSFvdP5G2TPVFCKcXJbWBksKZSDLm2cFWNdoy9nJ9rwrAQrR86KznCdCECBj%2FGQ9rJbqfwfc%2FRgnrHLynVxQrye498C5Xg%2FPIFiswhfJ8sIQeXeuIxiIm%2FsQmkze2Ri%2F7KDde3R9jmUft4g5jmgVMkqLVVomqL22CIdkfSXAPv%2FGv0hr01Ftf1Y13xilbpCsJd1RKpynfRI8a5B%2FNPoXnhykCMGtcmRIen62B29ESdiGFjPZBlSvW4uSf1dw6PQ%3D%3D" rel="nofollow">三年 Git 使用心得 &amp; 常è§�问题整ç�†</a></p><h2>Git 分支开å�‘</h2><p>Git 是目å‰�最æµ�行的æº�代ç �管ç�†å·¥å…·ã€‚为规范开å�‘,ä¿�æŒ�代ç �æ��交记录以å�Š git 分支结æ�„清晰,方便å��续维护,ç�°è§„范 git 的相关æ“�作。</p><h4>分支命å��</h4><p>1ã€�master 分支</p><p>master 为主分支,也是用äº�部署生产ç�¯å¢ƒçš„分支,确ä¿�master分支稳定性, master 分支一般由develop以å�Šhotfix分支å�ˆå¹¶ï¼Œä»»ä½•时间都ä¸�能直æ�¥ä¿®æ”¹ä»£ç �</p><p>2ã€�develop 分支</p><p>develop 为开å�‘分支,始终ä¿�æŒ�最新完æˆ�以å�Šbugä¿®å¤�å��的代ç �,一般开å�‘的新功能时,feature分支都是基äº�develop分支下创建的。</p><ul><li>feature 分支</li></ul><p>å¼€å�‘新功能时,以develop为基础创建feature分支。<br>分支命å��: feature/ 开头的为特性分支, 命å��规则: feature/user_moduleã€� feature/cart_module</p><ul><li>release分支</li></ul><p>release 为预上线分支,å�‘布æ��测阶段,会release分支代ç �为基准æ��测。当有一组featureå¼€å�‘完æˆ�,首先会å�ˆå¹¶åˆ°develop分支,进入æ��测时会创建release分支。如æ�œæµ‹è¯•过程中若存在bug需è¦�ä¿®å¤�,则直æ�¥ç”±å¼€å�‘者在release分支修å¤�å¹¶æ��交。当测试完æˆ�之å��,å�ˆå¹¶release分支到masterå’Œdevelop分支,此时master为最新代ç �,用作上线。</p><ul><li>hotfix 分支</li></ul><p>分支命å��: hotfix/ 开头的为修å¤�分支,它的命å��规则ä¸�feature分支类似。线上出ç�°ç´§æ€¥é—®é¢˜æ—¶ï¼Œéœ€è¦�å�Šæ—¶ä¿®å¤�,以master分支为基线,创建hotfix分支,修å¤�完æˆ�å��,需è¦�å�ˆå¹¶åˆ°master分支和develop分支</p><p>更多开å�‘规范请å�‚阅:<a href="https://link.segmentfault.com/?enc=68STVCaMl1147agMP3iccA%3D%3D.CguIZ8ddB4Kl9nDtVbP50%2B5uNo1rS%2FaAp1r7S9bnuUfaaw4AKK78vWzETMuCID%2BYT%2B9Ui8D685bEFx9COGkXLA2ZYO5eoaFe6XnhJg2sjw5bJT84tkF6PWeL9rqjoRMIWyxBt7VtJLV5tB8LjyiUq%2BQR0JdbVJuyDHu7mdUCgYZb7rkOB75NR8vQCO4xPzDKh%2BunzZSMQ9o4PuSCYu8JUiPHtD92jkeE72g3k%2F8cbxRNBfIrEERu20lqFMQmkO5%2BhbVr%2FxCkgeCt3ZwDdqLw9IxC2L20wV%2F7QjGVNUd%2FpPZc9DQ8r9kM3f%2FCFsu%2F2ccl%2Bmo96qjXhcEL7WXc9jzi7w%3D%3D" rel="nofollow">全网最全的 Git 分支开å�‘规范手册</a> | <a href="https://link.segmentfault.com/?enc=oy4ZIxo%2F%2FsIWsNHVodx0Ag%3D%3D.GW53N0WSBzvRQyrDdDIvqyA%2Be%2Bqf%2FJVO%2Bz8%2F%2FfNjgyl9sXlVdDn5n0uc%2Ba7UaT%2BakYzbuqElrJJHwqtVSlh%2FBvQDp1MCDpzfuTfjC5aKhyRoSUd1P3p%2F7nQcn%2Bcf8QeFPLgcguJ6pFyw%2FJH1Dqi7agc%2BIC99EJcFvkHuN3XaTdslDK57jXg5aHSs0ZgUjYKVu52yj3foP8V%2BGLIPO334tq%2B3RnVi0MdIKEgTJTSDrdYMl%2Fi3zXeEeGBZpIwm8a7C5JI2mjIKcS3yS0BmFFnmQqHIdB32EQc3vHiR4VtsQtreAz9SduDw309G7xRqk4W2gGj%2Bv3NUUzq51mBuyBtQYQ%3D%3D" rel="nofollow">æ�Œæ�¡è¿™10æ�¡è§„范,轻æ�¾æ��定Gitï¼�</a></p><h2><a href="https://link.segmentfault.com/?enc=VVNLrO2v4OH5cc%2FGcVEZFw%3D%3D.svbUtuJC8ZiWATK7FcDPDcWmn4R4sBTHFIaUCrg1ZVsLs5sAiVL%2F0KIqi%2BeSyjhhe18Pu59x11uLN0SZj0FaDHEAOBAkWwaA%2BBmjqmNrOSSg0kdkfiAZxcbtMV9ACrMCcE8KpJRp4EE6tY5hGEwr6FIuYY3E5kTae1l2ul36CH6hDLkvFFLseMSYFFeR9hgf1QAx7ZJzvGFt%2Bo3VcShLKcPkdYBTgdsbgz1XgO4RkycGu02yx8diLlD%2BZtbSlFMSP8z%2BDeK7vZzvhCmqkw6nqu2GEcrZ%2BPC5hQjWNtH0d8wKeHQAivFfRF%2F8KcDIKsCqMkRHwlaYXfHvZBbZ9Ppz%2Bg%3D%3D" rel="nofollow">Git这些高级用法,喜欢就拿å�»ç”¨ï¼�</a></h2><h2>Git æ��交规范</h2><p>为什么需è¦�规范?</p><p>æ— è§„çŸ©ä¸�æˆ�æ–¹åœ†ï¼Œç¼–ç¨‹ä¹Ÿä¸€æ ·ã€‚</p><p>如æ�œä½ 有一个项目,ä»�å§‹è‡³ç»ˆéƒ½æ˜¯è‡ªå·±å†™ï¼Œé‚£ä¹ˆä½ æƒ³æ€�么写都å�¯ä»¥ï¼Œæ²¡æœ‰äººå�¯ä»¥å¹²é¢„ä½ ã€‚å�¯æ˜¯å¦‚æ�œåœ¨å›¢é˜Ÿå��ä½œä¸­ï¼Œå¤§å®¶éƒ½å¼ æ‰¬ä¸ªæ€§ï¼Œé‚£ä¹ˆä»£ç �将会是一团糟,好好的项目就被糟践了。ä¸�管是开å�‘还是日å��维护,都将是ç�¾éš¾ã€‚</p><p>这时候,有人æ��出了何ä¸�ç»Ÿä¸€æ ‡å‡†ï¼Œå¤§å®¶éƒ½æŒ‰ç…§è¿™ä¸ªæ ‡å‡†æ�¥ã€‚äº�是 ESLint,JSHint 等代ç �工具如雨å��春笋般涌ç�°ï¼Œæˆ�为了项目æ�„建的必备良å“�。</p><p>Git Commit 规范å�¯èƒ½å¹¶æ²¡æœ‰é‚£ä¹ˆå¤¸å¼ ,但如æ�œä½ 在版本å›�退的时候看到一大段糟心的 Commit,æ��怕会懊æ�¼ä¸�å·²å�§ã€‚æ‰€ä»¥ï¼Œä¸¥æ ¼é�µå®ˆè§„范,利人利己。</p><p>具体请å�‚阅:<a href="https://link.segmentfault.com/?enc=0XELULNfh8zpASboVQXFsw%3D%3D.MWNw76LWUFmAShBT18VFooOxpKSXxxe8Zp4JgfLm%2F5ER8iQOklzz8vjMcVKPzYUHXfpveBlDAd3glvEklkVzTil7SmtFnpE9Fc37JF3yTxo1guA6PvC%2FKkyQGtSEc6Wos7ac3AHBgEekEPjl6uG7G8oWgpkivzRZXxJ9YLHY%2FqcKCYkA%2BPSwoTXgW0yyx%2FmqPYjZxpg0GC4gmez%2B7WGN6jlfCAUbIL6A5sdxJQdsLaiYgxoG2C8Lk1D8nlhdzeRVsaTSACkmJBwLA0zvrWlfr%2By74n6CKhUJ0W3XqWyctbbAm8ISjtjN1WEJtDmIY2FB7RkoE0eeCTZBL%2FQy3FMjxQ%3D%3D" rel="nofollow">ä½ å�¯èƒ½ä¼šå¿½ç•¥çš„ Git æ��交规范</a></p><h2>Git使用技巧</h2><p>å�ªæœ‰åœ¨é�‡åˆ°é—®é¢˜çš„æ—¶å€™ï¼Œæ‰�体会到技巧带æ�¥çš„好处ï¼�</p><h6>常è§�ä¼�业工作æµ�程</h6><p>主è¦�介ç»�,ä¼�业中常用的 Git 工作æµ�程ï¼�</p><ul><li>Git Flow</li><li>主干分支</li><li>稳定分支</li><li>å¼€å�‘分支</li><li>è¡¥ä¸�分支</li><li>修改分支</li></ul><p><img src="/img/remote/1460000039921604" alt="" title=""></p><h6>Github Flow</h6><ul><li>创建分支</li><li>æ·»åŠ æ��交</li><li>æ��交 PR 请求</li><li>讨论和评估代ç �</li><li>部署检测</li><li>å�ˆå¹¶ä»£ç �</li></ul><p><img src="/img/remote/1460000041330875" alt="" title=""></p><h6>Gitlab Flow</h6><ul><li>带生产分支</li><li>带ç�¯å¢ƒåˆ†æ”¯</li><li>带å�‘布分支</li></ul><p><img src="/img/remote/1460000041330876" alt="" title=""></p><h6>日常使用最佳å®�è·µ</h6><p>总结日常工作中应该é�µå¾ªçš„ <a href="https://link.segmentfault.com/?enc=FVkwzAo3hIgrdSSH9IFH8w%3D%3D.PsFAEnHjUevcxiRAFKe3YMnIYSl2cx7KkreW2E5TPUUFCQ7qb3dYFakw1FFIO94TckPlxvpRPdEki4ClnYF1VUoZapqctGW7E%2B8ZEsSHqDHk96QMZGIsfsvZSqLcU48YaYSoEuAAefQXDvCb7zn4dAaG6eG1Wlca1vEcM%2FQpbA0k5%2BahCUVSdxQpC4Chf%2F8SLVn56HJfEy0HrJUyuQuf1KakgOtLOLmniYFdWtL4VBkY%2F6Eq8WpTZkkLeH%2FU1TRO%2FdgqFsBJAZhqgt335Ih9FBAgX%2Fmf7xnaDy3wi69Q6MEIpMs9BttoLrhDkJw1%2Bz7p" rel="nofollow">Git 使用方å¼�</a>和方法ï¼�</p><ul><li>使用命令行代替图形化界é�¢</li><li>使用命令行æ�¥æ“�作,简æ´�且效ç�‡é«˜</li><li>æ��交应该尽å�¯èƒ½çš„表述æ��交修改内容</li><li>区分 subject å’Œ body 内容,使用空行隔开</li><li>subject 一般ä¸�超过 50 个字符</li><li>body æ¯�一行的长度æ�§åˆ¶åœ¨ 72 个字符</li><li>subject 结尾ä¸�需è¦�使用å�¥å�·æˆ–者点å�·ç»“å°¾</li><li>body 用æ�¥è¯¦ç»†è§£é‡Šæ­¤æ¬¡æ��交具体å�šäº†ä»€ä¹ˆ</li><li>使用 .gitignore 文件æ�¥æ�’é™¤æ— ç”¨æ–‡ä»¶</li><li>å�¯ä½¿ç”¨æ¨¡æ�¿æ–‡ä»¶ï¼Œç„¶å��æ ¹æ�®é¡¹ç›®å®�际进行修改</li><li>基äº�分支或 fork 的开å�‘模å¼�</li><li>ä¸�è¦�ç›´æ�¥åœ¨ä¸»å¹²åˆ†æ”¯ä¸Šé�¢è¿›è¡Œå¼€å�‘</li><li>在新建的分支上进行功能的开å�‘和问题的修å¤�</li><li>使用 release 分支和 tag æ ‡è®°è¿›è¡Œç‰ˆæœ¬ç®¡ç�†</li><li>使用 release 分支å�‘布代ç �和版本维护(release/1.32)</li><li>使用 tag æ�¥æ ‡è®°ç‰ˆæœ¬(A-大feature功能.B-å°�feature功能.C-å�ªä¿®bug)</li></ul><h2>常用命令汇总整ç�†</h2><p>日常使用å�ªè¦�è®°ä½� <a href="https://link.segmentfault.com/?enc=wHdiQLoRgAUTLchCweJh7Q%3D%3D.TkOoY3FKm0IWApRg%2BavDVDSM8xc4LUsuAiRJLW3qXPrXdcjuqDmg349KCjTeaxJylWAaHN8fKRoNvsVrfAG%2BcPcDVs%2FWSosAV3jTabxbRTOAqPxTRg%2FxLELseT7zF3ZHsDsskXifwkaMwETQGA6%2FpN8yyEEk9pTE8TF0waqys6UVyT7qrBkgJmoOxm9z6a4u1BdCRWsjZJO8Fsm95khZkDoKxqWECXvzlp2KV77Xi8MYJjHxsYnKlBvb9G%2FAl9%2FaGPSUsut%2BI9nRjC5r6AVpX8liIgBhtMjAUplhd0qU6AR7h9YKKhG2kbE91f4biNq%2F" rel="nofollow">6 个命令</a>å°±å�¯ä»¥äº†ã€‚</p><p><img src="/img/remote/1460000039921606" alt="" title=""></p><p>æ— è®ºæ˜¯å¼€å�‘ã€�è¿�维,还是测试,大家都知é�“Git在日常工作中的地ä½�。所以,也是大家的必学ã€�必备技能之一。</p><p>但是呢,民工哥,也ç»�常在å��å�°çœ‹åˆ°è¯»è€…说,命令太多了ä¸�好记啊,时间长了ä¸�用å�ˆå¿˜è®°äº†ç­‰ç­‰çš„å��槽。是啊,è¦�学一门技术真难,何况ç�°åœ¨æŠ€æœ¯æ›´æ–°ã€�迭代这么快.....</p><p>所以,对äº�å­¦ä¹ Git这门技术,è¦�是有一个一看就懂,一学就会的入门资料就好了。å‰�ä¸�久,国外的一ä½�å°�å§�å§�å†™äº†ä¸€ç¯‡è¿™æ ·çš„æ–‡ç« ã€ŠCS Visualized: Useful Git Commands》。作者是æ�¥è‡ªè‹±å±�哥伦比亚的å°�å§�å§� Lydia Hallieï¼Œåœ¨è¿™ç¯‡æ–‡ç« é‡Œé�¢ï¼Œå¥¹é€šè¿‡ç”ŸåŠ¨å½¢è±¡çš„åŠ¨ç”»ï¼Œä»¥æ›´åŠ ç›´è§‚çš„æ–¹å¼�,å�‘å¼€å�‘者展示 Git 命令中的 mergeã€�rebaseã€�resetã€�revertã€�cherry-pick 等常用骚æ“�作的具体å�Ÿç�†ã€‚<a href="https://link.segmentfault.com/?enc=jS4HOtnZTQa89m6UTDI37g%3D%3D.mq%2F9cfb77Y6pBKIvWZA4COwBvU45l3X9bie9FyIlX2XV1KlB0BdgM3H6%2BP5uQ9SQ9tK1G3gvRn3zFZ3vacnhHBFYG%2FMpG26m1vDWMEd8KIDu6x4sWm3I4FDjleI6ZtaJUToIelScicuGHQCIErRU7B4cULKjVMsUnPRvff4BwGbVCocB0ucJsOtkKgXmwsnxGMEqpqaXQ7FtpgmnGbiFW9FE9q%2Fm3j%2FJoy%2Fut4C%2FJY19TUCiBpH3BLGW6KpyVZyTK%2BocQD6c4H9BefGjlogd%2FwkzZzL4LTIZ%2FWWycTqN95zD0wZ2CQp20FFfh5pNP4mlsCwZDEhuYv%2BB36xIXinJyQ%3D%3D" rel="nofollow">å°�å§�å§�用动画图解Git命令,一看就懂ï¼�</a></p><pre><code># 工作区 -&gt; 暂存区 $ git add &lt;file/dir&gt; # 暂存区 -&gt; 本地仓库 $ git commit -m "some info" # 本地仓库 -&gt; 远程仓库 $ git push origin master # 本地master分支æ�¨é€�到远程origin仓库 </code></pre><pre><code># 工作区 &lt;- 暂存区 $ git checkout -- &lt;file&gt; # 暂存区文件内容覆盖工作区文件内容 # 暂存区 &lt;- 本地仓库 $ git reset HEAD &lt;file&gt; # 本地仓库文件内容覆盖暂存区文件内容 # 本地仓库 &lt;- 远程仓库 $ git clone &lt;git_url&gt; # 克隆远程仓库 $ git fetch upstream master # 拉å�–远程代ç �到本地但ä¸�应用在当å‰�分支 $ git pull upstream master # 拉å�–远程代ç �到本地但应用在当å‰�分支 $ git pull --rebase upstream master # 如æ�œå¹³æ—¶ä½¿ç”¨rebaseå�ˆå¹¶ä»£ç �åˆ™åŠ ä¸Š</code></pre><pre><code># 工作区 &lt;- 本地仓库 $ git reset &lt;commit&gt;          # 本地仓库覆盖到工作区(ä¿�å­˜å›�退文件内容修改) $ git reset --mixed &lt;commit&gt;  # 本地仓库覆盖到工作区(ä¿�å­˜å›�退文件内容修改) $ git reset --soft &lt;commit&gt;   # 本地仓库覆盖到工作区(ä¿�ç•™ä¿®æ”¹å¹¶åŠ åˆ°æš‚å­˜åŒº) $ git reset --hard &lt;commit&gt;   # 本地仓库覆盖到工作区(ä¸�ä¿�留修改直æ�¥åˆ 除æ�‰)</code></pre><p>更多关äº�Git的使用技巧介ç»�请查阅:<a href="https://link.segmentfault.com/?enc=gevh0UH%2Fb1F6266KEXiNkw%3D%3D.yvTZRFixO%2BsODOrBFNivMM7akKP4zbwWUQd75bIAD5QtTOyDgrigCJWCtH43KWzpahJ0Te6Eec5GIX0ulk48INwDhrrTIyzl6evPbqHdoCuO2ALVa8bQoEtCxo5pvTbeMLlNRDIwbV%2Bb365Hxoz1VTeewtjLujBxAZ7RyDe9%2BktFunw2nwqdUn3sze1NB8ZJOypmT%2BxrGlCuP38c78dHqhaEFkZsZ3KSk%2BLKpjtaPu6mLFyrhmCwQ2M1%2BhIpD9Cap%2BuuNaOK8lY7Foc2xNNYkxuDxbg4TbQIQnw4ttFddImf%2Bm8cM%2FIfPvS6xPHn2v6Cocbm161KKTAy2TL6DHy%2Fcw%3D%3D" rel="nofollow">学会这 11 æ�¡ï¼Œä½ 离 Git 大ç¥�å°±ä¸�远了ï¼�</a></p><h2>Git 知识体系动æ€�更新看这里:<a href="https://link.segmentfault.com/?enc=whn%2BEbAZVLPOjvzKRVdihw%3D%3D.HQuSp2l7lcxUkp3Inf%2FH8TssVib2rb2%2Bp%2F42HYo37DIH8wqAl%2FDqjokcbeaBCoIss8iHkbHeM37FKIMrp7qxjTZj0tVNowaK5%2FHcBjWiEyHTtnbIrvqnB2UKijWN%2BfGCCkKO091NCWbkr90YGKcvWYFJevwpnOaTBRYo2lHA7ubfH6%2BCYCWRgb%2B0N9VgtWyR" rel="nofollow">Git æŠ€æœ¯å­¦ä¹ </a></h2> ç¥�器 Nginx çš„å­¦ä¹ æ‰‹å†Œ ( 建议收è—� ) https://segmentfault.com/a/1190000041298011 2022-01-17T19:05:05+08:00 2022-01-17T19:05:05+08:00 民工哥 https://segmentfault.com/u/jishuroad 45 <p>大家好,我是民工哥。</p><p>æ— è®ºæ˜¯è¿�ç»´ã€�å¼€å�‘ã€�测试,NginxæŠ€æœ¯æ ˆçš„å­¦ä¹ æ€»æ˜¯å¿…ä¸�å�¯å°‘的,å�ªæ˜¯ä¸�å�Œçš„å²—ä½�æ�Œæ�¡çš„æ·±åº¦ä¸�广度ä¸�å�Œè€Œå·²ã€‚所以,民工哥利用周末休æ�¯æ—¶é—´ï¼Œå°†å¾€æœŸæ�¨é€�çš„Nginxæ–‡ç« ç»™å¤§å®¶é‡�æ–°æ•´ç�†å‡ºæ�¥ï¼Œæ•´ç�†å‡ºæˆ�体系的NginxçŸ¥è¯†ä½“ç³»ï¼Œä¾›å¤§å®¶å­¦ä¹ ä¸�å�‚考。</p><p>ç �å­—ä¸�易,如有帮助,请点<strong>在看ä¸�转å�‘朋å�‹åœˆ</strong>支æŒ�一波,感谢ï¼�ï¼�ï¼�ï¼�</p><h2>Nginx 简介</h2><p><img src="/img/remote/1460000041298013" alt="" title=""></p><p>Nginx 是<code>å¼€æº�</code>ã€�<code>高性能</code>ã€�<code>高å�¯é� </code>çš„ <code>Web</code> å’Œ<code>å��å�‘代ç�†æœ�务器</code>,而且支æŒ�çƒ­éƒ¨ç½²ï¼Œå‡ ä¹�å�¯ä»¥å�šåˆ° 7 * 24 å°�æ—¶ä¸�é—´æ–­è¿�行,å�³ä½¿è¿�è¡Œå‡ ä¸ªæœˆä¹Ÿä¸�需è¦�é‡�æ–°å�¯åŠ¨ï¼Œè¿˜èƒ½åœ¨ä¸�é—´æ–­æœ�务的情况下对软件版本进行热更新。性能是 Nginx 最é‡�è¦�的考é‡�,其å� 用内存少ã€�å¹¶å�‘能力强ã€�能支æŒ�高达 5w 个并å�‘è¿�æ�¥æ•°ï¼Œæœ€é‡�è¦�的是, Nginx 是å…�费的并å�¯ä»¥å•†ä¸šåŒ–,é…�置使用也比较简å�•。</p><p>官方网站:<a href="https://link.segmentfault.com/?enc=kaf1pZPWzXahKeAOJBS%2FUw%3D%3D.L18yRfNNi8fKqQ%2FA8%2B96sUbTkc7%2BmwoHI30ar4naLR8%3D" rel="nofollow">http://www.nginx.org</a></p><h2>Nginx 特点</h2><h6>Webæœ�务器</h6><p>高性能的WEBæœ�务器软件,ä¸�Apache相比,它支æŒ�更多的并å�‘è¿�æ�¥ä¸”å� 用æœ�务器资æº�少,效ç�‡é«˜</p><h6>å��å�‘代ç�†æˆ–è´Ÿè½½å�‡è¡¡æœ�务器</h6><p>作为负载å�‡è¡¡æœ�务器,它å�¯ä»¥ä½œä¸ºHTTP SERVER或DBç­‰æœ�务的代ç�†æœ�务器,类似Haproxy代ç�†è½¯ä»¶çš„功能,Nginx的代ç�†åŠŸèƒ½ç›¸å¯¹ç®€å�•,效ç�‡ä¹Ÿä¸�å�ŠHaproxy,å�Œæ—¶å®ƒä¹Ÿæ˜¯ä¸€ä¸ªä¼˜ç§€çš„邮件代ç�†æœ�务软件</p><h6>缓存æœ�务器</h6><p>Nginx还å�¯ä»¥ä½œç¼“å­˜æœ�务器,类似äº�专业的缓存软件功能</p><h2>Nginx 优缺点</h2><h6>Nginx 优点</h6><ul><li>高并å�‘:能支æŒ�1-2万甚至更多的并å�‘è¿�æ�¥ï¼ˆé�™æ€�å°�文件)</li><li>内存消耗少</li><li>å�¯ä»¥å�šHTTPå��å�‘代ç�†â€”—负载å�‡è¡¡çš„功能</li><li>内置对集群节点æœ�务器的å�¥åº·æ€§æŸ¥åŠŸèƒ½ï¼Œä¸�过功能相对较弱</li><li>通过cacheæ�’ä»¶å�¯ä»¥å®�ç�°ç¼“存软件能够å®�ç�°çš„功能</li></ul><h6>Nginx 的缺点</h6><p>Nginx 仅能支æŒ�httpã€�httpså’ŒEmailå��è®®ï¼Œè¿™æ ·å°±åœ¨é€‚ç”¨èŒƒå›´ä¸Šé�¢å°�些,这个是它的缺点</p><p>对å��端æœ�务器的å�¥åº·æ£€æŸ¥ï¼Œå�ªæ”¯æŒ�通过端å�£æ�¥æ£€æµ‹ï¼Œä¸�支æŒ�通过 urlæ�¥æ£€æµ‹ã€‚ä¸�支æŒ� Session 的直æ�¥ä¿�æŒ�,但能通过 ip_hash æ�¥è§£å†³</p><h2>Nginx 应用场景</h2><p>Nginx 的最é‡�è¦�çš„å‡ ä¸ªä½¿ç”¨åœºæ™¯ï¼š</p><ul><li>é�™æ€�资æº�æœ�务,通过本地文件系统æ��ä¾›æœ�务;</li><li>å��å�‘代ç�†æœ�务,延伸出包括缓存ã€�è´Ÿè½½å�‡è¡¡ç­‰ï¼›</li><li>API æœ�务, OpenResty ï¼›</li></ul><p>对äº�å‰�端æ�¥è¯´ Node.js å¹¶ä¸�陌生, Nginx å’Œ Node.js 的很多ç�†å¿µç±»ä¼¼ï¼Œ HTTP æœ�务器ã€�事件驱动ã€�异步é��阻å¡�等,且 Nginx 的大部分功能使用 Node.js 也å�¯ä»¥å®�ç�°ï¼Œä½† Nginx å’Œ Node.js å¹¶ä¸�冲çª�,都有自己擅长的领域。Nginx æ“…é•¿äº�底层æœ�务器端资æº�的处ç�†ï¼ˆé�™æ€�资æº�处ç�†è½¬å�‘ã€�å��å�‘代ç�†ï¼Œè´Ÿè½½å�‡è¡¡ç­‰ï¼‰ï¼Œ Node.js 更擅长上层具体业务逻辑的处ç�†ï¼Œä¸¤è€…å�¯ä»¥å®Œç¾�组å�ˆã€‚</p><p>ç”¨ä¸€å¼ å›¾è¡¨ç¤ºï¼š</p><p><img src="/img/remote/1460000041298014" alt="" title=""></p><p>Nginx 到底å�¯ä»¥å�šä»€ä¹ˆï¼Ÿ<a href="https://link.segmentfault.com/?enc=D8vgH7gAWQUG1B%2B4%2FsaYLQ%3D%3D.YGf8afBDM4TBh2SCgz43ZHTkmEQscaq3MwnElD3GB2mcVbURvzDUEaM8XAAji0C%2FwJ6vPhEq%2BJbreevnD%2BA0IZXZz9TIsrvbbo7ilDFxgoumH4vAVgAxRYTN%2FuEdnqWu8cOGJy0%2F1TJFijlTroI9eKX4Ctj3%2FnE1fyV1mQnyXMTbSRfJ3G5R39S00b7F%2Fz04GR72%2BySq1ShLu11hqWWg5y6HvL57dVL4zf5xNBO0ir31TsAY38xrIZ7AayBzxgubWkH1SabZdJlav2ts7CEDQDZkjZJ7dbmSHs043eBilzlxeALzZtT42m%2BGciinJybeKpDzWiUqBoJyv2EjooEQGA%3D%3D" rel="nofollow">çœ‹å®Œè¿™ç¯‡ä½ å°±æ‡‚äº†</a>ï¼�</p><p>更多关äº�Nginx常用场景应用é…�ç½®å�¯å�‚考:</p><ul><li><a href="https://link.segmentfault.com/?enc=9xhyblggVQugqsNtCFBD5Q%3D%3D.FMsGjmNzbrJHBZyugD7xWzVEn8QUZaJ37Px%2FtqU3WTWMDmybPpQyEN%2BzJAH4i%2FYIliKm4VNZribhgYzOKnft36kBENNkrZIeALjphgbJrsHFtMdtwiIgu6NHx68kmsur89YLHWpfIUe6JT%2FzCckxLyhtyU2Dem41fXKbpupGPlwi%2B%2B5NwR1CQx6EWxY6%2B9VMQixz%2Bsuz5Lgk4u8OZUYCi9ZjtMPd8bc4sENyi0Z34KPNJLce6F8bqot4QJdYX0EuDZ6TVcO6BnbzMiZxFJl1CPGOlofnQoiMJvDYNMUWtLywTK2EdfutymxGj%2Bf9kdZOeZN7a1Wxv2Yc41ceBNpQ6g%3D%3D" rel="nofollow">请务必收è—�ï¼�Nginx 五大常è§�应用场景</a></li><li><a href="https://link.segmentfault.com/?enc=j5XyKt7UAvGNp8qy0LCNpQ%3D%3D.HWvJVIFAF4bMIB2Gkc%2FkNFZqPHgEdU16UWlts595Ao45vDhaoqukggWzGi58et8QeW2HNkArTKcvcofvIMuUfOmOpDjjXTnYOy%2BqTyNC%2F9HdJphbA41D8mg723a%2BTesyEKAOmNQ80IhYof5F9fox200iHx6jovuBQmHJMqfzhHYYphY1PlQAOPwzfjr%2Bp311LB2V2Ev38DQQVP41%2F2NbnHDCOme9%2FyduqM48k3Od8%2BxJSHNQgSm%2BqF7BoJTm%2B46t9uvvE2saNUIm2G8cwlu52hfhJz5zZBxWvz9xeY1hW3ofKB%2B7qnxWw2RzOMHErjeKl02ywD47bZCJSs1uxHYyfg%3D%3D" rel="nofollow">彻底æ��懂 Nginx 五大应用场景ï¼�出å�»å�¹ç‰›é€¼å†�也ä¸�担心了</a></li></ul><h2>Apache VS Nginx</h2><p><img src="/img/remote/1460000041298015" alt="" title=""></p><p>Apacheå’ŒNginx都å±�äº�Webæœ�务器,两者都å®�ç�°äº†HTTP 1.1å��è®®ã€‚æ— è®ºæ˜¯é€‰æ‹©å“ªä¸ªï¼Œéƒ½æ˜¯æ ¹æ�®åº”用场景æ�¥å†³å®šçš„,所以些文件仅ä»�应用场景出å�‘,æ�¥å¯¹æ¯”两者之间的å�„自特点。è¦�让正确的工具,å�šå‡ºæ­£ç¡®çš„事。</p><h6>功能对比</h6><p>Nginxå’ŒApacheä¸€æ ·ï¼Œéƒ½æ˜¯HTTPæœ�务器软件,在功能å®�ç�°ä¸Šéƒ½é‡‡ç”¨æ¨¡å�—化结æ�„设计,都支æŒ�通用的语言æ�¥å�£ï¼Œå¦‚PHPã€�Perlã€�Python等,å�Œæ—¶è¿˜æ”¯æŒ�æ­£å�‘å’Œå��å�‘代ç�†ã€�虚拟主机ã€�URLé‡�写ã€�å�‹ç¼©ä¼ 输ã€�SSLåŠ å¯†ä¼ è¾“ç­‰ã€‚</p><ul><li>在功能å®�ç�°ä¸Šï¼ŒApache的所有模å�—都支æŒ�动ã€�é�™æ€�编译,而Nginx模å�—都是é�™æ€�编译的,</li><li>对FastCGI的支æŒ�,Apache对Fcgi的支æŒ�ä¸�好,而Nginx对Fcgi的支æŒ�é��常好;</li><li>在处ç�†è¿�æ�¥æ–¹å¼�上,Nginx支æŒ�epoll,而Apacheå�´ä¸�支æŒ�ï¼›</li><li>在空间使用上,Nginx安装包仅仅å�ªæœ‰å‡ 百K,和Nginx比起æ�¥Apacheç»�对是åº�然大物。</li></ul><h6>Nginx相对apache的优点</h6><ul><li>è½»é‡�级,å�Œæ ·èµ·web æœ�务,比apache å� 用更少的内存å�Šèµ„æº�</li><li>é�™æ€�处ç�†ï¼ŒNginx é�™æ€�处ç�†æ€§èƒ½æ¯” Apache 高 3å€�以上</li><li>抗并å�‘,nginx 处ç�†è¯·æ±‚是异步é��阻å¡�的,而apache则是阻å¡�å�‹çš„,在高并å�‘下nginx 能ä¿�æŒ�ä½�资æº�ä½�消耗高性能。在- - Apache+PHP(prefork)模å¼�下,如æ�œPHP处ç�†æ…¢æˆ–者å‰�端å�‹åŠ›å¾ˆå¤§çš„æƒ…å†µä¸‹ï¼Œå¾ˆå®¹æ˜“å‡ºç�°Apache进程数飙å�‡ï¼Œä»�而拒ç»�æœ�务的ç�°è±¡ã€‚</li><li>高度模å�—化的设计,编写模å�—相对简å�•</li><li>社区活跃,å�„ç§�高性能模å�—出å“�迅速啊</li></ul><h6>apache相对nginx的优点</h6><ul><li>rewrite,比nginx çš„rewrite 强大</li><li>模å�—超多,基本想到的都å�¯ä»¥æ‰¾åˆ°</li><li>å°‘bug,nginxçš„bug相对较多</li><li>超稳定</li><li>Apache对PHP支æŒ�比较简å�•,Nginx需è¦�é…�å�ˆå…¶ä»–å��端用</li></ul><p>更多更详细的比较说æ˜�请å�‚考:<a href="https://link.segmentfault.com/?enc=SsbZ61AhnLwEXLlBeZzyBA%3D%3D.3eR8xHMSqzQxTjh24Hzf%2FiieImjXTkSZ%2FPeO%2FFqh8%2FlH9G7eOpAzZi0zEuHg%2FrycOv4%2BgAsmbMu5NGflAum%2FrBnAlyTwax%2B%2BfrUphmxoMASTxweEW9sbLX8nxWGVEylIprabnDSXEYSQ%2Bd2Dw8rOhkeywd8D%2FfHOoM9JwcY2aLGFOmuu%2F1QwztapCKQ3CzSUTctBUbLQNz2NEYOt%2Ff9UY%2BGVl8c5HsdfP7%2FZR9jVX0taUdnHnsbY57IR1MnZxSTJxTh5Bvo0hpS5mmUWnvSLRg6dTZJDnc0DXDV9eRYmcWHFTvY980WNWHpTvRHRHH5g4K998gQt47%2FqcMvJYXDlTw%3D%3D" rel="nofollow">Apache VS Nginxï¼Œä½ é€‰å¯¹äº†å�—?</a></p><h2>Nginx 安装</h2><p>本文以CentOS 7.x 系统为例,使用 yum 安装 Nginx。</p><pre><code>yum install nginx -y</code></pre><p>安装完æˆ�å��,通过 rpm -ql nginx 命令查看 Nginx 的安装信æ�¯ã€‚</p><pre><code># Nginxé…�置文件 /etc/nginx/nginx.conf # nginx 主é…�置文件 /etc/nginx/nginx.conf.default # å�¯æ‰§è¡Œç¨‹åº�文件 /usr/bin/nginx-upgrade /usr/sbin/nginx # nginx库文件 /usr/lib/systemd/system/nginx.service # 用äº�é…�置系统守护进程 /usr/lib64/nginx/modules # Nginx模å�—目录 # 帮助文档 /usr/share/doc/nginx-1.16.1 /usr/share/doc/nginx-1.16.1/CHANGES /usr/share/doc/nginx-1.16.1/README /usr/share/doc/nginx-1.16.1/README.dynamic /usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10 # é�™æ€�资æº�目录 /usr/share/nginx/html/404.html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html # 存放Nginx日志文件 /var/log/nginx</code></pre><h6>主è¦�关注的文件夹有两个:</h6><ul><li>/etc/nginx/conf.d/是å­�é…�置项存放处,/etc/nginx/nginx.conf 主é…�置文件会默认把这个文件夹中所有å­�é…�置项都引入;</li><li>/usr/share/nginx/html/é�™æ€�文件都放在这个文件夹,也å�¯ä»¥æ ¹æ�®ä½ è‡ªå·±çš„ä¹ æƒ¯æ”¾åœ¨å…¶ä»–åœ°æ–¹ï¼›</li></ul><h2>Nginx 常用命令</h2><h6>systemctl 系统命令:</h6><pre><code># 开机é…�ç½® systemctl enable nginx # 开机自动å�¯åЍ systemctl disable nginx # 关闭开机自动å�¯åЍ # å�¯åЍNginx systemctl start nginx # å�¯åЍNginxæˆ�功å��,å�¯ä»¥ç›´æ�¥è®¿é—®ä¸»æœºIP,此时会展示Nginx默认页é�¢ # å�œæ­¢Nginx systemctl stop nginx # é‡�å�¯Nginx systemctl restart nginx # é‡�æ–°åŠ è½½Nginx systemctl reload nginx # 查看 Nginx è¿�行状æ€� systemctl status nginx # 查看Nginx进程 ps -ef | grep nginx # æ�€æ­»Nginx进程 kill -9 pid # æ ¹æ�®ä¸Šé�¢æŸ¥çœ‹åˆ°çš„Nginx进程å�·ï¼Œæ�€æ­»Nginx进程,-9 表示强制结æ�Ÿè¿›ç¨‹</code></pre><h6>Nginx 应用程åº�命令:</h6><pre><code>nginx -s reload # å�‘主进程å�‘é€�ä¿¡å�·ï¼Œé‡�æ–°åŠ è½½é…�置文件,热é‡�å�¯ nginx -s reopen # é‡�å�¯ Nginxnginx -s stop # 快速关闭 nginx -s quit # 等待工作进程处ç�†å®Œæˆ�å��关闭 nginx -T # 查看当å‰� Nginx 最终的é…�ç½® nginx -t # 检查é…�置是å�¦æœ‰é—®é¢˜</code></pre><p><img src="/img/remote/1460000041298016" alt="" title=""></p><h2>Nginx é…�置文件</h2><p>Nginx çš„é…�置文件结æ�„如下:</p><pre><code># main段é…�置信æ�¯ user nginx; # è¿�行用户,默认å�³æ˜¯nginx,å�¯ä»¥ä¸�进行设置 worker_processes auto; # Nginx 进程数,一般设置为和 CPU æ ¸æ•°ä¸€æ · error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录 pid /var/run/nginx.pid; # Nginx æœ�务å�¯åŠ¨æ—¶çš„ pid 存放ä½�ç½® # events段é…�置信æ�¯ events { use epoll; # 使用epollçš„I/O模å�‹(如æ�œä½ ä¸�知é�“Nginx该使用哪ç§�轮询方法,会自动选择一个最适å�ˆä½ æ“�作系统的) worker_connections 1024; # æ¯�个进程å…�许最大并å�‘æ•° } # http段é…�置信æ�¯ # é…�置使用最频ç¹�的部分,代ç�†ã€�缓存ã€�日志定义等ç»�大多数功能和第三方模å�—çš„é…�置都在这里设置 http { # 设置日志模å¼� log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # Nginx访问日志存放ä½�ç½® sendfile on; # å¼€å�¯é«˜æ•ˆä¼ 输模å¼� tcp_nopush on; # å‡�少网络报文段的数é‡� tcp_nodelay on; keepalive_timeout 65; # ä¿�æŒ�è¿�æ�¥çš„æ—¶é—´ï¼Œä¹Ÿå�«è¶…时时间,å�•ä½�ç§’ types_hash_max_size 2048; include /etc/nginx/mime.types; # 文件扩展å��ä¸�ç±»å�‹æ˜ 射表 default_type application/octet-stream; # 默认文件类å�‹ include /etc/nginx/conf.d/*.conf; # åŠ è½½å­�é…�置项 # server段é…�置信æ�¯ server { listen 80; # é…�置监å�¬çš„端å�£ server_name localhost; # é…�置的域å�� # location段é…�置信æ�¯ location / { root /usr/share/nginx/html; # ç½‘ç«™æ ¹ç›®å½• index index.html index.htm; # 默认首页文件 deny 172.168.22.11; # ç¦�止访问的ip地å�€ï¼Œå�¯ä»¥ä¸ºall allow 172.168.33.44ï¼›# å…�许访问的ip地å�€ï¼Œå�¯ä»¥ä¸ºall } error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页é�¢ error_page 400 404 error.html; # å�Œä¸Š } }</code></pre><ul><li>main 全局é…�置,对全局生效;</li><li>events é…�置影å“� Nginx æœ�务器ä¸�用户的网络è¿�æ�¥ï¼›</li><li>http é…�置代ç�†ï¼Œç¼“存,日志定义等ç»�大多数功能和第三方模å�—çš„é…�置;</li><li>server é…�置虚拟主机的相关å�‚数,一个 http å�—中å�¯ä»¥æœ‰å¤šä¸ª server å�—ï¼›</li><li>location 用äº�é…�置匹é…�çš„ uri ï¼›</li><li>upstream é…�ç½®å��端æœ�务器具体地å�€ï¼Œè´Ÿè½½å�‡è¡¡é…�ç½®ä¸�å�¯æˆ–缺的部分;</li></ul><p>更多关äº�Nginxé…�置文件的介ç»�å�¯ä»¥å�‚è€ƒä¸‹åˆ—æ–‡ç« ï¼š</p><ul><li><a href="https://link.segmentfault.com/?enc=MFNIwId4k0nhNv8I916%2Bug%3D%3D.QcP6%2FJp9M%2BW%2FPODwj4YKkfEfBIOnLd9UfZ5b7NQ4WcEZm0k1Ho7%2BN3azcZlNlEwToFKCQaIpTCG8BHatHh0eW8r69QCF05KqftDjLRy8aznIXiFglgEswKEa2iIFAFTT4VZpY2qO%2B8CxcJN7MZOxK43T6iOV4SRg3NBwgh87M6fzOXLkra3l5weWL88DOienjIOmeiM9C0auToUX8%2F2TL2L%2BlgUvxnJCO2rNOuChyNOsxhkzFXAhfyt7gAQgsccHUpkiNNLGVOMoNgO5f31lLvg24txHRpTf7lfFKZdrPx7TmZ7Mc9qjUBDaZKz1DBKAUMTuQ%2FOtNRfYKH8LjTEJZQ%3D%3D" rel="nofollow">å�²ä¸Šæœ€å…¨çš„Nginxé…�ç½®å�‚数中文说æ˜�</a></li><li><a href="https://link.segmentfault.com/?enc=yP5oYLrdc%2FuX%2F%2BeDUtnnaA%3D%3D.ndfxPGvMlYuUjZwRaSf4hBYzeJcrXHoshJ6XFYMOBgZQb4X6q5nhzyfToWgebC0yOvhaI19J6fG%2BzN2A8qqTdRXjN%2BKINLeenU%2FLenruGNDJN%2FNgEQP%2FWvy66m0Cr%2B6BYK7iREO3X8vYghMEd%2FLQURGRfFU0b%2BxK2B2McpFoh8uHn5SD%2F5fUMH9qeBGcvNN8R6RPJhGTPDw1C%2Fb%2Fvz5q5f%2FcpYdIoT6vUyOreX7755WW9N56s1Sqc7awttSLImlZu3Uq32RvhAVws4zqUXHjKhdGlD8jl001qsb1Ny%2BhJryNFfCtP2ZV%2F5z0hweCFR1LDh7Xl0Gt0OyKbNvjajxx0g%3D%3D" rel="nofollow">Nginx 常用é…�置汇总ï¼�ä»�入门到干活足矣</a></li><li><a href="https://link.segmentfault.com/?enc=8Pyjp7Q6VB%2BPGpNGNxykMA%3D%3D.t019TE2C%2BLYzAqyiJZ7hHjk1yF9k%2Be8sPmqQAADQcjiTLycD4Ax385uHNGB5wQJbJWL%2FaPHWL4c3OapQWyxACzyh26fpPDj8aBi9sUBxjbc6Z3iMWFhwSsVD6oSqyO7XbkzK72t2nOKqSBG4iG6dD8uVfm2Du9%2BKWVh3%2BQ%2BDpPuFGyQjfumxOtQ3T6D3%2FCgz9pS5vCIAZYKoinE%2BlhDqIf0yQOmHW7hStka03L0HusNJLKBT%2BJ7DDOZrrkLdSvHvg00WKFwm1Hpf7DMhwAqxOUNpCrbxat%2FoPf1F4NbDcPIdKCyljR2zp2K8UUjetbYToamXAg%2FfPFn7l2x1DLb9VA%3D%3D" rel="nofollow">Nginx å®�践:location 路径匹é…�</a></li></ul><p>如æ�œä½ 平时é…�ç½®Nginx比较频ç¹�,我æ�¨è��ä½ ä½¿ç”¨è¿™ä¸ªç¥�器:<a href="https://link.segmentfault.com/?enc=r63DBWgBYiy2f1OB9taNlg%3D%3D.Lt1MGqU6MDIHesMq3Jzhj3SYAgCErXwphCZNhCRI%2F0awyPqcUJNOiYq65t9WgqfLjC8221gIxzTYP7wl7a8oIvC6jgSPKeodYM8wM1%2FEcil7VRGAhKpMjAGBTdmGqketyuKtraPlOGTS9qlsdIvcG2k15lZQVaJBzuek%2B62dV1vT2Yh0yzKmW4Z3yMuuGELz2buIDdGlZGRkd%2FrFEOcg2FzKLSaAmSWyzfW%2FziapdXyMfgi%2BOwYJlUCfasIIzgXlEx31KnQUW2p4L%2F4xsWoFddmnJWo0arqBt6ZoRkrCdu5nFXwL6kv1LAE00xMxpbxPlIzck2pTakwh4EYu1fJXVg%3D%3D" rel="nofollow">强大ï¼�Nginx é…�置在线一键生æˆ�“ç¥�器â€�</a></p><h2>Nginx常用的内置å�˜é‡�</h2><p><img src="/img/remote/1460000041298017" alt="" title=""></p><h2>Nginx 的进程模å�‹</h2><p><img src="/img/remote/1460000041298018" alt="" title=""></p><h6>Nginx æœ�务器,正常è¿�行过程中:</h6><ul><li>多进程:一个 Master 进程ã€�多个 Worker 进程</li><li>Master 进程:管ç�† Worker 进程</li><li>对外æ�¥å�£ï¼šæ�¥æ”¶å¤–部的æ“�作(信å�·ï¼‰</li><li>对内转å�‘ï¼šæ ¹æ�®å¤–部的æ“�作的ä¸�å�Œï¼Œé€šè¿‡ä¿¡å�·ç®¡ç�† Worker</li><li>监æ�§ï¼šç›‘æ�§ worker 进程的è¿�行状æ€�,worker 进程异常终止å��,自动é‡�å�¯ worker 进程</li><li>Worker 进程:所有 Worker 进程都是平等的</li><li>å®�际处ç�†ï¼šç½‘络请求,由 Worker 进程处ç�†ï¼›</li><li>Worker 进程数é‡�:在 nginx.conf 中é…�ç½®ï¼Œä¸€èˆ¬è®¾ç½®ä¸ºæ ¸å¿ƒæ•°ï¼Œå……åˆ†åˆ©ç”¨ CPU 资æº�,å�Œæ—¶ï¼Œé�¿å…�进程数é‡�过多,é�¿å…�进程ç«�争 CPU 资æº�,å¢�åŠ ä¸Šä¸‹æ–‡åˆ‡æ�¢çš„æ�Ÿè€—。</li></ul><p>为什么<a href="https://link.segmentfault.com/?enc=fy7hgpna2XioBIBe7sleIQ%3D%3D.Ep58wjn5kHv54%2FjLJUnoKqDGyVDz%2ByG4z0v5avOtuLWSoo%2BAfwaA43D5JskNOEgpNSchn%2FG%2FBCi0NVuAIHvO6xZY8COoYjNj4Ib7QKF2S9jEj0D3FMUXLkzltF2WsicSCTvsixFDqTdbzrNlAJp1mN5T8%2FudEzOkyY5IY6YVTq%2BkoxND9rXedWZmOPclk82yZQpMvgQ%2FqP2e7KaqGCnrW6xLc%2FJYtu%2BgJGJsYur7RDODKegBTAct%2F2M5Mn3dX1vjEaIkk%2Fjk%2BOUZMtI3CauE8jvD1P4IAF87SgGqGccxXROJ4FvnjlmjI5KVIuAJ9kn8tEqxbCjTCQa7%2B6vZMw2MhQ%3D%3D" rel="nofollow">Nginx功能如此强大</a>,å�¯ä»¥å�‚考:</p><ul><li><a href="https://link.segmentfault.com/?enc=CNDPmUqQx%2Bjdf7C%2BXCKROg%3D%3D.9jbidwhho4r7kfgKYFeTBjqgd68KBFtinClvkGrIxmcpPSJA%2FB1zm%2BesTzqj064Uf1k40%2BsGyECKuv%2FgY6800mnIWSPk9OWKxctCqm0p7M4qvJsNaLLFCQApUmD%2FdCC9V56KAMSuiXslEC7qeSvnRhcnFxHiWAxxLoV%2BXsO4SCfq3qy6uUlJnXqjh6f4X%2BnI4nn126io3BY%2FUI%2B1QKRsO0iEw9WS1o9hgJ5TbeEyeu1C7oAPLpQQrolJuNfhXLaCG9opKG8SOht2eweQvfWzcImym2KCWKzXHvVR5oQcs7apt6MY0iv%2BfeWvYmyMANxr3so7oQ6f2%2BNV5nB5joDDcA%3D%3D" rel="nofollow">Nginx为什么高效?一文æ��æ˜�白Nginxæ ¸å¿ƒå�Ÿç�†</a></li><li><a href="https://link.segmentfault.com/?enc=T%2BpIUqUctJmvGfp%2BkbHa4Q%3D%3D.bdnV6s4LaNoZuP899W%2BTwN7WaR05CVizRsHelLTbzrLrPgAB8%2BiXIt4WU812tN7duaTPNtYOtW57Ep%2B9LS6I9L7GD%2BIhrMsTf1xk%2BhFmJNN2eO5tPvzCRdlIvUIY2jqeB9TpbHGWJ%2B175C6mC1XYcEFH%2BsaJQVzGxMDZjgQjTevcAfHyEGGEE0AbFlDn8dMTimiEjPNpoiJetKEISCCHtfE1Mq8aQljpq3rhhNGq36av9QkoFw5UBXsSFXpqDah1%2BeWnOGYf4KGMx1K%2BQxFn0FwjP1gYDi%2B3QCRKkxMRQqkA%2B%2FiTmHxQVxS1Swg1%2FF93ir7U1fkhzk5KazeVvY5iIw%3D%3D" rel="nofollow">ä»� Nginx ä¼˜ç§€çš„æ ¸å¿ƒæ�¶æ�„设计,æ�­ç§˜å…¶ä¸ºä½•能支æŒ�高并å�‘?</a></li></ul><h2>Nginx优化é…�ç½®</h2><p>å…¶å®�æ ¸å¿ƒå†…å®¹ä¸»è¦�是通过修改 Nginx é…�置文件æ�¥è¿›è¡Œè°ƒä¼˜çš„ï¼�</p><ul><li><a href="https://link.segmentfault.com/?enc=wylOU283qbijSaae7wBN0A%3D%3D.wGzLtuKYsu9JXSj4YdzLmZSzzN3pCJFGdrur%2Fih6oELIkT2SqOfzADcfEaW4kAeDzlvmekDJkn%2BVMspEEjP6fPdg1cXj1w8JavghM9xTwu4cjRJV9DlamG3W1HhNHUNskHuoQYbOudwUJF9XiW7dpHAT0qZQcdbWft1f1SjzRaNtqM6c6LCk4TKmr%2B7QG3E7Uw1BKA7AModfF9yzU2%2F1dZiYDsDjkjt5wLaq%2B%2Fd%2FMiheiPNzGg5HCHjW3TcPI1NTDUuDOj4nyakPHYaKcjCZzN5QJXouAhSRwB6%2FTC9X4Thot4uDeWtFXd3LuJRx6typTwSe7FvTT4r1HmZtVWstbg%3D%3D" rel="nofollow">Nginx优化é…�置详解</a></li><li><a href="https://link.segmentfault.com/?enc=cJi39SFFUAVEYA8goPm%2BCw%3D%3D.l%2BrwZsTQldlZmyJa7Ny4ejLNS6wFfisGca57FugxrqRkvrbIfaba82kThadG6jPrPppML%2FJ6rHTzVJfBhKjNNH4zsl5abbtNUuwfja%2B9VVwg%2BV0EWT2eAdW%2B0Khq6HcB81rd%2BD1nwtPR1mUaIlgya01IEXvYARXXgCi%2FM4ZvwkFrLkoYuglg2MjfMW567s2FzGJaDVK3J%2Fz1mGH2ZKVW40Nqsisqqq7TBqVZepJs1%2B5WLXDYGIEF8ukc2qCkYaKf0o9EsTbbfjCaajAVQU40mq7hX3MaXuJe0r%2FKQuiSLpMgwUWAekWFxLab8vgZ9RYyNYbSa1ao3AA3NDYknWvGPg%3D%3D" rel="nofollow">åŠ é€Ÿ Nginx å“�应的 5 个æ�ªæ–½ï¼�</a></li></ul><p>åœ¨æˆ‘ä»¬çš„æ—¥å¸¸å·¥ä½œå­¦ä¹ ä¸­ï¼Œæˆ‘ä»¬ä¼šè¯¥å¦‚ä½•å�»ä¼˜åŒ–自己的Nginxæœ�务器?é�‡åˆ°ä»¥ä¸‹é—®é¢˜æˆ‘们该如何处ç�†å‘¢ï¼Ÿ</p><ul><li>如何自定义返å›�给客户端的404错误页é�¢</li><li>如何查看æœ�务器状æ€�ä¿¡æ�¯</li><li>如何优化Nginxå¹¶å�‘é‡�</li><li>.......</li></ul><p>这些问题都å�¯ä»¥å�‚è€ƒè¿™ç¯‡æ–‡ç« çš„è§£å†³æ–¹æ¡ˆï¼š<a href="https://link.segmentfault.com/?enc=jG9sOsLEAk6eHm16KETYcQ%3D%3D.JjRUUV0QdOZnbow%2FqK7%2BYor9PaoYRskMh7IU5Y3fVmq8Gwj0jRJz2MiRVu6WoZoSD2ufsHGIgUBJ7amh22oqumGdnUfgvcY3au2F7QMf%2F%2BFE0WjG6%2BESOD5Ff3nMf75mM3He8CYOad%2BacHkT56UHUjt2VsgP0PhA2UUJaqGakd56Sx3ILYUi1%2BDsnikqDvxJWGVNWfyU3UQcHZkNTiWgMB%2Fec6LABxwThKziLeK4KfHTGXPB5zBIVBHSd%2F7sS1CjZVXN8WGTLq5ERVafyARWQG8FU36c5sP3dDj%2Bio6jGLlyO%2BxT12a9lydNlXCEPEHttTgRz4tR6OgSLHuFQDS4FQ%3D%3D" rel="nofollow">Nginx 高性能优化é…�ç½®å®�战总结</a></p><p>Nginx 是如何å®�ç�°å¹¶å�‘的?为什么 Nginx ä¸�使用多线程?Nginx常è§�的优化手段有哪些?502错误å�¯èƒ½å�Ÿå› 有哪些?<strong>è¿™ç§�é�¢è¯•é—®é¢˜ä½ è‚¯å®šæ˜¯ç»�常被问到</strong>。</p><p>所以,<a href="https://link.segmentfault.com/?enc=weIMS7wPtLxkFQFFe4QqBQ%3D%3D.ICcS5jpmkaPD4lRPofSK1myV7bBwNDmxSYuz%2BYfzvIDRinUllOkwkkuM67UBw%2By2bHpfTMtNbqJMzRUQbsxeEahKAp5tBg1SSvitGrw9ANs8KQu3FhNwN7alLLOnvMadAj%2By7q1A2R8H0XIZk9oyHgxfhNFHlrb3SLlfzPGqQZ9loumSRnqL9NjVeq6KrGAeYNX94%2BlIjG8mChzHiTQab6bIhSElRFJp9Ai8XJbOy4UP%2Bf8EM2PTx9X%2Bv3Vvht6ZeGzKo7isO8xLXvA9qMjLs0ZI%2FALFrxodpdIzhTIF78nDO0xEAg0LpzYo7QmO8u8QKRt8nYNTNPqcmBZh5vw1Ig%3D%3D" rel="nofollow">Nginx 如何å®�ç�°é«˜å¹¶å�‘?常è§�的优化手段有哪些?</a></p><p>对äº�Nginxæœ�务器的安全,在日常使用中也是é��常é‡�è¦�的,这里给大家分享一点å®�è·µç»�验:<a href="https://link.segmentfault.com/?enc=rwspymkw56FP7MAUvan2fw%3D%3D.h2wTl9G%2FGL1%2BTIpGg2%2BUKbyk8eiZMuIhlWBYhmKnoM9IP7gwLz%2BN%2BuvGo%2Fpv9cXRhSSz6LWaWxlTP8YFI2tbPQTfDsu%2BLR3ZmvJQEG8CZRLNuKx8vGlYT%2BrMGqBICIa7lC2nFLoPBscX%2BXBiAcpyxNXyNqcUkT8ldocc%2Bw%2B6MHnffCQBLXQKurCLh06qBli6Qf8vFiHItLuh5fmTvxJTC37KqyrqgyHbbPv6JiDUvnRibq8iXDyBC6vaWWi6mCc1sl4DjxNXWD2xc1tXIT6ASKky7QMKSNHoInPNDCqLkjRHcRGcSu0%2FOjrFQHly9LpgoX0udaVkOGWN%2FyE%2FIwz%2FVg%3D%3D" rel="nofollow">如何æ�„建高效安全的Nginx Webæœ�务器</a></p><p>最å��给大家分享2个基äº�HTTPS优化案例:</p><ul><li><a href="https://link.segmentfault.com/?enc=Q4QJ5zWXjoid60pVzUhnRw%3D%3D.j67W6R7AjIBBFCl2NLMCBc2H59hmX6TjBg6grmC0W3cuX2qOQd2QNrijd%2BN23YcB6GdPiBqwegL%2F85ECOXb40hV7K3DfTn1OsynjR8ZIny4%2FR8l%2BlYFFE7fPxucSb6cwUD1pbYJv1Ag9SJTMX5EOBfmBhnZ4j3dSpj3e2PMkV2RNbbzWYU0ICb%2F747P738Jy4E4b6miYa8A7RSVSz5uw1qFAv4Tr2l6mK0JgfiFhbWQ4tdGX4ETQA%2Foteg4T5t31A0WR6h872nw%2BHC2JiHslNKFURJqpXT1bw9cd5T5%2BCQlGqs8Va8T%2B03R7Vws7HfChNVS2AjbbwAbRe0Xt7onn6w%3D%3D" rel="nofollow">基äº� Nginx çš„ HTTPS 性能优化å®�è·µ</a></li><li><a href="https://link.segmentfault.com/?enc=Az%2BQIbUgNP92si8dtUInxA%3D%3D.JPQpoCZ2p2FnYz3iGaNNHuJWNTzQp7xOhI%2F9cRlvuDxtwVA4TB%2BYIVIooIbfPVlp2fDevjGT40AqLxOJ1p%2BmrkxUMNg1oMlRYSrvBJ5LYs03zoRFc13mWMB29jMNwMRG5nq4ci4gqHrWmlqHj%2FIXRsN4D%2FLnT14SLl77KCno9K1tcA8uEBRlN7xIAxWLSI%2B1DCpqT2y3tSsfDmds8HZIQVejSHFhyUu2Wo6QiEppv5ztn8QjSpagnGud9EHuyDXoHkCctgV7tOtxefbUucUCqP8jFEULMGtml1CH2YSTtcUMrN0ffREC8zmuiZrSgYvFvm%2BmxD69G1t9uEcm97LZXA%3D%3D" rel="nofollow">高性能 Nginx HTTPS 调优ï¼�为 HTTPS æ��速 30%</a></li></ul><h2>Nginx 日志相关</h2><p>介ç»�完了安装ã€�é…�ç½®ã€�优化这些常用的场景之å��,日志这å�—也是é��常é‡�è¦�的,大家都知é�“日常æ�’错,日志起ç�€ä¸¾è¶³è½»é‡�的作用。</p><p>Nginx日志主è¦�分为两ç§�:<strong>access_log(访问日志)å’Œerror_log(错误日志)</strong>。通过访问日志我们å�¯ä»¥å¾—到用户的IP地å�€ã€�æµ�览器的信æ�¯ï¼Œè¯·æ±‚的处ç�†æ—¶é—´ç­‰ä¿¡æ�¯ã€‚错误日志记录了访问出错的信æ�¯ï¼Œå�¯ä»¥å¸®åŠ©æˆ‘ä»¬å®šä½�错误的å�Ÿå› 。</p><pre><code>error_log /var/log/nginx/error.log warn; #é…�置错误日志的级别å�Šå­˜å‚¨ç›®å½• events { worker_connections 1024; } http { .................. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #é…�置日志的模å¼� access_log /var/log/nginx/access.log main; #é…�置访问日志存储目录 }</code></pre><p>å…³äº�Nginx日志的é…�ç½®å®�践看这篇:<a href="https://link.segmentfault.com/?enc=GIMrPqRKdcCEZJUhUqffXQ%3D%3D.4JLnUDl0szp6BUCQ6CSS1rOic4QQguk4vwX6m464mXrb4QEnUbhBEeBlnAqXJV7h6wtO1gLApu5CJh2lbuDv0expNwftKmweHZPNUx%2BpCSVaIc6F2HbZh20n%2FdZXFxeXjAR1tQr%2FzWAmAQrGMcv2C3fFloTCTMjMz9FCNA0JAFL1nHslOb9tsBjiVOGe2LrGFv9JFKu42%2FLKXvX2C5VHJZ6H78IAkyg63RVp0ag8arF3aHs1aBBO%2BTGvtwGj3CA1iGZ8zfHHshRzLRXbGykS%2FLSPKAe5ja7x9j2cTfrJUlC5rvju7gy5i%2FVHWFVLNaGRkDINdABAhVDh8OQwh1G0MA%3D%3D" rel="nofollow">Nginx 日志é…�ç½®å®�è·µï¼�超详细</a></p><p>ç”±äº�nginx功能强大,性能çª�出,越æ�¥è¶Šå¤šçš„web应用采用nginx作为httpå’Œå��å�‘代ç�†çš„webæœ�务器。而nginx的访问日志ä¸�管是å�šç”¨æˆ·è¡Œä¸ºåˆ†æ��还是安全分æ��都是é��常é‡�è¦�的数æ�®æº�之一。如何有效便æ�·çš„采集nginx的日志进行有效的分æ��æˆ�为大家关注的问题。</p><p>é€šè¿‡å‡ ä¸ªå®�例æ�¥ä»‹ç»�<a href="https://link.segmentfault.com/?enc=5NGaftDUqAGpn00bpZgVtg%3D%3D.1vfwLkViqV%2Bvv3t5xdKZ2PWZPlVFqkbS6jLBfpjfBvN33TQIyn9cffi7mKm%2F6K4D1Kw64WDneEeggr1JM3M%2Bdh5gi3deC2iksUT8U5PoXrJmF7a9KGjDke3T9KdqWm%2BvIQ5eOmLQFqBW%2F2nNZGOOSVWLUunhcYffyqL%2F1HqWNXjGXWgDQXd9AJuFV0va3kcvwkIPRhO5%2BBGk%2FXHsVPGJHPJ%2BtVoRit6jzka4M%2Bbne6hvOOkI9eJOkWGDJP9TV3RwFuUkXWx2Lelr5z7oA%2FEcEE0gUAVO%2BxzI4e22GaxGWq%2BsLr2dD8lqanVhXPxbEOCg6EHLYs%2BqG503Uzg7aUeaFQ%3D%3D" rel="nofollow">如何通过filebeatã€�logstashã€�rsyslog采集nginx的访问日志和错误日志</a>,我也å�¯ä»¥ï¼š<a href="https://link.segmentfault.com/?enc=zgp4tgBh%2F8DA3r0M%2FEJy3Q%3D%3D.Tr5BBWPzNf5j9biZ7tSgEm9WHCdmK%2BVYnvxoYcInTRmKEV4pQmSzG%2BJc%2BCD1zdRl1ULrzge5O2SwyxWv1roxZPRqzux4fUfoGU1UEbUfPEzX0Q4b7%2FCcHu9VRluN2hXzdXYM%2FpmDqtApsu4Rz7%2F115s9aHwNMz70j42gyzkt99AoPfivSmUIbwpQsDW17Ev4zOvBhh2GKuJ9jp1hBfOI9ZGZVwjBhpWXXxltRVVHy2nTzu619Ff1ijv8NsrW%2Bvdjdq9EiV0vCFjTY2G4wGicwu0JPUFiRF3yY0TJHCCUSH8mXLRWScx2Tqzrx9ZtdZkTXroINUaO10hUagO%2FvJzeqg%3D%3D" rel="nofollow">利用ELK分æ��Nginx日志</a>。</p><h2>Nginx版本å�‡çº§</h2><p>这里我们æ�¥è�Šä¸€è�Šï¼Œåœ¨ä¼�业å®�际生产ç�¯å¢ƒä¸­ç»�常é�‡åˆ°çš„一个情况,如何å�‡çº§Nginx到新的版本和如何å›�滚至旧版本。</p><p>版本å�‡çº§å…¶å®�就是针对二进制文件的å�‡çº§ï¼Œè¿‡ç¨‹å¦‚下:</p><pre><code>[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v nginx version: nginx/1.12.2 [root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/ [root@nginx sbin]# mv nginx nginx-1.12.2 #首先备份å�Ÿæ�¥çš„æ—§ç‰ˆæœ¬nginx二进制文件 [root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./ #æ‹·è´�新版本的二进制文件到当å‰�目录</code></pre><p><strong>注</strong>:其å®�å�‡çº§æ–°ç‰ˆæœ¬ï¼Œæœ€é‡�è¦�的就是平滑å�‡çº§ï¼Œè®©å‰�ç«¯ç”¨æˆ·æ— æ„ŸçŸ¥ï¼ˆä¹Ÿå°±æ˜¯ä¸�中断æœ�务,这个其å®�ä¸�难,生产中多å�°ä¾�次ç�°åº¦å�‡çº§ï¼‰ã€‚</p><p>对äº�å�‡çº§æ�¥è¯´ï¼Œæœ€éš¾çš„ä¸�是å�‡çº§ï¼Œè€Œæ˜¯å›�æ»šï¼Œå› ä¸ºåœ¨å®�际生产ç�¯å¢ƒå›�滚的机ç�‡æ˜¯å­˜åœ¨ï¼Œæ¯”如:新版本由äº�æŸ�些未知bug导致ä¸�ç�°æœ‰åº”用ä¸�兼容ã€�或出ç�°è¿�行ä¸�稳定的情况等等。</p><p>所以,对äº�我们æ�¥è¯´ï¼Œæ•…éšœå›�滚是é‡�点。这里给大家æ�¨è��我总结的:<a href="https://link.segmentfault.com/?enc=6bGN1h%2FIvgVuueCq2G%2F56w%3D%3D.Gck%2BgUX4r6fImW6p2t%2BzabSlcsEndpdeHHEUnjWp7LHD2bGFccIZUI%2BIqAGD3XrLly6tUpOwdYppk8%2B6lLQzwMyQrVT9NDGhXLiS71lO625XJEyrgoW7AnHGvOQNSYIyVzHH2zxORltp5xo%2FPwt632xA8%2F8HQFmx20hL3dHQfzpIOGdn0v5hcUkouZMKYMSZlLcA%2F%2FqbdhPtnDRS0aTEKh8q0i9sgHD35F4sxQrGOCuK4wTFYJBF8V7iuoDHUj7iQX%2BWSiPpZCZ9oEQP4gGL1JMaSCAdL1q%2FEc%2FKa%2Bd4om36i%2FiP8NAgdl3wwW2%2FfAr%2FAhya7a8O7W0leJg7yTcnFA%3D%3D" rel="nofollow">1分钟æ��定 Nginx 版本的平滑å�‡çº§ä¸�å›�滚</a></p><h2>Nginx å��å�‘代ç�†ä¸�è´Ÿè½½å�‡è¡¡</h2><h6>å��å�‘代ç�†ç®€ä»‹</h6><p>å��å�‘代ç�†ï¼ˆReverse Proxy)方å¼�是指以代ç�†æœ�务器æ�¥æ�¥å�—internet上的è¿�æ�¥è¯·æ±‚,然å��将请求转å�‘给内部网络上的æœ�务器,并将ä»�æœ�务器上得到的结æ�œè¿”å›�ç»™internet上请求è¿�æ�¥çš„客户端,此时代ç�†æœ�务器对外就表ç�°ä¸ºä¸€ä¸ªå��å�‘代ç�†æœ�务器。å��å�‘代ç�†æ˜¯ä¸ºæœ�务端æœ�务的,å��å�‘代ç�†å�¯ä»¥å¸®åŠ©æœ�务器æ�¥æ”¶æ�¥è‡ªå®¢æˆ·ç«¯çš„请求,帮助æœ�务器å�šè¯·æ±‚转å�‘,负载å�‡è¡¡ç­‰ã€‚</p><p><img src="/img/remote/1460000041298019" alt="" title=""></p><p>å��å�‘代ç�†å¯¹æœ�务端是é€�æ˜�的,对我们是é��é€�æ˜�的,å�³æˆ‘们并ä¸�知é�“自己访问的是代ç�†æœ�务器,而æœ�务器知é�“å��å�‘代ç�†åœ¨ä¸ºä»–æœ�务。</p><h6>é…�ç½®å®�例</h6><pre><code>http { ............. upstream product_server{ 127.0.0.1:8081; } upstream admin_server{ 127.0.0.1:8082; } upstream test_server{ 127.0.0.1:8083; } server { #默认指å�‘productçš„server location / { proxy_pass http://product_server; } location /product/{ proxy_pass http://product_server; } location /admin/ { proxy_pass http://admin_server; } location /test/ { proxy_pass http://test_server; } } }</code></pre><p>如æ�œä½ 对Nginx é…�置中location 的规则ä¸�太熟悉,æ�¨è��ä½ çœ‹çœ‹è¿™ç¯‡æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=9NAr00AQaW9RTFNQKG%2FvRg%3D%3D.kb8jvnvVGaCjxk5CgB7sa9oxH9gTYMxfQ6pWEC7EuLHNPZO0tuEsJWglIHC8yiZ2vCDs9tVE3WRgIDd69oej71rA0v56Ze%2Bu5Bkf8cBzBTkN8lv2WZFuKHxalJ13cg%2F67UovY%2BAG%2BbfCI34hPE1v%2Fn0pUd2UfG%2FKzW3065%2FxaP7ysF5%2F9FDSuRDhwN4akHCl8%2FyxjHjKMT5zI0QlnGgBjHv5O7%2BdH%2Bfgl68JqCdFgSAOq7iRVr%2BSOElvBza%2B0TL8CtdjR4v%2BW4VcMIHtVETA%2F10KjwzcA1Znut3rj6T8bMyoJ6QM4uO1L7ZdWV3ehPwLIgjfir1oTYmdVHARqwynZntiXo9W%2Bk%2FNT1Tt6GqtpJw%3D" rel="nofollow">Nginx å®�践:location 路径匹é…�</a>。nginx æ¯�个location都是一个匹é…�目录,nginx的策略是:访问请求æ�¥æ—¶ï¼Œä¼šå¯¹è®¿é—®åœ°å�€è¿›è¡Œè§£æ��,ä»�上到下é€�个匹é…�,匹é…�上就执行对应location大括å�·ä¸­çš„ç­–ç•¥ï¼Œå¹¶æ ¹æ�®ç­–略对请求作出相应。</p><p>æ‰€ä»¥ï¼Œæœ‰æ—¶å€™å°±å› ä¸ºåœ¨é…�置时,少些了一个字符“/â€�ï¼Œå°±é€ æˆ�访问ä¸�通报错,这ç§�问题是é��常觉的故障å�Ÿå› 之一,正所谓:<a href="https://link.segmentfault.com/?enc=u1QehQuex%2FbsiamijeLSyQ%3D%3D.26aX%2FVqzAjCvAL6rrgyBccaCwvIrJlSEk8a6s5QMJdIoUYlIwUp%2BuvmWvH1sQ6eSUflRbm1aIJWavXiNWViWQohc97tc1IKRpNLwBFFVJmGyC1n3%2F%2BoO2jBwS7oLW3DiAuwCgOLXdgmF%2FWZ2diZefmOh9%2FRyW6FuwSVGDYvlZbjOalogLZVp5KPL9jNvGw4V0FG0xskP6S6Kh%2FZBcCWqyuSdN52vNtjMvoqccOFFWqHJ9bdRBbOmWA84GwtP3l%2Bl5RehNvy%2FCAfyEVeSZ4hYglv5g6Vql4UYaV2AstOhxt7eAVqQgtbaA7tAYN5BYQCy64K9Xa%2FBmGCy7CSboVhNmw%3D%3D" rel="nofollow">Nginxé…�置中一个ä¸�起眼字符"/"的巨大作用,失之毫å�˜è°¬ä»¥å�ƒé‡Œ</a>ï¼Œè¿™ç¯‡æ–‡ç« è¯¦ç»†è¿›äº†ç›¸å…³çš„è¯´æ˜�ä¸�举例验è¯�。</p><h6>å��å�‘代ç�†çš„优势:</h6><ul><li>éš�è—�真å®�æœ�务器;</li><li>è´Ÿè½½å�‡è¡¡ä¾¿äº�横å�‘扩充å��端动æ€�æœ�务;</li><li>动é�™åˆ†ç¦»ï¼Œæ��å�‡ç³»ç»Ÿå�¥å£®æ€§ï¼›</li></ul><h6>Nginx è´Ÿè½½å�‡è¡¡</h6><p>nginx能å®�ç�°è´Ÿè½½å�‡è¡¡ï¼Œä»€ä¹ˆæ˜¯è´Ÿè½½å�‡è¡¡å‘¢ï¼Ÿå°±æ˜¯è¯´åº”用部署在ä¸�å�Œçš„æœ�务器上,但是通过统一的域å��进入,nginx则对请求进行分å�‘,将请求分å�‘到ä¸�å�Œçš„æœ�务器上å�»å¤„ç�†ï¼Œè¿™æ ·å°±å�¯ä»¥æœ‰æ•ˆçš„å‡�轻了å�•å�°æœ�务器的å�‹åŠ›ã€‚</p><p><img src="/img/remote/1460000041298020" alt="" title=""></p><h6>é…�ç½®å®�例</h6><pre><code>upstream server_pools { server 192.168.1.11:8880 weight=5; server 192.168.1.12:9990 weight=1; server 192.168.1.13:8989 weight=6; #weigthå�‚数表示æ�ƒå€¼ï¼Œæ�ƒå€¼è¶Šé«˜è¢«åˆ†é…�åˆ°çš„å‡ ç�‡è¶Šå¤§ } server { listen 80; server_name mingongge.com; location / { proxy_pass http://server_pools; } }</code></pre><h6>Nginx å®�ç�°è´Ÿè½½å�‡è¡¡çš„ç­–ç•¥</h6><ul><li>轮询策略:默认情况下采用的策略,将所有客户端请求轮询分é…�ç»™æœ�务端。这ç§�策略是å�¯ä»¥æ­£å¸¸å·¥ä½œçš„,但是如æ�œå…¶ä¸­æŸ�一å�°æœ�务器å�‹åŠ›å¤ªå¤§ï¼Œå‡ºç�°å»¶è¿Ÿï¼Œä¼šå½±å“�所有分é…�在这å�°æœ�务器下的用户。</li><li>最å°�è¿�æ�¥æ•°ç­–略:将请求优先分é…�ç»™å�‹åŠ›è¾ƒå°�çš„æœ�务器,它å�¯ä»¥å¹³è¡¡æ¯�个队列的长度,并é�¿å…�å�‘å�‹åŠ›å¤§çš„æœ�åŠ¡å™¨æ·»åŠ æ›´å¤šçš„è¯·æ±‚ã€‚</li><li>最快å“�应时间策略:优先分é…�ç»™å“�应时间最短的æœ�务器。</li><li>客户端 ip 绑定策略:æ�¥è‡ªå�Œä¸€ä¸ª ip 的请求永远å�ªåˆ†é…�一å�°æœ�务器,有效解决了动æ€�网页存在的 session 共享问题。</li></ul><p>想è¦�高å�¯ç”¨ï¼Ÿ<a href="https://link.segmentfault.com/?enc=KwbMea5U%2BCGDRQdJUGqdLA%3D%3D.8AiQ%2FQILW0LlKoYqxDv%2BIfDQT5AVRaygi5%2FuGWszyivKcm0u6E8W0KeQ67RhjmXZQX3BahXzyhY9uhn0SqgpLuMI0n%2Boi701u%2FzuJiqAy9fCanaJjATresIS60M6E8hlbFJuAeBUGcBmhIob91%2BnDNVhn8TazbufshAa4sUGSkBwTfbZRydCYXVcy0ccncVRalHkc%2F5HLiJqNU9iu5z%2FyruVaUSs9UqF8RHDoSKcz%2F1tFaQx8a81pKqrsUs5NlPdxIhxVsHpjjPybTqP0EZ%2B3J%2F5k5eLyqY7oCRoKLF7bfYxhUrx46IIFW2PvS4xrl40Nu9rROpQDt%2FNO7FIbC09fQ%3D%3D" rel="nofollow">æ��定负载å�‡è¡¡æ�¶æ�„是关键</a>,</p><p>å…³äº�è´Ÿè½½å�‡è¡¡å’Œå��å�‘代ç�†çš„区别å�¯ä»¥å�‚考:<a href="https://link.segmentfault.com/?enc=MDE5n65ePCwppjL1pmqFPg%3D%3D.uP%2B5e0cgGrwVy3O%2Fu5AHv4IUI69XjqhGqlUU3NK%2F2Gsy15ibiaXdBThwyBa5N%2FIEkFrDdpQrRAEUE9mir1FypOwLEf9tBHVSweHznMTLDSXD%2BUPlVcAudwpuuHaCj5wRHi%2FnArxWWbODwXRDmt6keiwgtDaNIfYu4FcX0kMW9GF1u%2BraCrf9iyI0Y8bAWM17VshZcZPKcHQ54xkRAs4Q90wfqqTJ17NfjwRWT2WrS6GIyEEN71TVPXD9Iuib5IV%2FtdwJY5wbxUd55MkO71OHH7Ue2Vq4lGbugb3MvjeX0vA9RMQwk5TvyZ0EEsBZETQXUAmZDdVLEhKc3ecv2yDxLg%3D%3D" rel="nofollow">一文详解负载å�‡è¡¡å’Œå��å�‘代ç�†çš„真å®�区别</a>,关äº� nginx å��å�‘代ç�†å’Œè´Ÿè½½å�‡è¡¡ç­–ç•¥ <a href="https://link.segmentfault.com/?enc=6LW3%2FsvPfaEI851FKdtFtQ%3D%3D.UWQa4kG0V5Lqt4eYTGLWbfOTspOst8VzU%2Fi8UDqzxekNBsDAxaLa5C73TEpD8kSFdDpSl4egTzA6rK2sleTxSSDNOrWEddYfXz8ayY5t2UAesR0HI%2BQV50JAFK2ngxUDQva0Q3jq9XU6%2FlGPAPcgwZzRxfT0H69wKA0Cdpom0kC6e0%2BnfXUkMfY74WSprXJ4Y6RALe19irT4NhOqJ5X3zOCsZ%2BX9qG6wupueGaqtj4jXzy6da770%2B0v3jGj6aYbcXX%2Fb3E4o2bx4mKrN0zQNSZVaNmlv4si38e1Adal0fmNrenFxRW%2B136zQjDanl63sIdgK8igfMkfy4ds3xwDUSQ%3D%3D" rel="nofollow">å®�战案例</a>。</p><h2>Nginx 动é�™åˆ†ç¦»</h2><p><img src="/img/remote/1460000041298021" alt="" title=""></p><p>Nginx动é�™åˆ†ç¦»æ˜¯è®©åЍæ€�网站里的动æ€�ç½‘é¡µæ ¹æ�®ä¸€å®šè§„则把ä¸�å�˜çš„资æº�å’Œç»�常å�˜çš„资æº�区分开æ�¥ï¼ŒåЍé�™èµ„æº�å�šå¥½äº†æ‹†åˆ†ä»¥å��,我们就å�¯ä»¥æ ¹æ�®é�™æ€�资æº�的特点将其å�šç¼“å­˜æ“�作,这就是网站é�™æ€�化处ç�†çš„æ ¸å¿ƒæ€�路。æ�¨è��:<a href="https://link.segmentfault.com/?enc=gcXJrvu6WXBnvKkD8BnSlg%3D%3D.l0AZW5DNccaov5wlvkTkTC84BL43P2wm5%2BEFpPne6%2Fo8dnbYrZcjY8zqW9EbsDRgO47tIlTwgdCJxy4hsa3Qcj2Nn6UONe5iujHq%2B6sVBZgpaedS%2BqsXajUhj2y3Xc385Nf%2F0DV1ZPSo3OAM6b9qAnqa2wwRAK17LGpsHQSu86YftsG%2B9nuaIHzYaBVJHR4nI2pqZ4wKyblUJ9C2PbwzXLi8QoHko7b0tOVYdwyMnVMOvPqqIj%2FlaqcKQNfyC2WIxkPghGs9u%2BYPLbDPmEcU%2B9%2FFQvBFlyLoesG7U4UdMJKnYX20vIL%2FpA8%2FNDD8Qj3B" rel="nofollow">CentOS 7.3:LAMP 动é�™åˆ†ç¦»éƒ¨ç½²</a>å�¯ä»¥äº†è§£ä¸€ä¸‹Apacheçš„é…�置,然å��å†�å›�过头ç�†è§£Nginx的动é�™åˆ†ç¦»å�¯æ›´ç›´è§‚。</p><pre><code>server { listen 80; server_name mingongge.com; location /static { root /wwww/web/web_static_site; } }</code></pre><p>也å�¯ä»¥ä½¿ç”¨ä¸‹é�¢çš„æ–¹æ³•</p><pre><code>location /image { alias /web/nginx/static/image/; } 注æ„�:使用alias末尾一定è¦�æ·»åŠ /,并且它å�ªèƒ½ä½�äº�location中</code></pre><p>使用å‰�å��端分离å��,å�¯ä»¥å¾ˆå¤§ç¨‹åº¦æ��å�‡é�™æ€�资æº�的访问速度,å�³ä½¿åЍæ€�æœ�务ä¸�å�¯ç”¨ï¼Œé�™æ€�资æº�的访问也ä¸�会å�—到影å“�。</p><p>å°�试牛刀ï¼�<a href="https://link.segmentfault.com/?enc=9d6YEkXTu5iJocl%2B%2F1hjpQ%3D%3D.2NgIZgzVPRQIW66GvLg2wu8iaSLkm%2Fqe94RdBt36B1E%2BZf3%2F9LphYXbK8tI3GSsstA3u3QsBFwvB0JnzFezpYJ5rBaZ%2FHiiXkW4Xs5NZpd1KK9wsLS8fxzW5FWqOG1lbN6shuAy7RaGq6yVD%2B%2FiXrmlekMgmVtekAculRZ3GUCMl%2F353opciZRybwQz3ih%2Fwvgp3GPuhfqTfctHUpnkOYf1jdbZiiA4vddRAOAQP%2BiOQLjqpP2A8eoemBOxWG3k%2Bdt9aCGU6HnZL1kqG6SSjX2NATAIpHL5%2FHx78Tg3q3N7IzBNowkgwLkeMVgBtmZ3VGKpmYoMbLCVG4luoLt7bZg%3D%3D" rel="nofollow">Nginx æ�­å»ºé�™æ€�资æº�æœ�务器</a>ï¼Œè¿™ç¯‡æ–‡ç« æ˜¯ç»™å¤§å®¶ä»‹ç»�整个æ�­å»ºè¿‡ç¨‹ï¼Œé��常详细。</p><h2>Nginx 高级功能</h2><p>除了负载å�‡è¡¡ï¼Œ<a href="https://link.segmentfault.com/?enc=K40tOeoSbKVjoB5Cs%2FID6w%3D%3D.18jPzEzdwa0liMV2OkKmNHL10EfyYfQAdeS%2BPM1g5j6yUZcjVcs4zVHzgSChNLbBVGxfPw%2BS9%2FFgcB1y5xLbeFgKwnyE5%2B%2BgAhkkWlFUPbHpPGJZ1Uz8xmeB07PnahNIfDNH2X1PGas3dOqjVV46bcN%2F8AiwXcK2tdcUIT07hehFWcQGlUty4RqSeVg45Zp%2FgLSnSV8nRlUJ3RBbFNc%2BBnFdPoYuv%2Bn7RGDdfHXWGl%2FqIQPMNW%2BltqGlsEIgt4UVZWIKCQsvKlDPqAAJt4cgan6s22A4ErFXdLPaaBiHHhF8gkF2Dek0Nshco9%2Bytpe0vxFjA76VtWV0Dx%2FVTeY4cA%3D%3D" rel="nofollow">Nginx还å�¯ä»¥å�šå¾ˆå¤šï¼Œé™�æµ�ã€�缓存ã€�黑白å��å�•ç­‰</a></p><h6>é‡�定å�‘é…�ç½®</h6><pre><code>location / { return 404; #ç›´æ�¥è¿”å›�状æ€�ç � } location / { return 404 "pages not found"; #è¿”å›�状æ€�ç � + 一段文本 } location / { return 302 /blog ; #è¿”å›�状æ€�ç � + é‡�定å�‘地å�€ } location / { return https://www.mingongge.com ; #è¿”å›�é‡�定å�‘地å�€ }</code></pre><p>示例如下</p><pre><code>server { listen 80; server_name www.mingongge.com; return 301 http://mingongge.com$request_uri; } server { listen 80; server_name www.mingongge.com; location /cn-url { return 301 http://mingongge.com.cn; } } server{ listen 80; server_name mingongge.com; # è¦�在本地hosts文件进行é…�ç½® root html; location /search { rewrite ^/(.*) https://www.mingongge.com redirect; } location /images { rewrite /images/(.*) /pics/$1; } location /pics { rewrite /pics/(.*) /photos/$1; } location /photos { } }</code></pre><h6>æµ�é‡�æ‹·è´�</h6><p><strong>需求</strong>:将生产ç�¯å¢ƒçš„æµ�é‡�æ‹·è´�到预上线ç�¯å¢ƒæˆ–测试ç�¯å¢ƒï¼Œè¿™æ ·å�šæœ‰å¾ˆå¤šå¥½å¤„ï¼Œæ¯”å¦‚ï¼š</p><ul><li>å�¯ä»¥éªŒè¯�功能是å�¦æ­£å¸¸ï¼Œä»¥å�Šæœ�务的性能;</li><li>用真å®�有效的æµ�é‡�请求å�»éªŒè¯�,å�ˆä¸�ç”¨é€ æ•°æ�®ï¼Œä¸�å½±å“�线上正常访问;</li><li>这跟ç�°åº¦å�‘布还ä¸�å¤ªä¸€æ ·ï¼Œé•œåƒ�æµ�é‡�ä¸�会影å“�真å®�æµ�é‡�ï¼›</li><li>å�¯ä»¥ç”¨æ�¥æ�’查线上问题;</li><li>é‡�æ�„,å�‡å¦‚æœ�务å�šäº†é‡�æ�„,这也是一ç§�测试方å¼�ï¼›</li></ul><p>为了å®�ç�°æµ�é‡�æ‹·è´�,Nginxæ��供了ngx_http_mirror_module模å�—,这就是 <a href="https://link.segmentfault.com/?enc=NKx7U69wnX8f7Z8gGe2Zmg%3D%3D.r7O4ocAhl055zB7ITSHL58jdmH85b05bj2dSUa%2BcTa8b7MD3u4CfvpM09%2BjiAH0oTw7Bc09LPc8QHbcX0gbp3l26HmvzEK1tUAPDVLGa%2BkWWTgzvllrTvkpzYjNnjHvHh7xKknoKVP5HjDRf9391u1wvgVLHw2chJT2i4MAd9zCoTm8ihU1cwWOAA74UFm3fbY3yo%2FJeW%2BFV2UXgkN3VW7ewGLYG3qBM%2FAEe7ogiLEqMFuR0LEY4utLZgglzI2T3YiadtsUzwMd3fTGS5Qc19UjuJujryCdDfobxO8GgNaprYuExR1bMXirnmK9pfjDLEjJewHkTFJPF9nMz0%2B%2BP5Q%3D%3D" rel="nofollow">Nginx å�ˆä¸€ç‰›X的功能ï¼�æµ�é‡�æ‹·è´�</a></p><h6>é™�æµ�</h6><p>Nginx按请求速ç�‡é™�速模å�—使用的是æ¼�桶算法,å�³èƒ½å¤Ÿå¼ºè¡Œä¿�è¯�请求的å®�时处ç�†é€Ÿåº¦ä¸�会超过设置的阈值。</p><p>Nginx官方版本é™�制IPçš„è¿�æ�¥å’Œå¹¶å�‘分别有两个模å�—:</p><ul><li>limit_req_zone 用æ�¥é™�制å�•ä½�时间内的请求数,å�³é€Ÿç�‡é™�制,采用的æ¼�桶算法 "leaky bucket"。</li><li>limit_req_conn 用æ�¥é™�制å�Œä¸€æ—¶é—´è¿�æ�¥æ•°ï¼Œå�³å¹¶å�‘é™�制。</li></ul><p>葵花å®�å…¸ï¼�<a href="https://link.segmentfault.com/?enc=piq61gW2kfAjth%2FgP%2BUoXg%3D%3D.7AszJ12HBrzXHEb3aIVsYXhuDZKV4v0uMP1jNccjtL8QSpINLc88nZUezymX5PYvhXnKZ%2FkAfbE%2Fn%2BIsmTo07H9hLKHm%2B7H2zOZyAdj0IrKVEyc%2FBwzvu94jntDpp3SaB9CECdEbqFSYYj7FeZfFgg6uaIh7I6bMVjleQXz%2Fuwz6ZPAnYxvtJqsxC9XD004zjVAe5Ye61v266C4vB%2Fe%2FISZNb5FBWyfaN4jcO4mKDSDMnCTlB1M6JDs5KnYuyFcTD5Uoz09kXI8Bbet8iuL%2FPIE%2Fz7a3a3f8kCksoFK%2B5mWnkMRb%2BL%2FoNr27jkMxAXMzs0g8rYY6qasZXThn4BV1dg%3D%3D" rel="nofollow">一文æ��定 Nginx é™�æµ�é…�ç½®</a></p><h6>缓存</h6><p>Nginx 缓存作为性能优化的一个é‡�è¦�手段,å�¯ä»¥æ��大å‡�è½»å��端æœ�务器的负载。下é�¢æˆ‘们将介ç»� Nginx 缓存é…�置的相关指令以å�Š http 缓存机制,以å�Š Nginx 缓存å®�践案例分æ��。</p><p><img src="/img/remote/1460000041298022" alt="" title=""></p><p>å�¯å�‚考:<a href="https://link.segmentfault.com/?enc=raR4UefRPVhj4ge2YbyFog%3D%3D.Ay2TvzSCMZWrzQPXlv%2Fyqf07%2F%2FNYrEq5sRa6mfYfUU0xE90D46SRi3EeJsqDl052h5W%2Fis6tvmr212lb9QJAoEsKAWOKbgRHIaXvFatjpmrj0Thk6W9ir0U9DXse8WvXMzJO7Zt1yUCgdKAsmeu5z7QU9VinaOawhf8tIyP9HTMpA%2Fo096fAddwHKAhhrVQV2mSrj1vZUHAhlIZVSK6IrPVnR%2F3FlCtYCBIeje3xNFDYzOH%2B7horhKqfEjY8RR17DUq9dVWSI5ioBl8V1tDFTQXpAGpS35dROdkiKwmI6XWKTaY50vDrVKu3Mm76tqs2EIjwXRxWW0s3Iww161lxXw%3D%3D" rel="nofollow">Nginx 缓存机制详解ï¼�</a></p><h6>ç�°åº¦å�‘布</h6><p><img src="/img/remote/1460000041298023" alt="" title=""></p><p>执行过程:</p><ul><li>当用户请求到达å‰�端代ç�†æœ�务Nginx,内嵌的lua模å�—è§£æ��Nginxé…�置文件中的lua脚本代ç �ï¼›</li><li>Luaå�˜é‡�è�·å¾—客户端IP地å�€ï¼Œå�»æŸ¥è¯¢memcached缓存内是å�¦æœ‰è¯¥é”®å€¼ï¼Œå¦‚æ�œæœ‰è¿”å›�值执行@client_test,å�¦åˆ™æ‰§è¡Œ@client。</li><li>Location @client_test把请求转å�‘给部署了new版代ç �çš„æœ�务器,location @client把请求转å�‘给部署了normal版代ç �çš„æœ�务器,æœ�务器返å›�结æ�œã€‚整个过程完æˆ�。</li></ul><p>下é�¢æ˜¯å®‰è£…é…�置过程详细过程:<a href="https://link.segmentfault.com/?enc=UQk6RCVAx4Jrz3r59yHQlw%3D%3D.gv5NQOdUOUMoTI0vfJSZfsaY%2F0lRtPoM1%2FJCRsG7%2FldzEeVi%2FydkpBFfD5Ybq5ftOV3EV%2By8xpyYTFLg3BxAkRusZtJY5whBaQZSEHmm0Wc5awwTpkRtYhHM1VMoWQWdW7ThbRt2Aw7a8Jc0iJ%2Fqq1TNa6c4Tla6hvL79XDFravIddfD%2BYwA8%2FIAWBTUdwGRAdfNx5x6m6TUyLXZ2GKVB6poCOgGEQHDns8gQTdiz0120jhIuBcS4mIlbzMmYttx1dP9CkwjbZkAHLAEMqskxuyAIdVMK0CYkI%2F1TPdq7mPydCU11JbZQJo9LS%2FsMO18A0Z6JasrmY1mKfCJKl1MSQ%3D%3D" rel="nofollow">基äº� Nginx+lua+Memcache å®�ç�°ç�°åº¦å�‘布</a></p><p>这里还给大家æ�¨è��ä¸€ç¯‡æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=OELAXiXQALWE1e4iKAfx%2BQ%3D%3D.0B6s9CYQXEAoKD0F%2BCL9Gf4tunMgGyF8cGdG4BwqbctuAg%2FtCOy5RkT6DqZ8VOB%2BSI60ZrpsIQaeAZKXJf%2FidedccXv%2BPvNd0oD4CYSmYcJFS7DMt1mKL3HJnjhwToYzqZQ93PluNh6PBjtiT0dZlfPszCD3984mvw2LHHxJDqF%2BEh%2BdbD6lVmLrWhBElupUccDvqk8lRsuHIGr2k5InfuEUkW9%2BeLprKBtemDgS%2F8cIP%2F18ZjLlVAqtU1sqszAJOoLwcmq05CYkrM8ZkEVVYi6guv%2B6s8yHI44ldgX0v%2BM%2FDx9NE3COMUqUb8Y33ikkgBEEv8NktBDExIKZoJGYYA%3D%3D" rel="nofollow">基äº� Nginx å®�ç�°ç�°åº¦å�‘布ä¸� AB 测试</a></p><h6>å°�æ�€æ�¶æ„�访问</h6><p>看了 nginx 的访问日志,å�‘ç�°æ¯�天有好多国外的 IP 地å�€æ�¥è®¿é—®æˆ‘的网站,并且访问的内容基本上都是æ�¶æ„�çš„ã€‚å› æ­¤æˆ‘å†³å®šç¦�止国外 IP æ�¥è®¿é—®æˆ‘的网站</p><p>想è¦�å®�ç�°è¿™ä¸ªåŠŸèƒ½æœ‰å¾ˆå¤šæ–¹æ³•ï¼Œä¸‹é�¢æˆ‘å°±æ�¥ä»‹ç»�基äº� NGINX çš„ ngx_http_geoip2 模å�— æ�¥ç¦�止国外 IP 访问网站。详细的解决方案é…�置如:<a href="https://link.segmentfault.com/?enc=Vw9JJeMdc0xMvtaua%2BDi0w%3D%3D.sGhBTMwHTNQrZgtAE29Ne5TcvEgwvCzx%2F%2BMo49dH4NAMIgVJoNefUmTsPZEkxa2ozryaqpLpDZq4yuxUTatKArIcWug7%2FGwdanlPaWwaBNPyoFeStD50IeiZafHgJNEGHR%2Bn9%2BUzpR1ied5iZa2TXzO5UkVp%2Fl%2F%2B9BBtjsPISsFTnKl8caYjBHStKjotv1rjE56u73J8b9cVKfIsNEvAlfUeQ99QqQoG5EuE0i1bJShmgLvUyv7EIYWas8cptzmiHlixkG0v4smyCOWWyoaAErWXuPTD081AYypEr1gxxW9tZpa9v3WuKuMbJ0dqrfV6llu3XJg6dm1hWmWWZ6cWHA%3D%3D" rel="nofollow">通过 Nginx æ�¥å®�ç�°å°�æ�€æ�¶æ„�访问</a></p><h6>Nginx+keepalived å®�ç�°é«˜å�¯ç”¨</h6><p>Keepalived软件起åˆ�是专为LVSè´Ÿè½½å�‡è¡¡è½¯ä»¶è®¾è®¡çš„,用æ�¥ç®¡ç�†å¹¶ç›‘æ�§LVS集群系统中å�„个æœ�务节点的状æ€�,å��æ�¥å�ˆåŠ å…¥äº†å�¯ä»¥å®�ç�°é«˜å�¯ç”¨çš„VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余å��è®®ï¼‰åŠŸèƒ½ã€‚å› æ­¤ï¼ŒKeepalived除了能够管ç�†LVS软件外,还å�¯ä»¥ä½œä¸ºå…¶ä»–æœ�务(例如:Nginxã€�Haproxyã€�MySQL等)的高å�¯ç”¨è§£å†³æ–¹æ¡ˆè½¯ä»¶ã€‚keepalived高å�¯ç”¨é›†ç¾¤æœ�务</p><p><img src="/img/remote/1460000041298024" alt="" title=""></p><p>安装å�Šé…�置过程请å�‚考:<a href="https://link.segmentfault.com/?enc=TMicGdqDakMAcwvIAUumYA%3D%3D.8xie1lTc90LuGY2TIp1WTMsXOh1JfQVcYifJMGV0rms3%2BtXVAgChBPZlvXqalzsz7pWNbq5Seu6JS3NEtAk9zYs%2B8lD9KoDeWM%2FdsAPp7YJiwLmQr2Gr6d8myJofd1sLGbVAoN7gKThKmHk9jAVx0%2FSjYi3K8TLQx1pZtMgGgczQi2omUdp8hM7PsZsEYuMws2YP%2BpC8YDSj6DjgJj7HJngjccYpXS5wgPIxkTVp07bAxZ2M%2Fid0EzyG6PwCNOCwRIA5zeHCR3qQk4UuMbjQURTB7BDb7QkJTPsnK9dAN75J8Hku6K0HQgaDyJhuhfxQkDMCw0IbhGLO66JcPfHRvw%3D%3D" rel="nofollow">Nginx+keepalived å®�ç�°é«˜å�¯ç”¨ï¼Œé˜²ç›—链å�ŠåЍé�™åˆ†ç¦»</a>é…�置,写得太好了ï¼�</p><h2>Nginx 终æ��指å�—</h2><p>介ç»�用æ�¥æ��高Nginxæœ�务器的安全性,稳定性和性能的12ç§�æ“�作。</p><ul><li>ä¿�æŒ�Nginxçš„å�Šæ—¶å�‡çº§</li><li>å�»æ�‰ä¸�用的Nginx模å�—</li><li>ç¦�用server_tokens项</li><li>ç¦�æ­¢é��法的HTTP User Agents</li><li>ç¦�æ�‰ä¸�需è¦�çš„ HTTP 方法</li><li>设置缓冲区容é‡�上é™�</li><li>é™�制最大è¿�æ�¥æ•°</li><li>设置日志监æ�§</li><li>阻止图片外链</li><li>ç¦�æ­¢ SSL 并且å�ªæ‰“å¼€ TLS</li><li>è¯�ä¹¦åŠ å¯†ï¼ˆHTTPS)</li><li>é‡�定å�‘HTTP请求到HTTPS</li></ul><p>以上12个具体的é…�置过程å�¯å�‚考:<a href="https://link.segmentfault.com/?enc=GwVTnukG19sPPhssW%2BOXqQ%3D%3D.sB76lwOek0L8aLSDpmtlwujN2%2BOK6ALVJs8cQBjLr%2BzZesMBReVZtfqBKe0%2F0%2BkexGT9TFCTu6f4E%2BiVLkiSisjMQu7FDTrbYhQm9j%2F6%2F5zIGTBl%2B%2FNztbPHFY%2FK8CIBFS0FSmDP2ocDnZvsE8%2BnSogHactN9VwGjRn7%2BrJSb3%2BYuV7rO4ZJeb0iOGRAT9fo6gm%2FQy0n7KwcnbTzFH4UlHDIwPrr3AbbeWG4YlDWzosn2Rbli5qUkw6l48w1RVO2F5sPVRHPzwkQTlyh9oUCBLPvrXjI9AUGzRiGqPHGcOFnqAC%2B%2Fyi34LNa1S6A%2BD3gL%2FTXfcFftN4OO1FR%2BFZ%2FeA%3D%3D" rel="nofollow">æ��高Nginxæœ�务器硬度的12个技巧</a></p><h2>Nginx 监æ�§</h2><p>监æ�§Webæœ�务器对äº�查看网站上å�‘生的情况至关é‡�è¦�。关注最多的便是日志å�˜åŠ¨ï¼ŒæŸ¥çœ‹å®�时日志文件å�˜åŠ¨å¤§å®¶ç¬¬ä¸€å��应应该是'tail -f /path/to/log'命令å�§ï¼Œä½†æ˜¯å¦‚æ�œæ¯�个网站的访问日志都是使用这ç§�æ–¹å¼�查看也是相当崩溃的,今天å°�编就跟大家分享一个强大的Nginx日志监æ�§å·¥å…·ã€‚</p><p>一个å°�å·¥å…·å¸®ä½ æ��定<a href="https://link.segmentfault.com/?enc=pDSAZC41O6Si4r7HPlWQOw%3D%3D.1BDSqF%2FVac1MRqLpZiuT5F%2BhvYiQXz3gfOd4YZzWAmMVid6n33VFLuyoxX8e6ICvgkKYAZ7aNFXmi4fmkJNdWOtnBywNUuoHsP7IldTUi3e8EUJLuWi0M4Ga%2FhN4FCclwkH5cPLeB6wvQ2lMzBSuIMN0zLSoygkVx6mzXwtwHxcwt0PavzQmHKQJA7FS%2B8iDCQMVpyHcvZV6uQ9wmCw6K%2BdbKMQf6aNlfXybnket37sJUJynXR6wTA%2BBKHKU1mqfRjVpc3UyxzmTgR%2FLX%2BX7w2jjukVexuzhtRBzTaj8f9owLvBXCA8RmirYKymL8BOvjZDPajDAXaeQuArGJleXvA%3D%3D" rel="nofollow">å®�时监æ�§Nginxæœ�务器</a></p><p>日常生产ç�¯å¢ƒæ�­å»ºäº†Nginx集群å��,就需è¦�ç»§ç»­æ·±å…¥ç ”ç©¶çš„å°±æ˜¯æ—¥å¸¸Nginx监æ�§ã€‚Nginx如何监æ�§ï¼Ÿç›¸ä¿¡ç™¾åº¦å°±å�¯ä»¥æ‰¾åˆ°ï¼šnginx-status</p><p>通过Nginx-status,å®�æ—¶è�·å�–到Nginx监æ�§æ•°æ�®å��,如何和ç�°æœ‰ç›‘æ�§ç³»ç»Ÿé›†æˆ�?一个很好的解决方案:<a href="https://link.segmentfault.com/?enc=pK91E3hjTgUcr6EOBFT8WQ%3D%3D.cUcc0UECx1rYhCk1bRrVulPGTYV7KKOGvA3Fg8UevfWA20Ms1b6PjK13S%2BGoOCKPvm2p3a%2F%2FTo4NP7chITuPU83W%2BLVEiXwvm4WTVdwjBOZfveRYDPHsFvgs7ac34rK0xNa6GU6%2FYHfoCo7EPPxv75bT76dYiRy189cGhHf9AZjilCWmoGKUML749tsfP4zAc6HxCCr22x6cnYyemSb2x4%2B82V7cyUCdomuVIC%2BD3FYAEcxhezWcEBVaNpgZD2VlOa8QcCgJfbX2%2Brem9GU07HSN1rHKk0kkcFS9edsF0VgamKA9xxxqA62%2FAeGqusDYYa4GBZr60cO%2B7mEBCm14kg%3D%3D" rel="nofollow">Nginx+Telegraf+Influxdb+Grafana</a></p><p>å�³é€šè¿‡Telegraf监æ�§æ�’件定时收集Nginx的监æ�§çжæ€�,存储到时åº�æ•°æ�®åº“Influxdb中,然å��通过Grafana展ç�°å�³å�¯ã€‚</p><p><img src="/img/remote/1460000041298025" alt="" title=""></p><p>这是我å�‘ç�°çš„å�ˆä¸€æ¬¾ç®¡ç�†ç¥�器,å�¯ä»¥å®�ç�°é…�置管ç�†ï¼Œå’Œæ€§èƒ½ç›‘æ�§ã€‚具体的安装ä¸�é…�ç½®è¿‡ç¨‹ï¼Œåœ¨è¿™ç¯‡æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=rAeJPPRJKlEuyHKzjt0%2BHA%3D%3D.AW%2BhfIBj04ljBCf5xohulKc4u67w46a1OiTvjqD1%2B1b6YK99El%2FKYZwPMRP0ahpaOZ0UbVxwbmyjWCFBGJr9Yi%2FNXDv30D45FivaMLOanfT7lWkbRmWWA0CaTPD4zDn0ChMSlN7GkvFy8dEOm7HVBCKHGrlRPmm6x%2Fs4ReZhLeDZ91GvU0bFLdiIhcjn4SJFnPTYVhu0HJQXrxJCnqq4QAvgbJxWQw3o9EpqiyQ1FsS5D9qS0fGpGvKqDQLsgVyc2Ya1wJdoKBE23L0NFrFsnvYOxm9WNKpF%2Ffk4rSWGIKLtt84lxI2Gj2ZRioEP365z26cMt5Z0lGrJlxTDlleUlw%3D%3D" rel="nofollow">å�ˆä¸€æ¬¾ Nginx 管ç�†å�¯è§†åŒ–ç¥�器ï¼�é…�ç½®ã€�监æ�§ä¸€æ�¡é¾™</a> 中介ç»�过了。</p><h2>Nginx 知识体系动æ€�更新地å�€</h2><p>å…³äº�Nginx 知识体系动æ€�更新地å�€ï¼Œå¤§å®¶å�¯ä»¥æŒ�续关注民工哥技术之路公众å�·ï¼Œç„¶å��查阅 Nginx 技术专æ � å�¯ä»¥å®�æ—¶æŸ¥çœ‹æ›´æ–°çš„æ–‡ç« ï¼Œæ— è®ºæ˜¯å­¦ä¹ ã€�还是查æ¼�补缺都是é��常å®�用的技术手册。</p> è°�å†�说学ä¸�会 MySQL æ•°æ�®åº“,就把这个给他扔过å�»ï¼� https://segmentfault.com/a/1190000041267504 2022-01-11T23:52:20+08:00 2022-01-11T23:52:20+08:00 民工哥 https://segmentfault.com/u/jishuroad 8 <p>大家好,我是民工哥。</p><p>å�ˆæ˜¯æ–°çš„一年奋斗路的开å�¯ï¼Œç›¸ä¿¡æœ‰ä¸�少人农å�†æ–°å¹´ä¹‹å��,肯定会有所å�˜åŠ¨ï¼ˆè·³æ§½åŠ è–ªå°‘ä¸�了)。所以,我把往期æ�¨é€�过的MySQLæŠ€æœ¯æ–‡ç« å�šäº†ä¸€ä¸ªç›¸å…³çš„æ•´ç�†ï¼ŒåŸºç¡€ä¸�好的å�¯ä»¥ä»�æœ€åŸºç¡€çš„å­¦ä¹ ä¸€é��,æ��高的也å�¯ä»¥ä»�中å†�æ��å�–深入一下。</p><p>ç �å­—ä¸�易,如有帮助,请éš�手<strong>点在看</strong>ä¸�<strong>转å�‘朋å�‹åœˆ</strong>支æŒ�ä¸€ä¸‹æ°‘å·¥å“¥ï¼Œå…³æ³¨æˆ‘ï¼Œä¸€èµ·å­¦ä¹ æ›´å¤šçš„IT技术知识,共å�Œè¿›æ­¥ã€‚</p><h2>æ•°æ�®åº“是什么</h2><p><img src="/img/remote/1460000041267506" alt="" title=""><br>æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œç®€ç§°ä¸ºDBMS(Database Management System),是用æ�¥å­˜å‚¨æ•°æ�®çš„管ç�†ç³»ç»Ÿã€‚</p><h4>DBMS çš„é‡�è¦�性</h4><ul><li>æ— æ³•å¤šäººå…±äº«æ•°æ�®</li><li>æ— æ³•æ��ä¾›æ“�作大é‡�æ•°æ�®æ‰€éœ€çš„æ ¼å¼�</li><li>å®�ç�°è¯»å�–自动化需è¦�编程技术能力</li><li>æ— æ³•åº”å¯¹çª�å�‘事故</li></ul><h4>DBMS çš„ç§�ç±»</h4><ul><li><p>层次性数æ�®åº“</p><ul><li>最å�¤è€�的数æ�®åº“ä¹‹ä¸€ï¼Œå› ä¸ºçª�出的缺点,所以很少使用了</li></ul></li><li><p>关系å�‹æ•°æ�®åº“</p><ul><li>采用行列二维表结æ�„æ�¥ç®¡ç�†æ•°æ�®åº“,类似Excel的结æ�„,使用专用的SQL语言对数æ�®è¿›è¡Œæ�§åˆ¶ã€‚</li></ul></li><li><p>关系数æ�®åº“管ç�†ç³»ç»Ÿçš„常è§�ç§�ç±»</p><ul><li>Oracle ==&gt; 甲骨文</li><li>SQL Servce ==&gt; 微软</li><li>DB2 ==&gt; IBM</li><li>PostgreSQL ==&gt; å¼€æº�</li><li>MySQL ==&gt; å¼€æº�</li></ul></li><li><p>é�¢å�‘对象的数æ�®åº“</p><ul><li>XMLæ•°æ�®åº“</li><li>键值存储系统</li><li>DB2</li><li>Redis</li><li>MongoDB</li></ul></li></ul><h2>SQL 语å�¥å�Šå…¶ç§�ç±»</h2><p><img src="/img/remote/1460000041267507" alt="" title=""></p><ul><li><p>DDL(数æ�®å®šä¹‰è¯­è¨€ï¼‰</p><ul><li>create ==&gt; 创建数æ�®åº“或者表等对象</li><li>drop ==&gt; åˆ é™¤æ•°æ�®åº“或者表等对象</li><li>alter ==&gt; 修改数æ�®åº“或者表等对象的结æ�„</li></ul></li><li><p>DML(数æ�®æ“�作语言)</p><ul><li>select ==&gt; 查询表中数æ�®</li><li>insert ==&gt; å�‘表中æ�’入数æ�®</li><li>update ==&gt; 更新表中数æ�®</li><li>delete ==&gt; åˆ é™¤è¡¨ä¸­æ•°æ�®</li></ul></li><li><p>DCL(数æ�®æ�§åˆ¶è¯­è¨€ï¼‰</p><ul><li>commit ==&gt; 决定对数æ�®åº“中的数æ�®è¿›è¡Œå�˜æ›´</li><li>rollback ==&gt; å�–消对数æ�®åº“中的数æ�®è¿›è¡Œå�˜æ›´</li><li>grant ==&gt; 赋予用户æ“�作æ�ƒé™�</li><li>revoke ==&gt; å�–消用户的æ“�作æ�ƒé™�</li></ul></li></ul><h2>SQL 的基本书写规则</h2><ul><li>SQL 语å�¥è¦�以;结尾</li><li>关键字ä¸�区分大å°�写,但是表中数æ�®åŒºåˆ†å¤§å°�写</li><li>关键字大写</li><li>表å��的首字æ¯�大写</li><li>列æ˜�ç­‰å°�写</li><li>常数的书写方å¼�是固定的</li><li>é�‡åˆ°å­—符串ã€�日期等类å�‹éœ€è¦�用到''</li><li>å�•è¯�间需è¦�ä½¿ç”¨ç©ºæ ¼åˆ†å‰²</li><li>命å��规则</li><li>æ•°æ�®åº“和表的å��ç§°å�¯ä»¥ä½¿ç”¨è‹±æ–‡ã€�æ•°æ�®ä»¥å�Šä¸‹åˆ’线</li><li>å��称必须以英文作为开头</li><li>å��ç§°ä¸�能é‡�å¤�</li><li><a href="https://link.segmentfault.com/?enc=IwutvM0RJrhVjijT02k3nw%3D%3D.6jXZ9gEQHwyHRB5Ge2%2F47a9QLpF6%2FIEuYCyD3MddRVcmOyz8ik5uPZ7dWG2OrUFeDBL6LLVm5HYEHTvE%2B5tNhnBT7%2FKIeLg%2BbyoSuaakQfjWBlUsZ7f%2F1UU5w3fbOrBCa8DHYu1TMuyNBSN5dmGC9pqUAVyc3nqeSqGM1RRzg6rYPfWbCKCFmIvZv3LsBQclD%2BYdgm9VOvVU0yYsVv%2BR5bhBRJCPbCMjPDDMr6i6EiftZdqPBKxvmIqdkEmgifcyVDrEqltl0iDZeKYlZ2IAsBogRekYv3bg0wFyjYZZHe6DVuUgT7Bi%2BYsudcYlsxxPNLwC%2F%2B3BZLDiNJw1SWI91otJVHzrp7tE1FBMYtyEZz4%3D" rel="nofollow">æ�Œæ�¡ SQL è¿™äº›æ ¸å¿ƒçŸ¥è¯†ç‚¹ï¼Œå‡ºå�»å�¹ç‰›é€¼å†�也ä¸�担心了</a></li></ul><h2>æ•°æ�®ç±»å�‹</h2><ul><li><p>integer</p><ul><li>æ•°å­—å�‹ï¼Œä½†æ˜¯ä¸�能存放å°�æ•°</li></ul></li><li><p>char</p><ul><li>定长字符串类å�‹ï¼ŒæŒ‡å®šæœ€å¤§é•¿åº¦ï¼Œä¸�è¶³ä½¿ç”¨ç©ºæ ¼å¡«å……</li></ul></li><li><p>varchar</p><ul><li>å�¯å�˜é•¿åº¦å­—符串类å�‹ï¼ŒæŒ‡å®šæœ€å¤§é•¿åº¦ï¼Œä½†æ˜¯ä¸�è¶³ä¸�å¡«å……</li></ul></li><li><p>data</p><ul><li>存储日期,年/月/æ—¥</li></ul></li></ul><p>以上内容是对通用数æ�®åº“以å�Šsql语å�¥ç›¸å…³çš„知识点介ç»�,本文ä¸�å�šè¿‡å¤šçš„赘述,本文主è¦�针对关系å�‹æ•°æ�®åº“:MySQL æ�¥è¿›è¡Œå�„æ–¹é�¢çš„知识点总结。</p><h2>MySQL æ•°æ�®åº“简介</h2><p>MySQL 是最æµ�行的关系å�‹æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œåœ¨ WEB 应用方é�¢ MySQL 是最好的 RDBMS(Relational Database Management System:关系数æ�®åº“管ç�†ç³»ç»Ÿ)应用软件之一。</p><p>MySQL 是一个关系å�‹æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œç”±ç‘�å…¸ MySQL AB å…¬å�¸å¼€å�‘,目å‰�å±�äº� Oracle å…¬å�¸ã€‚MySQL 是一ç§�å…³è�”æ•°æ�®åº“管ç�†ç³»ç»Ÿï¼Œå…³è�”æ•°æ�®åº“将数æ�®ä¿�存在ä¸�å�Œçš„表中,而ä¸�是将所有数æ�®æ”¾åœ¨ä¸€ä¸ªå¤§ä»“åº“å†…ï¼Œè¿™æ ·å°±å¢�åŠ äº†é€Ÿåº¦å¹¶æ��高了ç�µæ´»æ€§ã€‚</p><ul><li>MySQL 是开æº�的,目å‰�éš¶å±�äº� Oracle 旗下产å“�。</li><li>MySQL 支æŒ�大å�‹çš„æ•°æ�®åº“。å�¯ä»¥å¤„ç�†æ‹¥æœ‰ä¸Šå�ƒä¸‡æ�¡è®°å½•的大å�‹æ•°æ�®åº“。</li><li>MySQL ä½¿ç”¨æ ‡å‡†çš„ SQL æ•°æ�®è¯­è¨€å½¢å¼�。</li><li>MySQL å�¯ä»¥è¿�行äº�多个系统上,并且支æŒ�多ç§�语言。这些编程语言包括 Cã€�C++ã€�Pythonã€�Javaã€�Perlã€�PHPã€�Eiffelã€�Ruby å’Œ Tcl 等。</li><li>MySQL 对PHP有很好的支æŒ�,PHP 是目å‰�最æµ�行的 Web å¼€å�‘语言。</li><li>MySQL 支æŒ�大å�‹æ•°æ�®åº“,支æŒ� 5000 万æ�¡è®°å½•的数æ�®ä»“库,32 ä½�系统表文件最大å�¯æ”¯æŒ� 4GB,64 ä½�系统支æŒ�最大的表文件为8TB。</li><li>MySQL 是å�¯ä»¥å®šåˆ¶çš„,采用了 GPL å��è®®ï¼Œä½ å�¯ä»¥ä¿®æ”¹æº�ç �æ�¥å¼€å�‘自己的 MySQL 系统。</li></ul><p>在日常工作ä¸�å­¦ä¹ ä¸­ï¼Œæ— è®ºæ˜¯å¼€å�‘ã€�è¿�ç»´ã€�还是测试,对äº�æ•°æ�®åº“çš„å­¦ä¹ æ˜¯ä¸�å�¯é�¿å…�的,å�Œæ—¶ä¹Ÿæ˜¯æ—¥å¸¸å·¥ä½œçš„必备技术之一。在互è�”网公å�¸ï¼Œå¼€æº�产å“�线比较多,互è�”网ä¼�业所用的数æ�®åº“å� 比较é‡�的还是MySQL。</p><p>更多关äº�MySQLæ•°æ�®åº“的介ç»�,有兴趣的读者å�¯ä»¥å�‚è€ƒå®˜æ–¹ç½‘ç«™çš„æ–‡æ¡£å’Œè¿™ç¯‡æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=lUIZn3GUl2z7Pzra7Nr5rQ%3D%3D.X%2FtbEcI04sqo6097jZ6uVaN6NcMRCPYfHtcSVr2YIlUzjoa8gRHH%2FdolqcXw5ZcPqAwOEsq08FSQO%2F%2FyzHzD3JpGossaOaiRIfkEJUlXasj4JkBXsUdrD4Pm6Lcf0hd3OFixMuhsGsxhotMY865DC3OZGjMr%2FrIteoU%2FuHzPPdmfXTApwfQ3pf0nsdPd1ldmJfOydfRB%2FvOrNOZzbdh%2BN4%2FT6QoaZ11uTbW0iqbjs8ZvKwhEgwP8aaLS4abdCPR8KjuCxYz0QnAAgnKbSEpPINpQjDDrkOHWaLohJRPZl8qo8j8wnH%2F7Tk7IJyW76tFHOshjpd9MyuJ6GneK9PWzjw%3D%3D" rel="nofollow">å�¯èƒ½æ˜¯å…¨ç½‘最好的MySQLé‡�è¦�知识点</a>,关äº�MySQLæ�¶æ�„的介ç»�å�¯ä»¥å�‚考:<a href="https://link.segmentfault.com/?enc=sQm59LOmukvPoMH1Lnop5g%3D%3D.fsLX1Y382oTA2f94HkZ8ijlRl5lZMErpa%2F3RNg0Uw1cdGEcD1MDENG6ZLxPUZlIpcgSZJnICBJcJDuT%2B2qoYHSpWj9tZG0xk5asTeiVAFqbCTbvYP2bY%2FNRHR92FrfooEDGS4oE2HyGfhNBkpi1rSa5lzOdsgKIcuaHB02iubs9Xk%2FuRU2VLpvMn27gP9hvGY54RXAq2pQcmLSIoUl4NGOL8MN7m5M1i2M%2F5E3uoaNOWVHcIkFKKsU6cyvbXyHsnOT9R%2FgF76X7ILxzm6aSHEDHKxCdhBAMujN%2FzG3JOIgsnVQIoub5FE48gpti1S05j1wMqGKD8NciKNj9YS89g2w%3D%3D" rel="nofollow">MySQL æ�¶æ�„总览-&gt;查询执行æµ�程-&gt;SQL è§£æ��顺åº�</a></p><h2>MySQL 安装</h2><p>MySQL 8æ­£å¼�版8.0.11å·²å�‘布,官方表示MySQL8è¦�比MySQL 5.7å¿«2å€�,还带æ�¥äº†å¤§é‡�的改进和更快的性能ï¼�到底è°�最牛呢?请看:<a href="https://link.segmentfault.com/?enc=ZOPzCV9ALsxqYgC5fHjsMw%3D%3D.WdxNy2%2FZOVq8bfcQcca6OD3PYy%2FQuucoikU9uPPzKYlkzG2oeZ8XW0WSXhO3zwPQFkzX188g3YIwLuaU3dh7rMOgsVKVEGH8IzyMW7guYPvrAiPHignt9h5SFQ8xg2fvcBl4GLQeho8NmE7GY%2BcW5Vy3%2Bk2YXk%2BNwRiKbfk8iVZfZqzE0BxgSSc7aLj0aNjmEMoEDF07WUz6msUUwomaHWtzWPatPZYubbBWu9Z%2FTIL97xxosM1Ix1jZIX6qPi1lvidIjJAYgNz0BKKIizSyROjeWaYt3NItxq9LWXWyKU9eUld8kdOS5jBhN6zgebx2" rel="nofollow">MySQL 5.7 vs 8.0,哪个性能更牛?</a></p><p>详细的安装步骤请å�‚阅:<a href="https://link.segmentfault.com/?enc=iW%2FJUHbgVHDhFVR86axp0A%3D%3D.JViJzSioBt9L171l6%2BD44%2BSLfu58HfLYsZBuI4xdZMi82F5JVU7f5Vr0OpTQGaFk8VYA0yECqq3aCE9maYMzs8vrll32syyDKmV%2FNa5pzkLdG2F7Szx%2BIZkzJaK6Bipw1NUYx0Lj9yX9p1YwhASln9sYeXIt5cyOOSP2BhZEJ0vtMoxdiSyp0tGzmY9hpCoYe3mTNyIUmSuMn0Gdn%2BWsKa6EJmN4SmiCkDw9bJ7bZ6TqWjTePH4k55C9LY9dC0Bnv9EKHM8O7yi20L%2BNYXbQ32u0grE9tgMae2gZ6YqgYCcRY4nvOtHAnEkKhAzJ7k%2FVewlSsGNg%2FMdvu302RwfkGw%3D%3D" rel="nofollow">CentOS 下 MySQL 8.0 安装部署,超详细ï¼�</a>,介ç»�å‡ ä¸ª 8.0 在关系数æ�®åº“æ–¹é�¢çš„主è¦�新特性:<a href="https://link.segmentfault.com/?enc=caMbt35ky8zHRVPfqVo4mw%3D%3D.MY1m0ACuJo%2Bi%2BEx%2Boeut61gXh%2ByMTkKADl7BrAXaCGqYKq5CJskU5MG3ugnhSYrj4dYrYZpxAshAdhpUEoDjAnH6BdzH8XaW49%2BiHiVBEkPI7n55gVwIHsWeZtrEPjXo4TLi%2B4uM1X7rRKnHdyUveGURC83pRWzTu4CVYo%2BU7mVDU2LOYDtYsn9CO4hoj0orUDtPKPcs1ZwEmvHQVJiTCQqOY15Xbdo2PhPehS9vD5o3YDhCAu8hyYRRPSG0DQxNC7cD%2BXhF4z0wPQaEGLVVzm0uVpm%2BdIO28Bm0nZRhsLzA369uQ%2FHGZFqSUVSlXLTNtkSF2lTo2pLjXgXGVOQDUg%3D%3D" rel="nofollow">MySQL 8.0 çš„ 5 个新特性,太å®�用了ï¼�</a></p><h2>MySQL基础入门æ“�作</h2><h6>Windowsæœ�务</h6><pre><code class="sql">-- å�¯åЍMySQL net start mysql -- 创建Windowsæœ�务 sc create mysql binPath= mysqld_bin_path(注æ„�:等å�·ä¸�å€¼ä¹‹é—´æœ‰ç©ºæ ¼)</code></pre><h6>è¿�æ�¥ä¸�æ–­å¼€æœ�务器</h6><pre><code class="sql">mysql -h 地å�€ -P 端å�£ -u 用户å�� -p 密ç � SHOW PROCESSLIST -- 显示哪些线程正在è¿�行 SHOW VARIABLES -- 显示系统å�˜é‡�ä¿¡æ�¯</code></pre><h6>æ•°æ�®åº“æ“�作</h6><pre><code class="sql">-- 查看当å‰�æ•°æ�®åº“ SELECT DATABASE(); -- 显示当å‰�æ—¶é—´ã€�用户å��ã€�æ•°æ�®åº“版本 SELECT now(), user(), version(); -- 创建库 CREATE DATABASE[ IF NOT EXISTS] æ•°æ�®åº“å�� æ•°æ�®åº“选项 æ•°æ�®åº“选项: CHARACTER SET charset_name COLLATE collation_name -- 查看已有库 SHOW DATABASES[ LIKE 'PATTERN'] -- 查看当å‰�库信æ�¯ SHOW CREATE DATABASE æ•°æ�®åº“å�� -- 修改库的选项信æ�¯ ALTER DATABASE 库å�� 选项信æ�¯ -- åˆ é™¤åº“ DROP DATABASE[ IF EXISTS] æ•°æ�®åº“å�� å�Œæ—¶åˆ 除该数æ�®åº“相关的目录å�Šå…¶ç›®å½•内容</code></pre><h6>表的æ“�作</h6><pre><code class="sql">-- 创建表 CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [库å��.]表å�� ( 表的结æ�„定义 )[ 表选项] æ¯�个字段必须有数æ�®ç±»å�‹ 最å��一个字段å��ä¸�能有逗å�· TEMPORARY 临时表,会è¯�结æ�Ÿæ—¶è¡¨è‡ªåŠ¨æ¶ˆå¤± 对äº�字段的定义: 字段å�� æ•°æ�®ç±»å�‹ [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] -- 表选项 -- 字符集 CHARSET = charset_name 如æ�œè¡¨æ²¡æœ‰è®¾å®šï¼Œåˆ™ä½¿ç”¨æ•°æ�®åº“字符集 -- 存储引æ“� ENGINE = engine_name 表在管ç�†æ•°æ�®æ—¶é‡‡ç”¨çš„ä¸�å�Œçš„æ•°æ�®ç»“æ�„,结æ�„ä¸�å�Œä¼šå¯¼è‡´å¤„ç�†æ–¹å¼�ã€�æ��供的特性æ“�作等ä¸�å�Œ 常è§�的引æ“�:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive ä¸�å�Œçš„引æ“�在ä¿�存表的结æ�„和数æ�®æ—¶é‡‡ç”¨ä¸�å�Œçš„æ–¹å¼� MyISAM表文件å�«ä¹‰ï¼š.frm表定义,.MYD表数æ�®ï¼Œ.MYI表索引 InnoDB表文件å�«ä¹‰ï¼š.frm表定义,表空间数æ�®å’Œæ—¥å¿—文件 SHOW ENGINES -- 显示存储引æ“�的状æ€�ä¿¡æ�¯ SHOW ENGINE 引æ“�å�� {LOGS|STATUS} -- 显示存储引æ“�的日志或状æ€�ä¿¡æ�¯ -- 自å¢�èµ·å§‹æ•° AUTO_INCREMENT = 行数 -- æ•°æ�®æ–‡ä»¶ç›®å½• DATA DIRECTORY = '目录' -- 索引文件目录 INDEX DIRECTORY = '目录' -- 表注释 COMMENT = 'string' -- 分区选项 PARTITION BY ... (详细è§�手册) -- 查看所有表 SHOW TABLES[ LIKE 'pattern'] SHOW TABLES FROM 表å�� -- 查看表机æ�„ SHOW CREATE TABLE 表å�� (信æ�¯æ›´è¯¦ç»†ï¼‰ DESC 表å�� / DESCRIBE 表å�� / EXPLAIN 表å�� / SHOW COLUMNS FROM 表å�� [LIKE 'PATTERN'] SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] -- 修改表 -- 修改表本身的选项 ALTER TABLE 表å�� 表的选项 eg: ALTER TABLE 表å�� ENGINE=MYISAM; -- 对表进行é‡�命å�� RENAME TABLE å�Ÿè¡¨å�� TO 新表å�� RENAME TABLE å�Ÿè¡¨å�� TO 库å��.表å�� (å�¯å°†è¡¨ç§»åŠ¨åˆ°å�¦ä¸€ä¸ªæ•°æ�®åº“) -- RENAMEå�¯ä»¥äº¤æ�¢ä¸¤ä¸ªè¡¨å�� -- 修改表的字段机æ�„(13.1.2. ALTER TABLE语法) ALTER TABLE 表å�� æ“�作å�� -- æ“�作å�� ADD[ COLUMN] 字段定义 -- å¢�åŠ å­—æ®µ AFTER 字段å�� -- 表示å¢�åŠ åœ¨è¯¥å­—æ®µå��å��é�¢ FIRST -- 表示å¢�åŠ åœ¨ç¬¬ä¸€ä¸ª ADD PRIMARY KEY(字段å��) -- 创建主键 ADD UNIQUE [索引å��] (字段å��)-- 创建唯一索引 ADD INDEX [索引å��] (字段å��) -- 创建普通索引 DROP[ COLUMN] 字段å�� -- åˆ é™¤å­—æ®µ MODIFY[ COLUMN] 字段å�� 字段å±�性 -- 支æŒ�对字段å±�性进行修改,ä¸�能修改字段å��(所有å�Ÿæœ‰å±�性也需写上) CHANGE[ COLUMN] å�Ÿå­—段å�� 新字段å�� 字段å±�性 -- 支æŒ�对字段å��修改 DROP PRIMARY KEY -- åˆ é™¤ä¸»é”®(åˆ é™¤ä¸»é”®å‰�éœ€åˆ é™¤å…¶AUTO_INCREMENTå±�性) DROP INDEX 索引å�� -- åˆ é™¤ç´¢å¼• DROP FOREIGN KEY 外键 -- åˆ é™¤å¤–é”® -- åˆ é™¤è¡¨ DROP TABLE[ IF EXISTS] 表å�� ... -- 清空表数æ�® TRUNCATE [TABLE] 表å�� -- å¤�制表结æ�„ CREATE TABLE 表å�� LIKE è¦�å¤�制的表å�� -- å¤�制表结æ�„和数æ�® CREATE TABLE 表å�� [AS] SELECT * FROM è¦�å¤�制的表å�� -- 检查表是å�¦æœ‰é”™è¯¯ CHECK TABLE tbl_name [, tbl_name] ... [option] ... -- 优化表 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... -- ä¿®å¤�表 REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] -- 分æ��表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...</code></pre><p>更多相关的æ“�作基础知识点请å�‚é˜…ä»¥ä¸‹æ–‡ç« ï¼š</p><ul><li><a href="https://link.segmentfault.com/?enc=4a2yV83B2Gj8cTjL6JMlQA%3D%3D.DJn4%2FmfyLHsYbwWRxtAU6mBzbqx3pIbCfxg9uaeeOyvMIC8Mrix0r7Fc204t8YPKRNwyR75ap1nPDQ7eRAXH3hM9%2BPyWl4nF%2BVuuyHC4%2FZGCrQjPEcgb5qNTZRg3UIlwrol1OCx61nIp%2FB9A%2FAyfKwEF%2BRO%2FpMFFg0%2B03oVdkF4Kk30VOp34CaO5hxamqYS%2B%2BXHyqMtzuiSmGzucCc67ruvSGypUIhQuIJoraajJxZHJ%2FbH4BGYPAIMRvlAfSzKKJs9c9GmjiiCUWRbODikgJzvQmoZjk6whtORhLTFlwLh0dgO%2Blfxf6cI5NBCuScJfhHsIjPMbd2mUAk8kD5QNqQ%3D%3D" rel="nofollow">MySQLæ•°æ�®åº“入门———常用基础命令</a></li><li><a href="https://link.segmentfault.com/?enc=BALZ2kiNvIN0rmMij2Vhag%3D%3D.g%2FTcHvRgcB2Gk%2BsLUqkObaj89kB02xNFefU33Xh%2FMvvJEO8%2BF1fOPvm%2FIYlGsSSaqbpGS4mse97vVfEaMdwcEiHZzq8NcA24ihqWZHmob4y%2FRHz4g6dy8VQjydJ6ugLpoaKwpNUmql1Q7m30L2%2FM7Ad%2BiPRQqlTLN%2BpcZaKniF8knKLBSNPouRDCTnWfCfJBgx3OpUDRE%2FjuRkRUbPdngBWJ715oLzq9lHOQsZyEk1xAgN8tuSiPx1HeIQh5GfUcmRcRH4ffceWBNSmF2XOBSELI4le0w%2BAwiB3EcL4Cf2Nae5%2BPRVwLbzQp3gKVbG3ExzymagQEWbt48db%2FMWKZMA%3D%3D" rel="nofollow">1047 行 MySQL è¯¦ç»†å­¦ä¹ ç¬”è®°ï¼ˆå€¼å¾—å­¦ä¹ ä¸�æ”¶è—�)</a></li><li><a href="https://link.segmentfault.com/?enc=tOFey6gJS33tH8lN1R8W%2BA%3D%3D.k7UuodaonimYyz3mFHhRPb6j1l18oscMfmdY4NaWVF%2FTWBcGmaZ1hxj0OqkGbuu4LNUsO4C5e2cvW2pNLx7JpoNf4BgdZx%2Fz862wROe9aK0hFOdZu%2Fuxr%2BtvSqwqeIYzY%2BpunhF6gOLRnkLcuL3QwC6EzWrJNrmOXblYKY7wQDhJSeZRXzAXYctFODueTPnOuRfDV%2BZnBNE3EKtMyCnd1uU989iC5sgrrFxS810pkFGffJ56bkbbcajPw%2BhCG1Ut8iEQNtnovpt8Vr%2F0%2B3UIazhT4DEYP6LNNYle3Kr4WEZlr89tXfXlcDC3WP9v7%2BH7LaH54IyPnWKK7hjbpOH4cw%3D%3D" rel="nofollow">MySQL基础入门之常用命令介ç»�</a></li></ul><h2>MySQL 多å®�例é…�ç½®</h2><p><a href="https://link.segmentfault.com/?enc=SL482Jkpn4MjFj5mCFP%2BuA%3D%3D.QAxvSqRjiFJxPEv1kxOgnUvN%2FDO9Ey31HdEQ4VnUaZ%2F4si9Qy575EK6y113hlpEtb0oXtMQQmamDDhpy5xMo%2BOTacY2ntUaF2SNbyEzWajmXqjGdhQl79fd2gwr2vG1d6VUazVuOOb52%2BWs%2B4Tre3FRGhAVuGqLhIhUATNkj9fajKCL5ojUEroO%2FGIeOqyAN%2Fwn5xGoxV%2Fjyweo%2B%2BY3YhsCxK9FPngHNWdz7MtYsGKkM6wTyjtNTb51a%2FTK9bEAMuy3CD2yHdrC4maiOpyrsZprMtFsJzsZpA1n1xnOHhmtEJl%2Bs%2B%2BNkRuGR96ZFFBLPvn8O95oURCoHxmpR7dzC6Q%3D%3D" rel="nofollow">MySQLæ•°æ�®åº“入门——多å®�例é…�ç½®</a></p><p><img src="/img/remote/1460000041267508" alt="" title=""></p><h2>MySQL 主ä»�å�Œæ­¥å¤�制</h2><h6>å¤�制概述</h6><p>Mysql内建的å¤�制功能是æ�„建大å�‹ï¼Œé«˜æ€§èƒ½åº”用程åº�的基础。将Mysql的数æ�®åˆ†å¸ƒåˆ°å¤šä¸ªç³»ç»Ÿä¸Šå�»ï¼Œè¿™ç§�分布的机制,是通过将Mysqlçš„æŸ�一å�°ä¸»æœºçš„æ•°æ�®å¤�制到其它主机(slaves)上,并é‡�新执行一é��æ�¥å®�ç�°çš„。å¤�制过程中一个æœ�务器充当主æœ�务器,而一个或多个其它æœ�务器充当ä»�æœ�务器。主æœ�务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循ç�¯ã€‚这些日志å�¯ä»¥è®°å½•å�‘é€�到ä»�æœ�务器的更新。当一个ä»�æœ�务器è¿�æ�¥ä¸»æœ�务器时,它通知主æœ�务器ä»�æœ�务器在日志中读å�–的最å��一次æˆ�功更新的ä½�置。ä»�æœ�务器æ�¥æ”¶ä»�那时起å�‘生的任何更新,然å��å°�é”�并等待主æœ�务器通知新的更新。</p><p>请注æ„�å½“ä½ è¿›è¡Œå¤�制时,所有对å¤�制中的表的更新必须在主æœ�务器上进行。å�¦åˆ™ï¼Œä½ å¿…é¡»è¦�å°�心,以é�¿å…�用户对主æœ�务器上的表进行的更新ä¸�对ä»�æœ�务器上的表所进行的更新之间的冲çª�。<br>mysql支æŒ�çš„å¤�制类å�‹ï¼š</p><ul><li>L默认采用基äº�语å�¥çš„å¤�制,效ç�‡æ¯”较高。一旦å�‘ç�°æ²¡æ³•精确å¤�制时, 会自动选ç�€åŸºäº�行的å¤�制。</li><li>l5.0开始支æŒ�</li><li>采用基äº�行的å¤�制。</li></ul><h6>å¤�制解决的问题</h6><p>MySQLå¤�制技术有以下一些特点:</p><ul><li>æ•°æ�®åˆ†å¸ƒ (Data distribution )</li><li>负载平衡(load balancing)</li><li>备份(Backups)</li><li>高å�¯ç”¨æ€§å’Œå®¹é”™è¡Œ High availability and failover</li></ul><h6>å¤�制如何工作</h6><p>整体上æ�¥è¯´ï¼Œå¤�制有3个步骤:</p><p><img src="/img/remote/1460000041267509" alt="" title=""></p><ul><li>master将改å�˜è®°å½•到二进制日志(binary log)中(这些记录å�«å�šäºŒè¿›åˆ¶æ—¥å¿—事件,binary log events);</li><li>slaveå°†masterçš„binary log eventsæ‹·è´�到它的中继日志(relay log)ï¼›</li><li>slaveé‡�å�šä¸­ç»§æ—¥å¿—中的事件,将改å�˜å��æ˜ å®ƒè‡ªå·±çš„æ•°æ�®ã€‚</li></ul><p>更多相关的更深入的介ç»�å�‚考:<a href="https://link.segmentfault.com/?enc=MLP3jEt2N%2F4gMBpXxLEF3Q%3D%3D.XU09x6FeMfUDRzrp8v9uyWlOvQo6LAaoPzaeXFSCFirddkaOBMOYQRNaq0XzRvOxBKgZtbwh6XPZWwIACw0jUZjXMXIWJ%2F3XvoBseI7O2Y7hsxcsgLbVPwWzGXCzElsaO9QyUBpOP19%2FFL9S7wWEFseR9K6CgtJBzQmWK9eQb1rtUarRQDlrh8piQINn5R8dAq0TpTI%2F2t%2Bf72PBhhDZkyAK4rqaZeg%2FcuE1CyXz%2F0lPU8QsSnwMG2lNu2EtByMfEgO1QlOuJHqF9KJp%2FY%2Fisk5QL5huoFXetkqdAOwpub3WiGCCZrYAy%2BjCHB7vjBlvFr5FUdt1haMqyYqJmpe0lg%3D%3D" rel="nofollow">Mysql主ä»�æ�¶æ�„çš„å¤�制å�Ÿç�†å�Šé…�置详解</a></p><h5>MySQL å¤�制有两ç§�方法:</h5><ul><li>ä¼ ç»Ÿæ–¹å¼�:基äº�主库的bin-log将日志事件和事件ä½�ç½®å¤�制到ä»�库,ä»�库å†�åŠ ä»¥ 应用æ�¥è¾¾åˆ°ä¸»ä»�å�Œæ­¥çš„目的。</li><li>Gtidæ–¹å¼�:global transaction identifiers是基äº�事务æ�¥å¤�制数æ�®ï¼Œå› 此也就ä¸� ä¾�赖日志文件ä½�置,å�Œæ—¶å�ˆèƒ½æ›´å¥½çš„ä¿�è¯�主ä»�库数æ�®ä¸€è‡´æ€§ã€‚</li><li><a href="https://link.segmentfault.com/?enc=w%2BuK5B7aA07epuvwmcXraA%3D%3D.BXgEsJF5a%2FOMQ5urW%2Bh%2BuWdshABS%2Fubf9r7p91f%2BGhYyDYOpIMh4dPbp1PHZObmKftZS9d18HW%2F918RDyRDYZyl%2FrVXN3klEmPLGh7q3U3Ts30QZJhD1VJVA5%2FTYTaH6cVKTiJPlGfEwqkhVYcn2Rr%2FsE6NIBe%2FObugmYgJavfjQm8LxuBMK8BAQbkF3l%2BIHbsd4PbdUfGVu4dVNZOP3ezxlQ88lEek%2Fp%2BX88d1w0xXtxUqSB6AfNUW9KdNGfo6PxxmMzHRvPeMH5cCtP%2B5gzBj0RODd8YEtzprzvfLlcD0qTIfzV3%2BUdFObz%2FQimRzx" rel="nofollow">MySQLæ•°æ�®åº“主ä»�å�Œæ­¥å®�战过程</a></li><li><a href="https://link.segmentfault.com/?enc=pXDNfogKtn2jr%2B%2FeS8cmvA%3D%3D.f6Ie5EbNBqyQVkCKsKxz7K4AcHVfSlpAtyfusQERnzKBHvu67xEfV3%2FydJQnfNqmtp0RqwwKYFPul15nWoBG9n4iZXX%2Fzpq0KVVCPmwVcFWRYVnbSoIpFEIilPwPQX21KKZNbXN4CpYxNBubgB9uXmQ3GhA9z69VgDeZes3L91euEaaBZl%2BUZ0gtpCJK4EkViladaVAvQT5%2FwhJW6ef6odszhHeyo%2BazHyFPmfGdAxqtrv9lR41Bo0%2FP%2BRMicjLp90rTllrWnpLMyUCJ7lahxa0lHuIJG0PZPLW1i3dFORqQ0xNJwSv1fHP%2F0K58WI3IWU2riGrVyliQxoP4n7d4pg%3D%3D" rel="nofollow">基äº� Gtid çš„ MySQL 主ä»�å�Œæ­¥å®�è·µ</a></li><li><a href="https://link.segmentfault.com/?enc=P8vJI803fz3bSXL8Hs2p9A%3D%3D.Mlg%2FXMA6Ar2yKELvhZRQTdY0gpLGjkdxHwJvQEpPkgUb3Bj2Hfd6Q%2BLLZtYqg3yPCGm%2B9t1XAFYbk0bb6w92EWQOrejbzhrYB8cD5%2FKnprAC3tbZvfIwGH5DQakN3yQWC%2Fk77h9%2Bh1DAUzyQS4fFkXV7HqNRqcCiuqo5C2yI%2F3%2BDI1LYYKIrxRweJ5G06wZg23Rj%2FK7qsqSv2X7gE6CXlv5abvssHUrRBTdFyCM8hH4yNQvF3psyKjvfi3dlSAeqWx12E38jvoAcWFmZ6ZcSzIexnv4OdUAGH7%2FmHF5G0iprYQtyswhLWMytAGFFL%2BUJ" rel="nofollow">MySQL 主ä»�å�Œæ­¥æ�¶æ�„ä¸­ä½ ä¸�知é�“的“å�‘â€�</a><a href="https://link.segmentfault.com/?enc=%2BCZMprXIByEjn7AJiG2Zdw%3D%3D.T%2BYGlPXKYrolhamzW3GR9J0aXMwGcYsucODGQMcsicdiTHXku2iK6g3x85PDpzm3RrTcimkpaI0kOE4oxAg6meWBo%2FmIQ7difbjIQ2S12i%2F5XJ%2FbUrmu9Xv1RioLErWAdkGXOk1DP0t9ucxmYfd3njpN34%2BWnB%2Fnz5xQCPCx2hkrGQpOurvEq1gWitUcQusdZSXOhkQskEgagzl9PLFAfqYxfe59fc4ZAqkI9Itcu3OadUTIbIgQJCXmKdi7l0yFllzB0gpfiDe3zqSQkV%2F3Pk3fJKfPUoGyn8feHLc45MYw%2FG77qGHVy4uctkoPQukz" rel="nofollow">(上)</a></li><li><a href="https://link.segmentfault.com/?enc=OTYHEqv7JkEfmco6u%2F%2FGTQ%3D%3D.BWhjMnvBwpMxnEihH02JBaV2D2lqceNE8Ipzf%2BJ8%2BUPJPkK2%2BqXmNEi8Tr4nAhH5Z%2B2aLxh3PbCvW0XOK6G7feCvjHItY92f8gtXRw5aJqO1bYBtU5ZGt%2FSffdAt5%2FaXH1iHbKgreroMBRf2nRRDbtylN%2FAxLB4RBLlkj31NNxMD1zJ5HOFr32WkO77KYvnibEVQE88L8WhXlIiuf96ulxcqU%2BPLP3Z0QoAEaLqlSxikznNVY7pAgK2TVOkFVbWrO0d6STwKoOJq7Uohf33FEF0z7B4Wn5HIGLwORts4Hwet6hV1LxWQ0hrr1YZJUTJY" rel="nofollow">MySQL 主ä»�å�Œæ­¥æ�¶æ�„ä¸­ä½ ä¸�知é�“的“å�‘â€�(下)</a></li></ul><h5>MySQLå¤�制有多ç§�ç±»å�‹ï¼š</h5><ul><li>异步å¤�制:一个主库,一个或多个ä»�库,数æ�®å¼‚æ­¥å�Œæ­¥åˆ°ä»�库。</li><li>å�Œæ­¥å¤�制:在MySQL Cluster中特有的å¤�制方å¼�。</li><li>å�Šå�Œæ­¥å¤�制:在异步å¤�制的基础上,确ä¿�任何一个主库上的事务在æ��交之å‰�至 少有一个ä»�库已ç»�收到该事务并日志记录下æ�¥ã€‚</li><li>延迟å¤�制:在异步å¤�制的基础上,人为设定主库和ä»�库的数æ�®å�Œæ­¥å»¶è¿Ÿæ—¶é—´ï¼Œ å�³ä¿�è¯�æ•°æ�®å»¶è¿Ÿè‡³å°‘是这个å�‚数。</li></ul><p>MySQL主ä»�å¤�制延迟解决方案:<a href="https://link.segmentfault.com/?enc=K6cOeeFVWRS1paliUBvu5g%3D%3D.Am1diBiSplMr9%2BqdRO%2Fz2yfY9P%2BclFooAWg2DA1WcDCkOycQxq3j4GS8aXzrCCeKzNmHxY%2BfPPRp9YuJIX0Tf1i4btKhnmeO3%2FrLTN1Xd1RjoovQbzX5xMaAG834WdMda2%2BtVrWavLKbg6SQdF1zoRE4BiB0m9r37bAN1IEQQi9tYsRYCGcpYM5MmHVyqKtPkS6KeC%2BUp7whFjrmnHvxC1hsjLz16SpzxOKExdish2zmPHDdLKDMHQvhNFtIadZCzQ6hTitEcjWVv%2BveyF042FWpJHAc2%2B5eI83nzp34%2FWMo6Q9H%2Fjho8Ls95yq%2FQAhp" rel="nofollow">高å�¯ç”¨æ•°æ�®åº“主ä»�å¤�制延时的解决方案</a></p><h2>MySQL æ•°æ�®å¤‡ä»½ä¸�æ�¢å¤�</h2><h5>æ•°æ�®å¤‡ä»½å¤šç§�æ–¹å¼�:</h5><ul><li>物ç�†å¤‡ä»½æ˜¯æŒ‡é€šè¿‡æ‹·è´�æ•°æ�®åº“文件的方å¼�完æˆ�备份,这ç§�备份方å¼�适用äº�æ•°æ�®åº“很大,数æ�®é‡�è¦�且需è¦�快速æ�¢å¤�的数æ�®åº“</li><li>逻辑备份是指通过备份数æ�®åº“的逻辑结æ�„(create database/table语å�¥)和数æ�®å†…容(insert语å�¥æˆ–者文本文件)的方å¼�完æˆ�备份。这ç§�备份方å¼�适用äº�æ•°æ�®åº“ä¸�æ˜¯å¾ˆå¤§ï¼Œæˆ–è€…ä½ éœ€è¦�对导出的文件å�šä¸€å®šçš„修改,å�ˆæˆ–者是希望在å�¦å¤–çš„ä¸�å�Œç±»å�‹æœ�务器上é‡�新建立此数æ�®åº“的情况</li><li>通常情况下物ç�†å¤‡ä»½çš„速度è¦�å¿«äº�逻辑备份,å�¦å¤–物ç�†å¤‡ä»½çš„备份和æ�¢å¤�粒度范围为整个数æ�®åº“或者是å�•个文件。对å�•表是å�¦æœ‰æ�¢å¤�能力å�–决äº�存储引æ“�,比如在MyISAM存储引æ“�下æ¯�个表对应了独立的文件,å�¯ä»¥å�•独æ�¢å¤�;但对äº�InnoDB存储引æ“�表æ�¥è¯´ï¼Œå�¯èƒ½æ¯�个表示对应了独立的文件,也å�¯èƒ½è¡¨ä½¿ç”¨äº†å…±äº«æ•°æ�®æ–‡ä»¶</li><li>物ç�†å¤‡ä»½é€šå¸¸è¦�求在数æ�®åº“关闭的情况下执行,但如æ�œæ˜¯åœ¨æ•°æ�®åº“è¿�行情况下执行,则è¦�求备份期间数æ�®åº“ä¸�能修改</li><li>逻辑备份的速度è¦�æ…¢äº�物ç�†å¤‡ä»½ï¼Œæ˜¯å› 为逻辑备份需è¦�访问数æ�®åº“并将内容转化æˆ�逻辑备份需è¦�çš„æ ¼å¼�;通常输出的备份文件大å°�也è¦�比物ç�†å¤‡ä»½å¤§ï¼›å�¦å¤–逻辑备份也ä¸�包å�«æ•°æ�®åº“çš„é…�置文件和日志文件内容;备份和æ�¢å¤�的粒度å�¯ä»¥æ˜¯æ‰€æœ‰æ•°æ�®åº“,也å�¯ä»¥æ˜¯å�•个数æ�®åº“,也å�¯ä»¥æ˜¯å�•个表;逻辑备份需è¦�å†�æ•°æ�®åº“è¿�行的状æ€�下执行;它的执行工具å�¯ä»¥æ˜¯mysqldump或者是select … into outfile两ç§�æ–¹å¼�</li><li>生产数æ�®åº“备份方案:<a href="https://link.segmentfault.com/?enc=XoVK35hbYOPLEnkXJRwYCw%3D%3D.oasTkbpHgp8yjBQ7OFF51G6tXP6jHvQBm3WJx%2B88yPAZWqzh1GohFpAClfqzqaIrc6Qfb1bZP%2F6tW1aiECVWJaeI3q3D9gp%2Bf2m%2BSo%2FiIGYrxAiZO0VA1fJpfHXPR%2B028fOP1pd79RosQQ298t5Tg%2FhqxvLdpVkDVgHDLDHYP5Qd3A9TQf%2FDaN%2Bw4T4TBqsFiEtr7thfxyaBo8QIurSKf7ITbj9yvCSzLPllYF2G5AozoiFLd3zGurBfQWHGv86MvPD8AyRGQSv9G3InuO%2FRQ5WrT9kdaexnIiMLdf7%2F3EdKoqhpsC4cXfS6le3x8rfI" rel="nofollow">é«˜é€¼æ ¼ä¼�业级MySQLæ•°æ�®åº“备份方案</a></li><li>MySQLæ•°æ�®åº“物ç�†å¤‡ä»½æ–¹å¼�:<a href="https://link.segmentfault.com/?enc=PSYbs%2BUgzCJH%2BGrpMfM%2BLA%3D%3D.QyszXHzrbnFIAc7LKDDMAus16J9T3JmlL%2FRZ9t4bXqjw%2B6YYLy3vPqOFifvfjz16mouyi4gjpckDMzNWb0RO66axpyPA1yZlkgeMCZZlLy2MlH4a4XcqtIWVrhCgRXjLLniTKQaTDx%2BwLIuD1pYlz39khlmKyreqVHdD%2FSaswoG90oUqI%2FA3NUZ%2F5HFZDkpkhQqhC3nrVyleJcYnH4OTsuxOHpZ0jAKqQ%2B3zjHIFJjf5FiOlN4gdunyEJ11s2yCbIPIS%2BEDDdwPloLMRH22XA7Vosurb2WvYn9%2BGHyGmD6SJauxajhcaRPqpXHOXxAcn" rel="nofollow">Xtrabackupå®�ç�°æ•°æ�®çš„备份ä¸�æ�¢å¤�</a></li><li>MySQL 定时备份:<a href="https://link.segmentfault.com/?enc=hOpbNw9V6%2B7fiYyiURgVaA%3D%3D.sFCQs2bHrAl%2BhNJxSebbQ7sL2fUR2WQb1u1DMvK%2FkMf6G1y3gqH9MtnlAgIivbJ1FGv%2FLOusiLGcyDjsyOxEXbFIOmnojBsEnqePifSQRotdlBXSbS98UT0XNFFmAEp%2B6kUZ4m1SpYvUZp1N5%2Br%2FIVG2PYrYvDJD3c96vI12iGkFEnalu5hjemisWOLL3S58mAAswm4smh1WEcsLDMvy4gKuCXHXYlXHbdFCK%2FwkW30dvF4LSYT4vcvp2yQ0kVSLTTcrmYUdevXkfkGo6s9n%2BQRq%2Foh707nPqXMu51FQaSYF8GuP3PyNaNNkRMY9ydaVU94Vp5HUCVViqXA%2B2XBD1MF1OT0JgVJTTXAxYhcXW%2FA%3D" rel="nofollow">MySQL æ•°æ�®åº“å®šæ—¶å¤‡ä»½çš„å‡ ç§�æ–¹å¼�(é��常全é�¢ï¼‰</a></li></ul><h2>MySQL 高å�¯ç”¨æ�¶æ�„设计ä¸�å®�战</h2><h5>å…ˆæ�¥äº†è§£ä¸€ä¸‹MySQL高å�¯ç”¨æ�¶æ�„简介:<a href="https://link.segmentfault.com/?enc=x3JBnl2sujjqahiOLeHEyA%3D%3D.nEbdhmyoWdQe4WA471shEWdY6xeGIocPZoSz%2Bozf6KeBcd4jNpPX1KYEgFvYwCJ9GSy6UaSNJEYz6asGsOwIUCreHml4hz2LvaAQImN5c5MYdgMNz%2BOjYZkjR8MiuBwMOKgb%2Fox40NTKwQnGjrQZVoE5ZX3uwCtoTPNTl7Dft8SrQ8XhTxGoemHrgVZVWv5%2BBzeRyisgEnTr3H%2F9q4UELmegH%2Bo%2F0RMtJ%2F9Q7AcdmULRwLBRqJ%2F5nJA5QXEEcN9gBGQgvZ4Gxlxl3ru05WAEIBnIba%2F2P43Js9%2BIqAsEMWM4frK%2FhImDjIeZ79CRVVKa" rel="nofollow">æµ…è°ˆMySQL集群高å�¯ç”¨æ�¶æ�„</a></h5><h5>MySQL高å�¯ç”¨æ–¹æ¡ˆï¼š<a href="https://link.segmentfault.com/?enc=cJ8S8lwlVuxKrOxuUh5CEA%3D%3D.KCcssoVpwUSD1l0wp3tE4wmIzfDlJZerIARoQcej2NP77wfMLpe3jlK%2FqtU9NvhRfqEy5PAsMtahhCzwZSbXMMGPJGsUQnZ1%2F0xduMm2AzaUDKVZFtYonm1pNxm1CH0Uq7II42QxmLQqA8J3GzP%2BXadc%2BMOWRLgVH3SWPVHGUfMzo%2F4w9r1IBjzjqb5BGT%2FIA56ywhfLtl3DZBzwWO6zqi%2B0nGlz2PTLrsllT06AzUU2j8RV6r6XlR3oakjWJqMEMBRoyWsGMHOwqRlI43pmBl%2BoD1mx31bMVN7IKuXoaZAdWCUVSsFEr%2Bl3VpU%2FrCYH" rel="nofollow">MySQL å�Œæ­¥å¤�制å�Šé«˜å�¯ç”¨æ–¹æ¡ˆæ€»ç»“</a></h5><h5><strong>官方也æ��供一ç§�高å�¯ç”¨æ–¹æ¡ˆï¼š</strong><a href="https://link.segmentfault.com/?enc=uwjT2ABZ5oXaiO8noLj1Cg%3D%3D.QVXqX03XtLWPGVzT7A%2FlbUiGD9w9IPSpqP6ZCUq2ZbTrjCkwXJsjdfEmQRZxgZqrh8SgeL6Si4s1A5oscrpcZeUGaQFGStY3F80Qqia%2BZQQ%2BkEJJTBfcN7KAySD04of9R84w2X0dLgQeJlKq%2FRkmze1EF9mxevC0Ik8vSikn4HVJg7SPSZqBavdakbIC8qXPQycbS0Y6KtOR1sbKPOqZJ359O4hyAxeKp%2BpUOdDUvxHzIo%2B%2F4mYN9CL54oW84BhnnAzXQe3YtDVIl6fWZ6FGZ2VIRrKOU9dnLIeu6LB2zWv7skmmnxNMC7msoMidBkW9" rel="nofollow">官方工具|MySQL Router 高å�¯ç”¨å�Ÿç�†ä¸�å®�战</a></h5><h5>MHA</h5><ul><li>MHA(Master High Availability)目å‰�在MySQL高å�¯ç”¨æ–¹é�¢æ˜¯ä¸€ä¸ªç›¸å¯¹æˆ�熟的解决方案,该软件由两部分组æˆ�:MHA Manager(管ç�†èŠ‚ç‚¹ï¼‰å’ŒMHA Node(数æ�®èŠ‚ç‚¹ã€‚</li><li>MHA Manager: å�¯ä»¥å�•独部署在一å�°ç‹¬ç«‹çš„æœºå™¨ä¸Šç®¡ç�†å¤šä¸ªmaster-slave集群,也å�¯ä»¥éƒ¨ç½²åœ¨ä¸€å�°slave节点上。</li><li>MHA Node: 行在æ¯�å�°MySQLæœ�务器上。</li><li>MHA Manager会定时æ�¢æµ‹é›†ç¾¤ä¸­çš„master节点,当master出ç�°æ•…障时,它å�¯ä»¥è‡ªåŠ¨å°†æœ€æ–°æ•°æ�®çš„slaveæ��å�‡ä¸ºæ–°çš„master,然å��将所有其他的slaveé‡�新指å�‘æ–°çš„master。整个故障转移过程对应用程åº�完全é€�æ˜�。</li></ul><p>MHA高å�¯ç”¨æ–¹æ¡ˆå®�战:<a href="https://link.segmentfault.com/?enc=AFX%2BVNfeaSmHET%2FcXYt57g%3D%3D.atpGqI3ege2qldVNxX5nwjCc%2F14ATX2oFZiQDcJ6DCLzbdVndZNfX6hW7NNXyH70b1hsEx9kJXx7Z2oJLq3xvE8E0dVa9tlJlBnX7TtLlyRjZJKzX%2Fs3OY45uV2fayGnTLxHYayhraC%2FyPORe9M1cxCFglqqR1FLU37eQlgTtSbmb1ppG%2F%2BJvbUag4RFMCq3Xj8eWh6TfCfy%2BctV7d0OE%2BOpHOcf9CwBkyg%2FiXLx3iQfvzyZzNVwwNYHG9r%2FVhUxNmUH8gaSg7FgAldCAD3iwtJYmuVcu%2BxbqPnuZS9lVYqP8bFgCxfRyjetm3DyfhCa" rel="nofollow">MySQL集群高å�¯ç”¨æ�¶æ�„之MHA</a></p><h5>MGR</h5><ul><li>Mysql Group Replication(MGR)是ä»�5.7.17版本开始å�‘布的一个全新的高å�¯ç”¨å’Œé«˜æ‰©å¼ çš„MySQL集群æœ�务。</li><li>高一致性,基äº�å�Ÿç”Ÿå¤�制å�Špaxoså��议的组å¤�制技术,以æ�’ä»¶æ–¹å¼�æ��供一致数æ�®å®‰å…¨ä¿�è¯�ï¼›</li><li>高容错性,大多数æœ�务正常就å�¯ç»§ç»­å·¥ä½œï¼Œè‡ªåЍä¸�å�ŒèŠ‚ç‚¹æ£€æµ‹èµ„æº�å¾�用冲çª�,按顺åº�优先处ç�†ï¼Œå†…置动防脑裂机制;</li><li>é«˜æ‰©å±•æ€§ï¼Œè‡ªåŠ¨æ·»åŠ ç§»é™¤èŠ‚ç‚¹ï¼Œå¹¶æ›´æ–°ç»„ä¿¡æ�¯ï¼›</li><li>高ç�µæ´»æ€§ï¼Œå�•主模å¼�和多主模å¼�。å�•主模å¼�自动选主,所有更新æ“�作在主进行;多主模å¼�,所有serverå�Œæ—¶æ›´æ–°ã€‚</li></ul><h2>MySQL æ•°æ�®åº“读写分离高å�¯ç”¨</h2><p>æµ·é‡�æ•°æ�®çš„存储和访问æˆ�为了系统设计的瓶颈问题,日益å¢�长的业务数æ�®ï¼Œæ— 疑对数æ�®åº“é€ æˆ�了相当大的负载,å�Œæ—¶å¯¹äº�系统的稳定性和扩展性æ��出很高的è¦�求。éš�ç�€æ—¶é—´å’Œä¸šåŠ¡çš„å�‘展,数æ�®åº“中的表会越æ�¥è¶Šå¤šï¼Œè¡¨ä¸­çš„æ•°æ�®é‡�也会越æ�¥è¶Šå¤§ï¼Œç›¸åº”地,数æ�®æ“�作的开销也会越æ�¥è¶Šå¤§ï¼›å�¦å¤–ï¼Œæ— è®ºæ€�æ ·å�‡çº§ç¡¬ä»¶èµ„æº�,å�•å�°æœ�务器的资æº�(CPUã€�ç£�盘ã€�内存ã€�网络IOã€�事务数ã€�è¿�æ�¥æ•°ï¼‰æ€»æ˜¯æœ‰é™�的,最终数æ�®åº“所能承载的数æ�®é‡�ã€�æ•°æ�®å¤„ç�†èƒ½åŠ›éƒ½å°†é�­é�‡ç“¶é¢ˆã€‚分表ã€�分库和读写分离å�¯ä»¥æœ‰æ•ˆåœ°å‡�å°�å�•å�°æ•°æ�®åº“çš„å�‹åŠ›ã€‚</p><p>MySQL读写分离高å�¯ç”¨æ�¶æ�„å®�战案例: </p><p><a href="https://link.segmentfault.com/?enc=AyDUab8i3%2FsRB3N1wgqDjg%3D%3D.B6otjd37X93vt%2BGdIVPebqnpWm54zG23tqGNi4p0kzfUTY%2BC0ZzrlPyYLT4RVDqNFcS8UyLH6xTH1rfc7XdzokcQGnmqHjjmq3TLvFuM67rODwQjkjMG9UtaDkN63wmt%2FdsT43t4yuwFWnmuA%2BtX6WUXsxN109L66PdOGw83svsLmTx8UELxp%2BJ6JhZ2gEyrG%2Bjswd3mlSNXQAZFG3FGf4vz%2Fg%2F7J9ZiFPWHX7XtUJyE9rf2eqq7aVfflOq7kfSN5b7Nk%2BuVBuLXvv0li4z6YIPmD8WAukleqdG3N8FCEPt8swgw%2BclFjLQwYn%2Fc57YG" rel="nofollow">ProxySQL+Mysqlå®�ç�°æ•°æ�®åº“读写分离å®�战</a> </p><p><a href="https://link.segmentfault.com/?enc=GXiyannRS8I2FAY03eMy6w%3D%3D.2snqhTeOufHWk4xQRfuID458VD0n3GraTI0uMxVjzUM%2BJYw9VgqtZ8BAmsT8IQ%2BgLdKMTZMiBgVIQh4gdSgfaI%2FuSe1v%2FpFZvwWCu4pPHao28L%2B6ZraUp%2BCxY%2F%2BYbsnj%2FD%2BOqub5133N4OO58J10Hn1Rv%2F0J5CJq64C58mNs0pHM28v%2BLZzFFBO2K7Hgpt%2BIwP%2BjSzn0Mst9eJNL3Ct%2BO7QS5%2FSygiqHkIWzjv%2B4N%2FSNHQAo7nP%2Bru2R%2BpBLfItGPi35bqd1pKQ%2BM8krMyaBp1hDlpDGTdvpsF63tGLrwiiWcnJYYPZpp4AyqAXx2qaA" rel="nofollow">Mysql+Mycatå®�ç�°æ•°æ�®åº“主ä»�å�Œæ­¥ä¸�读写分离</a></p><h2>MySQL性能优化</h2><h5><a href="https://link.segmentfault.com/?enc=CivcpDdQRqOByzpIZN0G3w%3D%3D.KBRM%2F496hnOFcNq%2F1fvNcZ7OBaM2D2A89%2FJIudTaZKiKf8YUIKOYxUE3mlYbgNDeHcmPMANW1V8nWrwi2PnRUx%2BsMnV9yt6XVtQcBR268Yk7ENuvx1r1eSy6VzJkfxPtOD17Rl%2BCyv%2Fahte%2Ffo7oLkuCUbSN4crmEg%2BQW6aiG9Cl3uv%2FBRY0MZM11uHXH1ePGbGXIk6UWS5qLAGN74kx9JXpIjNZ2rg%2B7kj6qqHGV9Z3HWcA4L%2BzWI5xZE8H6xFITwS8drNEZEPukUmgzeK2up%2Fh3iNQcLKmopTj5edhHO74DSH9f4hOYT0Ld%2BqxqoCk" rel="nofollow">å�²ä¸Šæœ€å…¨çš„MySQL高性能优化å®�战总结ï¼�</a></h5><h5><strong>MySQL索引å�Ÿç�†ï¼š</strong><a href="https://link.segmentfault.com/?enc=OGecN5LSgTxxN%2FCh5VfHHg%3D%3D.M3%2B8hs8tQwCvJtCLMSafJvzA1%2BtH7cpxU3lMM0ryo2ze8mmMVDfiUtJ%2BVYG%2BD4loUOBMbCx%2FdpsEgko2poflXL86Z9BPArqkdfptZyTgbDA30w%2FA%2FuOSkd%2Fgcn9dJCZqhsQKgbOLhX2UkuzGfvP%2FJlGQg0OoxxJJuHtFOCzKSMnCe4N%2BE2kyFMT3oVpmaSoLEiraOanWK9oy9MgmB3F0zJ8CK6gMquiPnXo1L9Nv%2B%2FIbZkK9S%2FMHzo%2FawirUYVkhDd0EbGiO8KiXC8Xg1OpHsGeQpf6x9wuyaMQfa1kmuxWkAJsrGyjh9wD6O02JWcJm" rel="nofollow">MySQL 的索引是什么?æ€�么优化?</a></h5><ul><li>顾å��æ€�义,B-tree索引使用B-tree的数æ�®ç»“æ�„存储数æ�®ï¼Œä¸�å�Œçš„存储引æ“�以ä¸�å�Œçš„æ–¹å¼�使用B-Tree索引,比如MyISAM使用å‰�ç¼€å�‹ç¼©æŠ€æœ¯ä½¿å¾—索引空间更å°�,而InnoDB则按照å�Ÿæ•°æ�®æ ¼å¼�存储,且MyISAM索引在索引中记录了对应数æ�®çš„物ç�†ä½�置,而InnoDB则在索引中记录了对应的主键数值。B-Tree通常æ„�味ç�€æ‰€æœ‰çš„值都是按顺åº�存储,并且æ¯�个å�¶å­�é¡µåˆ°æ ¹çš„è·�离相å�Œã€‚</li><li>B-Tree索引驱使存储引æ“�ä¸�å†�通过全表扫æ��è�·å�–æ•°æ�®ï¼Œè€Œæ˜¯ä»�ç´¢å¼•çš„æ ¹èŠ‚ç‚¹å¼€å§‹æŸ¥æ‰¾ï¼Œåœ¨æ ¹èŠ‚ç‚¹å’Œä¸­é—´èŠ‚ç‚¹éƒ½å­˜æ”¾äº†æŒ‡å�‘下层节点的指针,通过比较节点页的值和è¦�查找值å�¯ä»¥æ‰¾åˆ°å�ˆé€‚的指针进入下层å­�节点,直到最下层的å�¶å­�节点,最终的结æ�œå°±æ˜¯è¦�么找到对应的值,è¦�么找ä¸�到对应的值。整个B-treeæ ‘çš„æ·±åº¦å’Œè¡¨çš„å¤§å°�ç›´æ�¥ç›¸å…³ã€‚</li><li>全键值匹é…�:和索引中的所有列都进行匹é…�,比如查找姓å��为zhang san,出生äº�1982-1-1的人</li><li>匹é…�最左å‰�缀:和索引中的最左边的列进行匹é…�,比如查找所有姓为zhang的人</li><li>匹é…�列å‰�缀:匹é…�索引最左边列的开头部分,比如查找所有以z开头的姓å��的人</li><li>匹é…�范围值:匹é…�索引列的范围区域值,比如查找姓在liå’Œwang之间的人</li><li>精确匹é…�左边列并范围匹é…�å�³è¾¹çš„列:比如查找所有姓为Zhang,且å��字以K开头的人</li><li>å�ªè®¿é—®ç´¢å¼•的查询:查询结æ�œå®Œå…¨å�¯ä»¥é€šè¿‡ç´¢å¼•è�·å¾—,也å�«å�šè¦†ç›–索引,比如查找所有姓为zhang的人的姓å��</li><li><a href="https://link.segmentfault.com/?enc=2UK%2Fm4VQbfiTLl8pXbEV%2FQ%3D%3D.DoPrnt%2Fx%2FDq2i4%2BN3W9NWTuO1caEriJCPWZR1uHbPsmqUM08c5w41G5Pd7x%2BSUHKJ536OEVEnTIFNmr7NtaF13OYzeZkloo%2B5c79L8rWJA%2FLbCD2oqEsLFCZFLxQ3TURrRSI7MDG4%2FdR5coZNZhnFgPxvtg0MZ4cRtQJj5uMYt6MrOIKF0ADnyR%2BBdN%2BOohRJZ8sREe7JDpdBsk%2FpQ8RA8XM%2Bzn21DJ%2Fqgsi%2BHY917VxqRy%2B7aDzfGZKHBRy7b4Gx5lHTOskmFcaP6Ni5sA77SfNZ5t5k3QB9M6mbDZsxEjwhfd89an%2BkVkmtidc6nEak6Sdn%2BKghETbUbPGJ%2BOAEA%3D%3D" rel="nofollow">MySQL 常用30ç§�SQL查询语å�¥ä¼˜åŒ–方法</a>|</li><li><a href="https://link.segmentfault.com/?enc=G4i%2FmEH68OZFT8KMbuHb7g%3D%3D.dDviEQurVpAggEv6B1MDeQanBnCwsezqJe2i1kr9Ylvtx7s87kpu5M1%2BskVe7oVePiVl8yvTu4HR73Iu%2FsTUq5XCysgKV1fr9GxVDUjmF3No5r8r08U%2BQhcB6GZPl3BnCGcerbn6JDVMUG6iV9jnC4OTQCWnIJl1odaPLPuUt27EkXpBIt0ds6koJwKujNVRykpAbxFYG%2FFRuEPtEHz%2FTsIu3%2FdM%2Fd9QYbHBvwNi2omT0FBZ2L86diDJpe2x7QX1wHpks0X93Xj40Lq9q2Y6spz7JWeFnp0O285rfTIe8zXAJJwhL3Zzq1F06%2B4YVtLXcR8wrc9kFhg28Rjibc18sA%3D%3D" rel="nofollow">MySQL太慢?试试这些诊断æ€�路和工具</a></li><li><a href="https://link.segmentfault.com/?enc=nzLH%2Bb%2BgNyXmZzMeLrSj5g%3D%3D.BJ0zdko7OKx2Prq1iWLFNjeIK%2BquBSWMmoLvYx4paGjBEHF7y293m1NMZUN5apoDKBkvnujAZ9FpB1k%2FIzNWEqyJBuKZYTINGvA4ucjyc2ZPD%2BHCvEYKyYqW5cltTpILIoIJm1PNMfKN3abpe4HgjWGLvBm09aO%2Bvdrj9pozYoNF%2BUqtneUitLe9Nvw5FZeY%2FqRJwyu0tM5lrcBhxElPR5aqPkWpOv%2BpW%2BC9Vn1iveRclPta1PT%2FgyR840ZyMArf6sI857IwQtbqIAOab0sG%2F3UmQTLmluTSbH5pnYY3OlVVE930kRl1Y13KbpF41JY9gbhI4AfD%2BIjr%2BdfbwBqnc8FUV%2BlaPFG32OZSMrrO968%3D" rel="nofollow">MySQL 性能优化的 9 ç§�姿势,é�¢è¯•å†�也ä¸�怕了ï¼�</a></li></ul><h5><strong>MySQL表分区介ç»�:</strong><a href="https://link.segmentfault.com/?enc=Tov0IJDUkI37MiurVLc5XA%3D%3D.iTkP%2FYZLEEZi%2FJr8o2tIzudSlYrRZOy6IEKDM11d1TdNlp7U6mu1uIyZg4UiLFMvdiGpFxgFMulXH7Xd8s%2BTch9HNIiwlso8az3qcWKIu%2F2Q%2FLQRN%2BeIR%2F7nVP8FamSrvZwhVsFFWlSjaaayYcHXSZh1WPElSw85NRs6Tk%2BqFrydAvZkUOI4asPkLq85fSvuLKxwTSQ9%2FVt1eil6wa%2Bek98O5niwU612hvQgWFCwkppSzRWSwyKX5LzIF3d6urlq35dl4uIicxyTr1zsVQNL3o6RdjdUsprG9gyEOpVxa8GIveRsbV%2BMZsuIpvSk5teL" rel="nofollow">一文彻底æ��懂MySQL分区</a></h5><ul><li>å�¯ä»¥å…�许在⼀个表⾥存储更多的数æ�®ï¼Œçª�ç ´ç£�盘é™�制或者⽂件系统é™�制。</li><li>对äº�ä»�表⾥将过期或å�†å�²çš„æ•°æ�®ç§»é™¤åœ¨è¡¨åˆ†åŒºå¾ˆå®¹æ˜“å®�ç�°ï¼Œå�ªè¦�将对应的分区移除å�³å�¯</li><li>对æŸ�些查询和修改语å�¥æ�¥è¯´ï¼Œå�¯ä»¥â¾ƒåŠ¨å°†æ•°æ�®èŒƒå›´ç¼©â¼©åˆ°â¼€ä¸ªæˆ–â¼�个表分区上,优化语å�¥æ‰§â¾�效ç�‡ã€‚⽽且å�¯ä»¥é€šè¿‡æ˜¾ç¤ºæŒ‡å®šè¡¨åˆ†åŒºæ�¥æ‰§â¾�语å�¥ï¼Œâ½�如 select * from temp partition(p1,p2) where store\_id &lt; 5;</li><li>表分区是将⼀个表的数æ�®æŒ‰ç…§â¼€å®šçš„规则⽔平划分为ä¸�å�Œçš„逻辑å�—,并分别进â¾�物ç�†å­˜å‚¨ï¼Œè¿™ä¸ªè§„则就å�«å�šåˆ†åŒºå‡½æ•°ï¼Œå�¯ä»¥æœ‰ä¸�å�Œçš„分区规则。</li><li>MySQL5.7版本å�¯ä»¥é€šè¿‡show plugins语å�¥æŸ¥çœ‹å½“å‰�MySQL是å�¦â½€æŒ�表分区功能。</li><li>MySQL8.0版本移除了show plugins⾥对partition的显示,但社区版本的表分区功能是默认开å�¯çš„。</li><li>但当表中å�«æœ‰ä¸»é”®æˆ–唯⼀键时,则æ¯�个被⽤作分区函数的字段必须是表中唯⼀键和主键的全部或⼀部分,å�¦åˆ™å°±â½†æ³•创建分区表。</li></ul><h2>MySQL分库分表</h2><ul><li>能ä¸�分就ä¸�分,1000万以内的表,ä¸�建议分片,通过å�ˆé€‚的索引,读写分离等方å¼�,å�¯ä»¥å¾ˆå¥½çš„解决性能问题。</li><li>分片数é‡�å°½é‡�少,分片尽é‡�å�‡åŒ€åˆ†å¸ƒåœ¨å¤šä¸ªDataHostä¸Šï¼Œå› ä¸ºä¸€ä¸ªæŸ¥è¯¢SQL跨分片越多,则总体性能越差,虽然è¦�好äº�所有数æ�®åœ¨ä¸€ä¸ªåˆ†ç‰‡çš„结æ�œï¼Œå�ªåœ¨å¿…è¦�的时候进 行扩容,å¢�åŠ åˆ†ç‰‡æ•°é‡�。</li><li>分片规则需è¦�æ…�é‡�选择,分片规则的选择,需è¦�考虑数æ�®çš„å¢�长模å¼�,数æ�®çš„访 问模å¼�,分片关è�”性问题,以å�Šåˆ†ç‰‡æ‰©å®¹é—®é¢˜ï¼Œæœ€è¿‘的分片策略为范围分片,æ�šä¸¾åˆ†ç‰‡ï¼Œ 一致性Hashåˆ†ç‰‡ï¼Œè¿™å‡ ç§�分片都有利äº�扩容。</li><li>å°½é‡�ä¸�è¦�在一个事务中的SQL跨越多个分片,分布å¼�事务一直是个ä¸�好处ç�†çš„问题。</li><li>查询æ�¡ä»¶å°½é‡�优化,尽é‡�é�¿å…�Select * 的方å¼�,大é‡�æ•°æ�®ç»“æ�œé›†ä¸‹ï¼Œä¼šæ¶ˆè€—大é‡� 带宽和CPU资æº�,查询尽é‡�é�¿å…�è¿”å›�大é‡�结æ�œé›†ï¼Œå¹¶ä¸”å°½é‡�为频ç¹�使用的查询语å�¥å»ºç«‹ç´¢å¼•。</li></ul><p><strong>æ•°æ�®åº“分库分表概述:</strong><a href="https://link.segmentfault.com/?enc=O6njg6t9hraIgeWmtNPWXA%3D%3D.%2FB9EGkesS4ZkQDWFA6bsqAJ%2BYZlVjhdudKO1uF%2BAUeNQVg8Yc0W8bFn%2FOkreck%2BAPegD4kSFHwHBk5DgcOjKKvBeL1LNONx9T0LdlPIqlXiY%2FPLMfNGf1Lj2WnPq15KQEaYLti4OaGKH%2FaMn1ayuPyFLzJuJHBcq0mEmVLbdOlfcYltbjfyLfRt9%2FKQGiSyzwKxtcD4%2BUjGEWLrbr0LW0chxnWTSwPARA1Zu%2FqEvSHBCVl65ml4zZRSbvQFDeA8q0rDicqRZFWvBsWvA54NuxCC8L73kDCF2oar8ilRP0Xt6YFORbNTuiZpwgsi31Z3G" rel="nofollow">æ•°æ�®åº“分库分表,何时分?æ€�æ ·åˆ†ï¼Ÿ</a></p><p><strong>Mysql分库分表方案:</strong><a href="https://link.segmentfault.com/?enc=aqygWHrxGRlxfdicOVBg2A%3D%3D.XIclykrfQRHM6X5zabRkPXCVGVuYIb786d2Y8zFju4sH%2By7NZKKprGM4YkYDSeSgLF3OBWn7wSQ1zlL6m7pcf6XN9X2qYC45BOnCjdNvQZ2%2BWS2ES6wUZP1Xg2Je08JQI3e57Uw%2BFlaQgq49JzxSGoX%2B%2FkmL0kzEStFwe%2F6ZyvQfywuEhd6QYFckNHefn6%2BdJAvq1QEe5J0QaKHk5qSlBKmppB0OTnFUusr7%2FKxlpp%2Bvvy%2FEgSZhUHZXvkxn%2BVyv9jILqXDzdeAoLl4mfww6G2mtVL%2FUVl95E8pYD3Q7x9aa83LvsehWbY3YIRDNdRtX" rel="nofollow">MySQL 分库分表方案,总结的é��常好ï¼�</a></p><p><strong>Mysql分库分表的æ€�路:</strong><a href="https://link.segmentfault.com/?enc=xM8MZuQSDlh50R1A3cM4oA%3D%3D.kINP%2B6fmPoIAp3aBWc4fO9kamY%2Bizaa%2FYS82sJa71Ka6GkPw91H8sR9Hjr6Y5RP8ybI52SNN1Ed4xvS6ZYtV%2B7dmm%2FkWPGuY0khDJYJdiyE2f%2FTQbFtiE0dq4LDYVDjcQolq9ecDNDH5YKzUr9Go37N5DEXCOI%2B28Ks2n0pWm6TEWFoZGtH95JapveNlA%2BaStWRMcVrj%2FZPe4PvkFnGot45OMMfIstxPgIAfzrzUaSxVAQglYm%2BXq11qwAEJf2ilHA%2Fq0HFD6KIZDK%2FU2rYQhkJhT2SGB%2FjCD8TEsw15g6eRwVhE58kqoTaiV8AycmkF" rel="nofollow">解救 DBA—数æ�®åº“分库分表æ€�è·¯å�Šæ¡ˆä¾‹åˆ†æ��</a></p><h2>MySQL性能监æ�§</h2><p>MySQL性能监æ�§çš„æŒ‡æ ‡å¤§ä½“å�¯ä»¥åˆ†ä¸ºä»¥ä¸‹4大类:</p><ul><li>查询å��å��é‡�</li><li>查询延迟ä¸�错误</li><li>客户端è¿�æ�¥ä¸�错误</li><li>ç¼“å†²æ± åˆ©ç”¨ç�‡</li></ul><p>对äº�MySQL性能监æ�§ï¼Œå®˜æ–¹ä¹Ÿæ��供了相关的æœ�务æ�’件:MySQL-Percona,下é�¢ç®€å�•介ç»�一下æ�’件的安装</p><pre><code>[root@db01 ~]# yum -y install php php-mysql [root@db01 ~]# wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm [root@db01 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm warning: percona-zabbix-templates-1.1.8-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing... 1:percona-zabbix-templates-1.1.8-1 ################################# [100%] Scripts are installed to /var/lib/zabbix/percona/scripts Templates are installed to /var/lib/zabbix/percona/templates</code></pre><p>最å��,å�¯ä»¥é…�å�ˆå…¶å®ƒç›‘æ�§å·¥å…·æ�¥å®�ç�°å¯¹MySQL的性能监æ�§ã€‚</p><p>MySQLæœ�务器é…�ç½®æ�’件:</p><ul><li>修改php脚本è¿�æ�¥MySQLçš„monitor@localhost用户</li><li><p>修改MySQLçš„sock文件路径</p><pre><code>[root@db01 ~]# sed -i '30c $mysql_user = "monitor";' /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php [root@db01 ~]# sed -i '31c $mysql_pass = "123456";' /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php [root@db01 ~]# sed -i '33c $mysql_socket = "/tmp/mysql.sock";' /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php</code></pre><p>测试是å�¦å�¯ç”¨ï¼ˆ å�¯ä»¥ä»�MySQL中è�·å�–到监æ�§å€¼ )</p><pre><code>[root@db01 ~]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg gg:12 # ç¡®ä¿�当å‰�文件的 å±�主 å±�组 是zabbix,å�¦åˆ™zabbix监æ�§å�–值错误。 [root@db01 ~]# ll -sh /tmp/localhost-mysql_cacti_stats.txt 4.0K -rw-rw-r-- 1 zabbix zabbix 1.3K Dec 5 17:34 /tmp/localhost-mysql_cacti_stats.txt</code></pre><p>移动zabbix-agenté…�置文件到 /etc/zabbix/zabbix_agentd.d/目录</p><pre><code>[root@db01 ~]# mv /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/ [root@db01 ~]# systemctl restart zabbix-agent.service</code></pre><p>导入并é…�ç½®Zabbix模æ�¿ä¸�主机:</p></li></ul><p>默认模æ�¿ç›‘æ�§æ—¶é—´ä¸º 5分钟 ( 当å‰�测试修改为 30s) å�Œæ—¶ä¹Ÿè¦�修改Zabbix模æ�¿æ—¶é—´</p><pre><code># 如æ�œè¦�修改监æ�§è�·å�–值的时间ä¸�但è¦�在zabbixé�¢æ�¿ä¿®æ”¹å�–值时间,bash脚本也è¦�修改。 [root@db01 scripts]# sed -n '/TIMEFLM/p' /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt` if [ `expr $TIMENOW - $TIMEFLM` -gt 300 ]; then # 这个 300 代表 300s å�Œæ—¶ä¹Ÿè¦�修改。</code></pre><p>默认模æ�¿ç‰ˆæœ¬ä¸º2.0.9ï¼Œæ— æ³•åœ¨4.0版本使用,å�¯ä»¥å…ˆä»�3.0版本导出,然å��å†�导入4.0版本 。</p><p><a href="https://link.segmentfault.com/?enc=hiLTU9Mr4JxZjvyCThZ7yQ%3D%3D.ho9B8qPpjezB63EQcL%2BA52oXSwjTgTKo1JYuzTaDXLP6luXCr4pxQF5DiT0njvAQ0BzT1vWHABVlLq%2FurnV0NxwoYDR36bbfT9Y7WcUgC5GuWgKc%2B8rqB%2BskHbyF4u3eQ4881YVfDCmNO8bQ47X0jk8KctJUWo1MbvPpU4KgM1fVkql%2B88PTKjts5UfH2u7gS0%2B%2BZYPpFtMKhybspr8R3%2FG7Ub4zZJtW4ZxTWBC6OXhnfGe71x2%2BVcGMX%2BOadhSzmppyRgPdva7B8bqJSeKjoD%2BlEGVR8MLrJKHKPBqfTFuCv3PwgylGqQ%2BjcYSUJWiJD9c2JkqI87pdPqdMqUxR4Q%3D%3D" rel="nofollow">Zabbix自带模æ�¿ç›‘æ�§MySQLæœ�务</a></p><p>å…¶å®�,在å®�际生产过程中,还是有相关的专业监æ�§æ•°æ�®åº“的第三方开æº�软件的,民工哥之å‰�ä¹Ÿå†™è¿‡ç›¸å…³çš„æ–‡ç« ï¼Œä»Šå¤©å�‘出æ�¥ä¾›å¤§å®¶å�‚考:<a href="https://link.segmentfault.com/?enc=nWqriIUyx3a3Gd%2FlZYfaVQ%3D%3D.a49jzS3Tx3NGKlHScsDwXyDLvU%2FeCjCh8g4Au25w8Q6aMq7JtP2TfftRDzm5IchzcFjEAlB9eL9zDYI7t07kelQQvmgSqDN0YHQ2FQ6xpM3JMqy4NLpHM30JGa973WZ0T6yCbBDaR421wfsVGLvkSZm3ifO3djuk%2FLdQ77x3Kodl0yKFiEJgohmPr8Rztjf2CzDUSjC83wgKCxWtgh2ImKan8H4jVdwcy6dkzzM%2BVIK4JZd3NHuyDRQB4TmjFUTj7KUOLJebLbK1FOxCJlAQkXh6XhwNIU1ttLqsO1bAt0qjvfF4Ele1mYagjXrjPZS8" rel="nofollow">强大的开æº�ä¼�业级数æ�®åº“监æ�§åˆ©å™¨Lepus</a></p><h2>MySQL 管ç�†å·¥å…·</h2><p>MySQL 是最广泛使用和æµ�行的开æº�æ•°æ�®åº“之一,围绕它有许多工具,å�¯ä»¥è®©è®¾è®¡ï¼Œåˆ›å»ºå’Œç®¡ç�†æ•°æ�®åº“的过程å�˜å¾—æ›´åŠ å®¹æ˜“å’Œä¾¿æ�·ã€‚但是如何选择最适å�ˆè‡ªå·±éœ€æ±‚的工具,并ä¸�容易。这里为大家æ�¨è��:<a href="https://link.segmentfault.com/?enc=WwQM3pNZjIzVeylvF3Wbmg%3D%3D.Opkcwbp82caK%2Fc6Qgp2MmaPqlHAVTeXFmhlgFD3%2FXT%2F3c0XiUPJkYsJjfZnA2IQmsspWnA2XJ2TiEbH1ypIkw6MCsQ%2FRMh8Z31z4xJ4B7%2F3eOgFbR1f%2Bcwe4bKt2qbA5%2BhTu%2B0R8x4lmkiA9ZkrdnyeSyH9LwOc3Z1hwXmK0wa25Oeyx1YaTEmq7WTIGFxzg3ykdg%2BvgZCnmyrhOhvF0ozk9%2FakA44y1EWHqQkWeiwIrfiUL7%2B991w5VGeG7%2FlT%2Fxz2vyofvcMj7LfTQksO%2Fv2C0DuJJcFAR41308enGnbhFEpyKQrUU%2FBV9rWIVYNjBQUpgzW%2FZG0%2FkUvFmExWhAg%3D%3D" rel="nofollow">10款MySQLçš„GUI工具</a>,它们对开å�‘人员和DBAæ�¥è¯´éƒ½æ˜¯ä¸�错的解决方案。</p><p>很早之å‰�民工哥就给大家介ç»�过一款开æº�çš„SQL管ç�†å·¥å…·ï¼š<a href="https://link.segmentfault.com/?enc=MZIznFV9oRwhW4GTAHBmMA%3D%3D.RUTaAAuYzb7TwVqoqEh1Q%2Bb2D%2Bi5LJU0UXiQpuEKTZrfV8jYHCmuMBYwmcZiBbg8D6P8%2FmLX%2B3EQI0Z9U3O4vBcoMbN5AkO3GgusmjDazwl5L7An3MfC4lD1e0JkZgHKSj5YGitjvwP%2BS9xjgxCD8K343lKj24vL8S7uZAtrwWnGK%2FIySs9Q1mwrzueT5fvMxUAPrQJXYEzusgR5nhZV1elnVzsLMjvfckR946T%2BvSiHisE726co6XOrB2DTop%2FvFTRgNWS%2FCNFH3CcYZT1ulv%2BLzmVBys82Sq214Mn7wc9lIBekny6%2BJiiuT7hlVbAh" rel="nofollow">自动补全ã€�å›�滚ï¼�介ç»�一款å�¯è§†åŒ– sql 诊断利器</a>。</p><p>今天,民工哥å†�给大家æ�¨è��一款SQLå®¡æ ¸åˆ©å™¨ï¼š<a href="https://link.segmentfault.com/?enc=lWNfu5RisGlfWb8cB0Mv1A%3D%3D.FKDzlcrtRnqibtwZNKkkmCgsAfNJVEBLJj%2BTmRWctCOxLB4p4aQTDqzAwg3WV%2FFHPibYON1YP2MJAy8dS%2BfiRtww7pPbtiG%2Fhig27G38doOgtPrc9Qm8ufClCnJK4f3x2hOGpjZkNeN4iVDDLXe6e82Gn4CRjukEc2QmRp%2B1lWhllOuQS0aLZxLV2pzj122fAqaZtSYsNrM9pnIks%2BhVuxpp4k62hs3LsqlpY0%2BAqbeQUao5WE0TijLVWcGCZLAFFqNX9dCqLMXOwOIdvteW4Jnjer7uWqhTH4C4PX7n3iLvJWDtTiLrbKKnL%2FiXiipY3gpkOxAsRHg%2F8wUog790jA%3D%3D" rel="nofollow"> MySQL 自动化è¿�维工具 goinception</a>。</p><p>å�¯è§†åŒ–管ç�†å·¥å…·ï¼Œå¤§å®¶å�¯ä»¥è¯•试这个:<a href="https://link.segmentfault.com/?enc=xnCYeHlZ1x3C%2BI6BH%2Fz6oQ%3D%3D.t1ShDfFnEI4lgG%2B0RCRwk%2FKk74syVoypqBK5BK%2B9ztZmb1zD0p%2F2gxsEjAuosNg4kJiLvSaxtJjQ%2FEHvDMqRNF%2FZlIA4fIvAg1mr06LMMeQDfu%2FacNlbQ2YrUYlPercJGhYwYhACH0jYZODrhBYfUhWgiPSJQkOUtvR8WO7Uv%2FipHG8DRxoLJlSdVcvOnIskhPkj8abZkGgu%2BdFSsYIT%2BN61R6J4Uf1VSFyPGk%2FL9cUgTWmwCyP5y0GSPdoULt69EvCZx4eIPuZbwgx7vxj7GEa%2BZXYXZXH5m2TEpvlVbQjQVzZ2eclauOuHKmd%2F5AC1aM8Q00idkDm6mzLwoh4%2FbQ%3D%3D" rel="nofollow">介ç»�一款å…�费好用的å�¯è§†åŒ–æ•°æ�®åº“管ç�†å·¥å…·</a></p><p>ä¿—è¯�è¯´å·¥æ¬²å–„å…¶äº‹ï¼Œå¿…å…ˆåˆ©å…¶å™¨ï¼Œå®šæœŸå¯¹ä½ çš„MYSQLæ•°æ�®åº“进行一个体检,是ä¿�è¯�æ•°æ�®åº“安全è¿�行的é‡�è¦�æ‰‹æ®µï¼Œå› ä¸ºï¼Œå¥½çš„å·¥å…·æ˜¯ä½¿ä½ çš„å·¥ä½œæ•ˆç�‡å€�å¢�ï¼�</p><p>ä»Šå¤©å’Œå¤§å®¶åˆ†äº«å‡ ä¸ªmysql ä¼˜åŒ–çš„å·¥å…·ï¼Œä½ å�¯ä»¥ä½¿ç”¨å®ƒä»¬å¯¹ä½ çš„mysql进行一个体检,生æˆ�awræŠ¥å‘Šï¼Œè®©ä½ ä»�整体上把æ�¡ä½ 的数æ�®åº“的性能情况。</p><p>性能优化诊断工具:<a href="https://link.segmentfault.com/?enc=ck%2BpHY1cM9EyQPM1pm%2F3VA%3D%3D.W%2F47uCc7NFz2FNNVRWxsi91LRUa1j9AbIVTiM9fKxQPrnq7D9UH1FKOJGVrNrLBeSiFb8BOshcim%2BFEOYlIoHO2XP29NLh2xV9u8wmiAOlATYFNuwnxDNRQO6NwgiZrnSBdlmVmDDDtLLFhh4KKyORpOFgt5sxQcdow2W4%2BZ47g4HkbXpq5n2ivd21j8SAOGt0ggWbe5fBjtdQDQxRUV8uWCSUM3oE1Pv1jExL2s6Cy%2FkditpeB4k3yq2Q8z9fmJkOnO8%2BmCXuaHy7XMianrBP7YeqYb%2Fp465qaL%2FKCf6t%2FVKLlULWOjQEXJzJ4hbhxE94321F4ytjpjv%2B1k%2BKmeLw%3D%3D" rel="nofollow">别å°�çœ‹è¿™å‡ ä¸ªå·¥å…·ï¼�å…³é”®æ—¶èƒ½å¸®ä½ å¿«é€Ÿè§£å†³æ•°æ�®åº“瓶颈</a></p><h2>MySQL 常è§�错误代ç �说æ˜�</h2><p>å…ˆç»™å¤§å®¶çœ‹å‡ ä¸ªå®�例的错误分æ��ä¸�解决方案。</p><ul><li>1.ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql/mysql.sock'</li></ul><p>问题分æ��:å�¯èƒ½æ˜¯æ•°æ�®åº“没有å�¯åŠ¨æˆ–è€…æ˜¯ç«¯å�£è¢«é˜²ç�«å¢™ç¦�止。</p><p>解决方法:å�¯åŠ¨æ•°æ�®åº“或者防ç�«å¢™å¼€æ”¾æ•°æ�®åº“监å�¬ç«¯å�£ã€‚</p><ul><li>2.ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)</li></ul><p>问题分æ��:密ç �ä¸�正确或者没有æ�ƒé™�访问。</p><p>解决方法:</p><p>1)修改 my.cnf 主é…�置文件,在[mysqld]ä¸‹æ·»åŠ skip-grant-tables,é‡�å�¯æ•°æ�®åº“。最å��修改密ç �命令如下:</p><pre><code>mysql&gt; use mysql; mysql&gt; update user set password=password("123456") where user="root";</code></pre><p>å†�åˆ é™¤åˆšåˆšæ·»åŠ çš„ skip-grant-tables å�‚数,å†�é‡�å�¯æ•°æ�®åº“,使用新密ç �å�³å�¯ç™»å½•。</p><p>2)é‡�æ–°æ�ˆæ�ƒï¼Œå‘½ä»¤å¦‚下:</p><pre><code>mysql&gt; grant all on *.* to 'root'@'mysql-server' identified by '123456';</code></pre><ul><li>3.客户端报 Too many connections</li></ul><p>问题分æ��:è¿�æ�¥æ•°è¶…出 Mysql 的最大è¿�æ�¥é™�制。</p><p>解决方法:</p><ul><li>1ã€�在 my.cnf é…�置文件里é�¢å¢�åŠ è¿�æ�¥æ•°ï¼Œç„¶å��é‡�å�¯ MySQL æœ�务。max_connections = 10000</li><li><p>2ã€�临时修改最大è¿�æ�¥æ•°ï¼Œé‡�å�¯å��ä¸�生效。需è¦�在 my.cnf 里é�¢ä¿®æ”¹é…�置文件,下次é‡�å�¯ç”Ÿæ•ˆã€‚</p><pre><code>set GLOBAL max_connections=10000;</code></pre></li><li>4.Warning: World-writable config file '/etc/my.cnf' is ignored ERROR! MySQL is running but PID file could not be found</li></ul><p>问题分æ��:MySQL çš„é…�置文件/etc/my.cnf æ�ƒé™�ä¸�对。</p><p>解决方法:</p><pre><code>chmod 644 /et/my.cnf</code></pre><ul><li>5.InnoDB: Error: page 14178 log sequence number 29455369832 InnoDB: is in the future! Current system log sequence number 29455369832</li></ul><p>问题分æ��:innodb æ•°æ�®æ–‡ä»¶æ�Ÿå��。</p><p>解决方法:修改 my.cnf é…�置文件,在<code>[mysqld]</code>ä¸‹æ·»åŠ <code>innodb_force_recovery=4</code>, å�¯åŠ¨æ•°æ�®åº“å��备份数æ�®æ–‡ä»¶ï¼Œç„¶å��å�»æ�‰è¯¥å�‚数,利用备份文件æ�¢å¤�æ•°æ�®ã€‚</p><ul><li>6.ä»�库的 Slave_IO_Running 为 NO</li></ul><p>问题分æ��:主库和ä»�库的 server-id å€¼ä¸€æ ·.</p><p>解决方法:修改ä»�库的 server-id 的值,修改为和主库ä¸�ä¸€æ ·ï¼Œæ¯”ä¸»åº“ä½�。修改完å��é‡�å�¯ï¼Œå†�å�Œæ­¥å�³å�¯ï¼�</p><ul><li>7.ä»�库的 Slave_IO_Running 为 NO问题</li></ul><p>问题分æ��ï¼šé€ æˆ�ä»�库线程为 NO çš„å�Ÿå› 会有很多,主è¦�å�Ÿå› 是主键冲çª�æˆ–è€…ä¸»åº“åˆ é™¤æˆ–æ›´æ–°æ•°æ�®ï¼Œ ä»�库找ä¸�到记录,数æ�®è¢«ä¿®æ”¹å¯¼è‡´ã€‚通常状æ€�ç �报错有 1007ã€�1032ã€�1062ã€�1452 等。</p><p>解决方法一:</p><pre><code>mysql&gt; stop slave; mysql&gt; set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql&gt; start slave;</code></pre><p>解决方法二:设置用户æ�ƒé™�,设置ä»�库å�ªè¯»æ�ƒé™�</p><pre><code>set global read_only=true; 8.Error initializing relay log position: I/O error reading the header from the binary log</code></pre><p>分æ��问题:ä»�库的中继日志 relay-bin æ�Ÿå��.<br>解决方法:手工修å¤�,é‡�新找到å�Œæ­¥çš„ binlog å’Œ pos 点,然å��é‡�æ–°å�Œæ­¥å�³å�¯ã€‚</p><pre><code>mysql&gt; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx; </code></pre><p>维护过MySQLçš„è¿�维或DBA都知é�“,ç»�常会é�‡åˆ°çš„一些错误信æ�¯ä¸­æœ‰ä¸€äº›ç±»ä¼¼10xx的代ç �。</p><pre><code>Replicate_Wild_Ignore_Table: Last_Errno: 1032 Last_Error: Could not execute Update_rows event on table xuanzhi.test; Can't find record in 'test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000004, end_log_pos 3704</code></pre><p>但是,如æ�œä¸�深究或者之å‰�é�‡åˆ°è¿‡ï¼Œè¿˜çœŸä¸�太清楚,这些代ç �具体的å�«ä¹‰æ˜¯ä»€ä¹ˆï¼Ÿè¿™ä¹Ÿç»™æˆ‘们æ�’é”™é€ æˆ�了一定的阻ç¢�。</p><p>所以,今天民工哥就把主ä»�å�Œæ­¥è¿‡ç¨‹ä¸­ä¸€äº›å¸¸è§�的错误代ç �,它的具体说æ˜�给大家整ç�†å‡ºæ�¥äº†:<a href="https://link.segmentfault.com/?enc=3eG5ziuK8vs91lkZ83S6SA%3D%3D.Zt3u%2BZlQyNSj8kyaTPjn%2ByTKwiu8zwkmV%2BV01u6eXVNxTuTMhKMTk%2FaD%2BkCtSxqUsoB5cDT5b5TYlpSqDuxcP5V%2FtOkIwrnl41%2FB%2BF3k%2BbMfOjHbG2uXb12gMgUGSWjDmCPEJUmyAgSVWMbGUJJGzzQbDXA58vKdEHtjCEcnrFno7ME10ubURm30ZeMqsbQ%2B8cTT5iR8dDtSkXOKiUZYeCX4XywmIJcKHQmH42dNo7z8u541xtLleeYYs91mdsue9Rtj7If5P3RjX9cXEsGM%2B3VEqkHRVQZJ4EMD10mucb%2Bqkqk5nTKNwfC%2FVO0u%2FJgWPIBCamjEZ8ZJxDb1Df4UMA%3D%3D" rel="nofollow">建议收è—�备查ï¼�MySQL 常è§�错误代ç �说æ˜�</a></p><h2>MySQL å¼€å�‘规范ä¸�使用技巧</h2><h4>命å��规范</h4><ul><li><p>1.库å��ã€�表å��ã€�字段å��必须使用å°�写字æ¯�,并采用下划线分割。</p><ul><li>a)MySQL有é…�ç½®å�‚æ•°lower_case_table_names,ä¸�å�¯åЍæ€�更改,Linux系统默认为 0,å�³åº“表å��以å®�际情况存储,大å°�写æ•�感。如æ�œæ˜¯1,以å°�写存储,大å°�写ä¸�æ•�感。如æ�œæ˜¯2,以å®�际情况存储,但以å°�写比较。</li><li>b)如æ�œå¤§å°�写混å�ˆä½¿ç”¨ï¼Œå�¯èƒ½å­˜åœ¨abc,Abc,ABC等多个表共存,容易导致混乱。</li><li>c)字段å��显示区分大å°�写,但å®�际使⽤用ä¸�区分,å�³ä¸�å�¯ä»¥å»ºç«‹ä¸¤ä¸ªå��å­—ä¸€æ ·ä½†å¤§å°�写ä¸�ä¸€æ ·çš„å­—æ®µã€‚</li><li>d)为了统一规范, 库å��ã€�表å��ã€�字段å��使用å°�写字æ¯�。</li></ul></li><li><p>2.库å��ã€�表å��ã€�字段å��ç¦�止超过32个字符。</p><ul><li>库å��ã€�表å��ã€�字段å��支æŒ�最多64个字符,但为了统一规范ã€�易äº�辨识以å�Šå‡�å°‘ä¼ è¾“é‡�,ç¦�止超过32个字符。</li></ul></li><li><p>3.使用INNODB存储引æ“�。</p><ul><li>INNODB引æ“�是MySQL5.5版本以å��的默认引擘,支æŒ�事务ã€�行级é”�,有更好的数æ�®æ�¢å¤�能力ã€�更好的并å�‘性能,å�Œæ—¶å¯¹å¤šæ ¸ã€�大内存ã€�SSD等硬件支æŒ�更好,支æŒ�æ•°æ�®çƒ­å¤‡ä»½ç­‰ï¼Œå› æ­¤INNODB相比MyISAM有æ˜�显优势。</li></ul></li><li><p>4.库å��ã€�表å��ã€�字段å��ç¦�止使用MySQLä¿�留字。</p><ul><li>当库å��ã€�表å��ã€�字段å��ç­‰å±�性å�«æœ‰ä¿�留字时,SQL语å�¥å¿…须用å��引å�·å¼•用å±�性å��称,这将使得SQL语å�¥ä¹¦å†™ã€�SHELL脚本中å�˜é‡�的转义等å�˜å¾—â¾®é��常å¤�æ�‚。</li></ul></li><li><p>5.ç¦�止使用分区表。</p><ul><li>åˆ†åŒºè¡¨å¯¹åˆ†åŒºé”®æœ‰ä¸¥æ ¼è¦�求;分区表在表å�˜å¤§å��,执â¾�行DDLã€�SHARDINGã€�å�•表æ�¢å¤�等都å�˜å¾—æ›´åŠ å›°éš¾ã€‚å› æ­¤ç¦�止使用分区表,并建议业务端手动SHARDING。</li></ul></li><li><p>6.建议使用UNSIGNED存储é��负数值。</p><ul><li>å�Œæ ·çš„字节数,é��负存储的数值范围更大。如TINYINT有符å�·ä¸º -128-127ï¼Œæ— ç¬¦å�·ä¸º0-255。</li></ul></li><li><p>7.建议使用INT UNSIGNED存储IPV4。</p><ul><li>用UNSINGED INT存储IP地å�€å� 用4字节,CHAR(15)则å� 用15字节。å�¦å¤–,计算机处ç�†æ•´æ•°ç±»å�‹æ¯”字符串类å�‹å¿«ã€‚使用INT UNSIGNED而ä¸�是CHAR(15)æ�¥å­˜å‚¨IPV4地å�€ï¼Œé€šè¿‡MySQL函数inet_ntoaå’Œinet_atonæ�¥è¿›è¡Œè½¬åŒ–。IPv6地å�€ç›®å‰�没有转化函数,需è¦�使用DECIMAL或两个BIGINTæ�¥å­˜å‚¨ã€‚</li></ul></li></ul><p>例如:</p><pre><code class="sql">SELECT INET_ATON('209.207.224.40'); 3520061480SELECT INET_NTOA(3520061480); 209.207.224.40</code></pre><ul><li><p>8.强烈建议使用TINYINTæ�¥ä»£æ›¿ENUMç±»å�‹ã€‚</p><ul><li>ENUMç±»å�‹åœ¨éœ€è¦�修改或å¢�åŠ æ�šä¸¾å€¼æ—¶ï¼Œéœ€è¦�在线DDL,æˆ�本较高;ENUM列值如æ�œå�«æœ‰æ•°å­—ç±»å�‹ï¼Œå�¯èƒ½ä¼šå¼•起默认值混淆。</li></ul></li><li><p>9.使用VARBINARY存储大å°�写æ•�感的å�˜é•¿å­—符串或二进制内容。</p><ul><li>VARBINARY默认区分大å°�写,没有字符集概念,速度快。</li></ul></li><li><p>10.INTç±»å�‹å›ºå®šå� 用4字节存储</p><ul><li>例如INT(4)仅代表显示字符宽度为4ä½�,ä¸�代表存储长度。数值类å�‹æ‹¬å�·å��é�¢çš„æ•°å­—å�ªæ˜¯è¡¨ç¤ºå®½åº¦è€Œè·Ÿå­˜å‚¨èŒƒå›´æ²¡æœ‰å…³ç³»ï¼Œæ¯”如INT(3)默认显示3ä½�ï¼Œç©ºæ ¼è¡¥é½�,超出时正常显示,Pythonã€�Java客户端等ä¸�具备这个功能。</li></ul></li><li><p>11.区分使用DATETIMEå’ŒTIMESTAMP。</p><ul><li>存储年使用YEARç±»å�‹ã€‚存储日期使用DATEç±»å�‹ã€‚存储时间(精确到秒)建议使用TIMESTAMPç±»å�‹ã€‚</li><li>DATETIMEå’ŒTIMESTAMP都是精确到秒,优先选择TIMESTAMPï¼Œå› ä¸ºTIMESTAMPå�ªæœ‰4个字节,而DATETIME8个字节。å�Œæ—¶TIMESTAMP具有自动赋值以å�Šâ¾ƒè‡ªåŠ¨æ›´æ–°çš„ç‰¹æ€§ã€‚æ³¨æ„�:在5.5和之å‰�的版本中,如æ�œä¸€ä¸ªè¡¨ä¸­æœ‰å¤šä¸ªtimestamp列,那么最多å�ªèƒ½æœ‰ä¸€åˆ—能具有自动更新功能。</li></ul></li></ul><p>如何使用TIMESTAMP的自动赋值å±�性?</p><pre><code class="sql">a)自动åˆ�始化,而且自动更新: column1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP b)å�ªæ˜¯è‡ªåЍåˆ�始化: column1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP c)自动更新,åˆ�始化的值为0: column1 TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP d)åˆ�始化的值为0: column1 TIMESTAMP DEFAULT 0</code></pre><ul><li><p>12.索引字段å�‡å®šä¹‰ä¸ºNOT NULL。</p><ul><li>a)对表的æ¯�一行,æ¯�个为NULL的列都需è¦�é¢�外的空间æ�¥æ ‡è¯†ã€‚</li><li>b)Bæ ‘ç´¢å¼•æ—¶ä¸�会存储NULL值,所以如æ�œç´¢å¼•字段å�¯ä»¥ä¸ºNULL,索引效ç�‡ä¼šä¸‹é™�。</li><li>c)建议用0ã€�特殊值或空串代替NULL值。</li></ul></li></ul><p>详细的å�¯å�‚é˜…ä»¥ä¸‹æ–‡ç« </p><ul><li><a href="https://link.segmentfault.com/?enc=PRnkNu1z2kV5oEF3RseJyw%3D%3D.2mN6bjzH5NnMPIJW28%2FqMcEGS8wPj690jVzn18SURB0%2FPaDgOcWfjA982BmOFRqb8cskQFL4iZecd11nSBFx%2FD72Y%2BVeWigpk9fplDJG1ITMvb%2BPl7vzOFZIoZKA7F6%2BzVaT6ZmYut29YRhiKcvLt3YBsW4r1nqQ%2BwOCBGWd2LrQfRmC%2BfXygfp1ZEGff6u%2F%2BfdwfbpyiiNOSxmCwX%2Fv6CDwQPIljIDHBORZVsm6uSG0YO2W2wgwowbB61ZQNrfvbRJD1v3jzJIsKbvrEmqb%2FqxztpQUa18GJig59TEmLVbDOhXtLH37tgtVxhTEVJ9oJHuAy7ymoexgMt4uVULmjA%3D%3D" rel="nofollow">值得收è—�:一份é��常完整ã€�详细的MySQL规范</a></li><li><a href="https://link.segmentfault.com/?enc=scJdwsCqtrpT%2Bz%2Fl6eNqRg%3D%3D.XcdanPcMA4LXAXri%2BujR9hzTfZ6nCUvFeMHow6AiS9%2FF93Bl1NDfmnquRZgK0hQunmU4c7lFIfH3ToBrX4Z66CsfeJ66ssS5P8BCrZtvmqByrM6T9rKkovc7uIY0L33%2BzLqPVH4M0s7woxVmtU0T%2Fz9zeQwmdJ%2FeO8n%2FchT7ssILUUTNnjkPzZOzaeiWG7VGqKMBaAPW8beE5IB36AA2HwgJkgbMdGp61CQwzjwOJ36GFv7u92M0PuPJHATtghTf0VtPM7NnUCMybkQVHa97fgBZgn4hlGRc9vrlYlEoCRvpLZZ6r3OFcfCl6QRuBjSN7Z5FU6q8TVDX%2BMh1YOuEdw%3D%3D" rel="nofollow">MySQLå¼€å�‘规范ä¸�使用技巧总结</a></li></ul><h2>MySQL 高频ä¼�业é�¢è¯•题</h2><p>学好知识,当然就得å�»é�¢è¯•,进大å�‚,拿高薪。但是进入é�¢è¯•之å‰�,必è¦�的准备是必须的,刷题是其中之一。</p><h5><a href="https://link.segmentfault.com/?enc=qSau%2Bsu4EtjZgmJc9KVbsA%3D%3D.993dSY7y7X26HQmUsOJxmO4tFDsB2MHQ7Q3wMCkvTrQ2jqEzTiv%2BcD%2BkTjU%2BT2Sp%2F6zJt3COiUWLQCUkEEq0DcIhS5ts7nTOaN3C5ZUdNiivN7J32HWOCA1nDn%2FcIWY375ZSbPFckAWwGQxwwvv31A6PjgTBckLgLeB70dDf50YV6MxEcQ0WMWT99UT9hTvHlJUJJE3LzsqrS7UUzhB32o0Gv%2BV%2FdCNJvuHZdCUHl6U8hl8dIlrKCDBRjPhf%2BWTNU0tNnqN44RoQUFKAYfllTJzN7vjHk8rqABAZMMghFSvAmMJ4MH177WXg8y9mCats" rel="nofollow"><strong>Linuxè¿�维必会的100é�“MySqlé�¢è¯•题之(一)</strong></a></h5><h5><a href="https://link.segmentfault.com/?enc=rWSd1tOg7KuhkikX7dquSA%3D%3D.DFztccQbERDc4LmV%2F5%2FSq1FzFYPfcsD30hUPaD3KXHGkVLvYYTZHqd9KIBBs2tvGLuuA0Nw3rHdjj7RWqe47OObJp4pL618HbamPo7TX3ShLJg65RNzaJ3PFDEWlxoDlKmhJmIEmlTXEuwQu7lNOvl1K0D1AHMmXXPtmajy1UW3iDgqerp6rN%2BCLPw0Y14pRtQORn1V7S%2BxaGO7XUq2zZn59Gj8jSIEshPTqFBp1H8JjVjeX0pzFhDkfo0T3sWwX3NkCJUGWusV0FTRe7IyhYs%2FR%2BDsfqvHBC9csgS1BkSFbXC1zV%2BKLjwHfJwjMoh%2Bz" rel="nofollow"><strong>Linuxè¿�维必会的100é�“MySqlé�¢è¯•题之(二)</strong></a></h5><h5><a href="https://link.segmentfault.com/?enc=XV2IH5jn3cPVXi7%2BVVjOqQ%3D%3D.xmcx7Fj%2Fzs13M9f8%2BDy2CdQMtikESq%2F1rdq%2FUm7GSxXlHSmHENkKvX%2Bt81iA9vpjEdsICdy4WKheGZZpJrdnqouvdladvclYMmbyApvThWVZNmEK6I02Ggc7wm%2BNfAvsykc7gC%2FxLK6HdAlkXWQtZ7l6SxwSmBVvBlzLweJL%2F7xKPx1mhlMKMScoNC4GpZ%2FkIkjU0%2BpVHTIqr5xF7gIl8ZpuJuI8ksuBMDrrHJraOQzgfPNaCb895V%2BD%2BR0HKYhUWUL6TBIJEkKMsg4JQOFokIPLwK81fGd9tSyTxXiOjedRYJPpbsROhRxiDSQbyzru" rel="nofollow"><strong>Linuxè¿�维必会的100é�“MySqlé�¢è¯•题之(三)</strong></a></h5><h5><a href="https://link.segmentfault.com/?enc=aVH7GUahd59c3IpY2YBNOA%3D%3D.bAsjulN0IpT%2B6jjMUSlQCpmMnirZdfk91D9C8wChSYQT6mNMyqJotofQJtgz9VDpLGcEmrSgAdPNw1fRNhsbmVCrbuGj7rpLfRQCJiZ6bl1etYRGeQUEvW19%2FFt%2FglmC5jOYDCm%2BVjlg2To0jTyAhyV5WXADkn0Ed94nk2WdcCQypJP30e18nDHIFPUxB2HYBkCWpULO0mTVRsRnfy8%2BJoVxBKSPgvLrK77ZxYDo1w2Zf0UiGzKtSeIUSW%2FS7BKzdS6ZwIdsEtBsIAKXCFixFvxDWHqMORKAPyB526QGOMiZ7o0phlft%2B21blO3SMqPq" rel="nofollow"><strong>Linuxè¿�维必会的100é�“MySqlé�¢è¯•题之(四)</strong></a></h5><p>以下内容主è¦�å�—众为开å�‘人员,所以ä¸�涉å�Šåˆ°MySQLçš„æœ�务部署等æ“�作,且内容较多,大家准备好è€�心和瓜å­�矿泉水.</p><p>å‰�ä¸€é˜µç³»ç»Ÿçš„å­¦ä¹ äº†ä¸€ä¸‹MySQL,也有一些å®�é™…æ“�作ç»�验,å�¶ç„¶çœ‹åˆ°ä¸€ç¯‡å’ŒMySQL相关的é�¢è¯•æ–‡ç« ,å�‘ç�°å…¶ä¸­çš„一些问题自己也å›�ç­”ä¸�好,虽然知识点大部分都知é�“,ä½†æ˜¯æ— æ³•å°†çŸ¥è¯†ä¸²è�”èµ·æ�¥.</p><p>å› æ­¤å†³å®šæ��一个MySQLç�µé­‚100é—®,试ç�€ç”¨å›�答问题的方å¼�,让自己对知识点的ç�†è§£æ›´åŠ æ·±å…¥ä¸€ç‚¹.</p><p>此文ä¸�ä¼šäº‹æ— å·¨ç»†çš„ä»�select的用法开始讲解mysql,主è¦�针对的是开å�‘人员需è¦�知é�“的一些MySQL的知识点,主è¦�包括索引,事务,优化等方é�¢,以在é�¢è¯•中高频的问å�¥å½¢å¼�给出答案.</p><ul><li><a href="https://link.segmentfault.com/?enc=oqkBrikck%2F4SgcH2%2B7Vsbw%3D%3D.sM4LkHRLuqMuRuWAQLBzyQ%2BQ34Du0bAAGJ7C3JEXTT4e7vOOrX%2F6GHGUBDufOgfm9rZjfuJ4XVXT9DnxkMhBUm0WqiZlziV50s%2F9S%2BEMEYFisEIBQsJxilZAP0VBpGPKcGM4TwWVsMxvT9wgG82pDoiv99atR%2BngJxUpohd8MrGbh1OCT3kZOzdYdJxIcRYHKJPGp3SMynN%2BKGXKQdaoKgxdDds2CUP8DY1WrLZ3UDonv4gPLA%2BtBDZRs54rGvhN8m6ModvcEN9w%2BDibl9kqCSuu4gu0IecF8OcYONaftlj0jUJpTlxjXGKafU%2FfDIZo%2FbJ1d1ahqT4bUJv5HYvO%2BA%3D%3D" rel="nofollow">MySQL 高频é�¢è¯•题,都在这了</a></li><li><a href="https://link.segmentfault.com/?enc=7d5kzYkb7gevIMEkrFJ8dA%3D%3D.sQu7psYVR26lvgJmVVOseouh622Cw9IFAxoTKkl7hugOpNePaC73mxmkbCTtL0TQmfKEVgNAhcF3Ct7JG7Kt6Uz4%2FI%2BUtpXVZLy5TUiBmjKca3zBF5ausEw%2FUxraPrTjxyQvJWuJ9Ivhp4%2F0H2pjs65eown6e1z%2Bqkq7%2Fcqwdgx1l%2B06lZzXGNqk3yfiVyN9OMKf9UteWsEYx99hkOL5hZJEL3dCPJzMfXjbkd534awaXnULJDz6Qovdnt6EMKSydDst%2FF5sYLm33bZRMGSKzarIt9eb2DaL86Mk0zVvO2amV7I%2BoAz9eVCL4ASQSUrFaPUqqnEyTChZHVQhjKB4ag%3D%3D" rel="nofollow">å�²ä¸Šæœ€å…¨çš„大å�‚Mysqlé�¢è¯•题在这里</a></li><li><a href="https://link.segmentfault.com/?enc=HHioleOekO3bO3MjBiLHqA%3D%3D.AZacWdXMIXEsiPIS5lPw2Rlhg5cwbEhHvSKErVec6szX3j7d%2BM8PcUyf6BMycqkCAIeCL96Q5ANwxIuwive%2BsmH%2FsEkBDojflgkHCA0SGNuNuq10%2B4VsWlQw9fQDVecfgVnx7t1EJIlMJCMSL548%2FShte4uX2Mgu1hcpM9FntuAZiyZZrtS%2FKMUVmsFL1dknpWAIvXA6eMKUbRnpIWx9gfcaKh9QigStFfgbWASu8pTgmSodKLPSlZ9UE1tzicHRLwNxVDnFn4uWi6NWrdDq9eBecy%2FM5WSizadGqZFQHDYQzQGe6u23eePSPI8x5SDWdfUW2lRqPL21GrNRV%2F1ZFg%3D%3D" rel="nofollow">MySQL æ•°æ�®åº“é�¢è¯•题(2021最新版)</a></li></ul><h2>MySQL用户行为安全</h2><ul><li>å�‡è®¾è¿™ä¹ˆä¸€ä¸ªæƒ…å†µï¼Œä½ æ˜¯æŸ�å…¬å�¸mysql-DBA,æŸ�æ—¥çª�ç„¶å…¬å�¸æ•°æ�®åº“ä¸­çš„æ‰€æœ‰è¢«äººä¸ºåˆ äº†ã€‚</li><li>尽管有数æ�®å¤‡ä»½ï¼Œä½†æ˜¯å› æœ�务å�œæ­¢è€Œé€ æˆ�çš„æ�Ÿå¤±ä¸Šå�ƒä¸‡ï¼Œç�°åœ¨å…¬å�¸éœ€è¦�查出那个å�šåˆ 除æ“�作的人。</li><li>但是拥有数æ�®åº“æ“�作æ�ƒé™�的人很多,如何æ�’查,è¯�æ�®å�ˆåœ¨å“ªï¼Ÿ</li><li>是ä¸�æ˜¯è§‰å¾—æ— èƒ½ä¸ºåŠ›ï¼Ÿ</li><li>mysql本身并没有æ“�作审计的功能,那是ä¸�是æ„�味ç�€é�‡åˆ°è¿™ç§�情况å�ªèƒ½è‡ªè®¤å€’霉呢?</li></ul><p>民工哥技术之路公众å�·ä¸�定期更新MySQL技术知识体系,大家å�¯ä»¥å…³æ³¨æˆ‘查阅 <a href="https://link.segmentfault.com/?enc=7GhhaJwVWFuQAqMpnMRBaw%3D%3D.u40U61OUKj0VnE4lywgU9gg8TD27Aqc4LwqHKXEvOYP9J%2FE7GaQjUspBDIIcP2M3gLHbuVoaS9vNxaaq8bJ3iDg5aj8zHXaRrb%2BkJY72%2Bffjbgtzd%2BSmqQk6S9EavGfzuwh%2Bgfv0WndGO9jnBFnhxFm3K5FsOomClUVZRLJBHIgVxjivwQieFfhjUhDubPGu" rel="nofollow">MySQL技术专æ �</a> å­¦ä¹ æ›´å¤šçš„MySQL知识。</p><p>也欢è¿�点èµ�ã€�转å�‘支æŒ�ï¼Œå› æ°´å¹³æœ‰é™�,如有错误请留言指正,为感ï¼�ï¼�ï¼�</p> è¿™ 4 ç§� Redis 常用è¿�维工具都ä¸�ä¼šï¼Ÿä½ ç®—å•¥è¿�维人 https://segmentfault.com/a/1190000041256510 2022-01-10T11:54:14+08:00 2022-01-10T11:54:14+08:00 民工哥 https://segmentfault.com/u/jishuroad 4 <p>我们在应用 <a href="https://link.segmentfault.com/?enc=tLAA4lXpVXJ4MCZIXUaSvg%3D%3D.oqLaGsNhlScyPWYiO2CAzMA7%2BtBPtUxrfXIkpIAEiXKvOABdSj59b7nC5tfbsMrDW6ARGqV7YNl0hF0WljqlwNM2J10zJkulp4QG3y8qKx9zXOH7Xu%2BKxL1GjxR9WReCkaYIojrscRBcj5twlAEg%2Bz5AZd7LNwF3M5tTjR64%2Bv3Evx96p778h%2BzjOoRO1kkIJN6vjJD740EgtMmo76hcX3FjXyzNRtmNqpEsEtWxFVbuGjUDaw7kTFcEkplfChukP7IFbkKrPWpUT9jBsOwe6q9I75bAmaAlEUR8haUIb0X034Ilfwec5oVDbhSFxqTP" rel="nofollow">Redis</a> 时,ç»�常会é�¢ä¸´çš„è¿�维工作,包括 <a href="https://link.segmentfault.com/?enc=tDx6DmD4FtZ6qQnFV9R%2FLw%3D%3D.AKm7No8f1WJjsjpyiNNAgUxz3e7hhpiEzj6ZEpsfuy8HehpnnIC1FOJzis36PvOwYeutmgZQITfOgt%2BQ2TMIKv%2BNO67fNKtfQ%2F29H0%2FOj2K%2BrstPCmjfEj2KSJE9LYhjse16do1x7t%2B0kjv5wL7qtqhUmbuY9tpKVo%2Fvbgk1uasSlOlwT5xKTm9wQulgWM9ivYwDSTWlq8yfQXDTnRTFY%2BSoBLY2hdR1BmZ9bj8ZtPFi1%2FpN7QMq5zs56nzB0evNKLoFypdaN%2FYBaYJVCXeDzGuJnj8RQcdpD2IGR4ONy0VzrNMymKvp4T2l0S8uWjy6" rel="nofollow">Redis</a> çš„è¿�行状æ€�监æ�§ ,数æ�®è¿�ç§» ,主ä»�集群 ã€�切片集群的部署和è¿�维。æ�¥ä¸‹æ�¥ï¼Œæˆ‘å°±ä»�这三个方é�¢ï¼Œç»™ä½ 介ç»�一些工具。</p><p><img src="/img/remote/1460000041256512" alt="图片" title="图片"></p><p>我们先æ�¥å­¦ä¹ 下监æ�§ Redis å®�æ—¶è¿�行状æ€�的工具,这些工具都用到了 Redis æ��供的一个监æ�§å‘½ä»¤ï¼šINFO 。</p><h2>最基本的监æ�§å‘½ä»¤ï¼šINFO 命令</h2><p><a href="https://link.segmentfault.com/?enc=9CqqWfiN56NJF3%2BwDCMOdA%3D%3D.EcPMZmirFSzwaDLsK%2Fq6wSuS%2BHEP0QRM%2Fy67Rfmeqf2fL8ntBwELReCHBUPgf2ooCH4tqtQ5XA%2FA1p6gC5VNFP%2Banx6UehHJ4oolFRuVfJcEQe7iaOVEnHNhMdApBJj1vltf3ZhHNamG3kRxh77qxjSorS0zHEthGrvAlRw4xM%2FwxiGs3FiEkZ3%2BkdOJ5PMHFPmHtgQbpsSZCCNj5gJacNZpdbi6fO4WuI8ti48cBYtEqAkovoedD9v69yGLMfOpsjWw8y7%2FL6xucJGwvp9hhZcEYxgLDzbVPSJrun%2B2GisMg2aZbVjGdNON0Jhkwehc" rel="nofollow">Redis</a> 本身æ��供的 INFO 命令会返å›�丰富的å®�例è¿�行监æ�§ä¿¡æ�¯ï¼Œè¿™ä¸ªå‘½ä»¤æ˜¯ Redis 监æ�§å·¥å…·çš„基础。</p><p>INFO 命令在使用时,å�¯ä»¥å¸¦ä¸€ä¸ªå�‚æ•° section,这个å�‚æ•°çš„å�–å€¼æœ‰å¥½å‡ ç§�,相应的,INFO 命令也会返å›�ä¸�å�Œç±»å�‹çš„监æ�§ä¿¡æ�¯ã€‚我把 INFO 命令的返å›�ä¿¡æ�¯åˆ†æˆ� 5 大类,其中,有的类别当中å�ˆåŒ…å�«äº†ä¸�å�Œçš„监æ�§å†…容,如下表所示:</p><p><img src="/img/remote/1460000041256513" alt="图片" title="图片"></p><p>在监æ�§ <a href="https://link.segmentfault.com/?enc=0SziGLJtBv54oXP3QYv6Zg%3D%3D.WMhTRFnwYsEkMFfeiQsDZpq5E3gEuQUfHKgv0zXbiPMEMvS%2BO8bA%2Bwa8fdPcERU31xGk6uMqgbBuIzDqA3ACE5I99B92X3sRnzLSvEdnx0uVp1OiKLtkpsITm3EvL5aQRNSWJnwDHyy8AuRNFobKf0ziq9EiLl1iKIDJ6ZTpBY8NbAAsTWksNORYQJclDHQ%2BNMZBmX%2F69NTl4L2uh22tnt4pJQgR2DBy1RMN1DvGJsyJ%2FKIgQCg%2FIPS%2BzjK%2BrZ%2B%2Bxlbr5xJFjlusIiXULh5CtHNmTqignk7MaOAFJD8aiIi35QAggHQI%2BShQYvLPN0rS" rel="nofollow">Redis</a> è¿�行状æ€�时,INFO 命令返å›�的结æ�œé��常有用。如æ�œä½ 想了解 INFO 命令的所有å�‚æ•°è¿”å›�结æ�œçš„详细å�«ä¹‰ï¼Œå�¯ä»¥æŸ¥çœ‹ Redis官网的介ç»�。</p><p>è¿™é‡Œï¼Œæˆ‘ç»™ä½ æ��å‡ ä¸ªè¿�维时需è¦�é‡�点关注的å�‚数以å�Šå®ƒä»¬çš„é‡�è¦�è¿”å›�结æ�œã€‚</p><p>é¦–å…ˆï¼Œæ— è®ºä½ æ˜¯è¿�行å�•å®�ä¾‹æˆ–æ˜¯é›†ç¾¤ï¼Œæˆ‘å»ºè®®ä½ é‡�点关注一下stat ã€�commandstat ã€�cpu å’Œ memory 这四个å�‚数的返å›�结æ�œï¼Œè¿™é‡Œé�¢åŒ…å�«äº†å‘½ä»¤çš„æ‰§è¡Œæƒ…况(比如命令的执行次数和执行时间ã€�命令使用的 CPU 资æº�),内存资æº�的使用情况(比如内存已使用é‡�ã€�内存ç¢�片ç�‡ï¼‰ï¼ŒCPU 资æº�使用情况等,这å�¯ä»¥å¸®åŠ©æˆ‘ä»¬åˆ¤æ–­å®�例的è¿�行状æ€�和资æº�消耗情况。</p><p>å�¦å¤–ï¼Œå½“ä½ å�¯ç”¨ RDB 或 AOF åŠŸèƒ½æ—¶ï¼Œä½ å°±éœ€è¦�é‡�点关注下 persistence å�‚数的返å›�结æ�œï¼Œä½ å�¯ä»¥é€šè¿‡å®ƒæŸ¥çœ‹åˆ° RDB 或者 AOF 的执行情况。</p><p>如æ�œä½ 在使用主ä»�集群,就è¦�é‡�点关注下 replication å�‚数的返å›�结æ�œï¼Œè¿™é‡Œé�¢åŒ…å�«äº†ä¸»ä»�å�Œæ­¥çš„å®�时状æ€�。</p><p>ä¸�过,INFO 命令å�ªæ˜¯æ��供了文本形å¼�的监æ�§ç»“æ�œï¼Œå¹¶æ²¡æœ‰å�¯è§†åŒ–,所以,在å®�际应用中,我们还å�¯ä»¥ä½¿ç”¨ä¸€äº›ç¬¬ä¸‰æ–¹å¼€æº�工具,将 INFO 命令的返å›�结æ�œå�¯è§†åŒ–。æ�¥ä¸‹æ�¥ï¼Œæˆ‘è¦�讲的 Prometheus ,就å�¯ä»¥é€šè¿‡æ�’ä»¶å°† Redis 的统计结æ�œå�¯è§†åŒ–。<a href="https://link.segmentfault.com/?enc=WciH2vqz2kqcjZuT251SsA%3D%3D.m0MYkNRytBimSmOgor9hUKKpGS0QgdOLLHwrMqUMJw30%2FzVKII3URmnv8XLKl9mkIUUeCOOalMb%2Bl91PihdPK0Yq7W7tLkpjZ8h%2FpgOnlOnT%2B%2BHaf7lOP1Jx%2Fr2myMhcwd0ACfKl7%2BNRQdV9n3T1iGsLGAlOYZNKkfbuyEYZkgx6DRxgVSe42APPyxZQXO4NBfwq6KfUmzskKrxZpllYYvcBauo9SsfmJzhq3o9AcT0zadL6wUux7aYnkhmTiTZC5Ys%2F8J4fdD9%2F9s%2FnuQdg9Sx8wtPyuvATuWNR1H1zh%2BvMfQMS%2FJnN2vfJMki8LmIa" rel="nofollow">Redisæ€§èƒ½æŒ‡æ ‡ç›‘æ�§ï¼�ä½ çŸ¥å‡ ä½•ï¼Ÿ</a></p><h2>é�¢å�‘ Prometheus çš„ Redis-exporter 监æ�§</h2><p>Prometheus 是一套开æº�的系统监æ�§æŠ¥è­¦æ¡†æ�¶ã€‚å®ƒçš„æ ¸å¿ƒåŠŸèƒ½æ˜¯ä»�被监æ�§ç³»ç»Ÿä¸­æ‹‰å�–监æ�§æ•°æ�®ï¼Œç»“å�ˆGrafana 工具,进行å�¯è§†åŒ–展示。</p><p>而且,监æ�§æ•°æ�®å�¯ä»¥ä¿�存到时åº�æ•°æ�®åº“中,以便è¿�维人员进行å�†å�²æŸ¥è¯¢ã€‚å�Œæ—¶ï¼ŒPrometheus 会检测系统的监æ�§æŒ‡æ ‡æ˜¯å�¦è¶…过了预设的阈值,一旦超过阈值,Prometheus 就会触å�‘报警。</p><p>对äº�系统的日常è¿�维管ç�†æ�¥è¯´ï¼Œè¿™äº›åŠŸèƒ½æ˜¯é��常é‡�è¦�的。而 Prometheus å·²ç»�å®�ç�°äº†ä½¿ç”¨è¿™äº›åŠŸèƒ½çš„å·¥å…·æ¡†æ�¶ã€‚我们å�ªè¦�能ä»�被监æ�§ç³»ç»Ÿä¸­è�·å�–到监æ�§æ•°æ�®ï¼Œå°±å�¯ä»¥ç”¨ Prometheus æ�¥å®�ç�°è¿�维监æ�§ã€‚</p><p>Prometheus 正好æ��供了æ�’件功能æ�¥å®�ç�°å¯¹ä¸€ä¸ªç³»ç»Ÿçš„监æ�§ï¼Œæˆ‘们把æ�’件称为 exporter ,æ¯�一个 exporter å®�际是一个采集监æ�§æ•°æ�®çš„组件。exporter 采集的数æ�®æ ¼å¼�符å�ˆ Prometheus çš„è¦�求,Prometheus è�·å�–这些数æ�®å��,就å�¯ä»¥è¿›è¡Œå±•示和ä¿�存了。</p><p>Redis-exporter 就是用æ�¥ç›‘æ�§ Redis 的,它将 INFO 命令监æ�§åˆ°çš„è¿�行状æ€�å’Œå�„ç§�统计信æ�¯æ��供给 Prometheus,ä»�而进行å�¯è§†åŒ–展示和报警设置。目å‰�,Redis-exporter å�¯ä»¥æ”¯æŒ� Redis 2.0 至 6.0 版本,适用范围比较广。</p><p>除了è�·å�– Redis å®�例的è¿�行状æ€�,Redis-exporter 还å�¯ä»¥ç›‘æ�§é”®å€¼å¯¹çš„大å°�和集å�ˆç±»å�‹æ•°æ�®çš„å…ƒç´ ä¸ªæ•°ï¼Œè¿™ä¸ªå�¯ä»¥åœ¨è¿�行 Redis-exporter 时,使用 check-keys 的命令行选项æ�¥å®�ç�°ã€‚</p><p>此外,我们å�¯ä»¥å¼€å�‘一个 Lua 脚本,定制化采集所需监æ�§çš„æ•°æ�®ã€‚ç„¶å��,我们使用 scripts 命令行选项,让 Redis-exporter è¿�行这个特定的脚本,ä»�而å�¯ä»¥æ»¡è¶³ä¸šåŠ¡å±‚çš„å¤šæ ·åŒ–ç›‘æ�§éœ€æ±‚。</p><p>最å��,我还想å†�ç»™ä½ åˆ†äº«ä¸¤ä¸ªå°�工具:redis-stat å’ŒRedis Live。跟 Redis-exporter 相比,这两个都是轻é‡�级的监æ�§å·¥å…·ã€‚它们分别是用 Ruby å’Œ Python å¼€å�‘的,也是将 INFO 命令æ��供的å®�例è¿�行状æ€�ä¿¡æ�¯å�¯è§†åŒ–展示。</p><p>虽然这两个工具目å‰�å·²ç»�很少更新了,ä¸�过,如æ�œä½ 想自行开å�‘ Redis 监æ�§å·¥å…·ï¼Œå®ƒä»¬éƒ½æ˜¯ä¸�错的å�‚考。</p><p>除了监æ�§ Redis çš„è¿�行状æ€�,还有一个常è§�çš„è¿�维任务就是数æ�®è¿�ç§» 。æ�¥ä¸‹æ�¥ï¼Œæˆ‘们å†�æ�¥å­¦ä¹ 下数æ�®è¿�移的工具。</p><h2>æ•°æ�®è¿�移工具 Redis-shake</h2><p>有时候,我们需è¦�在ä¸�å�Œçš„å®�例间è¿�移数æ�®ã€‚ç›®å‰�,比较常用的一个数æ�®è¿�移工具是Redis-shake ,这是阿里云 Redis å’Œ MongoDB 团队开å�‘的一个用äº� Redis æ•°æ�®å�Œæ­¥çš„工具。</p><p>Redis-shake 的基本è¿�行å�Ÿç�†ï¼Œæ˜¯å…ˆå�¯åЍ Redis-shake 进程,这个进程模拟了一个 Redis å®�例。</p><p>ç„¶å��,Redis-shake 进程和数æ�®è¿�出的æº�å®�例进行数æ�®çš„å…¨é‡�å�Œæ­¥ã€‚</p><p>这个过程和 Redis 主ä»�å®�例的全é‡�å�Œæ­¥æ˜¯ç±»ä¼¼çš„。</p><p>æº�å®�例相当äº�主库,Redis-shake 相当äº�ä»�库,æº�å®�例先把 RDB æ–‡ä»¶ä¼ è¾“ç»™ Redis-shake ,Redis-shake 会把 RDB 文件å�‘é€�给目的å®�例。æ�¥ç�€ï¼Œæº�å®�例会å†�把å¢�é‡�命令å�‘é€�ç»™ Redis-shake ,Redis-shake 负责把这些å¢�é‡�命令å†�å�Œæ­¥ç»™ç›®çš„å®�例。</p><p>下é�¢è¿™å¼ 图展示了 Redis-shake 进行数æ�®è¿�移的过程:</p><p><img src="/img/remote/1460000041256514" alt="图片" title="图片"></p><p>Redis-shake 的一大优势,就是支æŒ�多ç§�ç±»å�‹çš„è¿�移。</p><p>首先,它既支æŒ�å�•个å®�例间的数æ�®è¿�移,也支æŒ�集群到集群间的数æ�®è¿�移。</p><p>其次,有的 Redis 切片集群(例如 Codis)会使用 proxy æ�¥æ”¶è¯·æ±‚æ“�作,Redis-shake 也å�Œæ ·æ”¯æŒ�å’Œ proxy 进行数æ�®è¿�移。</p><p>å�¦å¤–ï¼Œå› ä¸º Redis-shake 是阿里云团队开å�‘的,所以,除了支æŒ�å¼€æº�çš„ Redis 版本以外,Redis-shake 还支æŒ�云下的 Redis å®�例和云上的 Redis å®�例进行è¿�移,å�¯ä»¥å¸®åŠ©æˆ‘ä»¬å®�ç�° Redis æœ�åŠ¡ä¸Šäº‘çš„ç›®æ ‡ã€‚</p><p>在数æ�®è¿�ç§»å��,我们通常需è¦�对比æº�å®�例和目的å®�例中的数æ�®æ˜¯å�¦ä¸€è‡´ã€‚如æ�œæœ‰ä¸�一致的数æ�®ï¼Œæˆ‘们需è¦�把它们找出æ�¥ï¼Œä»�目的å®�例中剔除,或者是å†�次è¿�移这些ä¸�一致的数æ�®ã€‚</p><p>这里,我就è¦�å†�ç»™ä½ ä»‹ç»�一个数æ�®ä¸€è‡´æ€§æ¯”对的工具了,就是阿里云团队开å�‘çš„Redis-full-check 。</p><p>Redis-full-check 的工作å�Ÿç�†å¾ˆç®€å�•,就是对æº�å®�例和目的å®�例中的数æ�®è¿›è¡Œå…¨é‡�比对,ä»�而完æˆ�æ•°æ�®æ ¡éªŒã€‚ä¸�过,为了é™�ä½�æ•°æ�®æ ¡éªŒçš„æ¯”对开销,Redis-full-check 采用了多轮比较的方法。</p><ul><li>åœ¨ç¬¬ä¸€è½®æ ¡éªŒæ—¶ï¼ŒRedis-full-check 会找出在æº�å®�例上的所有 key,然å��ä»�æº�å®�例和目的å®�例中把相应的值也都查找出æ�¥ï¼Œè¿›è¡Œæ¯”对。第一次比对å��,Redis-full-check 会把目的å®�例中和æº�å®�例ä¸�一致的数æ�®ï¼Œè®°å½•到 sqlite æ•°æ�®åº“中。</li><li>ä»�ç¬¬äºŒè½®æ ¡éªŒå¼€å§‹ï¼ŒRedis-full-check å�ªæ¯”较上一轮结æ�Ÿå��记录在数æ�®åº“中的ä¸�一致的数æ�®ã€‚</li></ul><p>为了é�¿å…�对å®�例的正常请求处ç�†é€ æˆ�å½±å“�,Redis-full-check 在æ¯�一轮比对结æ�Ÿå��,会暂å�œä¸€æ®µæ—¶é—´ã€‚éš�ç�€ Redis-shake å¢�é‡�å�Œæ­¥çš„进行,æº�å®�例和目的å®�例中的ä¸�一致数æ�®ä¹Ÿä¼šé€�æ­¥å‡�å°‘ï¼Œæ‰€ä»¥ï¼Œæˆ‘ä»¬æ ¡éªŒæ¯”å¯¹çš„è½®æ•°ä¸�用很多。</p><p>我们å�¯ä»¥è‡ªå·±è®¾ç½®æ¯”对的轮数。具体的方法是,在è¿�行 Redis-full-check 命令时,把å�‚æ•° comparetimes 的值设置为我们想è¦�比对的轮数。</p><p>等到所有轮数都比对完æˆ�å��,数æ�®åº“中记录的数æ�®å°±æ˜¯æº�å®�例和目的å®�例最终的差异结æ�œäº†ã€‚</p><p>这里有个地方需è¦�注æ„�下,Redis-full-check æ��供了三ç§�比对模å¼�,我们å�¯ä»¥é€šè¿‡ comparemode å�‚数进行设置。comparemode å�‚数有三ç§�å�–值,å�«ä¹‰å¦‚下:</p><ul><li>KeyOutline ,å�ªå¯¹æ¯” key 值是å�¦ç›¸ç­‰ï¼›</li><li>ValueOutline ,å�ªå¯¹æ¯” value 值的长度是å�¦ç›¸ç­‰ï¼›</li><li>FullValue ,对比 key 值ã€�value 长度ã€�value 值是å�¦ç›¸ç­‰ã€‚</li></ul><p>我们在应用 Redis-full-check 时,å�¯ä»¥æ ¹æ�®ä¸šåŠ¡å¯¹æ•°æ�®ä¸€è‡´æ€§ç¨‹åº¦çš„è¦�求,选择相应的比对模å¼�。如æ�œä¸€è‡´æ€§è¦�求高,就把 comparemode å�‚数设置为 FullValue 。</p><p>好了,最å��,我å†�å�‘ä½ ä»‹ç»�一个用äº� Redis 集群è¿�维管ç�†çš„工具 CacheCloud 。</p><h2>集群管ç�†å·¥å…· CacheCloud</h2><p>CacheCloud 是æ�œç‹�å¼€å�‘的一个é�¢å�‘ Redis è¿�维管ç�†çš„云平å�°ï¼Œå®ƒå®�ç�°äº†ä¸»ä»�集群ã€�哨兵集群和 Redis Cluster 的自动部署和管ç�†ï¼Œç”¨æˆ·å�¯ä»¥ç›´æ�¥åœ¨å¹³å�°çš„管ç�†ç•Œé�¢ä¸Šè¿›è¡Œæ“�作。</p><p>针对常è§�的集群è¿�维需求,CacheCloud æ��供了 5 个è¿�ç»´æ“�作。</p><ul><li>下线å®�例 :关闭å®�例以å�Šå®�例相关的监æ�§ä»»åŠ¡ã€‚</li><li>上线å®�例 :é‡�æ–°å�¯åŠ¨å·²ä¸‹çº¿çš„å®�例,并进行监æ�§ã€‚</li><li>æ·»åŠ ä»�节点 :在主ä»�é›†ç¾¤ä¸­ç»™ä¸»èŠ‚ç‚¹æ·»åŠ ä¸€ä¸ªä»�节点。</li><li>故障切æ�¢ :手动完æˆ� Redis Cluster 主ä»�节点的故障转移。</li><li>é…�置管ç�† :用户æ��交é…�置修改的工å�•å��,管ç�†å‘˜è¿›è¡Œå®¡æ ¸ï¼Œå¹¶å®Œæˆ�é…�置修改。</li></ul><p>当然,作为è¿�维管ç�†å¹³å�°ï¼ŒCacheCloud 除了æ��ä¾›è¿�ç»´æ“�作以外,还æ��供了丰富的监æ�§ä¿¡æ�¯ã€‚</p><p>CacheCloud ä¸�仅会收集 INFO 命令æ��供的å®�例å®�æ—¶è¿�行状æ€�ä¿¡æ�¯ï¼Œè¿›è¡Œå�¯è§†åŒ–展示,而且还会把å®�例è¿�行状æ€�ä¿¡æ�¯ä¿�存下æ�¥ï¼Œä¾‹å¦‚内存使用情况ã€�客户端è¿�æ�¥æ•°ã€�键值对数æ�®é‡�ã€‚è¿™æ ·ä¸€æ�¥ï¼Œå½“ Redis è¿�行å�‘生问题时,è¿�维人员å�¯ä»¥æŸ¥è¯¢ä¿�存的å�†å�²è®°å½•,并结å�ˆå½“æ—¶çš„è¿�行状æ€�ä¿¡æ�¯è¿›è¡Œåˆ†æ��。</p><p>如æ�œä½ 希望有一个统一平å�°ï¼ŒæŠŠ Redis å®�例管ç�†ç›¸å…³çš„任务集中托管起æ�¥ï¼ŒCacheCloud 是一个ä¸�错的工具。</p><p>更多关äº� Redis æŠ€æœ¯æ ˆçš„å­¦ä¹ ï¼Œå�¯ä»¥æŸ¥é˜…民工哥技术之路的Redis技术系列专æ �æ–‡ç« ï¼š<a href="https://link.segmentfault.com/?enc=Lx%2BWmaqhI1JlYP28u%2BUkAA%3D%3D.mnpCUXQML3nPjNa8m7g5mR0ItxEQJnuhJOJ5ujvdUjs0pd6DKTbKW0TghwnfCseqY%2BDx%2F0mx6RQ9sPf7otZAeRr%2B3FZoU5XB2p6k2ZYB8%2ByWSyZC9Duj%2FapHbMQ9tdp%2BEVSHtg8AOYBJecCbsAIuRXSbbK6TVFWrAnea%2B9HvzqZwU92tj3DRtb5FTfTCMdIX" rel="nofollow"><strong>RedisæŠ€æœ¯å­¦ä¹ ç¬”è®°æ€»ç»“</strong></a>(<img src="/img/remote/1460000041256515" alt="图片" title="图片">点我直达)</p><blockquote><em>æ�¥æº�:time.geekbang.org/column/article/305195</em></blockquote><p><img src="/img/bVbHCzg" alt="" title=""></p> è°�å†�说ä¸�熟悉 Linux 命令,就把这个给他扔过å�»ï¼� https://segmentfault.com/a/1190000041229679 2022-01-05T15:55:23+08:00 2022-01-05T15:55:23+08:00 民工哥 https://segmentfault.com/u/jishuroad 25 <p>虽然平时大部分工作都是和Java相关的开å�‘, 但是æ¯�天都会æ�¥è§¦Linux系统, 尤其是使用了Mac之å��, æ¯�天都是工作在黑色背景的命令行ç�¯å¢ƒä¸­. 自己记忆力ä¸�好, 很多有用的Linux命令ä¸�能很好的记忆, ç�°åœ¨é€�æ¸�总结一下, 以便å��续查看。</p><h2>基本æ“�作</h2><h6>Linux <a href="https://link.segmentfault.com/?enc=Sz%2FkVibhaqy03MPMvnJPjQ%3D%3D.jpZ0dGGBZx0wtNa0tn1rWGnVcQk3UMu4c75iVOt%2FBWXcBdt1B8IqGcUMaQauPbowDaa4PhMYGJ%2BqXR%2BD6ZhbXRLwkEAD0HzSl29m%2FjDBVE%2B5uQksTOxja6URazjaNMyTjf%2B1vyZX%2Fm2thR6vHPJMjYQL4NECu6iyih%2FEObgVCmOWEAdIjn9hyhkUlVem7639y7dzp7jd8gbhJO6MNH8N7XWoygU0oztY2r0aQnOsHOdJKvoMXNVALuXr4ERRTgTtz6w1HQ3DoNoTFprVewP7UwY%2FFOu%2FTZojHxXTByH7MOPbU7VraBKK4M7%2FCNFhG0IB" rel="nofollow">关机,é‡�å�¯</a></h6><pre><code># 关机 shutdown -h now # é‡�å�¯ shutdown -r now</code></pre><h6>查看系统,CPUä¿¡æ�¯</h6><pre><code># æŸ¥çœ‹ç³»ç»Ÿå†…æ ¸ä¿¡æ�¯ uname -a # æŸ¥çœ‹ç³»ç»Ÿå†…æ ¸ç‰ˆæœ¬ cat /proc/version # 查看当å‰�用户ç�¯å¢ƒå�˜é‡� env cat /proc/cpuinfo # æŸ¥çœ‹æœ‰å‡ ä¸ªé€»è¾‘cpu, 包括cpuå�‹å�· cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # æŸ¥çœ‹æœ‰å‡ é¢—cpu,æ¯�é¢—åˆ†åˆ«æ˜¯å‡ æ ¸ cat /proc/cpuinfo | grep physical | uniq -c # 查看当å‰�CPUè¿�行在32bit还是64bit模å¼�下, 如æ�œæ˜¯è¿�行在32bit下也ä¸�代表CPUä¸�支æŒ�64bit getconf LONG_BIT # 结æ�œå¤§äº�0, 说æ˜�支æŒ�64bit计算. lm指long mode, 支æŒ�lm则是64bit cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l</code></pre><h6>建立<a href="https://link.segmentfault.com/?enc=JzCMMZuA5lIpFgmnb0ZBbA%3D%3D.%2F10ixbZmLI%2FGiMjW5lGkdcxgHcpYtOBBuyvCrse44Ns%2BSWPCbsg378o2ghbL7y9TbiamE74t5lK2c5MY%2FbmrAFJxo14BiUdd%2Borszqo40u9WbRX068Gpy82aZOHgoUDpRD1jhAArhI%2F%2FZG8MzuPL33pFfbbJTxf26tzyXXkUcCZwirNyk9KLrwB3VKUolNR%2Buzc340sxop%2BkjSMl5RR3NoU1zh0Uf56irUkj58hY5IynwRteLVr66bmgVflhl5%2BCdUTHProJjwliSicMWFJlEkPSfUmn38Q3DGAxbq%2BD%2FMZE%2BrjcYdn%2F6hcOOsO6IZ4x" rel="nofollow">软è¿�æ�¥</a></h6><pre><code>ln -s /usr/local/jdk1.8/ jdk</code></pre><h6><a href="https://link.segmentfault.com/?enc=1Wbi6LBHnRCYofEYL%2FXbVQ%3D%3D.xPH5AwR%2F3QoiZXn1yVCdAfSIS7QYb2zyJUkZ1GXJuN3BFjuKJiZWkKSSfncVmJEn0ke8kCTXEPnSsDhgwBWIviGlz3JuhYvovTEcZS9RfnKYNRdT%2BChsQ9QOFY%2BjR9SoMb0xkTAq8KWHpjlbn%2BRwKyRyncRf%2FYArD67pBrPzYOt8MiquNtZGHndFZp3HQteds1koTrs%2Bgp%2Fvm9Up9jVTiw8MwCuSjxe2T0OFe3ZefN9StrOQiATPCcPTPo25%2FRiyvPbH451RW%2Fuu44LM4xsGBrQmPKiIOfo2q7RtgdSoHpJLBujdNSrzkEKqT05%2FSVP7" rel="nofollow">rpm</a>相关</h6><pre><code># 查看是å�¦é€šè¿‡rpm安装了该软件 rpm -qa | grep 软件å��</code></pre><h6>sshkey</h6><pre><code># 创建sshkey ssh-keygen -t rsa -C your_email@example.com #id_rsa.pub 的内容拷è´�到è¦�æ�§åˆ¶çš„æœ�务器的 home/username/.ssh/authorized_keys 中,如æ�œæ²¡æœ‰åˆ™æ–°å»º(.sshæ�ƒé™�为700, authorized_keysæ�ƒé™�为600)</code></pre><h6>命令<a href="https://link.segmentfault.com/?enc=ffb59w6jH2tjVUgviyO%2B9A%3D%3D.Skpz8vO3aQFo9%2FtoTX11EljW2ynuZwc9lHbM8DdmEPrMHHVv1KA5C0Mebs9gPyySuOKaUNzt%2FyN3ZAe1PeMjzHiFKkVXBRsrihh3xziriIi3lYWQXZ6pGqRwZI1qtg3KboumT8%2Fc4%2BuIJPkLgn%2FmqjysVYuycqBIQTJ%2BN%2BApxZo4flcwwhnrrUXDAcJ5Q8nqT2WeqLGftanq%2F8QKbQ%2F2s9t4T%2FB%2BK4l%2BNQ%2Bo5M%2Fw4U%2B19L2GX%2FO2IhjZyLIrAKGh86b9DRFdYKSqh0Lmj1UeAwprYqZ7btYzWyS1EIepVQIppLGw2mDUG9VxbfgswAZU" rel="nofollow">é‡�命å��</a></h6><pre><code># 在å�„个用户的.bash_profileä¸­æ·»åŠ é‡�命å��é…�ç½® alias ll='ls -alF'</code></pre><h6><a href="https://link.segmentfault.com/?enc=jDisEch6W1Zi5p4YiHf9cQ%3D%3D.7Yiwr%2FNelqOdTrXI6VY72b9JrTseHtC09ub2aMe1aHi2wV869jmEFWH%2F8Ou2l8JG2YDYXGz7tvOQ52QMT8cE3nyfy3VAR06DqExLjshek1jrRN0HHMUYXLpAWPkDdWCrRFPLAqZh1GPK2Se%2BnkCjX9dpoVmFUkUrBZmW6oueDMSypb%2B3RyeNUBuJzP1NNcYbBzWpJ2gd9iXSPJiYkTvXbEcskH6xjAQwl%2FJAb7xI4IfALA%2F2sODWCvqwf%2FS8LEO5T3sWENqb6vDJhPIXyjiKhSk3zSP3Fw%2BFdgsZO2N3%2FS3LhvwKmX65kDVDJvQPtFN4" rel="nofollow">å�Œæ­¥æœ�务器时间</a></h6><pre><code>sudo ntpdate -u ntp.api.bz</code></pre><h6><a href="https://link.segmentfault.com/?enc=Mow62Zp0tcC3QD9U%2FAE7nw%3D%3D.o5e3s%2B0YPKN8Y%2Fp0ppejBIPtC7XDBKK885HIJH%2BmLS4mtqkm7I11R%2Bab8QQEF0l8x4OulgDjOohXpcda32Ba1Mq0lqvP3CCbyrsKU2o4xC1LuVzJqliYw4OJ%2Fbjn2VAXiUpsEYXUgeUmDtr%2Bj%2FmlYMiPe3UJ7SqgTNccvez3dhBA7CeVhpCWXBIP6CsWT4NTnuGboDnGL8I7DLpRwW3Ol9B4sMF1aUZTQhpkNE1%2F37%2Bdgq7WbBJ3XWp7O8GYm4xQY%2FHtC9RA9XhRexnRT8T2t%2FzFlFqrV5BqD%2BzaFg6Kn%2BWiDXgpKo9ygwQJ3u5W4a3I" rel="nofollow">å��å�°è¿�行</a>命令</h6><pre><code># å��å�°è¿�行,并且有nohup.out输出 nohup xxx &amp; # å��å�°è¿�行, ä¸�输出任何日志 nohup xxx &gt; /dev/null &amp; # å��å�°è¿�行, 并将错误信æ�¯å�šæ ‡å‡†è¾“å‡ºåˆ°æ—¥å¿—ä¸­ nohup xxx &gt;out.log 2&gt;&amp;1 &amp;</code></pre><h6><a href="https://link.segmentfault.com/?enc=wA0EoA8jwdmIHgTzsbW6FQ%3D%3D.LWjhzv6SlVJ7z4qhKjMuylcsdWpGV9puGxy%2Fes0w%2F2BRvzUFIZDzyKFu4VMEHlntJaPDmrftNO1QntQLLGktZSAaTsyoypbYyU4565vcgEsG1pOSo0cxN8L79etkkIaMsTjsz6z9h3LzbDqkir973cVxPWGI9QfGbT3R2QOtTf%2FXqx3u7BTjY52%2BKbXjsnsIcwa%2BRcvzifocBe1GLiaUHVbbm%2FwT5ttHU55oId8Ba1uNGrVjQWtO%2BvcKYXQDYW3MxA4UjUKkWvO2UP29YTik1XsJ6z4pZpQvH3p5MzevDqofWsphA3YLOgEziMkslYew" rel="nofollow">强制</a>活动用户退出</h6><pre><code># 命令æ�¥å®Œæˆ�强制活动用户退出.其中TTY表示终端å��ç§° pkill -kill -t [TTY]</code></pre><h6><a href="https://link.segmentfault.com/?enc=MOtRedpF8%2BOnTJzFt8DJ6w%3D%3D.LRxBubcc6ME4AYzGQtbW4YggOd4p1WlRJ2%2F2DXCv5vVvh7UsBnz34YWsjaEkWgVsUWyggJ33PFZ5mF1oxiVlqUbzHWC1SlyXCGvj6S4AK95ki4Ymg%2BexaPkPZkTOAkSIYNdPSIHfqs2XGhI1AaCx0MevxP%2BXeWsYLLmzeD0zSHGhN0KmPvZnsSVPARtrt7V%2FAFX2xkVeDs8ZXQTUSoEcmEUP6KbRwWpZhAx86pUXLiNxcIZwoJRfuph%2BFpe9CuQTi8aokHO%2F7w5BwXkNrtnOSMLwPrstnvCuloN5K0chYRMAz17icNKGcZrcDIl4UCBO" rel="nofollow">查看</a>命令路径</h6><pre><code>which &lt;命令&gt;</code></pre><h6>查看进程所有打开最大fdæ•°</h6><pre><code>ulimit -n</code></pre><h6>é…�ç½®dns</h6><pre><code>vim /etc/resolv.conf</code></pre><h6><a href="https://link.segmentfault.com/?enc=FfwwhvIYizt2D8IWRrNLDA%3D%3D.j3hlUkenACa%2F15905VN67i37eWtbjxbOXPepCMkJ%2Bt3Xa6fIhQZqDtwYtEKIWHaGjh2sm4R4b1VJJ3upzdh%2Bfn7EC2MoMqeqoXqMQekMs44tLQ9YuhYp0J5extXi3r5Du9lysuKEGjmRZrhrK24cobDwI%2F9R3pPyhAbeW7lE55HhsVSWkAO33qHhXbxWQjJBcnbaGTqYiL2BpIHt47DrvuIjUG9TrvX6jPG8%2B8NqfRyK7EAY%2FKr5LCCS5ivq5O4258W6tP4mjqkl7XjTqHSOQfk0FIiUd6J03nJ5NocIUlfG311aWkMn5IeeS4ytkhSa" rel="nofollow">nslookup</a>,查看域å��路由表</h6><pre><code>nslookup google.com</code></pre><h6>last, 最近登录信æ�¯åˆ—表</h6><pre><code># 最近登录的5个账å�· last -n 5</code></pre><h6><a href="https://link.segmentfault.com/?enc=0xjfX1TH4ytLKlVw2hdk5Q%3D%3D.gd6aq70Ub%2FFa7awoGahZrR0b1Bz1q8VhTs0wBn5nk34mLbNv2ajl2MdH5fXp0HSTFNDdK%2FSVDjwEArRwbWTG%2BgNTrHAa%2B%2FHCwYFbU29%2FLTJBHaAeso4OC%2FBx58cNqLwZpNX6OGxr8pstpE7n3LTwAXg87Gq4awuYSltj%2FRDtSjGqTVqBR38i1dgyfylgAxV1fJhNQrbcs4BUHJSGLC8wRrhJtGpUjYbri0Z3Wk2om3Qg%2FCQASjT1cqHRGmUZz7PXEo34VNazRh4G1UCDDb%2B9baL170zppypRD6cH7qAJWpUMbcIsBWxcEyKkZM4bKFTk" rel="nofollow">设置固定ip</a></h6><pre><code>ifconfig em1  192.168.5.177 netmask 255.255.255.0</code></pre><h6>æŸ¥çœ‹è¿›ç¨‹å†…åŠ è½½çš„ç�¯å¢ƒå�˜é‡�</h6><pre><code># 也å�¯ä»¥å�»Â cd /proc 目录下,Â æŸ¥çœ‹è¿›ç¨‹å†…å­˜ä¸­åŠ è½½çš„ä¸œè¥¿ ps eww -p  XXXXX(进程å�·)</code></pre><h6>æŸ¥çœ‹è¿›ç¨‹æ ‘æ‰¾åˆ°æœ�务器进程</h6><pre><code>ps auwxf</code></pre><h6><a href="https://link.segmentfault.com/?enc=seSoqartvvzHjj6hMGMq8g%3D%3D.DL8knYKncvF8oRSF0whcXYAQIr2ogZ6jladA3seP9GEgFFO3fjg0ZY3yIl587ZrV9Ir0FC6n71UAW%2FcuPW9sNl8KxFf%2F9dKMyTdXmQLbLT%2BU5AZnmJQ42tROqdD4aRrWhlcGP9mvZ%2Bsyw5lNO8058d%2BD%2F1rxE7hXkaA6RBs%2BlX0ip5MRQLY3nelsBHj1YZJZ1RD8eB15X0X49koayZ0LpgtXrnGOucjr8lFiAYBw2b2vwie8t2uMO%2FuQS%2BfQXa3s7owpZzs%2F6YVU%2BmQTwibNBFA0EUpbI4HuEFUPXhgBr7IvYWCeiHPxPCcZGaqlgn9j" rel="nofollow">查看进程</a>å�¯åŠ¨è·¯å¾„</h6><pre><code>cd /proc/xxx(进程å�·) ls -all # cwd对应的是å�¯åŠ¨è·¯å¾„</code></pre><h6><a href="https://link.segmentfault.com/?enc=dVGy2SxjIJJRJjJn7mooiw%3D%3D.hiYxDRHsVpPGIxrMaL2rkrEXTNBbL6FE0i9xeoeWL0jvxYR6fnsaj9eO3i5NfIGd3aBAdnrChOMowMFX5r8OMC2%2FJ%2FmWu4%2FG%2BLlQ8rtmAmHrV%2FqFZbOc%2BEC8X673T5YIoHUUrJcxG963eSlC2rfRJbiyzK%2FncQeqpqpf3OvtNM%2FNtpnB8zSruL84sFB%2By4myErgwksz6b3p%2Fet8Fn9YwKolEfaFi6lRYQM9HZQ%2F60JnUXGvteCxSCLlZKNwliY9GrJtmFJ7ioXaLm1sBzRL26Bj0xxml0JM5TTa%2FApdx9tO22tXNS%2Bk7eQNhvOUMV8I9" rel="nofollow">æ·»åŠ ç”¨æˆ·</a>, é…�ç½®sudoæ�ƒé™�</h6><pre><code># æ–°å¢�用户 useradd 用户å�� passwd 用户å�� #å¢�åŠ sudoæ�ƒé™� vim /etc/sudoers # 修改文件里é�¢çš„ # root ALL=(ALL) ALL # 用户å�� ALL=(ALL) ALL</code></pre><h6>强制关闭进程å��包å�«xxx的所有进程</h6><pre><code>ps aux|grep xxx | grep -v grep | awk '{print $2}' | xargs kill -9</code></pre><h2>ç£�盘,文件,目录相关æ“�作</h2><h6><a href="https://link.segmentfault.com/?enc=nc6rZgFQz1sVAu%2FeUB117w%3D%3D.%2B5pjZsQLa9aZkj6YstDmiTpdWXkOzkstw0aUDNFmBf5bKyJ3Rx6awNr9fILJ8q%2F3nWR%2FjZIzLUbMCve1NDLp6ZDbiOP%2BzaMvZ4BS%2BFApLlf%2BgPjScdi%2BReu8Kb7iDPceq4ZZIuTwIQ1EGgggHLH%2BQpRDyN0WayHRvxXi%2BUi272wGlOTtdOdRrVrwSu76YNcLif1UeLaty4vuphVyKzmaySbnNCmAsVlXmgtqG0ESHkYxURBrCF3ZLuJ6laeHPaK%2B4VB%2BnBiBlr86aYvbuNnNXIfu7aHtgRsNti2kW2nfZp6O5afAw7z4kvCsC5kOUiDU" rel="nofollow">vim</a>æ“�作</h6><pre><code>#normal模å¼�下 g表示全局, x表示查找的内容, y表示替æ�¢å��的内容 :%s/x/y/g #normal模å¼�下 0 # å…‰æ ‡ç§»åˆ°è¡Œé¦–(æ•°å­—0) $ # å…‰æ ‡ç§»è‡³è¡Œå°¾ shift + g # 跳到文件最å�� gg # 跳到文件头 # 显示行å�· :set nu # å�»é™¤è¡Œå�· :set nonu # 检索 /xxx(检索内容) # ä»�头检索, 按n查找下一个 ?xxx(检索内容) # ä»�尾部检索</code></pre><h6>打开å�ªè¯»æ–‡ä»¶,修改å��需è¦�ä¿�存时(ä¸�用切æ�¢ç”¨æˆ·å�³å�¯ä¿�存的方å¼�)</h6><pre><code># 在normal模å¼�下 :w !sudo tee %</code></pre><h6>查看ç£�盘, 文件目录基本信æ�¯</h6><pre><code># 查看ç£�盘挂载情况 mount # 查看ç£�盘分区信æ�¯ df # 查看目录å�Šå­�目录大å°� du -H -h # 查看当å‰�目录下å�„个文件, 文件夹å� 了多少空间, ä¸�会递归 du -sh *</code></pre><h6>wc命令</h6><pre><code># 查看文件里有多少行 wc -l filename # 看文件里有多少个word wc -w filename # 文件里最长的那一行是多少个字 wc -L filename # 统计字节数 wc -c</code></pre><h2>常用å�‹ç¼©, è§£å�‹ç¼©å‘½ä»¤</h2><h6><a href="https://link.segmentfault.com/?enc=14Y1hjkpgmpctnoh%2BPn6Jw%3D%3D.SdUFFTu9EjHtMDcmOdccXqGI7UycWPNUkh8zohTKSTyUYyOiLIabKkKSFX69czjMAFhMTlgvNfWz7XcwCk8wATR%2B70%2FGl8BSnDCijRLnfFe12Z0018HbH4%2BA%2FT9Ip5cuPaV6dWn6QjoBf2j1OsegPJxTJj66v8lNK51ZJMrQgokfHpOfKPJsvLv0Db2DhRy7yMb0fpV23ll%2BHmD7hU0pofAaDui1cHFekqYTjPXR0P3IKtDybuwnOsiZI%2BL3BaR7QHFtQmKw5C4DbamZ%2BWsgnA7lq5gl6kojq90KP%2BMU511q8UUODBVfZrcblaFmJt2w" rel="nofollow">å�‹ç¼©</a>命令</h6><pre><code>tar czvf xxx.tar å�‹ç¼©ç›®å½• zip -r xxx.zip å�‹ç¼©ç›®å½•</code></pre><h6>è§£å�‹ç¼©å‘½ä»¤</h6><pre><code>tar zxvf xxx.tar # è§£å�‹åˆ°æŒ‡å®šæ–‡ä»¶å¤¹ tar zxvf xxx.tar -C /xxx/yyy/ unzip xxx.zip</code></pre><h2>å�˜æ›´æ–‡ä»¶æ‰€å±�用户, 用户组</h2><pre><code>chown eagleye.eagleye xxx.log</code></pre><h2>cp, scp, mkdir</h2><pre><code>#å¤�制 cp xxx.log # å¤�制并强制覆盖å�Œå��文件 cp -f xxx.log # å¤�制文件夹 cp -r xxx(æº�文件夹) yyy(ç›®æ ‡æ–‡ä»¶å¤¹) # 远程å¤�制 scp -P ssh端å�£ username@10.10.10.101:/home/username/xxx /home/xxx # 级è�”创建目录 mkdir -p /xxx/yyy/zzz # 批é‡�创建文件夹, 会在test,main下都创建java, resources文件夹 mkdir -p src/{test,main}/{java,resources}</code></pre><h6><a href="https://link.segmentfault.com/?enc=q3lcmuaz%2FwHBCdcqu%2Fy4Dg%3D%3D.mPg1Pr6eyaq0WpBaYqBjmA1k3L69PBPSXawFkkx7MPI2vaQPxC708WqkdAE2%2BC391LdvnWMT%2FodfJzc5AhWZRgZIZbS5Kw0JdG2TCZFkHKQy94TKfgCWs9D8K6QdxgdNPl858s5FNEeIoh%2B8n9Ta0tlDf1UFbLEx8V%2F%2B8ilwhCnz5rf09bV9Y357wYBhslhTscvAtWpz0fcQ2xTBBjTU9glAft%2BsHfkVNsBejgRAErJ9MaOVEDNvRTJZxTsVmpOCkwnnJ13mnynVPT4ou1Ty1xkvxpqQRZCnC5eVH1LWaE6OlcjBsprYUJ4ZVFhkM9Qc" rel="nofollow">比较</a>两个文件</h6><pre><code>diff -u 1.txt 2.txt</code></pre><h6>日志输出的字节数,å�¯ä»¥ç”¨ä½œæ€§èƒ½æµ‹è¯•</h6><pre><code># 如æ�œå�šæ€§èƒ½æµ‹è¯•, å�¯ä»¥æ¯�执行一次, 往日志里é�¢è¾“出 “.â€� ,Â è¿™æ ·æ—¥å¿—ä¸­çš„å­—èŠ‚æ•°å°±æ˜¯å®�际的性能测试è¿�行的次数, 还å�¯ä»¥çœ‹è§�å®�时速ç�‡. tail -f xxx.log | pv -bt</code></pre><h6>查看, å�»é™¤ç‰¹æ®Šå­—符</h6><pre><code># 查看特殊字符 cat -v xxx.sh # å�»é™¤ç‰¹æ®Šå­—符 sed -i 's/^M//g’ env.sh å�»é™¤æ–‡ä»¶çš„特殊字符, 比如^M: 需è¦�è¿™æ ·è¾“å…¥: ctrl+v+enter</code></pre><h6>处ç�†å› 系统å�Ÿå› 引起的文件中特殊字符的问题</h6><pre><code># å�¯ä»¥è½¬æ�¢ä¸ºè¯¥ç³»ç»Ÿä¸‹çš„æ–‡ä»¶æ ¼å¼� cat file.sh &gt; file.sh_bak # 先将file.sh中文件内容å¤�制下æ�¥ç„¶å��è¿�行, ç„¶å��粘贴内容, 最å��ctrl + d ä¿�存退出 cat &gt; file1.sh # 在vim中通过如下设置文件编ç �å’Œæ–‡ä»¶æ ¼å¼� :set fileencodings=utf-8 ,然å�� w (存盘)一下å�³å�¯è½¬åŒ–为 utf8 æ ¼å¼�, :set fileformat=unix # 在mac下使用dos2unixè¿›è¡Œæ–‡ä»¶æ ¼å¼�化 find . -name "*.sh" | xargs dos2unix</code></pre><h6><a href="https://link.segmentfault.com/?enc=Vj8KpIr8P8MuA8pM6Ik5TA%3D%3D.tbYyVQu05gwc9MVAz1iJk00ii56807Ph%2FlYzwkR3SS%2BGTu8GPbmt5aaQ8%2FV5ty9Ac0TQydaAQUSQPwLf3oqi%2F63DFM2RNNzBJbVKrjS9bZCp3ja2LJDQXozMoanWwpSXo1cl80XsYX7OQ1OIYsBfQ1LDBOOa%2Fl0uRX1Z8jHeFXjk68QMq0OeZQT5unx835%2FdnL7voY9PTZWBEBuWPdbFz5eZY2H7qvvuQ0%2BFjQIglLZ71fIaLWP2IJx5odHFeJRsLnjyG4Xej%2BtBUjaQPh6qC%2FIObvYE8oJTerEsyt%2BedOS4gxJdBowFaPRK%2BeD9Wscj" rel="nofollow">tee</a>, é‡�定å�‘çš„å�Œæ—¶è¾“出到å±�幕</h6><pre><code>awk ‘{print $0}’ xxx.log | tee test.log</code></pre><h2>检索相关</h2><h6>grep(<a href="https://link.segmentfault.com/?enc=8dMXAn2RmAhcTT%2FfN5mFEA%3D%3D.W9irwEv%2B3rCLQfCS7U2ZeAQwU9TsZD8IjobhCSnUQodb5WmcHfbthyY6ViUjjbBkb3tIAosN0fDWVi1TinvqLXt1Q%2B1cK3aZn5ZUr%2BU0W00CrTaHmyIdfER%2BQLaGtIFXNiTV3bfNMLN%2BGmTadr3G9GENLGmGVn45cFAHb2MFwkxi52uIhP2wh0PrX8p%2B1YkrBwdOc0AA9SebyQvI7tcLSIRibe%2BKIc6EI3GMpzxaHQSeM9DVW99i1DnGMJKOn8clY0Ndc060LB7pd6uDAdCNswhxn50D5pjBZIklGvAff4t4JJxXTMWUCSMQKeaOyrfe" rel="nofollow">æ¯�天学一个 Linux 命令(5):grep</a>)</h6><pre><code># å��å�‘匹é…�, 查找ä¸�包å�«xxx的内容 grep -v xxx # æ�’除所有空行 grep -v '^/pre&gt; # è¿”å›�结æ�œ 2,则说æ˜�第二行是空行 grep -n “^$â€� 111.txt # 查询以abc开头的行 grep -n “^abcâ€� 111.txt # å�Œæ—¶åˆ—出该è¯�语出ç�°åœ¨æ–‡ç« çš„ç¬¬å‡ è¡Œ grep 'xxx' -n xxx.log # 计算一下该字串出ç�°çš„æ¬¡æ•° grep 'xxx' -c xxx.log # 比对的时候,ä¸�计较大å°�写的ä¸�å�Œ grep 'xxx' -i xxx.log</code></pre><h6>awk(<a href="https://link.segmentfault.com/?enc=%2FleA08eCWfBGgVFaiAVCAQ%3D%3D.Bh8M76c%2BKRm0OVX38%2FxRtqUv5PaV4RyDLkwWu7OhvAonxjtbq59feUUwdYro0NwcWkGl4nhuKrmsU2Bp8eKlZQoVMYIJ%2FWRLzrdckDZikF%2FWkKz%2B%2B6WUtDNLJK4EUi%2FM6aAfnZrZWIV%2FA1rNPJcWNISIZWIuABOPb7rDKsWtIZ17mkKflSfznLeD%2B1d1GDGBy%2BWo4kGdY42leVisBWReL3gHjsylzanOFeyVtbJPaM90GZaLj5lQBcOpqe0seU7MvSALRFbzbO1wvl2hHokXPhokmaXd8Jvz7U17etFKUZg6kL2BgsxbV8JT39MgWIx2" rel="nofollow">æ¯�天一个 Linux 命令(4):awk</a>)</h6><pre><code># 以':' 为分隔符,如æ�œç¬¬äº”域有user则输出该行 awk -F ':' '{if ($5 ~ /user/) print $0}' /etc/passwd # 统计å�•个文件中æŸ�个字符(串)(ä¸­æ–‡æ— æ•ˆ)出ç�°çš„æ¬¡æ•° awk -v RS='character' 'END {print --NR}' xxx.txt</code></pre><h6>find检索命令(<a href="https://link.segmentfault.com/?enc=pSag0rlqG6ZBUgzN%2FGsLkg%3D%3D.v%2Fpm8MztWsyRKUedWYnmEuumX7Rr6wmzpmtM8L97cNAh3nuKCpip%2BAsdEv8gSLp6xL5fTXXAPmdV6BFac92eCpgH9NqkpsRpOUKDLoSpAOn6%2FONMNZ2FEh311HYW3GxenpTxY8oPmAjtcshMhsvpzeQwcMXZqXacHnwoooT0h76PWhmCaJlIF1peT%2BF4liwMhvJZnH9Z3xLL5SOnmAaK%2BkyD98gIbe0d2YbYptfEJwL%2FTU9lfD3hkbjs6eymjaruXN9ewk3DJ3PXavlQJIBkRQW8f6lCduEVKbYGcd30rrX1qtBt10AitAcYmoEOh%2Bbh" rel="nofollow">æ¯�天学一个 Linux 命令(20):find</a>)</h6><pre><code># 在目录下找å��缀是.mysql的文件 find /home/eagleye -name '*.mysql' -print # 会ä»� /usr 目录开始往下找,找最近3天之内存å�–过的文件。 find /usr -atime 3 –print # 会ä»� /usr 目录开始往下找,找最近5天之内修改过的文件。 find /usr -ctime 5 –print # 会ä»� /doc 目录开始往下找,找jacky çš„ã€�文件å��开头是 j的文件。 find /doc -user jacky -name 'j*' –print # 会ä»� /doc 目录开始往下找,找寻文件å��是 ja 开头或者 ma开头的文件。 find /doc \( -name 'ja*' -o- -name 'ma*' \) –print # 会ä»� /doc 目录开始往下找,找到凡是文件å��结尾为 bakçš„æ–‡ä»¶ï¼ŒæŠŠå®ƒåˆ é™¤æ�‰ã€‚-exec 选项是执行的æ„�æ€�,rm æ˜¯åˆ é™¤å‘½ä»¤ï¼Œ{ } 表示文件å��,“\;â€�是规定的命令结尾。 find /doc -name '*bak' -exec rm {} \;</code></pre><h2>网络相关</h2><h6>查看什么进程使用了该端å�£</h6><pre><code>lsof -i:por</code></pre><h6>è�·å�–本机ip地å�€</h6><pre><code>/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"</code></pre><h6><a href="https://link.segmentfault.com/?enc=BJP439gqkBPAmHjmFbZEVA%3D%3D.d9V%2BWWtseSdL3U5z5WzIGzxr7gZyqsCjfCu4z%2FNkLiCxmMM%2F8%2B%2FKHe%2B9kVwInwPJZGMYwRVcnXP7S9Clyj9HrgUm5dpmLNxOJBXR1%2F93k1xe00AIGNWf42fu%2Bn25S2lX%2FBUC8OB1QXcPlGB6AzVg9Wo%2F2r1gEw1KyvCoX6WE5ugfQgzJaKkEbA3ex2c8NDgc%2BAOpeQ45IztJ1lrOE9e%2FC9IXHUNSXVEUhTgNbX1xISx3SCryX4EXmShrQZR7S6UfvlUsHwpEDLgxzM4x47D1ux6%2F5GkUVyW%2BDuDZeFTV%2FXkHZ0J5ig3xfeEZuCu8yoTU" rel="nofollow">iptables</a></h6><pre><code># 查看iptables状æ€� service iptables status # è¦�å°�å�œä¸€ä¸ªip iptables -I INPUT -s ***.***.***.*** -j DROP # è¦�è§£å°�一个IP,使用下é�¢è¿™æ�¡å‘½ä»¤ï¼š iptables -D INPUT -s ***.***.***.*** -j DROP 备注: å�‚æ•°-I是表示Insertï¼ˆæ·»åŠ ï¼‰ï¼Œ-D表示Deleteï¼ˆåˆ é™¤ï¼‰ã€‚å��é�¢è·Ÿçš„æ˜¯è§„则,INPUT表示入站,***.***.***.***表示è¦�å°�å�œçš„IP,DROP表示放弃è¿�æ�¥ã€‚ #å¼€å�¯9090端å�£çš„访问 /sbin/iptables -I INPUT -p tcp --dport 9090 -j ACCEPT # 防ç�«å¢™å¼€å�¯ã€�关闭ã€�é‡�å�¯ /etc/init.d/iptables status /etc/init.d/iptables start /etc/init.d/iptables stop /etc/init.d/iptables restart</code></pre><h6>nc命令, tcp调试利器</h6><pre><code>#ç»™æŸ�一个endpointå�‘é€�TCP请求,就将data的内容å�‘é€�到对端 nc 192.168.0.11 8000 &lt; data.txt #ncå�¯ä»¥å½“å�šæœ�务器,监å�¬æŸ�个端å�£å�·,把æŸ�一次请求的内容存储到received_data里 nc -l 8000 &gt; received_data #上边å�ªç›‘å�¬ä¸€æ¬¡ï¼Œå¦‚æ�œå¤šæ¬¡å�¯ä»¥åŠ ä¸Š-kå�‚æ•° nc -lk 8000</code></pre><h6>tcpdump(<a href="https://link.segmentfault.com/?enc=JxfBeJbsJ0c6iWn%2F2at2eQ%3D%3D.pyFKhp31rjxoE0YFMRUXtJehveayu3ebN%2BSWRIRzHskSfoK5EOcnWLQY6Xas0339pw7DCwUAq9pjGhQ7lftguFoGIdSzPjmccIYmAJ050QjIq3xrfkb9M5i7CXtFs5VnQ429RI2gnd%2BPpz4h0akdcFmunBq4QjrlHO5%2Fm7v8W3LmEZxQJmxiLK8eOGG0qnEoNSpanJf5dSdIjeQyMIA4SxlC5oHeyHwZYpgcsPG7JQmIceS6opmEA4n2kHzMx8gwiRO289Q8EZeWI1UHKe5lt7blSCwBJKo0AqosniYf8bJdMVmaCehelBCwvmF3UbwP" rel="nofollow">æ¯�天学一个 Linux 命令(72):tcpdump</a>)</h6><pre><code># dump出本机12301端å�£çš„tcp包 tcpdump -i em1 tcp port 12301 -s 1500 -w abc.pcap</code></pre><h6>跟踪网络路由路径</h6><pre><code># traceroute默认使用udpæ–¹å¼�, 如æ�œæ˜¯-I则改æˆ�icmpæ–¹å¼� traceroute -I www.163.com # ä»�ttl第3跳跟踪 traceroute -M 3 www.163.com # åŠ ä¸Šç«¯å�£è·Ÿè¸ª traceroute -p 8080 192.168.10.11 ss # 显示本地打开的所有端å�£ ss -l # 显示æ¯�个进程具体打开的socket ss -pl # 显示所有tcp socket ss -t -a # 显示所有的UDP Socekt ss -u -a # 显示所有已建立的SMTPè¿�æ�¥ ss -o state established '( dport = :smtp or sport = :smtp )' # 显示所有已建立的HTTPè¿�æ�¥ ss -o state established '( dport = :http or sport = :http )' #找出所有è¿�æ�¥Xæœ�务器的进程 ss -x src /tmp/.X11-unix/* #列出当å‰�socket统计信æ�¯ ss -s 解释:netstat是é��å�†/proc下é�¢æ¯�个PID目录,ssç›´æ�¥è¯»/proc/net下é�¢çš„统计信æ�¯ã€‚所以ss执行的时候消耗资æº�以å�Š</code></pre><h6><a href="https://link.segmentfault.com/?enc=s6o2QqRl4YLwnAFFrVNVcA%3D%3D.6R32Huj1LMG2Yq66goJJXsCr5BlmzIAF6vAXKc%2Bhez91kLtnZRaQwZCSZnsa1DmJpHz2OnZqT3mCUDL4OhWCTw7IFCtwZudLj%2FqczI%2BquftT8JLuAKFigdPYnx%2BBf0D7FumUtrp%2FJsKRcvMxNY9C%2BjnQt7swjDvqmcay9Ww8hc0A4zz41EgtMfP8foM0q6BvCkNvSEg1rsY%2Fycvzckt1qHSdfaxTEVqnlFJ0Am0r%2Bh%2FIGJEDW9rLlODn0QKkuH44oXfuT3Uza3kMfTj%2B1qKQT0DGcz0cU8mjY%2FD4TDqaty8y%2FZ0frF1jFoRsjneI0JuY" rel="nofollow">netstat</a></h6><pre><code># 输出æ¯�个ipçš„è¿�æ�¥æ•°ï¼Œä»¥å�Šæ€»çš„å�„个状æ€�çš„è¿�æ�¥æ•° netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n&lt;=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n",a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}' # 统计所有è¿�æ�¥çжæ€�, # CLOSEDï¼šæ— è¿�æ�¥æ˜¯æ´»åŠ¨çš„æˆ–æ­£åœ¨è¿›è¡Œ # LISTEN:æœ�务器在等待进入呼å�« # SYN_RECV:一个è¿�æ�¥è¯·æ±‚å·²ç»�到达,等待确认 # SYN_SENT:应用已ç»�开始,打开一个è¿�æ�¥ # ESTABLISHED:正常数æ�®ä¼ 输状æ€� # FIN_WAIT1:应用说它已ç»�完æˆ� # FIN_WAIT2:å�¦ä¸€è¾¹å·²å�Œæ„�释放 # ITMED_WAIT:等待所有分组死æ�‰ # CLOSING:两边å�Œæ—¶å°�试关闭 # TIME_WAIT:主动关闭è¿�æ�¥ä¸€ç«¯è¿˜æ²¡æœ‰ç­‰åˆ°å�¦ä¸€ç«¯å��馈期间的状æ€� # LAST_ACK:等待所有分组死æ�‰ netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' # 查找较多time_waitè¿�æ�¥ netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20</code></pre><h2>监æ�§linux性能命令</h2><h6>top</h6><p>按大写的 F 或 O 键,然å��按 a-z å�¯ä»¥å°†è¿›ç¨‹æŒ‰ç…§ç›¸åº”的列进行æ�’åº�, ç„¶å��å›�车。而大写的 R é”®å�¯ä»¥å°†å½“å‰�çš„æ�’åº�倒转。<a href="https://link.segmentfault.com/?enc=4GH8LsPK%2FiALA1tLoeOEmg%3D%3D.GF8VCQz5VQkOBTtrk0TYejEQxw7DgtMHVvbfnXhPwZEHV00n3bwqGh31pBR4lTI4IpMuYCWv4U0C78rDBxuvpu0uSLaBNdaEbD9DWqmpztr2vSgjfA2SJVLdTq9mNO6AJfjb%2BCv4qalOVKL%2Bw%2BQg8UTVi8wYzpU0OVAgcZ869hRrDNgF%2FCtNn4pgBT6xM9uStn0Q5lKQdtaa%2FzpkWVCGM10ekbKTz1TlCORvUT0BksWB%2BeyDDV7UZ8vxy1IXJNW7MZfGTvPL5P6NUYV4IqVApZFOsZ2G29jD3Zyd6wUgHeT9indcjLHqKmjvswZcDlHo" rel="nofollow">æ¯�天学一个 Linux 命令(48):top</a></p><pre><code>PID 进程id PPID 父进程id RUSER Real user name UID 进程所有者的用户id USER 进程所有者的用户å�� GROUP 进程所有者的组å�� TTY å�¯åŠ¨è¿›ç¨‹çš„ç»ˆç«¯å��。ä¸�是ä»�终端å�¯åŠ¨çš„è¿›ç¨‹åˆ™æ˜¾ç¤ºä¸º ? PR 优先级 NI nice值。负值表示高优先级,正值表示ä½�优先级 P 最å��使用的CPU,仅在多CPUç�¯å¢ƒä¸‹æœ‰æ„�义 %CPU 上次更新到ç�°åœ¨çš„CPUæ—¶é—´å� 用百分比 TIME 进程使用的CPU时间总计,å�•ä½�ç§’ TIME+ 进程使用的CPU时间总计,å�•ä½�1/100ç§’ %MEM 进程使用的物ç�†å†…存百分比 VIRT 进程使用的虚拟内存总é‡�,å�•ä½�kb。VIRT=SWAP+RES SWAP 进程使用的虚拟内存中,被æ�¢å‡ºçš„大å°�,å�•ä½�kb。 RES 进程使用的ã€�未被æ�¢å‡ºçš„物ç�†å†…存大å°�,å�•ä½�kb。RES=CODE+DATA CODE å�¯æ‰§è¡Œä»£ç �å� 用的物ç�†å†…存大å°�,å�•ä½�kb DATA å�¯æ‰§è¡Œä»£ç �以外的部分(æ•°æ�®æ®µ+æ ˆ)å� 用的物ç�†å†…存大å°�,å�•ä½�kb SHR 共享内存大å°�,å�•ä½�kb nFLT 页é�¢é”™è¯¯æ¬¡æ•° nDRT 最å��一次写入到ç�°åœ¨ï¼Œè¢«ä¿®æ”¹è¿‡çš„页é�¢æ•°ã€‚ S 进程状æ€�。D=ä¸�å�¯ä¸­æ–­çš„ç�¡çœ 状æ€�,R=è¿�行,S=ç�¡çœ ,T=跟踪/å�œæ­¢,Z=僵尸进程 COMMAND 命令å��/命令行 WCHAN 若该进程在ç�¡çœ ,则显示ç�¡çœ 中的系统函数å�� Flags ä»»åŠ¡æ ‡å¿—ï¼Œå�‚考 sched.h</code></pre><h6>dmesg,查看系统日志</h6><pre><code>dmesg</code></pre><h6>iostat,ç£�盘IO情况监æ�§</h6><pre><code>iostat -xz 1 # r/s, w/s, rkB/s, wkB/s:分别表示æ¯�秒读写次数和æ¯�秒读写数æ�®é‡�(å�ƒå­—节)。读写é‡�过大,å�¯èƒ½ä¼šå¼•起性能问题。 # await:IOæ“�作的平å�‡ç­‰å¾…时间,å�•ä½�是毫秒。这是应用程åº�在和ç£�盘交互时,需è¦�消耗的时间,包括IO等待和å®�é™…æ“�作的耗时。如æ�œè¿™ä¸ªæ•°å€¼è¿‡å¤§ï¼Œå�¯èƒ½æ˜¯ç¡¬ä»¶è®¾å¤‡é�‡åˆ°äº†ç“¶é¢ˆæˆ–者出ç�°æ•…障。 # avgqu-sz:å�‘设备å�‘出的请求平å�‡æ•°é‡�。如æ�œè¿™ä¸ªæ•°å€¼å¤§äº�1,å�¯èƒ½æ˜¯ç¡¬ä»¶è®¾å¤‡å·²ç»�饱和(部分å‰�端硬件设备支æŒ�并行写入)。 # %util:设备利用ç�‡ã€‚这个数值表示设备的ç¹�忙程度,ç»�验值是如æ�œè¶…过60,å�¯èƒ½ä¼šå½±å“�IO性能(å�¯ä»¥å�‚ç…§IOæ“�作平å�‡ç­‰å¾…时间)。如æ�œåˆ°è¾¾100%,说æ˜�硬件设备已ç»�饱和。 # 如æ�œæ˜¾ç¤ºçš„æ˜¯é€»è¾‘设备的数æ�®ï¼Œé‚£ä¹ˆè®¾å¤‡åˆ©ç”¨ç�‡ä¸�代表å��端å®�际的硬件设备已ç»�饱和。值得注æ„�的是,å�³ä½¿IO性能ä¸�ç�†æƒ³ï¼Œä¹Ÿä¸�一定æ„�味这应用程åº�性能会ä¸�好,å�¯ä»¥åˆ©ç”¨è¯¸å¦‚预读å�–ã€�写缓存等策略æ��å�‡åº”用性能。</code></pre><h2><a href="https://link.segmentfault.com/?enc=pqedhP7d4RJsyVl7XO9AkA%3D%3D.LWSWBwvd723lHaVEjHNFDOT3swU84oXUN%2BsGBjnOpcG03aJceJ2wJYAjt2AfoWDmBHRXtvlcBDWsAY3ljHZe74Cq716IFU2HiDJ2hhid4vxQ8O9anNeYZ5%2BRSHe3QrjvjtdsX1jmCB5LLLAZiz2oY06us0zfvV8KRe%2FgirrPS0xw9wkAVK%2BMEBGxd0P96r%2FmfBbZrwR%2FaQo5dHntKCzbgxYXyVh9xcWMISsOt%2F8syk6105jUCPfVhU8%2BuKPBkwPTuL0UEnx8AA03wJ2NKMahofHzz8glucblEd2JYSz5C%2FTw7ykrgrJc18NLtL6heuO5" rel="nofollow">free,内存</a>使用情况</h2><pre><code>free -m eg: total used free shared buffers cached Mem: 1002 769 232 0 62 421 -/+ buffers/cache: 286 715 Swap: 1153 0 1153</code></pre><p>第一部分Mem行:</p><pre><code>total 内存总数: 1002 Mused 已ç»�使用的内存数: 769M free 空闲的内存数: 232M shared 当å‰�å·²ç»�废弃ä¸�用,总是0 buffers Buffer 缓存内存数: 62M cached Page 缓存内存数:421M</code></pre><p>关系:total(1002M) = used(769M) + free(232M)</p><p>第二部分(-/+ buffers/cache):</p><pre><code>(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used – buffers – cached) (+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)</code></pre><p>å�¯è§�-buffers/cacheå��æ˜ çš„æ˜¯è¢«ç¨‹åº�å®�å®�在在å�ƒæ�‰çš„内存,而+buffers/cacheå��æ˜ çš„æ˜¯å�¯ä»¥æŒªç”¨çš„内存总数.</p><p>第三部分是指交æ�¢åˆ†åŒº</p><h6>sar,查看网络å��å��状æ€�</h6><pre><code># sar命令在这里å�¯ä»¥æŸ¥çœ‹ç½‘络设备的å��å��ç�‡ã€‚在æ�’查性能问题时,å�¯ä»¥é€šè¿‡ç½‘络设备的å��å��é‡�,判断网络设备是å�¦å·²ç»�饱和。 sar -n DEV 1 # # sar命令在这里用äº�查看TCPè¿�æ�¥çжæ€�,其中包括: # active/s:æ¯�秒本地å�‘èµ·çš„TCPè¿�æ�¥æ•°ï¼Œæ—¢é€šè¿‡connect调用创建的TCPè¿�æ�¥ï¼› # passive/s:æ¯�秒远程å�‘èµ·çš„TCPè¿�æ�¥æ•°ï¼Œå�³é€šè¿‡accept调用创建的TCPè¿�æ�¥ï¼› # retrans/s:æ¯�ç§’TCPé‡�ä¼ æ•°é‡�ï¼› # TCPè¿�æ�¥æ•°å�¯ä»¥ç”¨æ�¥åˆ¤æ–­æ€§èƒ½é—®é¢˜æ˜¯å�¦ç”±äº�建立了过多的è¿�æ�¥ï¼Œè¿›ä¸€æ­¥å�¯ä»¥åˆ¤æ–­æ˜¯ä¸»åЍå�‘èµ·çš„è¿�æ�¥ï¼Œè¿˜æ˜¯è¢«åЍæ�¥å�—çš„è¿�æ�¥ã€‚TCPé‡�ä¼ å�¯èƒ½æ˜¯å› 为网络ç�¯å¢ƒæ�¶åŠ£ï¼Œæˆ–è€…æœ�务器å�‹åŠ›è¿‡å¤§å¯¼è‡´ä¸¢åŒ… sar -n TCP,ETCP 1</code></pre><h6>vmstat, 给定时间监æ�§CPU使用ç�‡, 内存使用, 虚拟内存交互, IO读写</h6><pre><code># 2表示æ¯�2秒采集一次状æ€�ä¿¡æ�¯, 1表示å�ªé‡‡é›†ä¸€æ¬¡(忽略既是一直采集) vmstat 2 1 eg: r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0 0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0 1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0</code></pre><ul><li>r 表示è¿�行队列(就是说多少个进程真的分é…�到CPU),我测试的æœ�务器目å‰�CPU比较空闲,没什么程åº�在跑,当这个值超过了CPU数目,就会出ç�°CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10å°±ä¸�正常了,æœ�务器的状æ€�很å�±é™©ã€‚top的负载类似æ¯�ç§’çš„è¿�行队列。如æ�œè¿�è¡Œé˜Ÿåˆ—è¿‡å¤§ï¼Œè¡¨ç¤ºä½ çš„CPU很ç¹�å¿™ï¼Œä¸€èˆ¬ä¼šé€ æˆ�CPU使用ç�‡å¾ˆé«˜ã€‚</li><li>b 表示阻å¡�的进程,这个ä¸�多说,进程阻å¡�,大家懂的。</li><li>swpd 虚拟内存已使用的大å°�,如æ�œå¤§äº�0ï¼Œè¡¨ç¤ºä½ çš„æœºå™¨ç‰©ç�†å†…å­˜ä¸�足了,如æ�œä¸�是程åº�内存泄露的å�Ÿå› ï¼Œé‚£ä¹ˆä½ è¯¥å�‡çº§å†…存了或者把耗内存的任务è¿�移到其他机器。</li><li>free 空闲的物ç�†å†…存的大å°�,我的机器内存总共8G,剩余3415M。</li><li>buff Linux/Unix系统是用æ�¥å­˜å‚¨ï¼Œç›®å½•里é�¢æœ‰ä»€ä¹ˆå†…容,æ�ƒé™�等的缓存,我本机大概å� 用300多M</li><li>cache cacheç›´æ�¥ç”¨æ�¥è®°å¿†æˆ‘们打开的文件,给文件å�šç¼“冲,我本机大概å� 用300多M(这里是Linux/Unixçš„è�ªæ˜�之处,把空闲的物ç�†å†…存的一部分拿æ�¥å�šæ–‡ä»¶å’Œç›®å½•çš„ç¼“å­˜ï¼Œæ˜¯ä¸ºäº†æ��高 程åº�执行的性能,当程åº�使用内存时,buffer/cached会很快地被使用。)</li><li>si æ¯�ç§’ä»�ç£�盘读入虚拟内存的大å°�,如æ�œè¿™ä¸ªå€¼å¤§äº�0,表示物ç�†å†…å­˜ä¸�够用或者内存泄露了,è¦�查找耗内存进程解决æ�‰ã€‚我的机器内存充裕,一切正常。</li><li>so æ¯�秒虚拟内存写入ç£�盘的大å°�,如æ�œè¿™ä¸ªå€¼å¤§äº�0,å�Œä¸Šã€‚</li><li>bi å�—设备æ¯�ç§’æ�¥æ”¶çš„å�—æ•°é‡�,这里的å�—设备是指系统上所有的ç£�盘和其他å�—设备,默认å�—大å°�是1024byte,我本机上没什么IOæ“�作,所以一直是0,但是我曾在处ç�†æ‹·è´�大é‡�æ•°æ�®(2-3T)的机器上看过å�¯ä»¥è¾¾åˆ°140000/s,ç£�盘写入速度差ä¸�多140Mæ¯�ç§’</li><li>bo å�—设备æ¯�ç§’å�‘é€�çš„å�—æ•°é‡�,例如我们读å�–文件,boå°±è¦�大äº�0。biå’Œbo一般都è¦�æ�¥è¿‘0,ä¸�然就是IO过äº�频ç¹�,需è¦�调整。</li><li>in æ¯�ç§’CPU的中断次数,包括时间中断</li><li>cs æ¯�秒上下文切æ�¢æ¬¡æ•°ï¼Œä¾‹å¦‚我们调用系统函数,就è¦�进行上下文切æ�¢ï¼Œçº¿ç¨‹çš„切æ�¢ï¼Œä¹Ÿè¦�进程上下文切æ�¢ï¼Œè¿™ä¸ªå€¼è¦�è¶Šå°�越好,太大了,è¦�考虑调ä½�线程或者进程的数目,例如在apacheå’Œnginxè¿™ç§�webæœ�务器中,我们一般å�šæ€§èƒ½æµ‹è¯•æ—¶ä¼šè¿›è¡Œå‡ å�ƒå¹¶å�‘ç”šè‡³å‡ ä¸‡å¹¶å�‘的测试,选择webæœ�务器的进程å�¯ä»¥ç”±è¿›ç¨‹æˆ–者线程的峰值一直下调,å�‹æµ‹ï¼Œç›´åˆ°cs到一个比较å°�的值,这个进程和线程数就是比较å�ˆé€‚的值了。系统调用也是,æ¯�次调用系统函数,我们的代ç �å°±ä¼šè¿›å…¥å†…æ ¸ç©ºé—´ï¼Œå¯¼è‡´ä¸Šä¸‹æ–‡åˆ‡æ�¢ï¼Œè¿™ä¸ªæ˜¯å¾ˆè€—资æº�,也è¦�å°½é‡�é�¿å…�频ç¹�调用系统函数。上下文切æ�¢æ¬¡æ•°è¿‡å¤šè¡¨ç¤ºä½ çš„CPU大部分浪费在上下文切æ�¢ï¼Œå¯¼è‡´CPU干正ç»�事的时间少了,CPU没有充分利用,是ä¸�å�¯å�–的。</li><li>us 用户CPU时间,我曾ç»�在一个å�šåŠ å¯†è§£å¯†å¾ˆé¢‘ç¹�çš„æœ�务器上,å�¯ä»¥çœ‹åˆ°usæ�¥è¿‘100,rè¿�行队列达到80(机器在å�šå�‹åŠ›æµ‹è¯•ï¼Œæ€§èƒ½è¡¨ç�°ä¸�ä½³)。</li><li>sy 系统CPU时间,如æ�œå¤ªé«˜ï¼Œè¡¨ç¤ºç³»ç»Ÿè°ƒç”¨æ—¶é—´é•¿ï¼Œä¾‹å¦‚是IOæ“�作频ç¹�。</li><li>id 空闲 CPU时间,一般æ�¥è¯´ï¼Œid + us + sy = 100,一般我认为id是空闲CPU使用ç�‡ï¼Œus是用户CPU使用ç�‡ï¼Œsy是系统CPU使用ç�‡ã€‚</li><li>wt 等待IO CPU时间。</li></ul><p>需è¦�了解ä¸�å­¦ä¹ æ›´å¤šLinux系统命令的读者å�¯ä»¥å�‚考:<a href="https://link.segmentfault.com/?enc=rEZ5bj2FA6jcXq2mVPjXBw%3D%3D.34IG3mqJSwWEzNyfdO7u3HndpaMdDIPm0mjaeExNK6YpPDISMVE3JxYX7Tca0%2FY2K2ehsI5NzcETjk6l6csf6mrFsZ%2BoguzSG0mffq2VcVOc5%2FAFHb7bHGQp9VUTCGTZNi%2FYzjnxtUrFC311EBVDd8JZGHAdolzvhK6TiYqM%2F%2FhrvMRa%2BhEvrUmzzHpvCcMfOipFNo0OptSwqTAi5zpL%2FCLzVlKOc2dlP7BMHHajGwrHl9CxASnQIClf0JD58pMYSMewehI%2F3pxArWemoedLcAVFwoqyr7vVAOM3ax4GUF9FeG6n5ilgvPZ8XW6fOOJB" rel="nofollow">120 个《 必知必会的 Linux 系统常用命令 》</a></p><p>æ�¥æº�:siye1982.github.io/2016/02/25/linux-list</p><p><img src="/img/bVcThja" alt="image.png" title="image.png"></p> 2021 年年度è•�佳开æº�软件ï¼� https://segmentfault.com/a/1190000041229389 2022-01-05T15:37:53+08:00 2022-01-05T15:37:53+08:00 民工哥 https://segmentfault.com/u/jishuroad 4 <h2>Svelte</h2><p><a href="https://link.segmentfault.com/?enc=yujLrFTdVtOYGsa2IzLt2Q%3D%3D.ako4PDLjmEDRSVC2luMtBfPzkG5GgjalijWY9ZKaBto%3D" rel="nofollow">https://svelte.dev/</a></p><p><img src="/img/remote/1460000041229391" alt="图片" title="图片"></p><p>Svelte 是一ç§�全新的æ�„建用户界é�¢çš„æ–¹æ³•ã€‚ä¼ ç»Ÿæ¡†æ�¶å¦‚ React å’Œ Vue 在æµ�览器中需è¦�å�šå¤§é‡�的工作,而 Svelte 将这些工作放到æ�„建应用程åº�的编译阶段æ�¥å¤„ç�†ã€‚</p><p>ä¸�使用虚拟(virtual)DOM 差异对比ä¸�å�Œã€‚Svelte 编写的代ç �在应用程åº�的状æ€�更改时就能åƒ�å�šå¤–ç§‘æ‰‹æœ¯ä¸€æ ·æ›´æ–° DOM。</p><h2>Minikube</h2><p><a href="https://link.segmentfault.com/?enc=0dDCcUxRe7UJS18hloTuOw%3D%3D.Sy%2BCuKpLDIViWeZT7C%2BXs3tCrJgOoAhJjFqVypsAiI8%3D" rel="nofollow">https://minikube.sigs.k8s.io/</a></p><p><img src="/img/remote/1460000041229392" alt="图片" title="图片"></p><p>Minikube å�¯ä»¥åœ¨æœ¬åœ°å�•机上è¿�行Kubernetes集群的工具。Minikubeå�¯è·¨å¹³å�°å·¥ä½œï¼Œä¸�需è¦�虚拟机,ä¸�需è¦�在MacOS或Windows上安装Linux。支æŒ�多ç§�容器,如Docker,CRI-O,Containerd等。</p><h2>Pixie</h2><p><a href="https://link.segmentfault.com/?enc=vFpjKkXEbEyzRN78hd4vkg%3D%3D.T0Awtp%2B7LYUkkGYEUxKz2Q%3D%3D" rel="nofollow">https://px.dev</a></p><p><img src="/img/remote/1460000041229393" alt="图片" title="图片"></p><p>Pixie是查看Kubernetes的工具。å�¯æŸ¥çœ‹Kubernetes集群的状æ€�,比如,æœ�务器集群性能,网络状况,集群资æº�å·²ç»�相关应用程åº�等。还å�¯ä»¥æŸ¥çœ‹æ›´è¯¦ç»†çš„内容,比如,pod状æ€�,请求é‡�,热点图等。Pixie的资æº�å� 用仅有5%å·¦å�³ã€‚</p><h2>FastAPI</h2><p><a href="https://link.segmentfault.com/?enc=N%2BaRp90ZbC1UugzLVKFmbw%3D%3D.hcMg3cSXTpGvjrF29RPKllKX%2FrrR2XQn34O4rXiK6Ko%3D" rel="nofollow">https://fastapi.tiangolo.com/</a></p><p><img src="/img/remote/1460000041229394" alt="图片" title="图片"></p><p>FastAPI是一个Python网页框æ�¶ã€‚FastAPI以其高效ã€�易用赢得了开å�‘者的é�’ç��,直æ�¥æŒ‘战了Djangoå’ŒFlashçš„ä¼ ç»Ÿåœ°ä½�。FastAPI的优点是,类å�‹æ£€æŸ¥ã€�自动 swagger UIã€�支æŒ�异步ã€�强大的ä¾�赖注入。</p><h2>Crystal</h2><p><a href="https://link.segmentfault.com/?enc=JWutyENVDOoWlpiTOLHghA%3D%3D.VWT7f54NY%2F7BQgYddm6nKG2tUQQhLPBTAB6yaDg3yr4%3D" rel="nofollow">https://crystal-lang.org/</a></p><p><img src="/img/remote/1460000041229395" alt="图片" title="图片"></p><p>Crystalå·²ç»�é�¢è¯•很多年了,Crystal的特点是兼具C语言的高效和Rubyçš„é�™æ€�ç±»å�‹ã€‚今年åˆ�å·²ç»�å�‘布了1.0版本,目å‰�最新版本为1.2.1,已ç»�足够稳定。</p><h2>Microsoft Terminal</h2><p><a href="https://link.segmentfault.com/?enc=jwL5606OMBAiWNlTP4jKvQ%3D%3D.luFaEFGeBpTlCOhpUUcZ4lX9HCStaaxvoQz1hRnUMOcIYi%2F5k%2BVIAg%2BArHPlLXGM" rel="nofollow">https://github.com/Microsoft/...</a></p><p><img src="/img/remote/1460000041229396" alt="图片" title="图片"></p><p>Microsoft Terminal 是一个开æº�çš„Windows的终端,æ��供类似Macå’ŒLinux命令行的体验。Microsoft Terminal具有GPUåŠ é€Ÿæ¸²æŸ“ï¼Œè¾ƒä¼ ç»Ÿæ�§åˆ¶å�°å…·æœ‰æ›´å¥½çš„æ€§èƒ½æ��å�‡ã€‚</p><h2>OBS Studio</h2><p><a href="https://link.segmentfault.com/?enc=uGyuJISiYJjLOfs4XE5MDA%3D%3D.7iVL9Lg6eVBJ7Oxy6kEwO%2FLK1k%2FUrMQ8bvSqYnaUjtQ%3D" rel="nofollow">https://obsproject.com/</a></p><p><img src="/img/remote/1460000041229397" alt="图片" title="图片"></p><p>OBS Studio 是一款用äº�ç›´æ’­å’Œå±�幕录制的软件,为高效æ�•è�·ï¼Œå�ˆæˆ�,编ç �,记录和æµ�ä¼ è¾“è§†é¢‘å†…å®¹è€Œè®¾è®¡ï¼Œæ”¯æŒ�所有æµ�媒体平å�°ã€‚å¿«æ�·é”®å�¯è®©è¯•图平滑切æ�¢ï¼Œç”šè‡³è¿˜æœ‰ç”»ä¸­ç”»å’Œå®�时字幕的新功能。</p><h2>Shotcut</h2><p><a href="https://link.segmentfault.com/?enc=Lj5pXblvl5utzE7UVGyLxw%3D%3D.ax6Bxehkw9dYDPQkWX%2Fx3iqn3LuTv%2Bm0Zob33yqivkM%3D" rel="nofollow">https://shotcut.org/</a></p><p><img src="/img/remote/1460000041229398" alt="图片" title="图片"></p><p>Shotcut是一个强大的视频编辑工具。Shotcut具有中文版支æŒ�,å�¯åœ¨Windows,MacOS,Linux,BSDç­‰æ“�作系统上è¿�行,Shotcut具有数百ç§�音频ã€�è§†é¢‘æ ¼å¼�,以å�Šç¼–è§£ç �å™¨ï¼Œä¸”æ— éœ€å¯¼å…¥ï¼Œå�¯ç›´æ�¥ç¼–辑。</p><h2>Weave GitOps</h2><p><a href="https://link.segmentfault.com/?enc=OPqDOSBiutL4kKQoBlvSyA%3D%3D.8w%2Ftq%2Bu%2BiHRVt%2BnVxbzEepR2rsExqhC%2F8it3JcCZTiuA%2FKM0624Ff%2FGFlupCW5bP" rel="nofollow">https://github.com/weaveworks...</a></p><p><img src="/img/remote/1460000041229399" alt="图片" title="图片"></p><p>Weave GitOps 是一个GitOps工具。其目的是简化DevOps的工作æµ�程,通过声æ˜�é…�置使Kubernetesæ›´åŠ ç¨³å®šå’Œå®‰å…¨ã€‚Weave GitOps 基äº� 云å�Ÿç”ŸåŸºé‡‘会的 Flux。</p><h2>Apache Solr</h2><p><a href="https://link.segmentfault.com/?enc=1fjWNO5Vw2oLxTJtsKpJ2A%3D%3D.Pgk1jHnbV9lY728zvHQ%2FEGg%2Fcrwc1OQzIiLYmY1Ip2c%3D" rel="nofollow">https://solr.apache.org/</a></p><p><img src="/img/remote/1460000041229400" alt="图片" title="图片"></p><p>Apache Solr 是基äº� Lucene 的全文æ�œç´¢æœ�务器,也是最æµ�行的ä¼�业级æ�œç´¢å¼•æ“�。Solr 放弃了开æº�的许å�¯è¯�,ä¸�过ç�°åœ¨ä»�然是å…�费的。Solr å�¯é›†ç¾¤éƒ¨ç½²ã€�å�¯åœ¨äº‘端部署,甚至包括 LTR 算法,å�¯è‡ªåŠ¨è°ƒæ•´åŠ æ�ƒç»“æ�œã€‚</p><h2>MLflow</h2><p><a href="https://link.segmentfault.com/?enc=IyHfI6Y0juy2eY2ywg%2Fmzw%3D%3D.rjryMueqQxKIZLzGBW4wSgryL%2BHRZke1e310DahhiDk%3D" rel="nofollow">https://mlflow.org/</a></p><p><img src="/img/remote/1460000041229401" alt="图片" title="图片"></p><p>MLflow 是由 Apache Spark 技术团队开æº�çš„ä¸€ä¸ªæœºå™¨å­¦ä¹ å¹³å�°ã€‚MLflow ç”± Databricks 创建,并由 Linux 基金会托管,是一个 MLOps å¹³å�°ï¼Œå�¯è®©ç”¨æˆ·è·Ÿè¸ªã€�管ç�†å’Œç»´æŠ¤å�„ç§�æœºå™¨å­¦ä¹ æ¨¡å�‹ã€�å®�验å�Šå…¶éƒ¨ç½²ã€‚MLflowæ��供了记录和查询å®�验(代ç �ã€�æ•°æ�®ã€�é…�ç½®ã€�结æ�œï¼‰çš„工具,将数æ�®ç§‘学代ç �打包æˆ�项目,并将这些项目æ�¥å…¥å·¥ä½œæµ�程。</p><h2>Orange</h2><p><a href="https://link.segmentfault.com/?enc=u3nKal0gJhnH5x124ueVkw%3D%3D.JxKMOAHVx%2FNF4NvmUH9nEmhubvQPkCVQsW9fzv0jsdI%3D" rel="nofollow">https://orangedatamining.com/</a></p><p><img src="/img/remote/1460000041229402" alt="图片" title="图片"></p><p>Orange 是一款用äº�å¼€æº�æœºå™¨å­¦ä¹ å’Œæ•°æ�®å�¯è§†åŒ–的工具。Orangeä¸� R Studio å’Œ Jupyter等程åº�化或文本工具相比,Orange 更直观易æ“�作。Orange 包å�«äº†å®Œæ•´çš„一系列的组件以进行数æ�®é¢„处ç�†ï¼Œå¹¶æ��供了数æ�®å¸�目,过渡,建模,模å¼�评估和勘æ�¢çš„功能。</p><h2>Flutter</h2><p><a href="https://link.segmentfault.com/?enc=xNjGJgjE3WBF4fegeimqbg%3D%3D.qjekzozZnYR7ekDjfb4v8Gha3KdUYC1%2FUkG0TeFfCTQ%3D" rel="nofollow">https://flutter.dev/</a></p><p><img src="/img/remote/1460000041229403" alt="图片" title="图片"></p><p>Flutter是谷歌æ�¨å‡ºçš„一个新用äº�æ�„建跨平å�°çš„æ‰‹æœºã€�网页ã€�桌é�¢ï¼ŒåµŒå…¥å¼�设备应用的SDK。Flutter 的组件,比如,滚动æ�¡ã€�导航ã€�å›¾æ ‡å’Œå­—ä½“ï¼Œæ•´å�ˆäº†IOS和安å�“å¹³å�°çš„差异。</p><h2>Apache Superset</h2><p><a href="https://link.segmentfault.com/?enc=%2FeCqGr7Am3xMv9v8lxYEMw%3D%3D.53wKN%2BrYEoAbCdRgeb9cIZY2SN7v%2BQbgWnhmg9I2sRL2cGgslYvnrMpzH95QICWe" rel="nofollow">https://github.com/apache/sup...</a></p><p><img src="/img/remote/1460000041229404" alt="图片" title="图片"></p><p>Apache Superset是一个ç�°ä»£çš„ã€�è½»é‡�级å�¯è§†åŒ–BI分æ��工具。Apache Superset在å�¯è§†åŒ–ã€�易用性和交互性上é��常有特色,用户å�¯ä»¥è½»æ�¾å¯¹æ•°æ�®è¿›è¡Œå�¯è§†åŒ–分æ��。而且Apache Superset å·²ç»�达到ä¼�业级商业软件的水平。</p><h2>Presto</h2><p><a href="https://link.segmentfault.com/?enc=czUo%2Bv68EKFrC2mnzwHdcQ%3D%3D.6oSymcVAvpyUMYbwFygjWzY%2B13ZA48tRgxg7MawbUn4%3D" rel="nofollow">https://prestodb.io/</a></p><p><img src="/img/remote/1460000041229405" alt="图片" title="图片"></p><p>Presto 是一个开æº�的分布å¼� SQL 引æ“�,用äº�集群中的在线分æ��处ç�†ã€‚Presto å�¯ä»¥æŸ¥è¯¢å�„ç§�å�„æ ·çš„æ•°æ�®æº�,ä»�文件到数æ�®åº“,并将结æ�œè¾“出到BI和分æ��ç�¯å¢ƒã€‚æ›´é‡�è¦�的是,Presto å�¯ä»¥åœ¨ Hiveã€�Cassandraã€�关系å�‹æ•°æ�®åº“中进行查询,而且Presto 还å�¯ä»¥ç»“å�ˆå¤šä¸ªæ�¥æº�的数æ�®æŸ¥è¯¢ã€‚</p><p>脸书ã€�Uberã€�æ�¨ç‰¹å’Œé˜¿é‡Œå·´å·´åˆ›ç«‹äº† Presto 基金会。其他æˆ�员ç�°åœ¨åŒ…括 Alluxioã€�Ahanaã€�Upsolver 和英特尔。</p><h2>Apache Arrow</h2><p><a href="https://link.segmentfault.com/?enc=w%2BVA5CAvtZ%2Fv0SrWWV9bxg%3D%3D.8gYRs7iZi9R7B9O3cTuvu1TBd1c443WiqLCgSbb6Mi0%3D" rel="nofollow">https://arrow.apache.org/</a></p><p><img src="/img/remote/1460000041229406" alt="图片" title="图片"></p><p>Apache Arrow 是一个列å¼�内存分æ��层,旨在为CPUå’ŒGPUä¸ŠåŠ é€Ÿå¤§æ•°æ�®çš„分æ��。它包å�«äº†ä¸€å¥—å¹³é�¢å’Œåˆ†å±‚æ•°æ�®çš„å…¸å�‹å†…存表示,Arrow å†…å­˜æ ¼å¼�支æŒ�é›¶æ‹·è´�读å�–,并且ä¸�å¿…åº�列化的情况下访问数æ�®æ��快。目å‰�Apache Arrow支æŒ�的语言包括 Cã€�C++ã€�C#ã€�Goã€�Javaã€�JavaScriptã€�Juliaã€�MATLABã€�Pythonã€�Rã€�Ruby å’Œ Rust。</p><h2>InterpretML</h2><p><a href="https://link.segmentfault.com/?enc=vasrg2NDlk%2F7ABsn0ydDZA%3D%3D.b3ryGTWvo%2FzNwFEl96bo5XCRUeADtVGY1fnA%2F3495Rk%3D" rel="nofollow">https://interpret.ml/</a></p><p><img src="/img/remote/1460000041229407" alt="图片" title="图片"></p><p>InterpretML是微软æ�¨å‡ºçš„å�¯è§£é‡Šæœºå™¨å­¦ä¹ 包。其中包å�«äº†å‡ ä¸ªæœ€å…ˆè¿›çš„æœºå™¨å­¦ä¹ å�¯è§£é‡Šæ€§æŠ€æœ¯ã€‚InterpretMLæ��供了两类解释性类å�‹ï¼šæ˜�箱(glassbox) 模å�‹å’Œé»‘箱(blackbox)模å�‹ã€‚InterpretML å�¯è®©å®�践者通过在一个统一的 API 下,借助内置的å�¯æ‰©å±•å�¯è§†åŒ–å¹³å�°ï¼Œä½¿ç”¨å¤šç§�方法æ�¥è½»æ�¾åœ°æ¯”较å�¯è§£é‡Šæ€§ç®—法。InterpretML 也包å�«äº†å�¯è§£é‡Š Boosting 机(EBM)的首个å®�ç�°ï¼Œè¿™æ˜¯ä¸€ç§�强大的å�¯è§£é‡Šæ˜�箱模å�‹ï¼Œå�¯ä»¥å�šåˆ°ä¸�许多黑箱模å�‹å�Œç­‰å‡†ç¡®ã€‚</p><h2>Lime</h2><p><a href="https://link.segmentfault.com/?enc=MMjK%2FdUAuOefvAVby3PDRA%3D%3D.YO%2FB9NvPkFdTYaDNe1KWjoJ9N%2BsleIKP3wus0wsTrb6GAjWBrEVREsPlg2%2FjmjJ%2F" rel="nofollow">https://github.com/marcotcr/lime</a></p><p><img src="/img/remote/1460000041229408" alt="图片" title="图片"></p><p>Lime(Local interpretable model-agnostic explanations 局部å�¯è§£é‡Šæ¨¡å�‹-ä¸�å�¯çŸ¥è§£é‡Šçš„缩写),Lime用äº�è¡¨æ ¼æˆ–å›¾ç‰‡çš„è§£é‡Šæœºå™¨å­¦ä¹ çš„åˆ†ç±»å™¨ã€‚Lime 能够解释两个或更多类的黑盒分类器。分类器å®�ç�°äº†ä¸€ä¸ªå‡½æ•°ï¼Œè¯¥å‡½æ•°æ�¥æ”¶å�Ÿå§‹æ–‡æœ¬æˆ– numpy 数组并输出æ¯�个类的概ç�‡ã€‚</p><h2>Dask</h2><p><a href="https://link.segmentfault.com/?enc=XmvlMnKuOGAxdeX98Ere%2BQ%3D%3D.I7v2vwEnNI34a0DQjyFpAeEaSVnTDg3lGJAhSljHL78%3D" rel="nofollow">https://dask.org/</a></p><p><img src="/img/remote/1460000041229409" alt="图片" title="图片"></p><p>Dask 是一个用äº�并行计算的开æº�库,å�¯å°† Python 包扩展到多å�°æœºå™¨ä¸Šã€‚Dask å�¯å°†æ•°æ�®å’Œè®¡ç®—分布在多个 GPU 上,å�³å�¯åœ¨å�•一系统也å�¯åœ¨å¤šèŠ‚ç‚¹é›†ç¾¤ä¸­è¿�行。Dask å�¯ä¸� Rapids cuDFã€�XGBoost å’Œ Rapids cuML 集æˆ�,用äº� GPU åŠ é€Ÿçš„æ•°æ�®åˆ†æ��å’Œæœºå™¨å­¦ä¹ ã€‚Dask还å�¯ä¸� NumPyã€�Pandas å’Œ Scikit-learn 集æˆ�进行并行化工作。</p><h2>BlazingSQL</h2><p><a href="https://link.segmentfault.com/?enc=ihcZJeqNfq1JWqZBnWGSSA%3D%3D.B1dTeRy3xqJNw6u18FcjW0wkEtKAYVDZiMxLiyeMb%2FM%3D" rel="nofollow">https://blazingsql.com/</a></p><p><img src="/img/remote/1460000041229410" alt="图片" title="图片"></p><p>BlazingSQL 是一个基äº� Rapids 生æ€�系统æ�„建的 GPU åŠ é€Ÿ SQL 引æ“�。BlazingSQL基äº� Apache 2.0 许å�¯è¯�å¼€æº�。BlazingSQL是cuDFçš„SQLæ�¥å�£ï¼Œå…·æœ‰æ”¯æŒ�大规模数æ�®ç§‘学工作æµ�(包括æ��å�–,转æ�¢ï¼ŒåŠ è½½ï¼‰å’Œä¼�业数æ�®é›†çš„å�„ç§�功能。</p><h2>Rapids</h2><p><a href="https://link.segmentfault.com/?enc=vJnh8VwZmuSkv5VaUfYB1Q%3D%3D.ShfHoYNde414U4xnYfC4R4bW6Onw1m83ebQ%2F50gpIz4%3D" rel="nofollow">https://rapids.ai/</a></p><p><img src="/img/remote/1460000041229411" alt="图片" title="图片"></p><p>Nvidia çš„ Rapids是由英伟达开æº�的一款开æº�æœºå™¨å­¦ä¹ GPUåŠ é€Ÿå¹³å�°ã€‚Rapids 使用英伟达 CUDA 基元进行底层计算优化,通过Python å°† GPU 的并行和高带宽内存以æ�¥å�£æ–¹å¼�å�‘外开放。Rapids ä¾�èµ–äº� Apache Arrow æŸ±çŠ¶å†…å­˜æ ¼å¼�,包括cuDF(类似 Pandas çš„ DataFrame 库);cuMLï¼ˆæœºå™¨å­¦ä¹ åº“é›†å�ˆï¼Œæ��ä¾› Scikit-learn 中大多数算法的 GPU 版本);以å�ŠcuGraph(类似 NetworkX çš„åŠ é€Ÿå›¾åˆ†æ��库)。</p><h2>PostHog</h2><p><a href="https://link.segmentfault.com/?enc=LmQrJsI7oyNS0Taom9VNbQ%3D%3D.Igmij6zeqOWugAE6OusCcqqzVnm5UMpClmA2uhG0RQg%3D" rel="nofollow">https://posthog.com/</a></p><p><img src="/img/remote/1460000041229412" alt="图片" title="图片"></p><p>PostHog 是一个为开å�‘者æ�„建的开æº�产å“�分æ��å¹³å�°ã€‚自动收集网站或应用程åº�上的æ¯�ä¸ªäº‹ä»¶ï¼Œæ— éœ€å�‘第三方å�‘é€�æ•°æ�®ã€‚PostHog æ��供基äº�用户事件的分æ��,æ�•è�·ç½‘站的使用数æ�®ï¼Œç»Ÿè®¡å�„用户在网站中的具体æ“�作。PostHog会自动æ�•è�·ç‚¹å‡»æ¬¡æ•°å’Œç»¼å�ˆæµ�览é‡�,以分æ��网站用户在å�šä»€ä¹ˆï¼Œè€Œæ— 需手动æ�¨é€�事件。</p><h2>LakeFS</h2><p><a href="https://link.segmentfault.com/?enc=3q419kyjQ7VwST8q%2FlbuVQ%3D%3D.ghh5CcGWo2S%2B%2B7A7PfVLSfgJhR4C%2Bjs6fM8XlW%2ByWBI%3D" rel="nofollow">https://lakefs.io/</a></p><p><img src="/img/remote/1460000041229413" alt="图片" title="图片"></p><p>LakeFS æ��供了一ç§�"åƒ�管ç�†ä»£ç �ä¸€æ ·ç®¡ç�†æ•°æ�®æ¹–"的方å¼�,独特引入类似Git功能æ�¥ç®¡ç�†æ•°æ�®çš„版本。LakeFS å�¯ä»¥å¸®åŠ©ç”¨æˆ·åˆ›å»ºç‹¬ç«‹ã€�é›¶æ‹·è´�(Zero-copy)的数æ�®åˆ†æ”¯ï¼Œä¸”在è¿�行ã€�测试和建模分æ��中,å�ˆä¸�å­˜åœ¨ç ´å��共享对象的é£�险。ä¸�Git类似,LakeFS 的数æ�®ä¸­ä¼šå¸¦æœ‰æ��交记录ã€�元数æ�®å­—段和å›�滚等信æ�¯ï¼Œæ­¤å¤–还有hooks,å�³åœ¨åˆ†æ”¯å�ˆå¹¶åˆ°ä¸»åˆ†æ”¯å‰�,hooks会检查数æ�®ï¼Œç¡®ä¿�完整性和质é‡�。Amazon S3 å’Œ Azure Blob已在使用 LakeFS。</p><h2>Meltano</h2><p><a href="https://link.segmentfault.com/?enc=qwjruJt%2F5rsnVohXU7oj4g%3D%3D.rDfZYKry9NUKpPIxQjOy2Uhrul96qia9%2F1u28VRZVPI%3D" rel="nofollow">https://meltano.com/</a></p><p><img src="/img/remote/1460000041229414" alt="图片" title="图片"></p><p>Meltanoå§‹äº�2018å¹´GitLab的内部项目,æœ�务äº� GitLab æ•°æ�®ç®¡ç�†ã€‚2021å¹´ä»�GitLab独立出æ�¥æˆ�为一个åˆ�创公å�¸ã€‚</p><p>Meltano是一款å…�è´¹ DataOps 时代的ETLå·¥å…·ï¼Œæ—¨åœ¨æ›¿ä»£æ›¿ä»£ä¼ ç»Ÿ ELT的工具,ELT是指数æ�®æ��å�–ã€�åŠ è½½ã€�转æ�¢æ“�作的统称。</p><p>Meltano特点是开æº�ã€�自托管ã€�CLI(命令行)ã€�å�¯è°ƒè¯•å’Œå�¯æ‰©å±•。</p><p>Meltano创建管é�“å�³ä»£ç �的概念,Meltano项目å�¯è¿›è¡Œç‰ˆæœ¬æ�§åˆ¶ã€�代ç �审查ã€�æŒ�续集æˆ�和部署 (CI/CD )以å�Šå®¹å™¨åŒ–等。</p><h2>Trino</h2><p><a href="https://link.segmentfault.com/?enc=UFA6S8FVUpyzp6HXpR54XA%3D%3D.C6r8TxLJMtRgKbqzAkpvi3FYVpCeIhL1hnfJSOkdjag%3D" rel="nofollow">https://trino.io/</a></p><p><img src="/img/remote/1460000041229415" alt="图片" title="图片"></p><p>Trino 用äº�大数æ�®åˆ†æ��的快速分布å¼� SQL 查询引æ“�</p><p>2019å¹´PrestoDB的开å�‘者创建了一个å��为PrestoSQL项目分支。由äº�所å±�基金会的转移,PrestoSQLäº�2020å¹´12月更å��为 Trino。</p><p>Trino是一款用äº�大数æ�®åˆ†æ��且性能优越的分布å¼� SQL 分æ��引æ“�。Trino å�¯å�Œæ—¶å¯¹EB 级数æ�®æ¹–和海é‡�æ•°æ�®ä»“库进行高效查询。Trino 符å�ˆ ANSI SQL çš„æŸ¥è¯¢æ ‡å‡†ï¼Œå�¯ä¸� Rã€�Tableauã€�Power BIã€�Superset ç­‰ BI 工具é…�å�ˆä½¿ç”¨ã€‚å�¯åœ¨ Hadoopã€�S3ã€�Cassandraã€�MySQL 的数æ�®ä»“库中è�”å�ˆæŸ¥è¯¢ã€‚</p><h2>StreamNative</h2><p><a href="https://link.segmentfault.com/?enc=kzgThMGmfiTd5ivlXM9xxA%3D%3D.qgDkNm0lXwpBYmoUvLxPtGxSiET33BXyePlXQ3szbQY%3D" rel="nofollow">https://streamnative.io/</a></p><p><img src="/img/remote/1460000041229416" alt="图片" title="图片"></p><p>StreamNative 是一款弹性部署且å�¯æ‰©å±•的消æ�¯å’Œäº‹ä»¶æµ�å¹³å�°ï¼Œå¤§å¤§ç®€åŒ–了å®�时报告和分æ��工具以å�Šä¼�业应用æµ�的数æ�®ç®¡é�“æ�¶è®¾ã€‚StreamNative å°† Apache Pulsar 分布å¼�æµ�处ç�†æ�¶æ�„ä¸� Kubernetes 和混å�ˆäº‘支æŒ�等,以å�Šä¼�业级功能ã€�大å�‹æ•°æ�®ã€�认è¯�å’Œæ�ˆæ�ƒã€�性能监æ�§ç­‰å·¥å…·ç›¸ç»“å�ˆï¼Œæ—¢ç®€åŒ–了应用程åº�的开å�‘,å�ˆç®€åŒ–了æµ�æ•°æ�®åº”用的部署和管ç�†ã€‚</p><h2>Hugging Face</h2><p><a href="https://link.segmentfault.com/?enc=6mo5e5mfAAR%2Bp8SZqjBsgQ%3D%3D.qOYEnxQpar%2BxU7PmfjdrZuCaAVXcmqoWYnsco0BKBUQ%3D" rel="nofollow">https://huggingface.co/</a></p><p><img src="/img/remote/1460000041229417" alt="图片" title="图片"></p><p>Hugging Face是一个公å�¸ï¼Œä¹Ÿæ˜¯ä¸€ä¸ªç½‘站。</p><p>Hugging Face æ��供了以é��å¸¸æœ‰ç”¨çš„æ·±åº¦å­¦ä¹ èµ„æº�åº“ï¼Œæ¯”å¦‚æ·±åº¦å­¦ä¹ çš„æ¨¡å�‹ï¼Œæ•°æ�®é›†ï¼Œè¿˜æœ‰ç½‘站的使用空间的等,ä¸�过大多是è¦�付费的。</p><p>å�¦å¤–Hugging Face的主è¦�产å“�是è�Šå¤©æœºå™¨äººï¼Œä¸ºæ­¤Hugging Face å¼€å�‘了自己的自然语言处ç�† (NLP) 模å�‹ï¼Œç§°ä¸ºåˆ†å±‚å¤šä»»åŠ¡å­¦ä¹ (HMTL) 并在PyTorch-Transformers下管ç�†äº†ä¸€ä¸ªé¢„训练的 NPL 模å�‹åº“。</p><h2>EleutherAI</h2><p><a href="https://link.segmentfault.com/?enc=MGBMRorG8RoGT9AXFkYF%2Bg%3D%3D.QZn99RWb4khk%2BYrKB1%2B3qvdtracaori6B908yM4sV98%3D" rel="nofollow">https://www.eleuther.ai/</a></p><p><img src="/img/remote/1460000041229418" alt="图片" title="图片"></p><p>EleutherAI是一个开æº�的社区人工智能项目,旨在创建一个完全å�»ä¸­å¿ƒåŒ–çš„ã€�具有自治文æ˜�çš„å�•例人工智能。EleutherAI 项目始äº� 2011 年,任何能è¿�æ�¥äº’è�”网且有GitHub å¸�户的人都å�¯ä»¥å�‚ä¸�。社区æˆ�员å�¯é€šè¿‡æ��交开å�‘功能以或æ��案æ�¥å�‚ä¸�项目。EleutherAI 的开å�‘者æ¯�周会更新项目进度,这些更新会在 YouTube 上进行ç�°åœºç›´æ’­ã€‚</p><p>2021å¹´ EleutherAI å�‘布了The Pile,是一个 825GB 用äº�è®­ç»ƒçš„å¤šæ ·åŒ–æ–‡æœ¬æ•°æ�®é›†ï¼›å¹¶åœ¨6月公布了 GPT-J,一个 60 亿å�‚数的模å�‹ï¼Œå¤§è‡´ç›¸å½“äº� OpenAI çš„ GPT-3 的居里å�˜é‡�。éš�ç�€ GPT-NeoX 的出ç�°ï¼ŒEleutherAI计划将å�‚数一直æ��高到 1750 亿,å�‘起了争夺最大GPT-3模å�‹çš„æŒ‘战赛。</p><p>补充,OpenAIçš„ GPT-3 模å�‹åœ¨æ–‡æœ¬ç”Ÿæˆ�æ–¹é�¢å®�ç�°äº†æƒŠäººçš„é£�跃,甚至具有了人类级别的性能。但其API始终未能完全开放,目å‰�å�ªæœ‰ OpenAI 和微软内部æ‰�有完全访问全部训练集。</p><h2>Colab notebooks for generative art/Colab notebooks用äº�生æˆ�艺术å“�</h2><p>首先是 OpenAI çš„ CLIP(对比语言-图åƒ�预训练)模å�‹ï¼Œä¸€ç§�用äº�生æˆ�文本和图åƒ�矢é‡�嵌入的多模æ€�模å�‹ã€‚虽然 CLIP 是完全开æº�的,但 OpenAI çš„ç¥�ç»�网络 DALL-E å�´ä¸�å¼€æº�。为了弥补这一空白,Ryan Murdoch å’Œ Katherine Crowson å¼€å�‘了 Colab notebooks,将 CLIP ä¸�å…¶ä»–å¼€æº�模å�‹ï¼ˆå¦‚ BigGAN å’Œ VQGAN)结å�ˆèµ·æ�¥ï¼Œåˆ¶ä½œ Prompt-based 生æˆ�性艺术作å“�。这些 notebooks 基äº� MIT 的开æº�许å�¯è¯�,过å�»å‡ å��年间在互è�”ç½‘ä¸Šå¹¿æ³›ä¼ æ’­ï¼Œè¢«é‡�æ–°æ··å�ˆã€�修改ã€�转译,并被用æ�¥ç”Ÿæˆ�了惊人的艺术作å“�。</p><p><img src="/img/remote/1460000041229419" alt="图片" title="图片"></p><blockquote>æ�¥æº�:toutiao.com/a7028029253035770371/</blockquote><p><img src="/img/remote/1460000037446300" alt="图片" title="图片"></p> ä½ è¿˜åœ¨ç”¨ Prometheus 监æ�§ K8S?快试试这 6 个更牛逼的替代方案 https://segmentfault.com/a/1190000041229342 2022-01-05T15:35:22+08:00 2022-01-05T15:35:22+08:00 民工哥 https://segmentfault.com/u/jishuroad 1 <p>监æ�§å�¯å¸®åŠ©æ‚¨ç¡®ä¿�Kubernetes应用程åº�平稳è¿�行并æ�’除å�¯èƒ½å‡ºç�°çš„任何问题。Prometheus是一ç§�æµ�行的开æº�监视工具,许多公å�¸éƒ½ä½¿ç”¨å®ƒæ�¥ç›‘视其IT基础结æ�„。但是,还有许多其他监视工具å�¯ç”¨ã€‚本文介ç»�了6ç§�å�¯ä»¥æ›¿ä»£Prometheus监视Kubernetes的方法。</p><h2>什么是Prometheus?</h2><p>Prometheus是最åˆ�在SoundCloud上æ�„建的开æº�监视系统。它旨在监视多维数æ�®æ”¶é›†å’ŒæŸ¥è¯¢ã€‚Prometheusæœ�务器具有自己的独立å�•元,该独立å�•å…ƒä¸�ä¾�赖网络存储或外部æœ�åŠ¡ã€‚å› æ­¤ï¼ŒPrometheusä¸�需è¦�大é‡�其他基础æ�¶æ�„或软件。</p><p><img src="/img/remote/1460000041229344" alt="图片" title="图片"></p><p><a href="https://link.segmentfault.com/?enc=QnTlQ8uGB0JuhGo58cMZpQ%3D%3D.2NO0X91pauP8eJtLU0tGNLSvCup12O5u%2F8hWl%2Fi5sFbYCudAnCQeCD91EeLISxVts7TD0TM8YW%2FmhneCWMwf%2BGV%2B87ljfdIgSSvfg0yN5kCVNTJTJRDoXK5CtiXcV2XaL55msxfzY%2BP%2BT%2FT31pKwpe9EqHouXSWnPQriqj%2B%2FN53WqeSEs5LIHlUnuX6CgvgbgEnXTd0%2BDH7w%2Fdz8p5o6RM9OAzQHJYJuIpL0NxGt6obR6cDD7acYKfRmLC8Tmj%2FrLa64kGSHP2%2BA7t0MBZkhLUJrVxespEhFwpKJtPgKXaQetf%2FF%2BeS%2BZhZkhbY5xACB" rel="nofollow">Prometheus</a>的主è¦�优势包括ä¸�<a href="https://link.segmentfault.com/?enc=vN1HlgRLue5q%2FX3S7YPaJQ%3D%3D.q0tXy3hvbgDXwMlHIwBRr%2BDKUIT529AP2Gx1m%2BVKrWsRkfMa17XEaIybCOhPvPBUxu%2BYdPLKvdwTs8lP%2BhrwQo2hUC4L0ZK64j7M6mIGmgsCujlESvUx%2B9GEj68oA%2Fnxjyd2IpNKTa8l%2B74lb2osB%2F2bD00MA62dNOVkbcw38lo2Rx5HVcqoUQU70qBHzpt4q4Qhg%2FFLRrWxLkUTKQ6RNDR04JVC3BieGwvpFYlmywftfmZ7Y41fPIsDZSNC19YK1qaWleIg0eVcsn9sNpti%2FQwgI8fO1XpRn5QAVZp7y0K8OM5n502OtPsZQR9EOcWv" rel="nofollow">Kubernetes</a>的紧密集æˆ�,许多å�¯ç”¨çš„导出器和库以å�Šå¿«é€Ÿçš„æŸ¥è¯¢è¯­è¨€å’ŒAPI。Prometheus的主è¦�缺点包括简化的ã€�å�—约æ�Ÿçš„æ•°æ�®æ¨¡å�‹ï¼ŒåŸºäº�拉å�–的模å�‹çš„æœ‰é™�粒度以å�Šç¼ºä¹�åŠ å¯†ã€‚</p><p>以下列出了除Prometheus外监视Kubernetesçš„6ç§�方法。æ¯�ç§�工具都有其自身的优点和缺点,让我们一起看看æ¯�个工具的主è¦�功能。</p><h2>1ã€�Grafana</h2><p>Grafana是一个开æº�å¹³å�°ï¼Œç”¨äº�å�¯è§†åŒ–,监视和分æ��æŒ‡æ ‡ã€‚<a href="https://link.segmentfault.com/?enc=7uJPRkXf01bCxbyWLV9NQA%3D%3D.kDVxYwSj00%2B5Zx6YqheiaiuyvQQz7bag9E%2FBDGTQ5RS1%2FlbM8ytKBcakaXjilFRoFu4Co3YCJ2qYwh8HJ5RmqC2VkM%2BhJJGRFoIcvri%2FMjbwxDWKGshIhE6NB4EGwDekNSgtffcBM%2B%2FT14IswBi0rQ4XKnBm9%2BtZvvlaaw8Vy7j7bZxUbdGatilaeom4FwmPbLOGs3uPFeizNvHVvvTLrC6Y98nRJk26krM2KJCk1WKWP3vnZQN2f9LlKprCyPx8UQUpoexvRdd2LwXVfaEl5RiqLHTdamSE6yjLwnF6QFDR2V55mjQllOzYl2yBKFDD" rel="nofollow">Grafana</a>的主è¦�é‡�点是时间åº�列分æ��。Grafanaå�¯ä»¥é€šè¿‡å¤šç§�图形选项(包括折线图ã€�热图和æ�¡å½¢å›¾ï¼‰æ˜¾ç¤ºåˆ†æ��的数æ�®ã€‚å½“ç›‘è§†çš„æŒ‡æ ‡è¶…è¿‡é¢„å®šä¹‰çš„é˜ˆå€¼æ—¶ï¼Œæ‚¨ä¼šæ”¶åˆ°è­¦æŠ¥ã€‚</p><p><img src="/img/remote/1460000041229345" alt="图片" title="图片"></p><h6>主è¦�功能包括:</h6><ul><li>警报 - 您å�¯ä»¥é€šè¿‡ä¸�å�Œçš„æ¸ é�“(包括SMS,电å­�邮件,Slack或PagerDuty)è�·å�–警报。如æ�œæ‚¨æ›´å–œæ¬¢å…¶ä»–交æµ�æ¸ é�“,则å�¯ä»¥ä½¿ç”¨ä¸€äº›ä»£ç �æ�¥åˆ›å»ºè‡ªå·±çš„通知程åº�。</li><li>仪表æ�¿æ¨¡æ�¿ - 通过模æ�¿åŒ–,您å�¯ä»¥åˆ›å»ºå�¯é‡�å¤�用äº�多个用例的仪表æ�¿ã€‚例如,您å�¯ä»¥ä¸ºç”Ÿäº§æœ�务器和测试æœ�务器使用相å�Œçš„仪表æ�¿ã€‚</li><li>供应 - 您å�¯ä»¥ä½¿ç”¨è„šæœ¬è‡ªåŠ¨åŒ–Grafana中的所有内容。例如,您å�¯ä»¥ä½¿ç”¨åŒ…å�«IP地å�€ï¼Œæœ�务器和数æ�®æº�预设的脚本自动å�¯åЍGrafana和新的Kubernetes群集。</li><li>注释 - 在å�‘生错误时用äº�æ•°æ�®å…³è�”。您å�¯ä»¥é€šè¿‡åœ¨å›¾å½¢ä¸­æ·»åŠ æ–‡æœ¬æ�¥æ‰‹åŠ¨åˆ›å»ºæ³¨é‡Šï¼Œä¹Ÿå�¯ä»¥ä»�任何数æ�®æº�è�·å�–æ•°æ�®ã€‚</li></ul><h2>2ã€�cAdvisor</h2><p>cAdvisorå�¯ä»¥æ”¶é›†ã€�处ç�†å’Œå¯¼å‡ºæœ‰å…³æ­£åœ¨è¿�行的容器的性能和资æº�使用情况信æ�¯ã€‚cAdvisor具有对Kubernetes的本地支æŒ�ï¼Œå› ä¸ºå®ƒå·²é›†æˆ�到Kubelet二进制文件中。</p><p><img src="/img/remote/1460000041229346" alt="图片" title="图片"></p><h6>主è¦�功能包括:</h6><ul><li>自动å�‘ç�° - 自动å�‘ç�°ç»™å®šèŠ‚ç‚¹ä¸­çš„æ‰€æœ‰å®¹å™¨å¹¶æ”¶é›†ç»Ÿè®¡ä¿¡æ�¯ï¼ŒåŒ…括内存,CPU,网络和文件系统使用情况。</li><li>存储æ�’ä»¶ - 将统计信æ�¯å¯¼å‡ºåˆ°ä¸�å�Œçš„存储æ�’件,例如Elasticsearchå’ŒInfluxDB。</li><li>整体计算机使用ç�‡ - 通过分æ��è®¡ç®—æœºä¸Šçš„â€œæ ¹â€�容器æ�¥æ��供整体计算机使用ç�‡ã€‚</li><li>Web-UI - 您å�¯ä»¥åœ¨Web-UIä¸ŠæŸ¥çœ‹æŒ‡æ ‡ï¼Œè¯¥æŒ‡æ ‡æ˜¾ç¤ºæœ‰å…³è®¡ç®—æœºä¸Šæ‰€æœ‰å®¹å™¨çš„å®�æ—¶ä¿¡æ�¯ã€‚</li></ul><h2>3ã€�Fluentd</h2><p>Fluentd 通过在两者之间æ��供统一的日志记录层,将数æ�®æº�ä¸�å��端系统分离。日志记录层使您å�¯ä»¥æ”¶é›†ç”Ÿæˆ�的多ç§�ç±»å�‹çš„æ—¥å¿—。</p><p><img src="/img/remote/1460000041229347" alt="图片" title="图片"></p><h6>主è¦�功能包括:</h6><ul><li>JSONæ•°æ�®ç»“æ�„ - 使您能够统一所有日志数æ�®å¤„ç�†æ–¹é�¢ï¼Œä¾‹å¦‚è·¨ä¸�å�Œæº�缓冲,过滤和输出日志。</li><li>å�¯æ�’拔的体系结æ�„ - ç�µæ´»çš„æ�’件系统使您å�¯ä»¥é€šè¿‡è¿�æ�¥å¤šä¸ªæ•°æ�®æº�和输出æ�¥æ‰©å±•Fluentd的功能。</li><li>系统资æº� - å®�例è¿�行在30MB到40MB的内存上,æ¯�ç§’å�¯ä»¥å¤„ç�†13,000个事件。如æ�œéœ€è¦�更多内存,则å�¯ä»¥ä½¿ç”¨Fluent Bitè½»å�‹è½¬å�‘器。</li><li>å�¯é� 性 - 支æŒ�基äº�文件的缓冲和内存缓冲,以防止节点上的数æ�®ä¸¢å¤±ã€‚此外,您å�¯ä»¥è®¾ç½®Fluentd以支æŒ�高å�¯ç”¨æ€§å’Œå¼ºå¤§çš„æ•…障转移。</li></ul><h2>4ã€�Jaeger</h2><p>Jaeger是一个开æº�工具,用äº�监视Kubernetes等分布å¼�æœ�务之间的æµ�é‡�。Jaeger使用分布å¼�跟踪æ�¥è·Ÿè¸ªé€šè¿‡ä¸�å�Œå¾®æœ�务的æœ�务请求的路径。然å��,您å�¯ä»¥ç›´è§‚地看到请求æµ�。分布å¼�跟踪是一ç§�管ç�†å’Œè§‚察微æœ�务的方法,它作为æœ�åŠ¡ç½‘æ ¼çš„ä¸€éƒ¨åˆ†è¿�行。</p><p><img src="/img/remote/1460000041229348" alt="图片" title="图片"></p><h6>主è¦�功能包括:</h6><ul><li>高å�¯æ‰©å±•性 - è®¾è®¡ä¸ºæ— å�•点故障(SPOF),å�¯æ ¹æ�®ä¸šåŠ¡éœ€æ±‚è¿›è¡Œæ‰©å±•ã€‚</li><li>多ç§�存储选项 - 支æŒ�两个开æº�NoSQLæ•°æ�®åº“,Elasticsearchå’ŒCassandra。Jaeger还æ��供了简å�•的内存存储用äº�测试。</li><li>云å�Ÿç”Ÿéƒ¨ç½² - 支æŒ�ä¸�å�Œçš„é…�置方法,包括ç�¯å¢ƒå�˜é‡�,命令行选项和é…�置文件。Kubernetes模æ�¿ï¼ŒKubernetesè¿�算符和Helm图表支æŒ�Kubernetes部署。</li><li>监视 - Jaegerå��端组件默认情况下公开PrometheusæŒ‡æ ‡å’Œæ—¥å¿—ã€‚</li></ul><h2>5ã€�Telepresence</h2><p>Telepresence是一个开æº�工具,å�¯ä»¥åœ¨æœ¬åœ°è¿�行å�•个æœ�务,å�Œæ—¶å°†è¯¥æœ�务è¿�æ�¥åˆ°è¿œç¨‹Kubernetes集群。网真在Pod中部署了å�Œå�‘网络代ç�†ï¼Œè¯¥ä»£ç�†å�¯ä¸ºKubernetesç�¯å¢ƒæ”¶é›†æ•°æ�®ï¼ŒåŒ…括TCPè¿�æ�¥ï¼Œç�¯å¢ƒå�˜é‡�å’Œå�·ã€‚</p><p><img src="/img/remote/1460000041229349" alt="图片" title="图片"></p><h6>主è¦�功能包括:</h6><ul><li>兼容性 - 带有OSå�Ÿç”Ÿè½¯ä»¶åŒ…çš„Linuxå’ŒMac OSå�‡å�¯ä½¿ç”¨ã€‚</li><li>å¼€å�‘工作æµ�程 - 为您æ��供在Kubernetes上开å�‘的多容器应用程åº�的快速开å�‘工作æµ�程。您å�¯ä»¥åœ¨å°†æœ¬åœ°Docker容器代ç�†åˆ°é›†ç¾¤æ—¶è¿�行它。</li><li>在本地调试Kubernetesæœ�务 - 当临时群集中有bug时,您想在本地è¿�行æœ�务。网真使您å�¯ä»¥åœ¨æœ¬åœ°è°ƒè¯•æœ�务。</li></ul><p>è¿�æ�¥åˆ°è¿œç¨‹Kubernetes群集 - 您å�¯ä»¥ä»�本地进程访问远程群集。通过此访问æ�ƒé™�,您å�¯ä»¥ä½¿ç”¨ç¬”记本电脑上的本地工具ä¸�群集内的进程进行通信。</p><h2>6ã€�Zabbix</h2><p><a href="https://link.segmentfault.com/?enc=1mvQeMQXIjHLTwcYa6uR3w%3D%3D.3w5eItsVhiSo75il9zhsfHkDJf8cOm35JeJ4isnTT1%2BfUrrkakx4W1bmOXivNINz8Hls0sxnw6qsMcfBoQc%2B3rG4x%2FjYjpn%2B73k4GrS2B4mVyJTBOQ80%2FP%2B52ejiaszZSUeDJ2XDtXxuk1u4BsVakM%2BWUtGiWnjj4X52UYfYjFvuN4l8UNe8AsQ3sqgypKctHflNjADN7TQPKqDBzsDORWl3WqHNC6X77v%2FCw8lI9z5x%2FRvHB8YwJcSnyloRWGX2dure72ZoGzvlKsuXkSGBLZQo4kkKKeXpxSgVhTdeMA%2F2uGcqjLjjCOu7P0Kz0dHK" rel="nofollow">Zabbix</a>旨在监视大é‡�网络å�‚æ•°å’Œæœ�务器的è¿�行状况,并基äº�存储的数æ�®æ��供许多数æ�®å�¯è§†åŒ–和报告功能。具有少é‡�æœ�务器的å°�å�‹ç»„织和具有多个æœ�务器的大å�‹ä¼�业å�¯ä»¥ä½¿ç”¨<a href="https://link.segmentfault.com/?enc=h7UnX%2FLbmPIPj2ewTJy6fQ%3D%3D.gyL2yC3XPBDPmG8z%2Ft7fssyt0BkLNRZROh4JhjU77j2ifTpwb18L02C5FgFWFUry5j7%2Biz66MI92VIGhXwHdhW0d2CX7Wr7Ntb5QjvLOyXTd6qQcvn57caHNMddobxxpCqa6ZKN1s7GjhRdCzr1s1svnqRKeNH6bn0kXcCk4WBFXTlN634E2H8RRkaNy7gqXmuoi8NqqasgNasWQSzKmh%2FBq4KtTNZq21JB%2F4uaShpDAdQ%2BKW%2FmgN596bkzGLaUPvE8VBdv64XWz7OrWRv4o52Avleh9hp8278zXaYEMwgQjY6wUHrbuvBTZ6Nd1gryr" rel="nofollow">Zabbix</a>监视IT基础结æ�„。</p><p><img src="/img/remote/1460000041229350" alt="图片" title="图片"></p><h6>主è¦�功能包括:</h6><ul><li>弹性阈值 - 您å�¯ä»¥å®šä¹‰å¼¹æ€§é—®é¢˜é˜ˆå€¼ï¼Œä¹Ÿç§°ä¸ºè§¦å�‘器。这些触å�‘器基äº�å��端数æ�®åº“中的值。</li><li>å®�æ—¶å�¯è§†åŒ– - 您å�¯ä»¥ä½¿ç”¨å†…置的绘图功能立å�³æŸ¥çœ‹å�—监视的项目。</li><li>自动å�‘ç�° - æ��供多ç§�自动化大å�‹ç�¯å¢ƒï¼ˆå¦‚Kubernetes)管ç�†çš„æ–¹æ³•。您å�¯ä»¥åœ¨ç»„ç»‡ä¸­è‡ªåŠ¨æ·»åŠ å’Œåˆ é™¤æ–‡ä»¶ç³»ç»Ÿå’Œç½‘ç»œæ�¥å�£ã€‚</li><li>网络å�‘ç�° - 使您能够定期扫æ��网络中的外部æœ�务或Zabbix代ç�†ï¼Œå¹¶åœ¨å�‘ç�°æ—¶é‡‡å�–预定义的æ�ªæ–½ã€‚</li><li>分布å¼�监视 - æ��供使用Zabbix代ç�†ç›‘视分布å¼�基础结æ�„的有效方法。您å�¯ä»¥ä½¿ç”¨ä»£ç�†åœ¨æœ¬åœ°æ”¶é›†æ•°æ�®ï¼Œç„¶å��将数æ�®æŠ¥å‘Šç»™æœ�务器。</li></ul><h2>结论</h2><p>Prometheus是用äº�监视Kubernetes工作负载的开æº�工具。它被本地集æˆ�为Kubernetes中的默认监视工具,包括内置的警报管ç�†å™¨ã€‚但是,您还应该考虑针对您的Kubernetesç�¯å¢ƒä½¿ç”¨å…¶ä»–监视选项,以补充和改进Kubernetes功能体验。</p><blockquote><em>作者丨by Limor Wainstein æ�¥æº�丨<a href="https://link.segmentfault.com/?enc=E1n9IbBDo758y12g5CfuNw%3D%3D.chbmXISXjvB3SZnHwE2c95QWoMB%2F0nq0oQR9kZMNZquTS%2FWR8UC0Y4F606ewmAF6XZnhMay3Fe3VzgmWMttzCWQO9NIel4%2B08HE0RZj4PRj%2F6n%2FGYo7IgPJ9b7EES3sL" rel="nofollow">https://containerjournal.com/...</a></em></blockquote><p><img src="/img/remote/1460000041229351" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041229352" alt="图片" title="图片"></p><p><img src="/img/remote/1460000037446300" alt="图片" title="图片"></p> 比 ping 强大百å€�çš„å�¯è§†åŒ–工具ï¼�结æ�œä¸€ç›®äº†ç„¶ https://segmentfault.com/a/1190000041184936 2021-12-27T12:47:31+08:00 2021-12-27T12:47:31+08:00 民工哥 https://segmentfault.com/u/jishuroad 7 <p>谈到检测网络è�”通性工具,ping命令必须首当其充。</p><p>但是,今天,民工哥给大家æ�¨è��一个强大的命令行工具:gping。</p><p><img src="/img/remote/1460000041184938" alt="图片" title="图片"></p><p>gping 是基äº� Rust 编写å�¯è§†åŒ–工具,具有动æ€�图形化界é�¢æ˜¾ç¤ºã€‚</p><p><img src="/img/remote/1460000041184939" alt="图片" title="图片"></p><h2>安装</h2><p>下载系统所对应的安装包</p><p><img src="/img/remote/1460000041184940" alt="图片" title="图片"></p><p>本文以CentOS7系统为例,其它系统请å�‚考官方文档。</p><pre><code>[root@centos7 ~]# wget https://github.com/orf/gping/releases/download/gping-v1.2.6/gping-Linux-x86_64.tar.gz [root@centos7 ~]# ll gping-Linux-x86_64.tar.gz -rw-r--r-- 1 root root 889865 Dec  7 22:20 gping-Linux-x86_64.tar.gz [root@centos7 ~]# mkdir /usr/local/gping [root@centos7 ~]# tar zxf gping-Linux-x86_64.tar.gz -C /usr/local/gping</code></pre><p>如æ�œå®‰è£…完å��,è¿�行命令出ç�°ä¸‹è¿°é”™è¯¯ï¼š</p><pre><code>./gping: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./gping)</code></pre><p>解决方案如下:</p><pre><code>curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxf glibc-2.18.tar.gz cd glibc-2.18/ mkdir build cd build/ ../configure --prefix=/usr make -j2 make install</code></pre><h2>使用</h2><pre><code>[root@centos7 gping]# ./gping --help gping 1.2.6 Ping, but with a graph. USAGE: gping [FLAGS] [OPTIONS] &lt;hosts-or-commands&gt;... FLAGS: --cmd Graph the execution time for a list of commands rather than pinging hosts -h, --help Prints help information -4 Resolve ping targets to IPv4 address -6 Resolve ping targets to IPv6 address -s, --simple-graphics Uses dot characters instead of braille -V, --version Prints version information OPTIONS: -b, --buffer &lt;buffer&gt; Determines the number of seconds to display in the graph. [default: 30] -n, --watch-interval &lt;watch-interval&gt; Watch interval seconds (provide partial seconds like '0.5'). Default for ping is 0.2, default for cmd is 0.5. ARGS: &lt;hosts-or-commands&gt;... Hosts or IPs to ping, or commands to run if --cmd is provided.</code></pre><p><img src="/img/remote/1460000041184941" alt="图片" title="图片"></p><p>它还å�¯ä»¥å�Œæ—¶å¯¹å¤šä¸ªç›®æ ‡åœ°å�€è¿›è¡Œæ“�作。</p><p><img src="/img/remote/1460000041184942" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041184943" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041184944" alt="图片" title="图片"></p><p><img src="/img/bVbHCzg" alt="" title=""></p> 这款开æº�ç»ˆç«¯å·¥å…·é€¼æ ¼æ›´é«˜ï¼�比 Xshell 好用 https://segmentfault.com/a/1190000041173615 2021-12-24T13:34:26+08:00 2021-12-24T13:34:26+08:00 民工哥 https://segmentfault.com/u/jishuroad 4 <p>作为一个常常ä¸� Linux 系统打交é�“的程åº�员,使用 SSH 终端工具进行远程管ç�†ï¼ˆ<strong>之å‰�也分享过:</strong><a href="https://link.segmentfault.com/?enc=nrYcJhbSt0PEyCguuI0XjQ%3D%3D.400J%2F8kctwgPphDfYWR8ZN%2FPqMQoIubNLNarFTWtHDPz4QRQVaRAKudZqY%2BdEdOGw96g4f7cAC1EgCU%2BdYbegVPJ%2BKPczmAFapOqQbgKhrH%2FexdV816GjApEXOUBPL602pKQ1JS7RFeu6A1zdSlsEDs36A4Ie6temPyaHOdm7cLIxvKAsWIZQRv3gZVB%2B5rgshz97epre44NV8vJM%2Fp7WBi8iWahLonRE9ND%2BmGU2H%2Blt3%2FQrqTGd8HWM1ISXidbzbiZ1eys078Uvs7p26QbaSRFssUPg8iRPYyFVqTgLRNDRJN4WUrkjLu70%2FwNjSXU" rel="nofollow">还在付费使用 XShell?我选择这款超牛逼的 SSH 客户端,完全å…�è´¹ï¼�</a>)我们的æœ�务器是必ä¸�å�¯å°‘的日常工作之一。<strong>好工具是æ��高工作效ç�‡çš„必备ç¥�器ï¼�</strong>民工哥在此之å‰�也介ç»�过ä¸�少的常用工具,以å�Šå®ƒçš„使用ä¸�é…�置,大家å�¯ä»¥ç‚¹å‡»æ–‡ç« 上方的 <strong>Tools</strong> 专æ �查阅。</p><p>很多人一看到就这,就会想到 Xshell 这个工具。但是 Xshell å…�费版本ä¸�能在商业ç�¯å¢ƒä¸‹ä½¿ç”¨ï¼ˆä¼�业使用å�¯èƒ½ä¼šæœ‰ç‰ˆæ�ƒé—®é¢˜ï¼‰ï¼Œè¿˜æœ‰å°±æ˜¯<strong>ä¸�支æŒ� Mac,如æ�œæƒ³ç”¨ FTP ä¼ è¾“æ–‡ä»¶ï¼Œéœ€è¦�å�•独下载 Xftp。</strong></p><p>今天给大家介ç»�的这个开æº�终端工具 Tabby,它集æˆ�了 SFTP 功能,界é�¢ä¹Ÿå¾ˆé…·ç‚«ã€‚</p><p><img src="/img/remote/1460000041173617" alt="图片" title="图片"></p><h2>简介</h2><p>Tabby(以å‰�称为Terminus)是一个高度å�¯é…�置的终端模拟器ã€�SSH 和串行客户端,适用äº� Windowsã€�macOS å’Œ Linux</p><h6>特点</h6><ul><li>集æˆ�çš„ SSH å’Œ Telnet 客户端和è¿�æ�¥ç®¡ç�†å™¨</li><li>集æˆ�串å�£ç»ˆç«¯</li><li>å�¯é…�置主题和é…�色方案</li><li>支æŒ�PowerShell(和 PS Core)ã€�WSLã€�Git-Bashã€�Cygwinã€�MSYS2ã€�Cmder å’Œ CMD</li><li>通过 Zmodem ä¸� SSH 会è¯�的直æ�¥è¿›è¡Œæ–‡ä»¶ä¼ è¾“ï¼ˆä¸Šä¼ /下载)</li><li>é��常的æµ�畅的界é�¢è¾“出</li><li>用äº� SSH 机密和é…�置的集æˆ�åŠ å¯†å®¹å™¨</li><li>SSHã€�SFTP å’Œ Telnet 客户端å�¯ç”¨ä½œWeb 应用程åº�</li></ul><h6>丰富的æ�’ä»¶</h6><p>æ�’件和主题å�¯ä»¥ç›´æ�¥ä»� Tabby 中的设置视图安装。</p><ul><li>clickable-links - 使终端中的路径和 URL å�¯ç‚¹å‡»</li><li>docker - è¿�æ�¥åˆ° Docker 容器</li><li>title-control - å…�许通过æ��ä¾›è¦�åˆ é™¤çš„å‰�ç¼€ã€�å��缀和/或字符串æ�¥ä¿®æ”¹ç»ˆç«¯é€‰é¡¹å�¡çš„æ ‡é¢˜</li><li>quick-cmds - 快速å�‘一个或所有终端选项å�¡å�‘é€�命令</li><li>save-output - 将终端输出记录到文件中</li><li>sync-config - å°†é…�ç½®å�Œæ­¥åˆ° Gist 或 Gitee</li><li>clippy - ä¸€ä¸ªä¸€ç›´è®©ä½ çƒ¦æ�¼çš„示例æ�’ä»¶</li><li>工作区管ç�†å™¨- å…�è®¸æ ¹æ�®ç»™å®šçš„é…�置创建自定义工作区é…�置文件</li><li>search-in-browser - 使用ä»� Tabby 选项å�¡ä¸­é€‰æ‹©çš„æ–‡æœ¬æ‰“开默认系统æµ�览器</li></ul><h2>安装</h2><p>Tabby 的安装é��常简å�•,完全是傻瓜å¼�æ“�作,下载完æˆ�å��è§£å�‹ï¼Œå�‹ç¼©åŒ…文件内容如下:</p><p><img src="/img/remote/1460000041173618" alt="图片" title="图片"></p><p>åƒ�å¹³æ—¶å®‰è£…å…¶å®ƒè½¯ä»¶ä¸€æ ·ï¼Œå�Œå‡»Tabby.exe å°±å�¯ä»¥ç›´æ�¥æ‰“开了</p><p><img src="/img/remote/1460000041173619" alt="图片" title="图片"></p><p>下载地å�€ï¼š<a href="https://link.segmentfault.com/?enc=Ijj6FUoNlpq7CacMTToYQA%3D%3D.aJbDOl5yb2Zwhe3OiwSSFETDi99S5Ep6GbySP9REu%2FEPBJlRJS4a30z%2F%2BmUIWL901ZEtperBTmqmiWLLUW6JMw%3D%3D" rel="nofollow">https://github.com/Eugeny/tab...</a></p><h2>使用æ“�作</h2><h6>SSH 远程è¿�æ�¥</h6><p>创建一个SSH çš„è¿�æ�¥é…�置,点击Settings</p><p><img src="/img/remote/1460000041173620" alt="图片" title="图片"></p><p>创建一个新的 profile</p><p><img src="/img/remote/1460000041173621" alt="图片" title="图片"></p><p>选择 SSH connections</p><p><img src="/img/remote/1460000041173622" alt="图片" title="图片"></p><p>填写相关的信æ�¯ï¼ˆè¿�æ�¥çš„å��ç§°ã€�主机地å�€ã€�登录用户ã€�密ç �)</p><p><img src="/img/remote/1460000041173623" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041173624" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041173625" alt="图片" title="图片"></p><p>æ�¥ä¸‹æ�¥å°±å�¯ä»¥ç›´æ�¥è¿�æ�¥åˆ°æˆ‘们需è¦�远程登录的æœ�务器了</p><p><img src="/img/remote/1460000041173626" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041173627" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041173628" alt="图片" title="图片"></p><h6>æ–‡ä»¶ä¼ è¾“</h6><h6>ä¸Šä¼ /下载文件</h6><p><img src="/img/remote/1460000041173629" alt="图片" title="图片"></p><p>点击Uploadå°±å�¯ä»¥é€‰æ‹©ä¸Šä¼ 了</p><p><img src="/img/remote/1460000041173630" alt="图片" title="图片"></p><p><img src="/img/remote/1460000041173631" alt="图片" title="图片"></p><p>å½“ç„¶ä½ ä¹Ÿå�¯ä»¥ç›´æ�¥ä½¿ç”¨æ‹–拽的方å¼�ä¸Šä¼ æ–‡ä»¶ï¼Œä¸‹è½½ä¹Ÿä¸€æ ·ï¼Œè¿˜æ˜¯é��常的方便æ“�作的。</p><h6>其它é…�ç½®</h6><p>字体大å°�调节,å�³è¾¹å�¯ä»¥å®�时预览</p><p><img src="/img/remote/1460000041173632" alt="图片" title="图片"></p><p>终端é…�色方案</p><p><img src="/img/remote/1460000041173633" alt="图片" title="图片"></p><p>å¿«æ�·é”®</p><p><img src="/img/remote/1460000041173634" alt="图片" title="图片"></p><p>æ�’ä»¶</p><p><img src="/img/remote/1460000041173635" alt="图片" title="图片"></p><p>更多相关的功能介ç»�ä¸�使用,感兴趣的读者å�¯ä»¥è‡ªè¡ŒæŸ¥é˜…官方文档。</p><p><img src="/img/bVbHCzg" alt="" title=""></p> Docker 大势已å�»ï¼ŒPodman å�³å°†å´›èµ·ï¼� https://segmentfault.com/a/1190000041173604 2021-12-24T13:33:19+08:00 2021-12-24T13:33:19+08:00 民工哥 https://segmentfault.com/u/jishuroad 13 <h2>Podman 简介</h2><h6>什么是Podman?</h6><p><img src="/img/remote/1460000041173606" alt="" title=""></p><p>Podman 是一个开æº�的容器è¿�行时项目,å�¯åœ¨å¤§å¤šæ•° Linux å¹³å�°ä¸Šä½¿ç”¨ã€‚Podman æ��ä¾›ä¸� Docker é��常相似的功能。正如å‰�é�¢æ��åˆ°çš„é‚£æ ·ï¼Œå®ƒä¸�需è¦�åœ¨ä½ çš„ç³»ç»Ÿä¸Šè¿�行任何守护进程,并且它也å�¯ä»¥åœ¨æ²¡æœ‰ root æ�ƒé™�的情况下è¿�行。</p><p>Podman å�¯ä»¥ç®¡ç�†å’Œè¿�行任何符å�ˆ OCI(Open Container Initiative)规范的容器和容器镜åƒ�。Podman æ��供了一个ä¸� Docker 兼容的命令行å‰�端æ�¥ç®¡ç�† Docker 镜åƒ�。</p><p>Podman 官网地å�€ï¼š<a href="https://link.segmentfault.com/?enc=N6oRkFAAkslcgoOmpczf2Q%3D%3D.BFIOxvbH3yUaN9jsxJZ3OROb4XfB0AZQTRPcsI%2FH3zA%3D" rel="nofollow">https://podman.io/</a></p><h6>Podmanå’ŒDocker的主è¦�区别是什么?</h6><ul><li>dockers在å®�ç�°CRI的时候,它需è¦�一个守护进程,其次需è¦�以rootè¿�è¡Œï¼Œå› æ­¤è¿™ä¹Ÿå¸¦æ�¥äº†å®‰å…¨éš�患。</li><li>podmanä¸�需è¦�守护程åº�,也ä¸�需è¦�root用户è¿�行,ä»�逻辑æ�¶æ�„上,比dockeræ›´åŠ å�ˆç�†ã€‚</li><li>在dockerçš„è¿�行体系中,需è¦�多个daemonæ‰�能调用到OCIçš„å®�ç�°RunC。</li><li>在容器管ç�†çš„链路中,Docker Engineçš„å®�ç�°å°±æ˜¯dockerd</li><li>daemon,它在linux中需è¦�以rootè¿�行,dockerd调用containerd,containerd调用containerd-shim,然å��æ‰�能调用runC。顾å��æ€�义shim起的作用也就是“å�«ç‰‡â€�,é�¿å…�父进程退出影å“�容器的è¿�è®­</li><li>podmanç›´æ�¥è°ƒç”¨OCI,runtime(runC),通过common作为容器进程的管ç�†å·¥å…·ï¼Œä½†ä¸�需è¦�dockerdè¿™ç§�以root身份è¿�行的守护进程。</li><li>在podman体系中,有个称之为common的守护进程,其è¿�行路径通常是/usr/libexec/podman/conmon,它是å�„个容器进程的父进程,æ¯�个容器å�„有一个,common的父则通常是1å�·è¿›ç¨‹ã€‚podman中的commonå…¶å®�相当äº�docker体系中的containerd-shim。</li></ul><p><img src="/img/remote/1460000041173607" alt="" title=""></p><p>图中所体ç�°çš„事情是,<strong>podmanä¸�需è¦�守护进程,而dorker需è¦�守护进程</strong>。在这个图的示æ„�中,dorckerçš„containerd-shimä¸�podmançš„common被归在Container一层。</p><h6>Podman的使用ä¸�docker有什么区别?</h6><p>podman的定ä½�也是ä¸�dockerå…¼å®¹ï¼Œå› æ­¤åœ¨ä½¿ç”¨ä¸Šé�¢å°½é‡�é� è¿‘docker。在使用方é�¢ï¼Œå�¯ä»¥åˆ†æˆ�两个方é�¢æ�¥è¯´ï¼Œä¸€æ˜¯ç³»ç»Ÿæ�„建者的角度,二是使用者的角度。</p><p>在系统æ�„建者方é�¢ï¼Œç”¨podman的默认软件,ä¸�docker的区别ä¸�大,å�ªæ˜¯åœ¨è¿›ç¨‹æ¨¡å�‹ã€�进程关系方é�¢æœ‰æ‰€åŒºåˆ«ã€‚如æ�œä¹ 惯了dockerå‡ ä¸ªå…³è�”进程的调试方法,在podman中则需è¦�适应。å�¯ä»¥é€šè¿‡pstreeå‘½ä»¤æŸ¥çœ‹è¿›ç¨‹çš„æ ‘çŠ¶ç»“æ�„。总体æ�¥çœ‹ï¼Œpodman比dockerè¦�简å�•。由äº�podman比docker少了一层daemonï¼Œå› æ­¤é‡�å�¯çš„æœºåˆ¶ä¹Ÿå°±ä¸�å�Œäº†ã€‚</p><p>在使用者方é�¢ï¼Œpodmanä¸�docker的命令基本兼容,都包括容器è¿�行时(run/start/kill/ps/inspect),本地镜åƒ�(images/rmi/build)ã€�镜åƒ�仓库(login/pull/pushï¼‰ç­‰å‡ ä¸ªæ–¹é�¢ã€‚å› æ­¤podman的命令行工具ä¸�docker类似,比如æ�„建镜åƒ�ã€�å�¯å�œå®¹å™¨ç­‰ã€‚甚至å�¯ä»¥é€šè¿‡<code>alias docker=podman</code>å�¯ä»¥è¿›è¡Œæ›¿æ�¢ã€‚å› æ­¤ï¼Œå�³ä¾¿ä½¿ç”¨äº†podman,ä»�ç„¶å�¯ä»¥ä½¿ç”¨docker.io作为镜åƒ�仓库,这也是兼容性最关键的部分。</p><h2>Podman 常用命令</h2><h6>容器</h6><pre><code>podman run 创建并å�¯åЍ容噍 podman start #å�¯åЍ容噍 podman ps #查看容器 podman stop #终止容器 podman restart #é‡�å�¯å®¹å™¨ podman attach #进入容器 podman exec #进入容器 podman export #导出容器 podman import #导入容器快照 podman rm #åˆ é™¤å®¹å™¨ podman logs #查看日志</code></pre><h6>镜åƒ�</h6><pre><code>podman search #检索镜åƒ� docke pull #è�·å�–镜åƒ� podman images #列出镜åƒ� podman image Is #列出镜åƒ� podman rmi #åˆ é™¤é•œåƒ� podman image rm #åˆ é™¤é•œåƒ� podman save #导出镜åƒ� podman load #导入镜åƒ� podmanfile #定制镜åƒ�(三个) podman build #æ�„建镜åƒ� podman run #è¿�行镜åƒ� podmanfile #常用指令(四个) COPY #å¤�制文件 ADD #高级å¤�制 CMD #容器å�¯åЍ命令 ENV #ç�¯å¢ƒå�˜é‡� EXPOSE #暴露端å�£</code></pre><h2>部署 Podman</h2><pre><code>//安装podman [root@localhost ~]# yum -y install podman //仓库é…�ç½® [root@localhost ~]# vim /etc/containers/registries.conf [registries.search] registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io'] //这个是查找,ä»�这三个地方查找,如æ�œå�ªç•™ä¸€ä¸ªï¼Œåˆ™å�ªåœ¨ä¸€ä¸ªæº�里查找 unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"] //这里也è¦�改为一个 [registries.insecure] registries = [10.0.0.1] //这里写那些http的仓库,比如harbor //é…�ç½®åŠ é€Ÿå™¨ [registries.search] registries = ['https://l9h8fu9j.mirror.aliyuncs.com','docker.io']</code></pre><h2>使用 Podman</h2><p>使用 Podman é��常的简å�•,Podman 的指令跟 Docker 大多数都是相å�Œçš„。下é�¢æˆ‘们æ�¥çœ‹å‡ 个常用的例å­�:</p><h6>è¿�行一个容器</h6><pre><code>[root@localhost ~]# podman run -d --name httpd docker.io/library/httpd Trying to pull docker.io/library/httpd... Getting image source signatures Copying blob e5ae68f74026 done Copying blob d3576f2b6317 done Copying blob bc36ee1127ec done Copying blob f1aa5f54b226 done Copying blob aa379c0cedc2 done Copying config ea28e1b82f done Writing manifest to image destination Storing signatures 0492e405b9ecb05e6e6be1fec0ac1a8b6ba3ff949df259b45146037b5f355035 //查看镜åƒ� [root@localhost ~]# podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/httpd latest ea28e1b82f31 11 days ago 148 MB</code></pre><h6>列出è¿�行的容器</h6><pre><code>[root@localhost ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0492e405b9ec docker.io/library/httpd:latest httpd-foreground About a minute ago Up About a minute ago httpd</code></pre><p><strong>注æ„�</strong>:如æ�œåœ¨pså‘½ä»¤ä¸­æ·»åŠ -a,Podman 将显示所有容器。</p><h6>检查正在è¿�行的容器</h6><p>您å�¯ä»¥â€œæ£€æŸ¥â€�正在è¿�行的容器的元数æ�®å’Œæœ‰å…³å…¶è‡ªèº«çš„详细信æ�¯ã€‚我们甚至å�¯ä»¥ä½¿ç”¨ inspect å­�命令查看分é…�给容器的 IP 地å�€ã€‚ç”±äº�å®¹å™¨ä»¥æ— æ ¹æ¨¡å¼�è¿�è¡Œï¼Œå› æ­¤æœªåˆ†é…� IP 地å�€ï¼Œå¹¶ä¸”è¯¥å€¼å°†åœ¨æ£€æŸ¥çš„è¾“å‡ºä¸­åˆ—ä¸ºâ€œæ— â€�。</p><pre><code>[root@localhost ~]# podman inspect -l | grep IPAddress\": "SecondaryIPAddresses": null, "IPAddress": "10.88.0.5", [root@localhost ~]# curl 10.88.0.5 &lt;html&gt;&lt;body&gt;&lt;h1&gt;It works!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;</code></pre><p><strong>注æ„�</strong>: -l 是最新容器的便利å�‚数。您还å�¯ä»¥ä½¿ç”¨å®¹å™¨çš„ ID 代替 -l。</p><h6>查看一个è¿�行中容器的日志</h6><pre><code>选项 --latest #最近的 [root@localhost ~]# podman logs --latest AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.5. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.5. Set the 'ServerName' directive globally to suppress this message [Mon Dec 13 15:17:53.690844 2021] [mpm_event:notice] [pid 1:tid 140665160166720] AH00489: Apache/2.4.51 (Unix) configured -- resuming normal operations [Mon Dec 13 15:17:53.690946 2021] [core:notice] [pid 1:tid 140665160166720] AH00094: Command line: 'httpd -D FOREGROUND' 10.88.0.1 - - [13/Dec/2021:15:19:48 +0000] "GET / HTTP/1.1" 200 45 10.88.0.1 - - [13/Dec/2021:15:20:47 +0000] "GET / HTTP/1.1" 200 45</code></pre><h6>查看一个è¿�行容器中的进程资æº�使用情况</h6><p>å�¯ä»¥ä½¿ç”¨top观察容器中的 nginx pid</p><p>语法:</p><pre><code> podman top &lt;container_id&gt; </code></pre><pre><code>[root@localhost ~]# podman top httpd USER PID PPID %CPU ELAPSED TTY TIME COMMAND root 1 0 0.000 15m38.599711321s ? 0s httpd -DFOREGROUND www-data 7 1 0.000 15m38.599783256s ? 0s httpd -DFOREGROUND www-data 8 1 0.000 15m38.599845342s ? 0s httpd -DFOREGROUND www-data 9 1 0.000 15m38.599880444s ? 0s httpd -DFOREGROUND </code></pre><h6>å�œæ­¢ä¸€ä¸ªè¿�行中的容器</h6><pre><code>[root@localhost ~]# podman stop --latest 2f3edf712621d3a41e03fa8c7f6a5cdba56fbbad43a7a59ede26cc88f31006c4 [root@localhost ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code></pre><h6>åˆ é™¤ä¸€ä¸ªå®¹å™¨</h6><pre><code>[root@localhost ~]# podman rm --latest 2f3edf712621d3a41e03fa8c7f6a5cdba56fbbad43a7a59ede26cc88f31006c4 [root@localhost ~]# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code></pre><p><strong>以上这些特性基本上都和 Docker ä¸€æ ·ï¼ŒPodman 除了兼容这些特性外,还支æŒ�了一些新的特性。</strong></p><h6>ä¸Šä¼ é•œåƒ�</h6><p>例如,如æ�œæˆ‘们想在 docker.io 上分享我们新建的 Nginx 容器镜åƒ�,这很容易。首先登录ç �头:</p><pre><code>[root@localhost nginx]# tree . ├── Dockerfile └── files └── nginx-1.20.1.tar.gz [root@localhost nginx]# cat Dockerfile FROM docker.io/library/centos ENV PATH /usr/local/nginx/sbin:$PATH ADD files/nginx-1.20.1.tar.gz /usr/src RUN useradd -r -M -s /sbin/nologin nginx &amp;&amp; \ yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make &amp;&amp; \ mkdir -p /var/log/nginx &amp;&amp; \ cd /usr/src/nginx-1.20.1 &amp;&amp; \ ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-debug \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log &amp;&amp; \ make &amp;&amp; make install CMD ["nginx","-g","daemon off"] [root@localhost nginx]# podman build -t nginx .</code></pre><pre><code>// 修改镜åƒ�å�� [root@localhost ~]# podman tag docker.io/library/nginx:latest docker.io/1314444/test:latest // ç™»å½•å¹¶ä¸Šä¼ é•œåƒ� [root@localhost ~]# podman login docker.io // 需è¦�告诉其è¦�登录到docker仓库 [root@localhost ~]# podman login docker.io Username: 1314444 #账户 Password: ******** #密ç � Login Succeeded! [root@localhost nginx]# podman push docker.io/1314444/test:latest //ä¸Šä¼ é•œåƒ� Getting image source signatures Copying blob 38c40d6c2c85 done Copying blob fee76a531659 done Copying blob c2adabaecedb done Copying config 7f3589c0b8 done Writing manifest to image destination Copying config 7f3589c0b8 done Writing manifest to image destination Storing signatures //请注æ„�,我们将四层æ�¨é€�到我们的注册表,ç�°åœ¨å�¯ä¾›å…¶ä»–人共享。快速æµ�览一下: [root@localhost ~]# podman inspect 1314444/test:nginx //输出: [ { "Id": "7f3589c0b8849a9e1ff52ceb0fcea2390e2731db9d1a7358c2f5fad216a48263", "Digest": "sha256:7822b5ba4c2eaabdd0ff3812277cfafa8a25527d1e234be028ed381a43ad5498", "RepoTags": [ "docker.io/1314444/test:nginx", ......</code></pre><p>总而言之,<strong>Podman 使查找ã€�è¿�行ã€�æ�„建和共享容器å�˜å¾—容易</strong>。</p><h6>é…�置别å��</h6><p>如æ�œä¹ 惯了使用 Docker 命令,å�¯ä»¥ç›´æ�¥ç»™ Podman é…�置一个别å��æ�¥å®�ç�°æ— ç¼�è½¬ç§»ã€‚ä½ å�ªéœ€è¦�在 .bashrc ä¸‹åŠ å…¥ä»¥ä¸‹è¡Œå†…å®¹å�³å�¯ï¼š</p><pre><code>[root@localhost ~]# echo "alias docker=podman" &gt;&gt; .bashrc source .bashrc [root@localhost ~]# alias alias cp='cp -i' alias docker='podman' .......</code></pre><h6>用户æ“�作</h6><p>在å…�许没有root特æ�ƒçš„用户è¿�行Podman之å‰�,管ç�†å‘˜å¿…须安装或æ�„建Podman并完æˆ�以下é…�置。</p><p>cgroup V2Linuxå†…æ ¸åŠŸèƒ½å…�许用户é™�制普通用户容器å�¯ä»¥ä½¿ç”¨çš„资æº�,如æ�œä½¿ç”¨cgroupV2å�¯ç”¨äº†è¿�行Podmançš„Linuxå�‘行版,则å�¯èƒ½éœ€è¦�更改默认的OCIè¿�行时。æŸ�些较旧的版本runcä¸�适用äº�cgroupV2,必须切æ�¢åˆ°å¤‡ç”¨OCIè¿�行时crun。</p><pre><code>[root@localhost ~]# yum -y install crun //centos8系统自带 [root@localhost ~]# vi /usr/share/containers/containers.conf 446 # Default OCI runtime 447 # 448 runtime = "crun" //å�–消注释并将runc改为crun [root@localhost ~]# podman run -d --name web -p 80:80 docker.io/library/nginx c8664d2e43c872e1e5219f82d41f63048ed3a5ed4fb6259c225a14d6c243677f [root@localhost ~]# podman inspect web | grep crun "OCIRuntime": "crun", "crun",</code></pre><h6>安装slirp4netnså’Œfuse-overlayfs</h6><p>在普通用户ç�¯å¢ƒä¸­ä½¿ç”¨Podman时,建议使用fuse-overlayfs而ä¸�是VFS文件系统,至少需è¦�版本0.7.6。ç�°åœ¨æ–°ç‰ˆæœ¬é»˜è®¤å°±æ˜¯äº†ã€‚</p><pre><code>[root@localhost ~]# yum -y install slirp4netns [root@localhost ~]# yum -y install fuse-overlayfs [root@localhost ~]# vi /etc/containers/storage.conf 77 mount_program = "/usr/bin/fuse-overlayfs" //å�–消注释</code></pre><h6>/etc/subuidå’Œ/etc/subgidé…�ç½®</h6><p>Podmanè¦�求è¿�行它的用户在<code>/etc/subuid</code>å’Œ<code>/etc/subgid</code>文件中列出一系列UID,shadow-utils或newuid包æ��供这些文件</p><pre><code>[root@localhost ~]# yum -y install shadow-utils</code></pre><p>å�¯ä»¥åœ¨/etc/subuidå’Œ/etc/subgid查看,æ¯�个用户的值必须唯一且没有任何é‡�å� 。</p><pre><code>[root@localhost ~]# useradd zz [root@localhost ~]# cat /etc/subuid zz:100000:65536 [root@localhost ~]# cat /etc/subgid zz:100000:65536 // å�¯åЍé��特æ�ƒping [root@localhost ~]# sysctl -w "net.ipv4.ping_group_range=0 200000" //大äº�100000这个就表示tomå�¯ä»¥æ“�作podman net.ipv4.ping_group_range = 0 200000</code></pre><p>è¿™ä¸ªæ–‡ä»¶çš„æ ¼å¼�是 USERNAME:UID:RANGE</p><ul><li>中/etc/passwd或输出中列出的用户å��getpwent。</li><li>为用户分é…�çš„åˆ�å§‹ UID。</li><li>为用户分é…�çš„ UID 范围的大å°�。</li></ul><p>该usermod程åº�å�¯ç”¨äº�为用户分é…� UID å’Œ GID,而ä¸�是直æ�¥æ›´æ–°æ–‡ä»¶ã€‚</p><pre><code>[root@localhost ~]# usermod --add-subuids 200000-201000 --add-subgids 200000-201000 hh grep hh /etc/subuid /etc/subgid /etc/subuid:hh:200000:1001 /etc/subgid:hh:200000:1001</code></pre><h6>用户é…�置文件</h6><p>三个主è¦�çš„é…�置文件是<code>container.confã€�storage.conf</code>å’Œ<code>registries.conf</code>。用户å�¯ä»¥æ ¹æ�®éœ€è¦�修改这些文件。</p><ul><li><p>container.conf</p><pre><code>// 用户é…�置文件 [root@localhost ~]# cat /usr/share/containers/containers.conf [root@localhost ~]# cat /etc/containers/containers.conf [root@localhost ~]# cat ~/.config/containers/containers.conf //优先级最高</code></pre><p>如æ�œå®ƒä»¬ä»¥è¯¥é¡ºåº�存在。æ¯�个文件都å�¯ä»¥è¦†ç›–特定字段的å‰�一个文件。</p></li><li><p>é…�ç½®storage.conf文件</p><pre><code>1./etc/containers/storage.conf 2.$HOME/.config/containers/storage.conf</code></pre><p>在普通用户中/etc/containers/storage.conf的一些字段将被忽略</p><pre><code>[root@localhost ~]# vi /etc/containers/storage.conf [storage] # Default Storage Driver, Must be set for proper operation. driver = "overlay" #此处改为overlay ....... mount_program = "/usr/bin/fuse-overlayfs" #å�–消注释 [root@localhost ~]# sysctl user.max_user_namespaces=15000 #如æ�œç‰ˆæœ¬ä¸º8以下,则需è¦�å�šä»¥ä¸‹æ“�作:</code></pre><p>在普通用户中这些字段默认</p><pre><code>graphroot="$HOME/.local/share/containers/storage" runroot="$XDG_RUNTIME_DIR/containers"</code></pre></li><li>registries.conf</li></ul><p>é…�置按此顺åº�读入,这些文件ä¸�是默认创建的,å�¯ä»¥ä»�/usr/share/containers或å¤�制文件/etc/containers并进行修改。</p><pre><code>1./etc/containers/registries.conf 2./etc/containers/registries.d/* 3.HOME/.config/containers/registries.conf</code></pre><h6>æ�ˆæ�ƒæ–‡ä»¶</h6><p>此文件里é�¢å†™äº†dockerè´¦å�·çš„密ç �ï¼Œä»¥åŠ å¯†æ–¹å¼�显示</p><pre><code>[root@localhost ~]# podman login Username: 1314444 Password: Login Succeeded! [root@localhost ~]# cat /run/user/0/containers/auth.json { "auths": { "registry.fedoraproject.org": { "auth": "MTMxNDQ0NDpIMjAxNy0xOA==" } } }</code></pre><p>æ™®é€šç”¨æˆ·æ˜¯æ— æ³•çœ‹è§�root用户的镜åƒ�çš„</p><pre><code>//root用户 [root@localhost ~]# podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/httpd latest ea28e1b82f31 11 days ago 146 MB //普通用户 [root@localhost ~]# su - zz [zz@localhost ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE</code></pre><h2>å�·</h2><ul><li>容器ä¸�root用户一起è¿�行,则root容器中的用户å®�际上就是主机上的用户。</li><li>UID GID是在/etc/subuidå’Œ/etc/subgidç­‰ä¸­ç”¨æˆ·æ˜ å°„ä¸­æŒ‡å®šçš„ç¬¬ä¸€ä¸ªUID GID。</li><li>如æ�œæ™®é€šç”¨æˆ·çš„身份ä»�ä¸»æœºç›®å½•æŒ‚è½½åˆ°å®¹å™¨ä¸­ï¼Œå¹¶åœ¨è¯¥ç›®å½•ä¸­ä»¥æ ¹ç”¨æˆ·èº«ä»½åˆ›å»ºæ–‡ä»¶ï¼Œåˆ™ä¼šçœ‹åˆ°å®ƒå®�é™…ä¸Šæ˜¯ä½ çš„ç”¨æˆ·åœ¨ä¸»æœºä¸Šæ‹¥æœ‰çš„ã€‚</li></ul><h6>使用å�·</h6><pre><code>[root@localhost ~]# su - zz [zz@localhost ~]$ pwd /home/zz [zz@localhost ~]$ mkdir /home/zz/data [zz@localhost ~]$ podman run -it -v "$(pwd)"/data:/data docker.io/library/busybox /bin/sh Trying to pull docker.io/library/busybox:latest... Getting image source signatures Copying blob 3cb635b06aa2 done Copying config ffe9d497c3 done Writing manifest to image destination Storing signatures / # ls bin data dev etc home proc root run sys tmp usr var / # cd data/ /data # ls /data # touch 123 /data # ls -l total 0 -rw-r--r-- 1 root root 0 Dec 13 00:17 123</code></pre><h6>在主机上查看</h6><pre><code>[zz@localhost ~]$ ll data/ 总用é‡� 0 -rw-r--r-- 1 zz zz 0 12月 13 00:17 123 //写入文件 [zz@localhost ~]$ echo "hell world" &gt;&gt; 123 [zz@localhost ~]$ cat 123 hell world</code></pre><h6>容器里查看</h6><pre><code>/data # cat 123 hell world //我们å�¯ä»¥å�‘ç�°åœ¨å®¹å™¨é‡Œé�¢çš„æ–‡ä»¶çš„å±�主和å±�组都å±�äº�root,那么如何æ‰�能让其å±�äº�tom用户呢?下é�¢å‘Šè¯‰ä½ 答案 /data # ls -l total 4 -rw-rw-r-- 1 root root 12 Dec 13 00:20 123 //å�ªè¦�在è¿�è¡Œå®¹å™¨çš„æ—¶å€™åŠ ä¸Šä¸€ä¸ª--userns=keep-idå�³å�¯ã€‚ [zz@localhost ~]$ podman run -it --name test -v "$(pwd)"/data:/data --userns=keep-id docker.io/library/busybox /bin/sh ~ $ cd data/ /data $ ls -l total 4 -rw-r--r-- 1 zz zz 11 Dec 13 00:21 123</code></pre><p>ä½¿ç”¨æ™®é€šç”¨æˆ·æ˜ å°„å®¹å™¨ç«¯å�£æ—¶ä¼šæŠ¥â€œ permission deniedâ€�的错误</p><pre><code>[zz@localhost ~]$ podman run -d -p 80:80 httpd Error: rootlessport cannot expose privileged port 80, you can add 'net.ipv4.ip_unprivileged_port_start=80' to /etc/sysctl.conf (currently 1024), or choose a larger port number (&gt;= 1024): listen tcp 0.0.0.0:80: bind: permission denied</code></pre><p>普通用户å�¯ä»¥æ˜ å°„&gt;= 1024的端å�£</p><pre><code>[zz@localhost ~]$ podman run -d -p 1024:80 httpd 58613a6bdc70d4d4f9f624583f795a62a610596d166f0873bdff8fb26aa15092 [zz@localhost ~]$ ss -anlt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 *:1024 *:* LISTEN 0 128 [::]:22 [::]:* </code></pre><p>é…�ç½®<code>echo ‘net.ipv4.ip_unprivileged_port_start=80’ &gt;&gt; /etc/sysctl.conf</code>å��å�¯ä»¥æ˜ 射大äº�ç­‰äº�80的端å�£</p><pre><code>[root@localhost ~]# echo 'net.ipv4.ip_unprivileged_port_start=80' &gt;&gt; /etc/sysctl.conf [root@localhost ~]# sysctl -p net.ipv4.ip_unprivileged_port_start = 80 [zz@localhost ~]$ podman run -d -p 80:80 httpd 1215455a0c300d78e7bf6afaefc9873f818c6b0f26affeee4e2bc17954e72d8e [zz@localhost ~]$ ss -anlt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 *:1024 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* </code></pre><p>链æ�¥ï¼š<a href="https://link.segmentfault.com/?enc=9hEdwVr7lZD648r5zUqNAg%3D%3D.YGfgwbiYhcf6Jy8399Dr9gqDsY7bEMF2y9oS463euDEzyXjpfhR9BwbC64saCHWoLQMxjSvM%2FnmwP0%2FwnxKFhw%3D%3D" rel="nofollow">https://blog.csdn.net/qq_4828...</a></p><p><img src="/img/bVbHCzg" alt="" title=""></p> CentOS å°†äº�年底终止ï¼� https://segmentfault.com/a/1190000041146065 2021-12-20T11:03:13+08:00 2021-12-20T11:03:13+08:00 民工哥 https://segmentfault.com/u/jishuroad 0 <p>一年å‰�Red Hat宣布将在<strong>今年底(2021年)结æ�Ÿæ��ä¾›å…�费的CentOS Linux</strong>(<a href="https://link.segmentfault.com/?enc=wbvNv3ZQOBMmeG0XS8NZAA%3D%3D.8pDzFOHFV0mvCHmI63eZY9gW1g7tCyRoBePDf5dUCfNrU8vbHCT2pEEruePC9YnDX88Mou4MTHeSUK5qk13b08lP4Y%2F%2FwumT%2FcVtJW1JRnNAsOylt8I%2BSsZpKeiTPEqlEDb8Sy02zw6H%2F8Rbfcfnf4mQQ2J7zuMISME3BLjq8KOYuJKDxh9n%2BTQPkR2mbTFgaTxzvW45%2F5W62VCacB1hOZtPb0gbTLZDDqUQzrYMyr%2BBeXctatrcAFsNm1riViO4gEN6Hy9%2FPFcpOiYb9FJW0H4lB0cBMdD%2FOeM9iG9tO4O1H7uCJn8%2B9nZnCwcxrfoC" rel="nofollow">CentOS 已死ï¼�"å…�费"的 RHEL 没了...</a>)。上周五Red Hatå†�度æ��醒,CentOS Linux 8将在今年12月31æ—¥æ�¥åˆ°å®ƒçš„生命周期终点(End of Life,EoL)。对äº�:<a href="https://link.segmentfault.com/?enc=yXeFr6YKiKV2aV%2FEgBCC9A%3D%3D.GrIfndvZCKE%2FpqA6RLQM3lBzUJ2U31AWC5EM6jlXUtpwLIMZcPge7EM6nfP%2Bc2MHXvklHPZCZ%2FC3ECPGsO0GBlx0uQy5W2fCwC03BQMmP2zBUT4Iufw8Qd%2B%2FYfhHQrivW1cXBU47gDg4wRlezK5d5yH7tUjDjxeonoiAhIyc%2FOFH9%2BjNiybaV1gABFOJizfK4ecHbLCV6QAVOk9dy0ExoDWMubxnqJ9fqhu5mpJttYtLkh%2B4sdfqdEg7WM%2B%2BvIVZLQzixk7%2FRopfZ1Lb1lkSj%2F2lnyXhUi9fw3UwHocqF5ddmq4uiNkN86%2Fs9HClPXmr" rel="nofollow">CentOS å�œæ­¢æœ�务ï¼�我们用哪个?Ubuntu or Debian</a>?</p><p><img src="/img/remote/1460000041146067" alt="图片" title="图片"></p><p>CentOS是Linuxå�‘行版之一,是Red Hatä¾�照开放æº�代ç �æ�¨å‡ºçš„Red Hat Enterprise Linuxæº�ç �编译而æˆ�。由äº�出自相å�Œæº�ç �ï¼Œå› æ­¤æœ‰äº›è¦�求高度稳定性的æœ�务器以CentOS替代商业版的Red Hat Enterprise Linux。<strong>å�»å¹´Red Hat宣布CentOS将转为适用DevOps人员开å�‘的平å�°</strong>,而é��稳定æœ�务器应用或VMçš„æ“�作系统,<strong>æ–°å¹³å�°ç§°ä¸ºCentOS Stream,也ä¸�会å†�有CentOS 9</strong>。</p><p>CentOSå�Ÿå®šä»Šå¹´ç¬¬2季度æ�¨å‡ºçš„CentOS Stream 9延至11月中æ�¨å‡ºã€‚用户å�¯ä»¥åœ¨CentOS网站下载IBM Powerã€�IBM Zã€�ARM54ã€�x86æ�¶æ�„组件。å�Œæ—¶CentOS Stream 8ä¸�å†�会自动å�‡çº§åˆ°æ–°ç‰ˆæœ¬ã€‚</p><p><strong>最å��一版CentOS 8å�ªä¼šæ›´æ–°åˆ°2021å¹´12月31æ—¥</strong>,å��而<strong>CentOS 7</strong>会更新到<strong>2024å¹´6月30æ—¥</strong>。对äº�CentOS 8用户,Red Hat还会在æ�¨å‡ºRHEL 8.5时,å�‘布RHEL rebuild版给CentOS用户,å�³çœŸæ­£æœ€å��一个CentOS版本,时间点也å�¯èƒ½è�½åœ¨EOLå��。</p><p>一如RHELå°�数点版本(point release)会附带数次的安全更新,CentOS Linux 8最å��一版也会有类似的更新,但是éš�ç�€å®£å¸ƒEoL以å�Šæ–°å¹´å�‡æœŸï¼Œ<strong>Red Hat支æŒ�å�ªä¼šå»¶åˆ°2022å¹´1月31日,之å��å°±ä¸�å†�å�‘布更新。</strong></p><p>1月底一到,或期间å�‘生CVSSé£�险值9以上的安全æ¼�æ´�,这个版本就会ä»�镜åƒ�网站上移除,并永久归档äº�vault.centos.org网站,å��者专门储存已ç»�EoL的产å“�。</p><p>CentOS拥有许多大å�‹ä¼�业å�Šç½‘站用户,包括脸书ã€�迪士尼ã€�GoDaddyã€�丰田汽车ã€�Verizon等,此外一些å�‚商则以CentOS作为其产å“�底层,包括Juniperã€�F5ã€�Fortinet等。</p><p>ZDNet建议,CentOS 8以外的选择包括AlmaLinuxã€�CloudLinux OSã€�Rocky Linux(<a href="https://link.segmentfault.com/?enc=L%2Bp4DVKQxkhynRF%2B%2FZ0WcQ%3D%3D.uC87WvVOxV1u7FJL2V7125EezP0f8vO%2FAWEy9uxTS8XiKzorvyI5xbbWahFytLVWuHWeZ8H1pIQkr%2FMeBn%2FHDvbphR3fR6B3sD29loaymlVSHsvaYQplJ5hLk4gDKZsSHCrDhjTWHC2kHOhpw6PMlblXH5SxhV60oKf4Fk6aYzhf8n70v%2Fi197mn%2BGZP6tTc5fMWxVas77YPBj5RunayUjz3e1u3OkxfJHyU1OWDxIxrNGnSF32uJ2V2UrRBzjsysnspWGOSDUr0AnsxGfnJDgum%2FspRR1SmIkpj3Ob8ypfvIUg4WKXfP2FRj%2BOp7uB3" rel="nofollow">CentOS ä¹‹çˆ¶åˆ›é€ çš„ Rocky Linux 8.3 å�‘布了ï¼�内附下载链æ�¥å�Šå®‰è£…教程</a>)å�ŠAmazon Linuxã€�HPE ClearOSã€�Oracle Linuxã€�Ubuntu,当然还有RHEL。</p><p>对äº�在ä¼�业中使用的我们而言,<strong>欢è¿�å¤§å®¶ç•™è¨€åˆ†äº«ï¼Œä½ ä»¬åœ¨CentOS终止之å��使用何ç§�系统呢???</strong></p><blockquote><em>å�‚考:ithome.com.tw/news/148329</em></blockquote><p><img src="/img/bVbHCzg" alt="" title=""></p>
📥 下载地址(文章结尾)
恢复一切数据