<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>SRE实战之运筹帷幄</title><link>https://www.sresz.cn/</link><description>大数据运维|云计算|攻防安全|AI|互联网时代守护先锋</description><item><title>MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)</title><link>https://www.sresz.cn/mysql/20.html</link><description>&lt;p&gt;简介&lt;br/&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;MHA（Master High Availability）目前在MySQL高可用方面是一个相对成熟的解决方案，它由日本DeNA公司youshimaton（现就职于Facebook公司）开发，是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;在MySQL故障切换过程中，MHA能做到在0~30秒之内自动完成数据库的故障切换操作，并且在进行故障切换的过程中，MHA能在最大程度上保证数据的一致性，以达到真正意义上的高可用。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;该软件由两部分组成：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;MHA Manager（管理节点）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MHA Node（数据节点）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群，也可以部署在一台slave节点上。&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;MHA Node运行在每台MySQL服务器上，MHA Manager会定时探测集群中的master节点，当master出现故障时，它可以自动将最新数据的slave提升为新的master，然后将所有其他的slave重新指向新的master。&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;整个故障转移过程对应用程序完全透明。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;可以将MHA工作原理总结为如下&lt;/strong&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;从宕机崩溃的master保存二进制日志事件（binlog events）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;识别含有最新更新的slave&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;应用差异的中继日志（relay log）到其他的slave；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;应用从master保存的二进制日志事件（binlog events）；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;提升一个slave为新的master；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;使其他的slave连接新的master进行复制；&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;hr/&gt;&lt;p&gt;&lt;strong&gt;Manager工具包&lt;/strong&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;组件名称&lt;/th&gt;&lt;th&gt;组件说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;masterha_check_ssh&lt;/td&gt;&lt;td&gt;检查MHA的SSH配置状况&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;masterha_check_repl&lt;/td&gt;&lt;td&gt;检查MySQL复制状况&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;masterha_manger&lt;/td&gt;&lt;td&gt;启动MHA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;masterha_check_status&lt;/td&gt;&lt;td&gt;检测当前MHA运行状态&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;masterha_master_monitor&lt;/td&gt;&lt;td&gt;检测master是否宕机&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;masterha_master_switch&lt;/td&gt;&lt;td&gt;控制故障转移（自动或者手动）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;masterha_conf_host&lt;/td&gt;&lt;td&gt;添加或删除配置的server信息&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Node工具包&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;这些工具通常由MHA Manager的脚本触发，无需人为操作&lt;/p&gt;&lt;/blockquote&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;组件名称&lt;/th&gt;&lt;th&gt;组件说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;save_binary_logs&lt;/td&gt;&lt;td&gt;保存和复制master的二进制日志&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;apply_diff_relay_logs&lt;/td&gt;&lt;td&gt;识别差异的中继日志事件并将其差异的事件应用于其他的slave&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;filter_mysqlbinlog&lt;/td&gt;&lt;td&gt;去除不必要的ROLLBACK事件（MHA已不再使用这个工具）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;purge_relay_logs&lt;/td&gt;&lt;td&gt;清除中继日志（不会阻塞SQL线程）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;为了尽可能的减少主库硬件损坏宕机造成的数据丢失，因此在配置MHA的同时建议配置成MySQL 5.5的半同步复制。关于半同步复制原理各位自己进行查阅。（不是必须）&lt;/p&gt;&lt;hr/&gt;&lt;h1 id=&quot;环境准备&quot;&gt;环境准备&lt;/h1&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;操作系统&lt;/th&gt;&lt;th&gt;内核版本&lt;/th&gt;&lt;th&gt;主机名&lt;/th&gt;&lt;th&gt;MySQL 版本&lt;/th&gt;&lt;th&gt;ip地址&lt;/th&gt;&lt;th&gt;角色&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;centos 7.5&lt;/td&gt;&lt;td&gt;5.1.3-1.el7&lt;/td&gt;&lt;td&gt;manager.mha&lt;/td&gt;&lt;td&gt;MySQL 5.7.18&lt;/td&gt;&lt;td&gt;10.0.20.200&lt;/td&gt;&lt;td&gt;Manager&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;centos 7.5&lt;/td&gt;&lt;td&gt;5.1.3-1.el7&lt;/td&gt;&lt;td&gt;node01.mha&lt;/td&gt;&lt;td&gt;MySQL 5.7.18&lt;/td&gt;&lt;td&gt;10.0.20.201&lt;/td&gt;&lt;td&gt;node01 mysql-master&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;centos 7.5&lt;/td&gt;&lt;td&gt;5.1.3-1.el7&lt;/td&gt;&lt;td&gt;node02.mha&lt;/td&gt;&lt;td&gt;MySQL 5.7.18&lt;/td&gt;&lt;td&gt;10.0.20.202&lt;/td&gt;&lt;td&gt;node02 mysql-slave&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;centos 7.5&lt;/td&gt;&lt;td&gt;5.1.3-1.el7&lt;/td&gt;&lt;td&gt;node03.mha&lt;/td&gt;&lt;td&gt;MySQL 5.7.18&lt;/td&gt;&lt;td&gt;10.0.20.203&lt;/td&gt;&lt;td&gt;node03 mysql-slave&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;centos 7.5&lt;/td&gt;&lt;td&gt;5.1.3-1.el7&lt;/td&gt;&lt;td&gt;node04.mha&lt;/td&gt;&lt;td&gt;MySQL 5.7.18&lt;/td&gt;&lt;td&gt;10.0.20.204&lt;/td&gt;&lt;td&gt;node04 mysql-slave&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;MHA Manager 版本&lt;/th&gt;&lt;th&gt;GitHub下载地址&lt;/th&gt;&lt;th&gt;百度网盘下载地址&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;v0.58&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz&quot;&gt;GitHub下载地址&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://pan.baidu.com/s/1SDKQszftnpvWlKpLOdgGaw&quot;&gt;百度网盘地址&lt;/a&gt; 提取码：lzb0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;MHA Node 版本&lt;/th&gt;&lt;th&gt;GitHub下载地址&lt;/th&gt;&lt;th&gt;百度网盘下载地址&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;v0.58&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz&quot;&gt;GitHub下载地址&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://pan.baidu.com/s/14wq4NHr45uIuCOUSG8J7jQ&quot;&gt;百度网盘地址&lt;/a&gt; 提取码：4e6h&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&quot;秘钥互信&quot;&gt;秘钥互信&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;配置所有机器相互之间&lt;code&gt;root&lt;/code&gt;用户秘钥互信&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;在所有机器上执行:&lt;/strong&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;生成密钥对&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;p&gt;ssh-keygen -t dsa -f ~/.ssh/id_rsa -P &amp;quot;&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;ol start=&quot;2&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;推送公钥&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre&gt;ssh-copy-id&amp;nbsp;-i&amp;nbsp;/root/.ssh/id_rsa.pub&amp;nbsp;root@10.0.20.200
ssh-copy-id&amp;nbsp;-i&amp;nbsp;/root/.ssh/id_rsa.pub&amp;nbsp;root@10.0.20.201
ssh-copy-id&amp;nbsp;-i&amp;nbsp;/root/.ssh/id_rsa.pub&amp;nbsp;root@10.0.20.202
ssh-copy-id&amp;nbsp;-i&amp;nbsp;/root/.ssh/id_rsa.pub&amp;nbsp;root@10.0.20.203
ssh-copy-id&amp;nbsp;-i&amp;nbsp;/root/.ssh/id_rsa.pub&amp;nbsp;root@10.0.20.204&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;此时所有的机器之间以完成互信，无需密码等即可&lt;code&gt;ssh&lt;/code&gt;登陆&lt;/strong&gt;&lt;/p&gt;&lt;h2 id=&quot;安装基础依赖包&quot;&gt;安装基础依赖包&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;在所有机器上执行:&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;perl-ExtUtils-CBuilder&amp;nbsp;perl-ExtUtils-MakeMaker&amp;nbsp;perl-CPAN&amp;nbsp;perl-DBD-MySQL&amp;nbsp;perl-Config-Tiny&amp;nbsp;perl-Log-Dispatch&amp;nbsp;perl-Parallel-ForkManager&amp;nbsp;perl-Time-HiRes&lt;/pre&gt;&lt;h1 id=&quot;安装mha组件&quot;&gt;安装MHA组件&lt;/h1&gt;&lt;h2 id=&quot;安装-mha-node组件&quot;&gt;安装 MHA Node组件&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;在所有节点上执行&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node01&amp;nbsp;~]#&amp;nbsp;cd&amp;nbsp;/opt/soft
[root@node01&amp;nbsp;soft]#&amp;nbsp;ll
total&amp;nbsp;639152
-rw-r--r--&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;56220&amp;nbsp;Jun&amp;nbsp;12&amp;nbsp;17:59&amp;nbsp;mha4mysql-node-0.58.tar.gz
-rw-r--r--&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;654430368&amp;nbsp;Jun&amp;nbsp;11&amp;nbsp;11:21&amp;nbsp;mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;解压安装&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;具体命令执行输出就不复制出来了&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@node01&amp;nbsp;soft]#&amp;nbsp;tar&amp;nbsp;xf&amp;nbsp;mha4mysql-node-0.58.tar.gz
[root@node01&amp;nbsp;soft]#&amp;nbsp;cd&amp;nbsp;mha4mysql-node-0.58
[root@node01&amp;nbsp;mha4mysql-node-0.58]#&amp;nbsp;perl&amp;nbsp;Makefile.PL
[root@node01&amp;nbsp;mha4mysql-node-0.58]#&amp;nbsp;make&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;make&amp;nbsp;install&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Node安装完成后会得到四个工具&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node01&amp;nbsp;mha4mysql-node-0.58]#&amp;nbsp;ll&amp;nbsp;/usr/local/bin/
total&amp;nbsp;48
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;17639&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:00&amp;nbsp;apply_diff_relay_logs
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;4807&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:00&amp;nbsp;filter_mysqlbinlog
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;8337&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:00&amp;nbsp;purge_relay_logs
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;7525&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:00&amp;nbsp;save_binary_logs&lt;/pre&gt;&lt;h2 id=&quot;安装-mha-manager-组件&quot;&gt;安装 MHA Manager 组件&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;在 Manager 节点执行安装&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;不用在Node节点上安装&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@manager&amp;nbsp;soft]#&amp;nbsp;tar&amp;nbsp;xf&amp;nbsp;mha4mysql-manager-0.58.tar.gz&amp;nbsp;
[root@manager&amp;nbsp;soft]#&amp;nbsp;cd&amp;nbsp;mha4mysql-manager-0.58
[root@manager&amp;nbsp;mha4mysql-manager-0.58]#&amp;nbsp;ls
AUTHORS&amp;nbsp;&amp;nbsp;bin&amp;nbsp;&amp;nbsp;COPYING&amp;nbsp;&amp;nbsp;debian&amp;nbsp;&amp;nbsp;inc&amp;nbsp;&amp;nbsp;lib&amp;nbsp;&amp;nbsp;Makefile.PL&amp;nbsp;&amp;nbsp;MANIFEST&amp;nbsp;&amp;nbsp;META.yml&amp;nbsp;&amp;nbsp;README&amp;nbsp;&amp;nbsp;rpm&amp;nbsp;&amp;nbsp;samples&amp;nbsp;&amp;nbsp;t&amp;nbsp;&amp;nbsp;tests
[root@manager&amp;nbsp;mha4mysql-manager-0.58]#&amp;nbsp;perl&amp;nbsp;Makefile.PL
[root@manager&amp;nbsp;mha4mysql-manager-0.58]#&amp;nbsp;make&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;make&amp;nbsp;install&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;查看 Manager 工具&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha4mysql-manager-0.58]#&amp;nbsp;ll&amp;nbsp;/usr/local/bin/
total&amp;nbsp;88
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;17639&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:10&amp;nbsp;apply_diff_relay_logs
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;4807&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:10&amp;nbsp;filter_mysqlbinlog
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;1995&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_check_repl
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;1779&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_check_ssh
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;1865&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_check_status
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;3201&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_conf_host
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;2517&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_manager
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;2165&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_master_monitor
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;2373&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_master_switch
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;5172&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_secondary_check
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;1739&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:13&amp;nbsp;masterha_stop
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;8337&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:10&amp;nbsp;purge_relay_logs
-r-xr-xr-x&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;7525&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;15:10&amp;nbsp;save_binary_logs&lt;/pre&gt;&lt;h1 id=&quot;建立-mysql-一主三从&quot;&gt;建立 MySQL 一主三从&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;本文章主要实现是&lt;code&gt;MHA&lt;/code&gt;集群，&lt;code&gt;MySQL&lt;/code&gt;集群直接贴命令和&lt;code&gt;my.cnf&lt;/code&gt;配置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在 四台 Node 节点上，实现，node01 为 master，剩下三个 node 为 slave 。&lt;/p&gt;&lt;pre&gt;[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;rpm&amp;nbsp;-qa&amp;nbsp;|grep&amp;nbsp;mariadb&amp;nbsp;|&amp;nbsp;xargs&amp;nbsp;rpm&amp;nbsp;-e&amp;nbsp;--nodeps
[root@node01&amp;nbsp;soft]#&amp;nbsp;useradd&amp;nbsp;-s&amp;nbsp;/sbin/nologin&amp;nbsp;-M&amp;nbsp;mysql
[root@node01&amp;nbsp;soft]#&amp;nbsp;tar&amp;nbsp;xf&amp;nbsp;mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
[root@node01&amp;nbsp;soft]#&amp;nbsp;mv&amp;nbsp;mysql-5.7.18-linux-glibc2.5-x86_64&amp;nbsp;mysql-5.7
[root@node01&amp;nbsp;soft]#&amp;nbsp;mv&amp;nbsp;mysql-5.7&amp;nbsp;/usr/local/
[root@node01&amp;nbsp;soft]#&amp;nbsp;ln&amp;nbsp;-s&amp;nbsp;/usr/local/mysql-5.7&amp;nbsp;/usr/local/mysql
[root@node01&amp;nbsp;soft]#&amp;nbsp;cd&amp;nbsp;/usr/local/mysql-5.7
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;echo&amp;nbsp;&amp;#39;export&amp;nbsp;PATH=$PATH:/usr/local/mysql-5.7/bin&amp;#39;&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;/etc/profile
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;source&amp;nbsp;/etc/profile
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;mysql&amp;nbsp;-V
mysql&amp;nbsp;&amp;nbsp;Ver&amp;nbsp;14.14&amp;nbsp;Distrib&amp;nbsp;5.7.18,&amp;nbsp;for&amp;nbsp;linux-glibc2.5&amp;nbsp;(x86_64)&amp;nbsp;using&amp;nbsp;&amp;nbsp;EditLine&amp;nbsp;wrapper
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;cp&amp;nbsp;support-files/mysql.server&amp;nbsp;/etc/init.d/mysqld
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;sed&amp;nbsp;-i&amp;nbsp;&amp;#39;s@/etc/my.cnf@/usr/local/mysql-5.7/my.cnf@g&amp;#39;&amp;nbsp;/etc/init.d/mysqld
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;sed&amp;nbsp;-i&amp;nbsp;&amp;#39;s@/usr/local/mysql/data@/opt/mysql_data@g&amp;#39;&amp;nbsp;/etc/init.d/mysqld
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;chkconfig&amp;nbsp;mysqld&amp;nbsp;on
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;mkdir&amp;nbsp;/opt/mysql_data
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;chown&amp;nbsp;-R&amp;nbsp;mysql.mysql&amp;nbsp;/usr/local/mysql-5.7
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;chown&amp;nbsp;-R&amp;nbsp;mysql.mysql&amp;nbsp;/opt/mysql_data
[root@node01&amp;nbsp;mysql-5.7]#ln&amp;nbsp;-s&amp;nbsp;/usr/local/mysql/bin/mysqlbinlog&amp;nbsp;/usr/local/bin/mysqlbinlog
[root@node01&amp;nbsp;mysql-5.7]#ln&amp;nbsp;-s&amp;nbsp;/usr/local/mysql/bin/mysql&amp;nbsp;/usr/local/bin/mysql&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;my.cnf&lt;/code&gt; 配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt; 需要把&lt;code&gt;my.cnf&lt;/code&gt; 中的&lt;code&gt;server-id&lt;/code&gt;的的值四台node不能重复，否则主从会建立失败。&lt;/p&gt;&lt;pre&gt;[root@node04&amp;nbsp;mysql-5.7]#&amp;nbsp;cat&amp;nbsp;my.cnf&amp;nbsp;
[client]
socket&amp;nbsp;=&amp;nbsp;/tmp/mysql.sock
port=3306

[mysql]
default-character-set=utf8
socket&amp;nbsp;=&amp;nbsp;/tmp/mysql.sock

[mysqld]
socket&amp;nbsp;=&amp;nbsp;/tmp/mysql.sock
character-set-server=utf8
basedir=/usr/local/mysql-5.7
datadir=/opt/mysql_data
port=3306
pid-file=/opt/mysql_data/mysqld.pid

#&amp;nbsp;四台node不可重复
server-id=204

skip-name-resolve

default-storage-engine=INNODB
explicit_defaults_for_timestamp&amp;nbsp;=&amp;nbsp;true

gtid_mode&amp;nbsp;=&amp;nbsp;on	
enforce_gtid_consistency&amp;nbsp;=&amp;nbsp;1
log_slave_updates&amp;nbsp;=&amp;nbsp;1

plugin_load&amp;nbsp;=&amp;nbsp;&amp;quot;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so&amp;quot;
loose_rpl_semi_sync_master_enabled&amp;nbsp;=&amp;nbsp;1
loose_rpl_semi_sync_slave_enabled&amp;nbsp;=&amp;nbsp;1
loose_rpl_semi_sync_master_timeout&amp;nbsp;=&amp;nbsp;5000


relay-log&amp;nbsp;=&amp;nbsp;mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

max_connections=2000
query_cache_size=0
table_open_cache=2000
tmp_table_size=246M
thread_cache_size=300
thread_stack&amp;nbsp;=&amp;nbsp;192k
key_buffer_size=512M
read_buffer_size=4M
read_rnd_buffer_size=32M


innodb_data_home_dir&amp;nbsp;=&amp;nbsp;/opt/mysql_data
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=16M

#&amp;nbsp;此选项修改为实际运行mysql机器内存的%60&amp;nbsp;-&amp;nbsp;%80
innodb_buffer_pool_size=13G

innodb_log_file_size=128M
innodb_thread_concurrency=128
innodb_autoextend_increment=1000
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0

back_log&amp;nbsp;=&amp;nbsp;80
flush_time&amp;nbsp;=&amp;nbsp;0
join_buffer_size&amp;nbsp;=&amp;nbsp;128M
max_allowed_packet&amp;nbsp;=&amp;nbsp;1024M
max_connect_errors&amp;nbsp;=&amp;nbsp;2000
open_files_limit&amp;nbsp;=&amp;nbsp;4161
query_cache_type&amp;nbsp;=&amp;nbsp;0
sort_buffer_size&amp;nbsp;=&amp;nbsp;32M
table_definition_cache&amp;nbsp;=&amp;nbsp;1400
binlog_row_event_max_size&amp;nbsp;=&amp;nbsp;8K
sync_master_info&amp;nbsp;=&amp;nbsp;10000
sync_relay_log&amp;nbsp;=&amp;nbsp;10000
sync_relay_log_info&amp;nbsp;=&amp;nbsp;10000
bulk_insert_buffer_size&amp;nbsp;=&amp;nbsp;64M
interactive_timeout&amp;nbsp;=&amp;nbsp;120
wait_timeout&amp;nbsp;=&amp;nbsp;120
log-bin-trust-function-creators=1
sql_mode&amp;nbsp;=&amp;nbsp;NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES&amp;nbsp;

[mysqld_safe]
log-error&amp;nbsp;=&amp;nbsp;/opt/mysql_data/error.log
pid-file&amp;nbsp;=&amp;nbsp;/opt/mysql_data/mysqld.pid&lt;/pre&gt;&lt;h2 id=&quot;初始化-mysql&quot;&gt;初始化 MySQL&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;node01&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;mysqld&amp;nbsp;--initialize&amp;nbsp;&amp;nbsp;--user=mysql&amp;nbsp;--basedir=/usr/local/mysql-5.7&amp;nbsp;--datadir=/opt/mysql_data
2019-06-13T07:59:00.947482Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;TIMESTAMP&amp;nbsp;with&amp;nbsp;implicit&amp;nbsp;DEFAULT&amp;nbsp;value&amp;nbsp;is&amp;nbsp;deprecated.&amp;nbsp;Please&amp;nbsp;use&amp;nbsp;--explicit_defaults_for_timestamp&amp;nbsp;server&amp;nbsp;option&amp;nbsp;(see&amp;nbsp;documentation&amp;nbsp;for&amp;nbsp;more&amp;nbsp;details).
2019-06-13T07:59:01.056859Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;New&amp;nbsp;log&amp;nbsp;files&amp;nbsp;created,&amp;nbsp;LSN=45790
2019-06-13T07:59:01.076218Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;Creating&amp;nbsp;foreign&amp;nbsp;key&amp;nbsp;constraint&amp;nbsp;system&amp;nbsp;tables.
2019-06-13T07:59:01.129463Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;No&amp;nbsp;existing&amp;nbsp;UUID&amp;nbsp;has&amp;nbsp;been&amp;nbsp;found,&amp;nbsp;so&amp;nbsp;we&amp;nbsp;assume&amp;nbsp;that&amp;nbsp;this&amp;nbsp;is&amp;nbsp;the&amp;nbsp;first&amp;nbsp;time&amp;nbsp;that&amp;nbsp;this&amp;nbsp;server&amp;nbsp;has&amp;nbsp;been&amp;nbsp;started.&amp;nbsp;Generating&amp;nbsp;a&amp;nbsp;new&amp;nbsp;UUID:&amp;nbsp;1ae29152-8db1-11e9-9d54-005056990727.
2019-06-13T07:59:01.129873Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;Gtid&amp;nbsp;table&amp;nbsp;is&amp;nbsp;not&amp;nbsp;ready&amp;nbsp;to&amp;nbsp;be&amp;nbsp;used.&amp;nbsp;Table&amp;nbsp;&amp;#39;mysql.gtid_executed&amp;#39;&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;opened.
2019-06-13T07:59:01.130247Z&amp;nbsp;1&amp;nbsp;[Note]&amp;nbsp;A&amp;nbsp;temporary&amp;nbsp;password&amp;nbsp;is&amp;nbsp;generated&amp;nbsp;for&amp;nbsp;root@localhost:&amp;nbsp;1qGoEiI7ga#U&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node02&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node02&amp;nbsp;mysql-5.7]#&amp;nbsp;mysqld&amp;nbsp;--initialize&amp;nbsp;&amp;nbsp;--user=mysql&amp;nbsp;--basedir=/usr/local/mysql-5.7&amp;nbsp;--datadir=/opt/mysql_data
2019-06-13T07:59:00.952176Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;TIMESTAMP&amp;nbsp;with&amp;nbsp;implicit&amp;nbsp;DEFAULT&amp;nbsp;value&amp;nbsp;is&amp;nbsp;deprecated.&amp;nbsp;Please&amp;nbsp;use&amp;nbsp;--explicit_defaults_for_timestamp&amp;nbsp;server&amp;nbsp;option&amp;nbsp;(see&amp;nbsp;documentation&amp;nbsp;for&amp;nbsp;more&amp;nbsp;details).
2019-06-13T07:59:01.092736Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;New&amp;nbsp;log&amp;nbsp;files&amp;nbsp;created,&amp;nbsp;LSN=45790
2019-06-13T07:59:01.116696Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;Creating&amp;nbsp;foreign&amp;nbsp;key&amp;nbsp;constraint&amp;nbsp;system&amp;nbsp;tables.
2019-06-13T07:59:01.171324Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;No&amp;nbsp;existing&amp;nbsp;UUID&amp;nbsp;has&amp;nbsp;been&amp;nbsp;found,&amp;nbsp;so&amp;nbsp;we&amp;nbsp;assume&amp;nbsp;that&amp;nbsp;this&amp;nbsp;is&amp;nbsp;the&amp;nbsp;first&amp;nbsp;time&amp;nbsp;that&amp;nbsp;this&amp;nbsp;server&amp;nbsp;has&amp;nbsp;been&amp;nbsp;started.&amp;nbsp;Generating&amp;nbsp;a&amp;nbsp;new&amp;nbsp;UUID:&amp;nbsp;1ae8f47b-8db1-11e9-b8bb-0050569972c0.
2019-06-13T07:59:01.171711Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;Gtid&amp;nbsp;table&amp;nbsp;is&amp;nbsp;not&amp;nbsp;ready&amp;nbsp;to&amp;nbsp;be&amp;nbsp;used.&amp;nbsp;Table&amp;nbsp;&amp;#39;mysql.gtid_executed&amp;#39;&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;opened.
2019-06-13T07:59:01.172126Z&amp;nbsp;1&amp;nbsp;[Note]&amp;nbsp;A&amp;nbsp;temporary&amp;nbsp;password&amp;nbsp;is&amp;nbsp;generated&amp;nbsp;for&amp;nbsp;root@localhost:&amp;nbsp;qTwtKAOue7:o&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node03&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node03&amp;nbsp;mysql-5.7]#&amp;nbsp;mysqld&amp;nbsp;--initialize&amp;nbsp;&amp;nbsp;--user=mysql&amp;nbsp;--basedir=/usr/local/mysql-5.7&amp;nbsp;--datadir=/opt/mysql_data
2019-06-13T07:59:00.949924Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;TIMESTAMP&amp;nbsp;with&amp;nbsp;implicit&amp;nbsp;DEFAULT&amp;nbsp;value&amp;nbsp;is&amp;nbsp;deprecated.&amp;nbsp;Please&amp;nbsp;use&amp;nbsp;--explicit_defaults_for_timestamp&amp;nbsp;server&amp;nbsp;option&amp;nbsp;(see&amp;nbsp;documentation&amp;nbsp;for&amp;nbsp;more&amp;nbsp;details).
2019-06-13T07:59:01.090890Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;New&amp;nbsp;log&amp;nbsp;files&amp;nbsp;created,&amp;nbsp;LSN=45790
2019-06-13T07:59:01.116166Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;Creating&amp;nbsp;foreign&amp;nbsp;key&amp;nbsp;constraint&amp;nbsp;system&amp;nbsp;tables.
2019-06-13T07:59:01.171335Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;No&amp;nbsp;existing&amp;nbsp;UUID&amp;nbsp;has&amp;nbsp;been&amp;nbsp;found,&amp;nbsp;so&amp;nbsp;we&amp;nbsp;assume&amp;nbsp;that&amp;nbsp;this&amp;nbsp;is&amp;nbsp;the&amp;nbsp;first&amp;nbsp;time&amp;nbsp;that&amp;nbsp;this&amp;nbsp;server&amp;nbsp;has&amp;nbsp;been&amp;nbsp;started.&amp;nbsp;Generating&amp;nbsp;a&amp;nbsp;new&amp;nbsp;UUID:&amp;nbsp;1ae8f4ef-8db1-11e9-b6ae-0050569975f7.
2019-06-13T07:59:01.171753Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;Gtid&amp;nbsp;table&amp;nbsp;is&amp;nbsp;not&amp;nbsp;ready&amp;nbsp;to&amp;nbsp;be&amp;nbsp;used.&amp;nbsp;Table&amp;nbsp;&amp;#39;mysql.gtid_executed&amp;#39;&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;opened.
2019-06-13T07:59:01.172159Z&amp;nbsp;1&amp;nbsp;[Note]&amp;nbsp;A&amp;nbsp;temporary&amp;nbsp;password&amp;nbsp;is&amp;nbsp;generated&amp;nbsp;for&amp;nbsp;root@localhost:&amp;nbsp;XIu,h#*HQ5&amp;amp;M&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node04&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;2019-06-13T07:59:00.955598Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;TIMESTAMP&amp;nbsp;with&amp;nbsp;implicit&amp;nbsp;DEFAULT&amp;nbsp;value&amp;nbsp;is&amp;nbsp;deprecated.&amp;nbsp;Please&amp;nbsp;use&amp;nbsp;--explicit_defaults_for_timestamp&amp;nbsp;server&amp;nbsp;option&amp;nbsp;(see&amp;nbsp;documentation&amp;nbsp;for&amp;nbsp;more&amp;nbsp;details).
2019-06-13T07:59:01.090420Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;New&amp;nbsp;log&amp;nbsp;files&amp;nbsp;created,&amp;nbsp;LSN=45790
2019-06-13T07:59:01.113972Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;InnoDB:&amp;nbsp;Creating&amp;nbsp;foreign&amp;nbsp;key&amp;nbsp;constraint&amp;nbsp;system&amp;nbsp;tables.
2019-06-13T07:59:01.166754Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;No&amp;nbsp;existing&amp;nbsp;UUID&amp;nbsp;has&amp;nbsp;been&amp;nbsp;found,&amp;nbsp;so&amp;nbsp;we&amp;nbsp;assume&amp;nbsp;that&amp;nbsp;this&amp;nbsp;is&amp;nbsp;the&amp;nbsp;first&amp;nbsp;time&amp;nbsp;that&amp;nbsp;this&amp;nbsp;server&amp;nbsp;has&amp;nbsp;been&amp;nbsp;started.&amp;nbsp;Generating&amp;nbsp;a&amp;nbsp;new&amp;nbsp;UUID:&amp;nbsp;1ae84210-8db1-11e9-b6fe-005056992c6b.
2019-06-13T07:59:01.167145Z&amp;nbsp;0&amp;nbsp;[Warning]&amp;nbsp;Gtid&amp;nbsp;table&amp;nbsp;is&amp;nbsp;not&amp;nbsp;ready&amp;nbsp;to&amp;nbsp;be&amp;nbsp;used.&amp;nbsp;Table&amp;nbsp;&amp;#39;mysql.gtid_executed&amp;#39;&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;opened.
2019-06-13T07:59:01.167537Z&amp;nbsp;1&amp;nbsp;[Note]&amp;nbsp;A&amp;nbsp;temporary&amp;nbsp;password&amp;nbsp;is&amp;nbsp;generated&amp;nbsp;for&amp;nbsp;root@localhost:&amp;nbsp;26jvaV)XAy&amp;gt;G&lt;/pre&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;执行完初始化操作后，最后会给予root的默认密码，使用此密码登陆后，要第一时间修改root密码，否则不允许操作数据库；&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;alter&amp;nbsp;user&amp;nbsp;&amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39;&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;&amp;#39;123456&amp;#39;;&lt;/pre&gt;&lt;h2 id=&quot;启动mysql-并简单配置&quot;&gt;启动MySQL 并简单配置&lt;/h2&gt;&lt;pre&gt;#&amp;nbsp;/etc/init.d/mysqld&amp;nbsp;start
Starting&amp;nbsp;MySQL.Logging&amp;nbsp;to&amp;nbsp;&amp;#39;/opt/mysql_data/error.log&amp;#39;.
..&amp;nbsp;SUCCESS!&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;登陆MySQL 并修改密码&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p
Enter&amp;nbsp;password:&amp;nbsp;
Welcome&amp;nbsp;to&amp;nbsp;the&amp;nbsp;MySQL&amp;nbsp;monitor.&amp;nbsp;&amp;nbsp;Commands&amp;nbsp;end&amp;nbsp;with&amp;nbsp;;&amp;nbsp;or&amp;nbsp;\g.
Your&amp;nbsp;MySQL&amp;nbsp;connection&amp;nbsp;id&amp;nbsp;is&amp;nbsp;3
Server&amp;nbsp;version:&amp;nbsp;5.7.18

Copyright&amp;nbsp;(c)&amp;nbsp;2000,&amp;nbsp;2017,&amp;nbsp;Oracle&amp;nbsp;and/or&amp;nbsp;its&amp;nbsp;affiliates.&amp;nbsp;All&amp;nbsp;rights&amp;nbsp;reserved.

Oracle&amp;nbsp;is&amp;nbsp;a&amp;nbsp;registered&amp;nbsp;trademark&amp;nbsp;of&amp;nbsp;Oracle&amp;nbsp;Corporation&amp;nbsp;and/or&amp;nbsp;its
affiliates.&amp;nbsp;Other&amp;nbsp;names&amp;nbsp;may&amp;nbsp;be&amp;nbsp;trademarks&amp;nbsp;of&amp;nbsp;their&amp;nbsp;respective
owners.

Type&amp;nbsp;&amp;#39;help;&amp;#39;&amp;nbsp;or&amp;nbsp;&amp;#39;\h&amp;#39;&amp;nbsp;for&amp;nbsp;help.&amp;nbsp;Type&amp;nbsp;&amp;#39;\c&amp;#39;&amp;nbsp;to&amp;nbsp;clear&amp;nbsp;the&amp;nbsp;current&amp;nbsp;input&amp;nbsp;statement.

mysql&amp;gt;&amp;nbsp;alter&amp;nbsp;user&amp;nbsp;user()&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;&amp;quot;123456&amp;quot;;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;所有mysql增加主从用户&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;mysql&amp;gt;&amp;nbsp;grant&amp;nbsp;replication&amp;nbsp;slave&amp;nbsp;on&amp;nbsp;*.*&amp;nbsp;to&amp;nbsp;&amp;#39;repl&amp;#39;@&amp;#39;10.0.20.%&amp;#39;&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;&amp;#39;123456&amp;#39;;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected,&amp;nbsp;1&amp;nbsp;warning&amp;nbsp;(0.00&amp;nbsp;sec)

mysql&amp;gt;&amp;nbsp;grant&amp;nbsp;all&amp;nbsp;on&amp;nbsp;*.*&amp;nbsp;to&amp;nbsp;&amp;#39;root&amp;#39;@&amp;#39;%&amp;#39;&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;&amp;#39;123456&amp;#39;;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected,&amp;nbsp;1&amp;nbsp;warning&amp;nbsp;(0.00&amp;nbsp;sec)

mysql&amp;gt;&amp;nbsp;flush&amp;nbsp;privileges;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;h2 id=&quot;建立-一主三从&quot;&gt;建立 一主三从&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;node01 的MySQL执行&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;mysql&amp;gt;&amp;nbsp;show&amp;nbsp;master&amp;nbsp;status;
+------------------+----------+--------------+------------------+-------------------+
|&amp;nbsp;File&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;Position&amp;nbsp;|&amp;nbsp;Binlog_Do_DB&amp;nbsp;|&amp;nbsp;Binlog_Ignore_DB&amp;nbsp;|&amp;nbsp;Executed_Gtid_Set&amp;nbsp;|
+------------------+----------+--------------+------------------+-------------------+
|&amp;nbsp;mysql-bin.000002&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;154&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+------------------+----------+--------------+------------------+-------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node02、node03、node04 都执行下列语句&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;change&amp;nbsp;master&amp;nbsp;to&amp;nbsp;master_host=&amp;#39;10.0.20.201&amp;#39;,master_user=&amp;#39;repl&amp;#39;,master_password=&amp;#39;123456&amp;#39;,master_log_file=&amp;#39;mysql-bin.000002&amp;#39;,master_log_pos=463;&lt;/pre&gt;&lt;blockquote&gt;&lt;p&gt;show slave status\G;	#查看slave IO和slave sql是否都正常&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h1 id=&quot;特别说明&quot;&gt;特别说明&lt;/h1&gt;&lt;p&gt;下面开始配置Manager机器，本人的所有机器，均做了bond网卡绑定，所有机器的网卡名都为bond0，大家根据自己的网卡名称自行修改，还有发送邮件的邮箱以及微信公众号的相关配置，均需要修改为自己的。&lt;/p&gt;&lt;p&gt;本次是用vip 是: 10.0.20.199&lt;/p&gt;&lt;p&gt;大家根据自己的情况，做出对应的修改。&lt;/p&gt;&lt;h1 id=&quot;mha-manager-配置&quot;&gt;MHA Manager 配置&lt;/h1&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;下面配置，均在manager机器上操作。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;#&amp;nbsp;创建MHA配置文件目录
mkdir&amp;nbsp;/etc/mha
#&amp;nbsp;创建MHA脚本目录
mkdir&amp;nbsp;/etc/mha/scripts
#&amp;nbsp;创建MHA日志目录
mkdir&amp;nbsp;/var/log/mha/
#&amp;nbsp;创建日志目录
mkdir&amp;nbsp;/var/log/mha/app1&amp;nbsp;-p
#&amp;nbsp;创建日志文件
touch&amp;nbsp;/var/log/mha/app1/manager.log&lt;/pre&gt;&lt;h2 id=&quot;mha-配置文件&quot;&gt;MHA 配置文件&lt;/h2&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;cat&amp;nbsp;/etc/masterha_default.cnf&amp;nbsp;

[server&amp;nbsp;default]
user=root
password=SIjiayong.123

repl_user=repl
repl_password=SIjiayong.123

ssh_user=root

ping_interval=1
master_binlog_dir=/opt/mysql_data

manager_workdir=/var/log/mha/app1.log
manager_log=/var/log/mha/manager.log
master_ip_failover_script=&amp;quot;/etc/mha/scripts/master_ip_failover&amp;quot;
master_ip_online_change_script=&amp;quot;/etc/mha/scripts/master_ip_online_change&amp;quot;
report_script=&amp;quot;/etc/mha/scripts/send_report&amp;quot;
remote_workdir=/tmp
secondary_check_script=&amp;nbsp;/usr/local/bin/masterha_secondary_check&amp;nbsp;-s&amp;nbsp;10.0.20.201&amp;nbsp;-s&amp;nbsp;10.0.20.202&amp;nbsp;-s&amp;nbsp;10.0.20.203&amp;nbsp;-s&amp;nbsp;10.0.20.204
shutdown_script=&amp;quot;&amp;quot;&lt;/pre&gt;&lt;pre&gt;[root@manager&amp;nbsp;~]#&amp;nbsp;cat&amp;nbsp;/etc/mha/app1.cnf&amp;nbsp;
[server1]
hostname=10.0.20.201
port=3306

[server2]
hostname=10.0.20.202
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=10.0.20.203
port=3306

[server4]
hostname=10.0.20.204
port=3306&lt;/pre&gt;&lt;h2 id=&quot;配置文件说明&quot;&gt;配置文件说明&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;MHA主要配置文件说明&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;manager_workdir=/var/log/masterha/app1.log：设置manager的工作目录&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;manager_log=/var/log/masterha/app1/manager.log：设置manager的日志文件&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;master_binlog_dir=/data/mysql：设置master 保存binlog的位置，以便MHA可以找到master的日志&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;master_ip_failover_script= /usr/local/bin/master_ip_failover：设置自动failover时候的切换脚本&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;master_ip_online_change_script= /usr/local/bin/master_ip_online_change：设置手动切换时候的切换脚本&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;user=root：设置监控mysql的用户&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;password=dayi123：设置监控mysql的用户，需要授权能够在manager节点远程登录&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;ping_interval=1：设置监控主库，发送ping包的时间间隔，默认是3秒，尝试三次没有回应的时候自动进行railover&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;remote_workdir=/tmp：设置远端mysql在发生切换时binlog的保存位置&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;repl_user=repl ：设置mysql中用于复制的用户密码&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;repl_password=replication：设置mysql中用于复制的用户&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;report_script=/usr/local/send_report：设置发生切换后发送的报警的脚本&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;shutdown_script=&amp;quot;&amp;quot;：设置故障发生后关闭故障主机脚本（该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;ssh_user=root //设置ssh的登录用户名&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;candidate_master=1：在节点下设置，设置当前节点为候选的master&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;slave check_repl_delay=0 :在节点配置下设置，默认情况下如果一个slave落后master 100M的relay logs的话，MHA将不会选择该slave作为一个新的master；这个选项对于对于设置了candidate_master=1的主机非常有用&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;脚本配置&quot;&gt;脚本配置&lt;/h2&gt;&lt;h3 id=&quot;自动-vip-管理配置&quot;&gt;自动 VIP 管理配置&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;#为了防止脑裂发生,推荐生产环境采用脚本的方式来管理虚拟 ip,而不是使用 keepalived来完成&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;vim /etc/mha/scripts/master_ip_failover&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;#!/usr/bin/env&amp;nbsp;perl

use&amp;nbsp;strict;
use&amp;nbsp;warnings&amp;nbsp;FATAL&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;all&amp;#39;;

use&amp;nbsp;Getopt::Long;

my&amp;nbsp;(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$command,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ssh_user,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$orig_master_host,&amp;nbsp;$orig_master_ip,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$orig_master_port,&amp;nbsp;$new_master_host,&amp;nbsp;$new_master_ip,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$new_master_port
);

my&amp;nbsp;$vip&amp;nbsp;=&amp;nbsp;&amp;#39;10.0.20.199/24&amp;#39;;
my&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;&amp;#39;1&amp;#39;;
my&amp;nbsp;$ssh_start_vip&amp;nbsp;=&amp;nbsp;&amp;quot;/sbin/ifconfig&amp;nbsp;bond0:$key&amp;nbsp;$vip&amp;quot;;
my&amp;nbsp;$ssh_stop_vip&amp;nbsp;=&amp;nbsp;&amp;quot;/sbin/ifconfig&amp;nbsp;bond0:$key&amp;nbsp;down&amp;quot;;

GetOptions(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;command=s&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;\$command,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;ssh_user=s&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;\$ssh_user,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;orig_master_host=s&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;\$orig_master_host,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;orig_master_ip=s&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;\$orig_master_ip,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;orig_master_port=i&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;\$orig_master_port,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;new_master_host=s&amp;#39;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;\$new_master_host,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;new_master_ip=s&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;\$new_master_ip,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;new_master_port=i&amp;#39;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;\$new_master_port,
);

exit&amp;nbsp;&amp;amp;main();

sub&amp;nbsp;main&amp;nbsp;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&amp;quot;\n\nIN&amp;nbsp;SCRIPT&amp;nbsp;TEST====$ssh_stop_vip==$ssh_start_vip===\n\n&amp;quot;;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&amp;nbsp;$command&amp;nbsp;eq&amp;nbsp;&amp;quot;stop&amp;quot;&amp;nbsp;||&amp;nbsp;$command&amp;nbsp;eq&amp;nbsp;&amp;quot;stopssh&amp;quot;&amp;nbsp;)&amp;nbsp;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my&amp;nbsp;$exit_code&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eval&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&amp;quot;Disabling&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;on&amp;nbsp;old&amp;nbsp;master:&amp;nbsp;$orig_master_host&amp;nbsp;\n&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;stop_vip();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$exit_code&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($@)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warn&amp;nbsp;&amp;quot;Got&amp;nbsp;Error:&amp;nbsp;$@\n&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit&amp;nbsp;$exit_code;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit&amp;nbsp;$exit_code;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elsif&amp;nbsp;(&amp;nbsp;$command&amp;nbsp;eq&amp;nbsp;&amp;quot;start&amp;quot;&amp;nbsp;)&amp;nbsp;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my&amp;nbsp;$exit_code&amp;nbsp;=&amp;nbsp;10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eval&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&amp;quot;Enabling&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;-&amp;nbsp;$vip&amp;nbsp;on&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;-&amp;nbsp;$new_master_host&amp;nbsp;\n&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;start_vip();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$exit_code&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($@)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warn&amp;nbsp;$@;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit&amp;nbsp;$exit_code;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit&amp;nbsp;$exit_code;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elsif&amp;nbsp;(&amp;nbsp;$command&amp;nbsp;eq&amp;nbsp;&amp;quot;status&amp;quot;&amp;nbsp;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&amp;quot;Checking&amp;nbsp;the&amp;nbsp;Status&amp;nbsp;of&amp;nbsp;the&amp;nbsp;script..&amp;nbsp;OK&amp;nbsp;\n&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;usage();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}

sub&amp;nbsp;start_vip()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`ssh&amp;nbsp;$ssh_user\@$new_master_host&amp;nbsp;\&amp;quot;&amp;nbsp;$ssh_start_vip&amp;nbsp;\&amp;quot;`;
}
sub&amp;nbsp;stop_vip()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0&amp;nbsp;&amp;nbsp;unless&amp;nbsp;&amp;nbsp;($ssh_user);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`ssh&amp;nbsp;$ssh_user\@$orig_master_host&amp;nbsp;\&amp;quot;&amp;nbsp;$ssh_stop_vip&amp;nbsp;\&amp;quot;`;
}

sub&amp;nbsp;usage&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Usage:&amp;nbsp;master_ip_failover&amp;nbsp;--command=start|stop|stopssh|status&amp;nbsp;--orig_master_host=host&amp;nbsp;--orig_master_ip=ip&amp;nbsp;--orig_master_port=port&amp;nbsp;--new_master_host=host&amp;nbsp;--new_master_ip=ip&amp;nbsp;--new_master_port=port\n&amp;quot;;
}&lt;/pre&gt;&lt;h3 id=&quot;配置邮件和微信报警脚本&quot;&gt;配置邮件和微信报警脚本&lt;/h3&gt;&lt;pre&gt;#&amp;nbsp;安装发送邮件的工具
yum&amp;nbsp;install&amp;nbsp;mailx&amp;nbsp;-y&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;mail邮件发送程序，需要先配置好发送这信息&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;vim /etc/mail.rc&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;set&amp;nbsp;from=*****@163.com
set&amp;nbsp;smtp=smtp.163.com
set&amp;nbsp;smtp-auth-user=*****
#拿163邮箱来说这个不是密码，而是授权码
set&amp;nbsp;smtp-auth-password=*****
set&amp;nbsp;smtp-auth=login&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;这是具体的邮件和微信发送脚本&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;vim /etc/mha/scripts/send_report&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;#!/bin/bash
source&amp;nbsp;/root/.bash_profile
#&amp;nbsp;解析变量
orig_master_host=`echo&amp;nbsp;&amp;quot;$1&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
new_master_host=`echo&amp;nbsp;&amp;quot;$2&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
new_slave_hosts=`echo&amp;nbsp;&amp;quot;$3&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
subject=`echo&amp;nbsp;&amp;quot;$4&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
body=`echo&amp;nbsp;&amp;quot;$5&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
#定义收件人地址
email=&amp;quot;***@***.com&amp;quot;

#&amp;nbsp;下面这俩个需要微信公众号中自行获取
CropID=&amp;#39;******************&amp;#39;
Secret=&amp;#39;***************************************&amp;#39;

GURL=&amp;quot;https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&amp;amp;corpsecret=$Secret&amp;quot;
Gtoken=$(/usr/bin/curl&amp;nbsp;-s&amp;nbsp;-G&amp;nbsp;$GURL&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F\&amp;quot;&amp;nbsp;&amp;#39;{print&amp;nbsp;$10}&amp;#39;)

PURL=&amp;quot;https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken&amp;quot;

function&amp;nbsp;body()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#企业号中的应用id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local&amp;nbsp;int&amp;nbsp;AppID=1000002
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#部门成员id，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local&amp;nbsp;UserID=$1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#部门id，定义了范围，组内成员都可接收到消息
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local&amp;nbsp;PartyID=&amp;#39;2|3&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#过滤出zabbix传递的第三个参数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local&amp;nbsp;Msg=$(echo&amp;nbsp;&amp;quot;$@&amp;quot;&amp;nbsp;|&amp;nbsp;cut&amp;nbsp;-d&amp;quot;&amp;nbsp;&amp;quot;&amp;nbsp;-f3-)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;{\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t&amp;quot;touser&amp;quot;:&amp;nbsp;&amp;quot;&amp;#39;&amp;quot;$UserID&amp;quot;\&amp;quot;&amp;quot;,\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t&amp;quot;toparty&amp;quot;:&amp;nbsp;&amp;quot;&amp;#39;&amp;quot;$PartyID&amp;quot;\&amp;quot;&amp;quot;,\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t&amp;quot;msgtype&amp;quot;:&amp;nbsp;&amp;quot;text&amp;quot;,\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t&amp;quot;agentid&amp;quot;:&amp;nbsp;&amp;quot;&amp;#39;&amp;quot;&amp;nbsp;$AppID&amp;nbsp;&amp;quot;\&amp;quot;&amp;quot;,\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t&amp;quot;text&amp;quot;:&amp;nbsp;{\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t\t&amp;quot;content&amp;quot;:&amp;nbsp;&amp;quot;&amp;#39;&amp;quot;$Msg&amp;quot;\&amp;quot;&amp;quot;\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t},\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;\t&amp;quot;safe&amp;quot;:&amp;quot;0&amp;quot;\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;}\n&amp;#39;
}






tac&amp;nbsp;/var/log/mha/app1/manager.log&amp;nbsp;|&amp;nbsp;sed&amp;nbsp;-n&amp;nbsp;2p&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;&amp;#39;successfully&amp;#39;&amp;nbsp;&amp;gt;&amp;nbsp;/dev/null
if&amp;nbsp;[&amp;nbsp;$?&amp;nbsp;-eq&amp;nbsp;0&amp;nbsp;]
	then
	messages=`echo&amp;nbsp;-e&amp;nbsp;&amp;quot;MHA&amp;nbsp;$subject&amp;nbsp;主从切换成功\n&amp;nbsp;master:$orig_master_host&amp;nbsp;--&amp;gt;&amp;nbsp;$new_master_host&amp;nbsp;\n&amp;nbsp;$body&amp;nbsp;\n&amp;nbsp;当前从库:$new_slave_hosts&amp;quot;`&amp;nbsp;
	echo&amp;nbsp;&amp;quot;$messages&amp;quot;&amp;nbsp;|&amp;nbsp;mail&amp;nbsp;-s&amp;nbsp;&amp;quot;Mysql&amp;nbsp;实例宕掉，MHA&amp;nbsp;$subject&amp;nbsp;切换成功&amp;quot;&amp;nbsp;$email&amp;nbsp;&amp;gt;&amp;gt;/tmp/mailx.log&amp;nbsp;2&amp;gt;&amp;amp;1&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/usr/bin/curl&amp;nbsp;--data-ascii&amp;nbsp;&amp;quot;$(body&amp;nbsp;1&amp;nbsp;1&amp;nbsp;${messages})&amp;quot;&amp;nbsp;${PURL}
	else
	messages=`echo&amp;nbsp;-e&amp;nbsp;&amp;quot;MHA&amp;nbsp;$subject&amp;nbsp;主从切换失败\n&amp;nbsp;master:$orig_master_host&amp;nbsp;--&amp;gt;&amp;nbsp;$new_master_host&amp;nbsp;\n&amp;nbsp;$body&amp;quot;&amp;nbsp;`
	echo&amp;nbsp;&amp;quot;$messages&amp;quot;&amp;nbsp;|&amp;nbsp;mail&amp;nbsp;-s&amp;nbsp;&amp;quot;&amp;quot;Mysql&amp;nbsp;实例宕掉，MHA&amp;nbsp;$subject&amp;nbsp;切换失败&amp;quot;&amp;quot;&amp;nbsp;$email&amp;nbsp;&amp;gt;&amp;gt;/tmp/mailx.log&amp;nbsp;2&amp;gt;&amp;amp;1&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/usr/bin/curl&amp;nbsp;--data-ascii&amp;nbsp;&amp;quot;$(body&amp;nbsp;1&amp;nbsp;1&amp;nbsp;${messages})&amp;quot;&amp;nbsp;${PURL}
fi&lt;/pre&gt;&lt;h3 id=&quot;手动-vip-管理配置脚本&quot;&gt;手动 VIP 管理配置脚本&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;vim /etc/mha/scripts/master_ip_online_change&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;#!/bin/bash
source&amp;nbsp;/root/.bash_profile

vip=`echo&amp;nbsp;&amp;#39;10.0.20.199/24&amp;#39;`&amp;nbsp;&amp;nbsp;#设置VIP
key=`echo&amp;nbsp;&amp;#39;1&amp;#39;`

command=`echo&amp;nbsp;&amp;quot;$1&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
orig_master_host=`echo&amp;nbsp;&amp;quot;$2&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
new_master_host=`echo&amp;nbsp;&amp;quot;$7&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
orig_master_ssh_user=`echo&amp;nbsp;&amp;quot;${12}&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`
new_master_ssh_user=`echo&amp;nbsp;&amp;quot;${13}&amp;quot;&amp;nbsp;|&amp;nbsp;awk&amp;nbsp;-F&amp;nbsp;=&amp;nbsp;&amp;#39;{print&amp;nbsp;$2}&amp;#39;`

#要求服务的网卡识别名一样
stop_vip=`echo&amp;nbsp;&amp;quot;ssh&amp;nbsp;root@$orig_master_host&amp;nbsp;/usr/sbin/ifconfig&amp;nbsp;bond0:$key&amp;nbsp;down&amp;quot;`
start_vip=`echo&amp;nbsp;&amp;quot;ssh&amp;nbsp;root@$new_master_host&amp;nbsp;/usr/sbin/ifconfig&amp;nbsp;bond0:$key&amp;nbsp;$vip&amp;quot;`

if&amp;nbsp;[&amp;nbsp;$command&amp;nbsp;=&amp;nbsp;&amp;#39;stop&amp;#39;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;-e&amp;nbsp;&amp;quot;\n\n\n****************************\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;-e&amp;nbsp;&amp;quot;Disabled&amp;nbsp;thi&amp;nbsp;VIP&amp;nbsp;-&amp;nbsp;$vip&amp;nbsp;on&amp;nbsp;old&amp;nbsp;master:&amp;nbsp;$orig_master_host&amp;nbsp;\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$stop_vip
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;[&amp;nbsp;$?&amp;nbsp;-eq&amp;nbsp;0&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;then
	echo&amp;nbsp;&amp;quot;Disabled&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;successfully&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
	echo&amp;nbsp;&amp;quot;Disabled&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;failed&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;-e&amp;nbsp;&amp;quot;***************************\n\n\n&amp;quot;
&amp;nbsp;&amp;nbsp;fi

if&amp;nbsp;[&amp;nbsp;$command&amp;nbsp;=&amp;nbsp;&amp;#39;start&amp;#39;&amp;nbsp;-o&amp;nbsp;$command&amp;nbsp;=&amp;nbsp;&amp;#39;status&amp;#39;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;-e&amp;nbsp;&amp;quot;\n\n\n*************************\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;-e&amp;nbsp;&amp;quot;Enabling&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;-&amp;nbsp;$vip&amp;nbsp;on&amp;nbsp;new&amp;nbsp;master:&amp;nbsp;$new_master_host&amp;nbsp;\n&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$start_vip
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;[&amp;nbsp;$?&amp;nbsp;-eq&amp;nbsp;0&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;then
	echo&amp;nbsp;&amp;quot;Enabled&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;successfully&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
	echo&amp;nbsp;&amp;quot;Enabled&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;failed&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;-e&amp;nbsp;&amp;quot;***************************\n\n\n&amp;quot;
fi&lt;/pre&gt;&lt;h3 id=&quot;赋权&quot;&gt;赋权&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;最后给刚刚配置的三个脚本增加执行权限&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;chmod&amp;nbsp;+x&amp;nbsp;/etc/mha/scripts/master_ip_failover&amp;nbsp;
chmod&amp;nbsp;+x&amp;nbsp;/etc/mha/scripts/master_ip_online_change&amp;nbsp;
chmod&amp;nbsp;+x&amp;nbsp;/etc/mha/scripts/send_report&lt;/pre&gt;&lt;h2 id=&quot;验证-mha-相关操作&quot;&gt;验证 MHA 相关操作&lt;/h2&gt;&lt;h3 id=&quot;验证-ssh-信任登录是否成功&quot;&gt;验证 ssh 信任登录是否成功&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;通过 masterha_check_ssh 命令验证&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@manager&amp;nbsp;scripts]#&amp;nbsp;masterha_check_ssh&amp;nbsp;--conf=/etc/mha/app1.cnf
#&amp;nbsp;最后出现以下提示，则表示通过
Thu&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;17:19:34&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;All&amp;nbsp;SSH&amp;nbsp;connection&amp;nbsp;tests&amp;nbsp;passed&amp;nbsp;successfully.&lt;/pre&gt;&lt;h3 id=&quot;验证-mysql-主从复制是否成功&quot;&gt;验证 mysql 主从复制是否成功&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;通过 masterha_check_repl 命令验证&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;masterha_check_repl&amp;nbsp;--conf=/etc/masterha_default.cnf
#&amp;nbsp;最后出现以下提示，则表示通过
MySQL&amp;nbsp;Replication&amp;nbsp;Health&amp;nbsp;is&amp;nbsp;OK.&lt;/pre&gt;&lt;hr/&gt;&lt;h1 id=&quot;启动-mha&quot;&gt;启动 MHA&lt;/h1&gt;&lt;h2 id=&quot;手动第一次添加vip&quot;&gt;手动第一次添加vip&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;本次在node01 上操作&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;先在node01 的 MySQL master上绑定vip，&lt;code&gt;只需要在master绑定这一次，以后会自动切换&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;/usr/sbin/ifconfig&amp;nbsp;bond0:1&amp;nbsp;10.0.20.199/24
[root@node01&amp;nbsp;mysql-5.7]#&amp;nbsp;ip&amp;nbsp;a&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.201/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;bond0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.199/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;secondary&amp;nbsp;bond0:1&lt;/pre&gt;&lt;h2 id=&quot;启动&quot;&gt;启动&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;这一步在manager上操作&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;nohup&amp;nbsp;masterha_manager&amp;nbsp;--conf=/etc/mha/app1.cnf&amp;nbsp;--remove_dead_master_conf&amp;nbsp;--ignore_last_failover&amp;nbsp;&amp;lt;&amp;nbsp;/dev/null&amp;nbsp;&amp;gt;&amp;nbsp;/var/log/mha/app1/manager.log&amp;nbsp;2&amp;gt;&amp;amp;1&amp;nbsp;&amp;amp;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;检查 MHA 状态&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;masterha_check_status&amp;nbsp;--conf=/etc/mha/app1.cnf
app1&amp;nbsp;(pid:4745)&amp;nbsp;is&amp;nbsp;running(0:PING_OK),&amp;nbsp;master:10.0.20.201&lt;/pre&gt;&lt;blockquote&gt;&lt;p&gt;MHA 的日志保存在/var/log/masterha/app1/manager.log 下&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;tailf&amp;nbsp;/var/log/mha/manager.log
#如果最后一行是如下，表明启动成功
Thu&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;17:31:41&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Starting&amp;nbsp;ping&amp;nbsp;health&amp;nbsp;check&amp;nbsp;on&amp;nbsp;10.0.20.201(10.0.20.201:3306)..
Thu&amp;nbsp;Jun&amp;nbsp;13&amp;nbsp;17:31:41&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Ping(SELECT)&amp;nbsp;succeeded,&amp;nbsp;waiting&amp;nbsp;until&amp;nbsp;MySQL&amp;nbsp;doesn&amp;#39;t&amp;nbsp;respond..&lt;/pre&gt;&lt;h2 id=&quot;关闭&quot;&gt;关闭&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;若已处于监控状态，需要停掉它&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;masterha_stop --conf=/etc/mha/app1.cnf&lt;/p&gt;&lt;/blockquote&gt;&lt;h1 id=&quot;模拟宕机测试&quot;&gt;模拟宕机测试&lt;/h1&gt;&lt;blockquote&gt;&lt;p&gt;手动停止node01 的 MySQL master，然后查看其它节点情况。&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@node01&amp;nbsp;~]#&amp;nbsp;/etc/init.d/mysqld&amp;nbsp;&amp;nbsp;stop
Shutting&amp;nbsp;down&amp;nbsp;MySQL............&amp;nbsp;SUCCESS!
[root@node01&amp;nbsp;~]#&amp;nbsp;ip&amp;nbsp;a&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.201/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;bond0&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;在node02 上查看VIP&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node02&amp;nbsp;~]#&amp;nbsp;ip&amp;nbsp;a&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.202/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;bond0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.199/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;secondary&amp;nbsp;bond0:1&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;在node03 上查看主从同步状态和地址&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node03&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;quot;show&amp;nbsp;slave&amp;nbsp;status\G&amp;quot;&amp;nbsp;|&amp;nbsp;egrep&amp;nbsp;&amp;#39;Master_Host|Slave_IO_Running|Slave_SQL_Running&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Master_Host:&amp;nbsp;10.0.20.202
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_IO_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running_State:&amp;nbsp;Slave&amp;nbsp;has&amp;nbsp;read&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;log;&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;more&amp;nbsp;updates&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;在node04 上查看主从同步状态和地址&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node04&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;quot;show&amp;nbsp;slave&amp;nbsp;status\G&amp;quot;&amp;nbsp;|&amp;nbsp;egrep&amp;nbsp;&amp;#39;Master_Host|Slave_IO_Running|Slave_SQL_Running&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Master_Host:&amp;nbsp;10.0.20.202
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_IO_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running_State:&amp;nbsp;Slave&amp;nbsp;has&amp;nbsp;read&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;log;&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;more&amp;nbsp;updates&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;查看Manager日志&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;tailf&amp;nbsp;manager.log
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:03&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Got&amp;nbsp;error&amp;nbsp;on&amp;nbsp;MySQL&amp;nbsp;select&amp;nbsp;ping:&amp;nbsp;2006&amp;nbsp;(MySQL&amp;nbsp;server&amp;nbsp;has&amp;nbsp;gone&amp;nbsp;away)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:03&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;SSH&amp;nbsp;check&amp;nbsp;script:&amp;nbsp;exit&amp;nbsp;0
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:03&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;secondary&amp;nbsp;network&amp;nbsp;check&amp;nbsp;script:&amp;nbsp;/usr/local/bin/masterha_secondary_check&amp;nbsp;-s&amp;nbsp;10.0.20.201&amp;nbsp;-s&amp;nbsp;10.0.20.202&amp;nbsp;-s&amp;nbsp;10.0.20.203&amp;nbsp;-s&amp;nbsp;10.0.20.204&amp;nbsp;&amp;nbsp;--user=root&amp;nbsp;&amp;nbsp;--master_host=10.0.20.201&amp;nbsp;&amp;nbsp;--master_ip=10.0.20.201&amp;nbsp;&amp;nbsp;--master_port=3306&amp;nbsp;--master_user=root&amp;nbsp;--master_password=123456&amp;nbsp;--ping_type=SELECT
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:03&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;HealthCheck:&amp;nbsp;SSH&amp;nbsp;to&amp;nbsp;10.0.20.201&amp;nbsp;is&amp;nbsp;reachable.
Monitoring&amp;nbsp;server&amp;nbsp;10.0.20.201&amp;nbsp;is&amp;nbsp;reachable,&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable&amp;nbsp;from&amp;nbsp;10.0.20.201.&amp;nbsp;OK.
Monitoring&amp;nbsp;server&amp;nbsp;10.0.20.202&amp;nbsp;is&amp;nbsp;reachable,&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable&amp;nbsp;from&amp;nbsp;10.0.20.202.&amp;nbsp;OK.
Monitoring&amp;nbsp;server&amp;nbsp;10.0.20.203&amp;nbsp;is&amp;nbsp;reachable,&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable&amp;nbsp;from&amp;nbsp;10.0.20.203.&amp;nbsp;OK.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:04&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Got&amp;nbsp;error&amp;nbsp;on&amp;nbsp;MySQL&amp;nbsp;connect:&amp;nbsp;2003&amp;nbsp;(Can&amp;#39;t&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;MySQL&amp;nbsp;server&amp;nbsp;on&amp;nbsp;&amp;#39;10.0.20.201&amp;#39;&amp;nbsp;(111))
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:04&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Connection&amp;nbsp;failed&amp;nbsp;2&amp;nbsp;time(s)..
Monitoring&amp;nbsp;server&amp;nbsp;10.0.20.204&amp;nbsp;is&amp;nbsp;reachable,&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable&amp;nbsp;from&amp;nbsp;10.0.20.204.&amp;nbsp;OK.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:04&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable&amp;nbsp;from&amp;nbsp;all&amp;nbsp;other&amp;nbsp;monitoring&amp;nbsp;servers.&amp;nbsp;Failover&amp;nbsp;should&amp;nbsp;start.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:05&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Got&amp;nbsp;error&amp;nbsp;on&amp;nbsp;MySQL&amp;nbsp;connect:&amp;nbsp;2003&amp;nbsp;(Can&amp;#39;t&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;MySQL&amp;nbsp;server&amp;nbsp;on&amp;nbsp;&amp;#39;10.0.20.201&amp;#39;&amp;nbsp;(111))
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:05&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Connection&amp;nbsp;failed&amp;nbsp;3&amp;nbsp;time(s)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Got&amp;nbsp;error&amp;nbsp;on&amp;nbsp;MySQL&amp;nbsp;connect:&amp;nbsp;2003&amp;nbsp;(Can&amp;#39;t&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;MySQL&amp;nbsp;server&amp;nbsp;on&amp;nbsp;&amp;#39;10.0.20.201&amp;#39;&amp;nbsp;(111))
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Connection&amp;nbsp;failed&amp;nbsp;4&amp;nbsp;time(s)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable&amp;nbsp;from&amp;nbsp;health&amp;nbsp;checker!
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;Master&amp;nbsp;10.0.20.201(10.0.20.201:3306)&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reachable!
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;SSH&amp;nbsp;is&amp;nbsp;reachable.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Connecting&amp;nbsp;to&amp;nbsp;a&amp;nbsp;master&amp;nbsp;server&amp;nbsp;failed.&amp;nbsp;Reading&amp;nbsp;configuration&amp;nbsp;file&amp;nbsp;/etc/masterha_default.cnf&amp;nbsp;and&amp;nbsp;/etc/mha/app1.cnf&amp;nbsp;again,&amp;nbsp;and&amp;nbsp;trying&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;all&amp;nbsp;servers&amp;nbsp;to&amp;nbsp;check&amp;nbsp;server&amp;nbsp;status..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Reading&amp;nbsp;default&amp;nbsp;configuration&amp;nbsp;from&amp;nbsp;/etc/masterha_default.cnf..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Reading&amp;nbsp;application&amp;nbsp;default&amp;nbsp;configuration&amp;nbsp;from&amp;nbsp;/etc/mha/app1.cnf..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:06&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Reading&amp;nbsp;server&amp;nbsp;configuration&amp;nbsp;from&amp;nbsp;/etc/mha/app1.cnf..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;GTID&amp;nbsp;failover&amp;nbsp;mode&amp;nbsp;=&amp;nbsp;1
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Dead&amp;nbsp;Servers:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Alive&amp;nbsp;Servers:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Alive&amp;nbsp;Slaves:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary&amp;nbsp;candidate&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;Master&amp;nbsp;(candidate_master&amp;nbsp;is&amp;nbsp;set)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;slave&amp;nbsp;configurations..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;read_only=1&amp;nbsp;is&amp;nbsp;not&amp;nbsp;set&amp;nbsp;on&amp;nbsp;slave&amp;nbsp;10.0.20.202(10.0.20.202:3306).
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;read_only=1&amp;nbsp;is&amp;nbsp;not&amp;nbsp;set&amp;nbsp;on&amp;nbsp;slave&amp;nbsp;10.0.20.203(10.0.20.203:3306).
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;read_only=1&amp;nbsp;is&amp;nbsp;not&amp;nbsp;set&amp;nbsp;on&amp;nbsp;slave&amp;nbsp;10.0.20.204(10.0.20.204:3306).
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;replication&amp;nbsp;filtering&amp;nbsp;settings..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Replication&amp;nbsp;filtering&amp;nbsp;check&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Master&amp;nbsp;is&amp;nbsp;down!
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Terminating&amp;nbsp;monitoring&amp;nbsp;script.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Got&amp;nbsp;exit&amp;nbsp;code&amp;nbsp;20&amp;nbsp;(Master&amp;nbsp;dead).
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;MHA::MasterFailover&amp;nbsp;version&amp;nbsp;0.58.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Starting&amp;nbsp;master&amp;nbsp;failover.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;1:&amp;nbsp;Configuration&amp;nbsp;Check&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:07&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;GTID&amp;nbsp;failover&amp;nbsp;mode&amp;nbsp;=&amp;nbsp;1
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Dead&amp;nbsp;Servers:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;master&amp;nbsp;reachability&amp;nbsp;via&amp;nbsp;MySQL(double&amp;nbsp;check)...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Alive&amp;nbsp;Servers:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Alive&amp;nbsp;Slaves:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary&amp;nbsp;candidate&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;Master&amp;nbsp;(candidate_master&amp;nbsp;is&amp;nbsp;set)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Starting&amp;nbsp;GTID&amp;nbsp;based&amp;nbsp;failover.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;**&amp;nbsp;Phase&amp;nbsp;1:&amp;nbsp;Configuration&amp;nbsp;Check&amp;nbsp;Phase&amp;nbsp;completed.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;2:&amp;nbsp;Dead&amp;nbsp;Master&amp;nbsp;Shutdown&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Forcing&amp;nbsp;shutdown&amp;nbsp;so&amp;nbsp;that&amp;nbsp;applications&amp;nbsp;never&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;master..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;master&amp;nbsp;IP&amp;nbsp;deactivation&amp;nbsp;script:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/mha/scripts/master_ip_failover&amp;nbsp;--orig_master_host=10.0.20.201&amp;nbsp;--orig_master_ip=10.0.20.201&amp;nbsp;--orig_master_port=3306&amp;nbsp;--command=stopssh&amp;nbsp;--ssh_user=root&amp;nbsp;&amp;nbsp;


IN&amp;nbsp;SCRIPT&amp;nbsp;TEST====/sbin/ifconfig&amp;nbsp;bond0:1&amp;nbsp;down==/sbin/ifconfig&amp;nbsp;bond0:1&amp;nbsp;10.0.20.199/24===

Disabling&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;on&amp;nbsp;old&amp;nbsp;master:&amp;nbsp;10.0.20.201&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;done.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[warning]&amp;nbsp;shutdown_script&amp;nbsp;is&amp;nbsp;not&amp;nbsp;set.&amp;nbsp;Skipping&amp;nbsp;explicit&amp;nbsp;shutting&amp;nbsp;down&amp;nbsp;of&amp;nbsp;the&amp;nbsp;dead&amp;nbsp;master.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;2:&amp;nbsp;Dead&amp;nbsp;Master&amp;nbsp;Shutdown&amp;nbsp;Phase&amp;nbsp;completed.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;3:&amp;nbsp;Master&amp;nbsp;Recovery&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;3.1:&amp;nbsp;Getting&amp;nbsp;Latest&amp;nbsp;Slaves&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;The&amp;nbsp;latest&amp;nbsp;binary&amp;nbsp;log&amp;nbsp;file/position&amp;nbsp;on&amp;nbsp;all&amp;nbsp;slaves&amp;nbsp;is&amp;nbsp;mysql-bin.000004:194
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Retrieved&amp;nbsp;Gtid&amp;nbsp;Set:&amp;nbsp;6211616e-8db3-11e9-be15-005056990727:3-5
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Latest&amp;nbsp;slaves&amp;nbsp;(Slaves&amp;nbsp;that&amp;nbsp;received&amp;nbsp;relay&amp;nbsp;log&amp;nbsp;files&amp;nbsp;to&amp;nbsp;the&amp;nbsp;latest):
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary&amp;nbsp;candidate&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;Master&amp;nbsp;(candidate_master&amp;nbsp;is&amp;nbsp;set)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;The&amp;nbsp;oldest&amp;nbsp;binary&amp;nbsp;log&amp;nbsp;file/position&amp;nbsp;on&amp;nbsp;all&amp;nbsp;slaves&amp;nbsp;is&amp;nbsp;mysql-bin.000004:194
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Retrieved&amp;nbsp;Gtid&amp;nbsp;Set:&amp;nbsp;6211616e-8db3-11e9-be15-005056990727:3-5
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Oldest&amp;nbsp;slaves:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary&amp;nbsp;candidate&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;Master&amp;nbsp;(candidate_master&amp;nbsp;is&amp;nbsp;set)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;3.3:&amp;nbsp;Determining&amp;nbsp;New&amp;nbsp;Master&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Searching&amp;nbsp;new&amp;nbsp;master&amp;nbsp;from&amp;nbsp;slaves..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Candidate&amp;nbsp;masters&amp;nbsp;from&amp;nbsp;the&amp;nbsp;configuration&amp;nbsp;file:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary&amp;nbsp;candidate&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;Master&amp;nbsp;(candidate_master&amp;nbsp;is&amp;nbsp;set)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Non-candidate&amp;nbsp;masters:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Searching&amp;nbsp;from&amp;nbsp;candidate_master&amp;nbsp;slaves&amp;nbsp;which&amp;nbsp;have&amp;nbsp;received&amp;nbsp;the&amp;nbsp;latest&amp;nbsp;relay&amp;nbsp;log&amp;nbsp;events..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;New&amp;nbsp;master&amp;nbsp;is&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Starting&amp;nbsp;master&amp;nbsp;failover..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
From:
10.0.20.201(10.0.20.201:3306)&amp;nbsp;(current&amp;nbsp;master)
&amp;nbsp;+--10.0.20.202(10.0.20.202:3306)
&amp;nbsp;+--10.0.20.203(10.0.20.203:3306)
&amp;nbsp;+--10.0.20.204(10.0.20.204:3306)

To:
10.0.20.202(10.0.20.202:3306)&amp;nbsp;(new&amp;nbsp;master)
&amp;nbsp;+--10.0.20.203(10.0.20.203:3306)
&amp;nbsp;+--10.0.20.204(10.0.20.204:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;3.3:&amp;nbsp;New&amp;nbsp;Master&amp;nbsp;Recovery&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Waiting&amp;nbsp;all&amp;nbsp;logs&amp;nbsp;to&amp;nbsp;be&amp;nbsp;applied..&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;done.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Getting&amp;nbsp;new&amp;nbsp;master&amp;#39;s&amp;nbsp;binlog&amp;nbsp;name&amp;nbsp;and&amp;nbsp;position..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;mysql-bin.000002:194
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;All&amp;nbsp;other&amp;nbsp;slaves&amp;nbsp;should&amp;nbsp;start&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;here.&amp;nbsp;Statement&amp;nbsp;should&amp;nbsp;be:&amp;nbsp;CHANGE&amp;nbsp;MASTER&amp;nbsp;TO&amp;nbsp;MASTER_HOST=&amp;#39;10.0.20.202&amp;#39;,&amp;nbsp;MASTER_PORT=3306,&amp;nbsp;MASTER_AUTO_POSITION=1,&amp;nbsp;MASTER_USER=&amp;#39;repl&amp;#39;,&amp;nbsp;MASTER_PASSWORD=&amp;#39;xxx&amp;#39;;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Master&amp;nbsp;Recovery&amp;nbsp;succeeded.&amp;nbsp;File:Pos:Exec_Gtid_Set:&amp;nbsp;mysql-bin.000002,&amp;nbsp;194,&amp;nbsp;6211616e-8db3-11e9-be15-005056990727:4-5
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;master&amp;nbsp;IP&amp;nbsp;activate&amp;nbsp;script:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/mha/scripts/master_ip_failover&amp;nbsp;--command=start&amp;nbsp;--ssh_user=root&amp;nbsp;--orig_master_host=10.0.20.201&amp;nbsp;--orig_master_ip=10.0.20.201&amp;nbsp;--orig_master_port=3306&amp;nbsp;--new_master_host=10.0.20.202&amp;nbsp;--new_master_ip=10.0.20.202&amp;nbsp;--new_master_port=3306&amp;nbsp;--new_master_user=&amp;#39;root&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;--new_master_password=xxx
Unknown&amp;nbsp;option:&amp;nbsp;new_master_user
Unknown&amp;nbsp;option:&amp;nbsp;new_master_password


IN&amp;nbsp;SCRIPT&amp;nbsp;TEST====/sbin/ifconfig&amp;nbsp;bond0:1&amp;nbsp;down==/sbin/ifconfig&amp;nbsp;bond0:1&amp;nbsp;10.0.20.199/24===

Enabling&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;-&amp;nbsp;10.0.20.199/24&amp;nbsp;on&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;-&amp;nbsp;10.0.20.202&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;OK.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;**&amp;nbsp;Finished&amp;nbsp;master&amp;nbsp;recovery&amp;nbsp;successfully.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;3:&amp;nbsp;Master&amp;nbsp;Recovery&amp;nbsp;Phase&amp;nbsp;completed.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;4:&amp;nbsp;Slaves&amp;nbsp;Recovery&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;4.1:&amp;nbsp;Starting&amp;nbsp;Slaves&amp;nbsp;in&amp;nbsp;parallel..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;recovery&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;started,&amp;nbsp;pid:&amp;nbsp;2838.&amp;nbsp;Check&amp;nbsp;tmp&amp;nbsp;log&amp;nbsp;/var/log/mha/10.0.20.203_3306_20190614100107.log&amp;nbsp;if&amp;nbsp;it&amp;nbsp;takes&amp;nbsp;time..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;recovery&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;started,&amp;nbsp;pid:&amp;nbsp;2839.&amp;nbsp;Check&amp;nbsp;tmp&amp;nbsp;log&amp;nbsp;/var/log/mha/10.0.20.204_3306_20190614100107.log&amp;nbsp;if&amp;nbsp;it&amp;nbsp;takes&amp;nbsp;time..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.204&amp;nbsp;...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;and&amp;nbsp;starting&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;10.0.20.202(10.0.20.202:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Executed&amp;nbsp;CHANGE&amp;nbsp;MASTER.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Slave&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;gtid_wait(6211616e-8db3-11e9-be15-005056990727:4-5)&amp;nbsp;completed&amp;nbsp;on&amp;nbsp;10.0.20.204(10.0.20.204:3306).&amp;nbsp;Executed&amp;nbsp;0&amp;nbsp;events.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;End&amp;nbsp;of&amp;nbsp;log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.204.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.203&amp;nbsp;...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;and&amp;nbsp;starting&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;10.0.20.202(10.0.20.202:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:08&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Executed&amp;nbsp;CHANGE&amp;nbsp;MASTER.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Slave&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:09&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;gtid_wait(6211616e-8db3-11e9-be15-005056990727:4-5)&amp;nbsp;completed&amp;nbsp;on&amp;nbsp;10.0.20.203(10.0.20.203:3306).&amp;nbsp;Executed&amp;nbsp;0&amp;nbsp;events.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;End&amp;nbsp;of&amp;nbsp;log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.203.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;All&amp;nbsp;new&amp;nbsp;slave&amp;nbsp;servers&amp;nbsp;recovered&amp;nbsp;successfully.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;5:&amp;nbsp;New&amp;nbsp;master&amp;nbsp;cleanup&amp;nbsp;phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;info&amp;nbsp;on&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;10.0.20.202:&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;info&amp;nbsp;succeeded.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Master&amp;nbsp;failover&amp;nbsp;to&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;completed&amp;nbsp;successfully.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Deleted&amp;nbsp;server1&amp;nbsp;entry&amp;nbsp;from&amp;nbsp;/etc/mha/app1.cnf&amp;nbsp;.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;

-----&amp;nbsp;Failover&amp;nbsp;Report&amp;nbsp;-----

app1:&amp;nbsp;MySQL&amp;nbsp;Master&amp;nbsp;failover&amp;nbsp;10.0.20.201(10.0.20.201:3306)&amp;nbsp;to&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;succeeded

Master&amp;nbsp;10.0.20.201(10.0.20.201:3306)&amp;nbsp;is&amp;nbsp;down!

Check&amp;nbsp;MHA&amp;nbsp;Manager&amp;nbsp;logs&amp;nbsp;at&amp;nbsp;manager.mha:/var/log/mha/manager.log&amp;nbsp;for&amp;nbsp;details.

Started&amp;nbsp;automated(non-interactive)&amp;nbsp;failover.
Invalidated&amp;nbsp;master&amp;nbsp;IP&amp;nbsp;address&amp;nbsp;on&amp;nbsp;10.0.20.201(10.0.20.201:3306)
Selected&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;as&amp;nbsp;a&amp;nbsp;new&amp;nbsp;master.
10.0.20.202(10.0.20.202:3306):&amp;nbsp;OK:&amp;nbsp;Applying&amp;nbsp;all&amp;nbsp;logs&amp;nbsp;succeeded.
10.0.20.202(10.0.20.202:3306):&amp;nbsp;OK:&amp;nbsp;Activated&amp;nbsp;master&amp;nbsp;IP&amp;nbsp;address.
10.0.20.204(10.0.20.204:3306):&amp;nbsp;OK:&amp;nbsp;Slave&amp;nbsp;started,&amp;nbsp;replicating&amp;nbsp;from&amp;nbsp;10.0.20.202(10.0.20.202:3306)
10.0.20.203(10.0.20.203:3306):&amp;nbsp;OK:&amp;nbsp;Slave&amp;nbsp;started,&amp;nbsp;replicating&amp;nbsp;from&amp;nbsp;10.0.20.202(10.0.20.202:3306)
10.0.20.202(10.0.20.202:3306):&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;info&amp;nbsp;succeeded.
Master&amp;nbsp;failover&amp;nbsp;to&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;completed&amp;nbsp;successfully.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;10:01:10&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Sending&amp;nbsp;mail..
&amp;nbsp;&amp;nbsp;%&amp;nbsp;Total&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%&amp;nbsp;Received&amp;nbsp;%&amp;nbsp;Xferd&amp;nbsp;&amp;nbsp;Average&amp;nbsp;Speed&amp;nbsp;&amp;nbsp;&amp;nbsp;Time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Time&amp;nbsp;&amp;nbsp;Current
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dload&amp;nbsp;&amp;nbsp;Upload&amp;nbsp;&amp;nbsp;&amp;nbsp;Total&amp;nbsp;&amp;nbsp;&amp;nbsp;Spent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Left&amp;nbsp;&amp;nbsp;Speed
100&amp;nbsp;&amp;nbsp;&amp;nbsp;347&amp;nbsp;&amp;nbsp;100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&amp;nbsp;&amp;nbsp;100&amp;nbsp;&amp;nbsp;&amp;nbsp;302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;133&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;897&amp;nbsp;--:--:--&amp;nbsp;--:--:--&amp;nbsp;--:--:--&amp;nbsp;&amp;nbsp;&amp;nbsp;898&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;由上面的日志以及各节点状态看出，&lt;code&gt;vip&lt;/code&gt;已经自动漂移到&lt;code&gt;node02&lt;/code&gt;的服务器上，并且&lt;code&gt;node02&lt;/code&gt;自动提升为主库，&lt;code&gt;node03&lt;/code&gt; 和 &lt;code&gt;node04&lt;/code&gt; 自动同步&lt;code&gt;node02&lt;/code&gt;的库。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;同时也收到了微信和邮件告警。&lt;/strong&gt;&lt;/p&gt;&lt;h2 id=&quot;自动切换步骤&quot;&gt;自动切换步骤&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;从上面的输出可以看出整个 MHA 的切换过程,共包括以下的步骤：&lt;/strong&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;配置文件检查阶段,这个阶段会检查整个集群配置文件配置&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;宕机的 master 处理,这个阶段包括虚拟 ip 摘除操作,主机关机操作（由于没有定义power_manager脚本，不会关机）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;复制 dead maste 和最新 slave 相差的 relay log,并保存到 MHA Manger 具体的目录下&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;识别含有最新更新的 slave&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;应用从 master 保存的二进制日志事件(binlog events)（这点信息对于将故障master修复后加入集群很重要）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;提升一个 slave 为新的 master 进行复制&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;使其他的 slave 连接新的 master 进行复制&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h1 id=&quot;修复后重新加入集群&quot;&gt;修复后重新加入集群&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;切换完成后,关注如下变化:&lt;/strong&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;vip 自动从原来的 master 切换到新的 master,同时,manager 节点的监控进程自动退出。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;在日志目录(/var/log/mha/app1)产生一个 app1.failover.complete 文件&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/mha/app1.cnf 配置文件中原来老的 master 配置被删除。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;p&gt;模拟宕机的时候，停止了MySQL进程，现在重新启动MySQL，并加入到Node02 的从库中&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id=&quot;node02-操作&quot;&gt;node02 操作&lt;/h2&gt;&lt;pre&gt;[root@node02&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;#39;show&amp;nbsp;master&amp;nbsp;status\G&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
***************************&amp;nbsp;1.&amp;nbsp;row&amp;nbsp;***************************
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;File:&amp;nbsp;mysql-bin.000002
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Position:&amp;nbsp;194
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Binlog_Do_DB:&amp;nbsp;
&amp;nbsp;Binlog_Ignore_DB:&amp;nbsp;
Executed_Gtid_Set:&amp;nbsp;6211616e-8db3-11e9-be15-005056990727:4-5&lt;/pre&gt;&lt;h2 id=&quot;node01-操作&quot;&gt;node01 操作&lt;/h2&gt;&lt;pre&gt;mysql&amp;gt;&amp;nbsp;change&amp;nbsp;master&amp;nbsp;to&amp;nbsp;master_host=&amp;#39;10.0.20.202&amp;#39;,master_user=&amp;#39;repl&amp;#39;,master_password=&amp;#39;123456&amp;#39;,master_log_file=&amp;#39;mysql-bin.000002&amp;#39;,master_log_pos=194;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected,&amp;nbsp;2&amp;nbsp;warnings&amp;nbsp;(0.00&amp;nbsp;sec)

mysql&amp;gt;&amp;nbsp;start&amp;nbsp;slave;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)
mysql&amp;gt;&amp;nbsp;exit
Bye
[root@node01&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;quot;show&amp;nbsp;slave&amp;nbsp;status\G&amp;quot;&amp;nbsp;|&amp;nbsp;egrep&amp;nbsp;&amp;#39;Master_Host|Slave_IO_Running|Slave_SQL_Running&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Master_Host:&amp;nbsp;10.0.20.202
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_IO_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running_State:&amp;nbsp;Slave&amp;nbsp;has&amp;nbsp;read&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;log;&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;more&amp;nbsp;updates&lt;/pre&gt;&lt;h2 id=&quot;manager-操作&quot;&gt;manager 操作&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;需要注意的是，当发生宕机切换后，&lt;code&gt;manager&lt;/code&gt;中的&lt;code&gt;MHA&lt;/code&gt;进程会自动停止，在修复后，需要手动再次启动&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;当发生宕机切换，&lt;code&gt;MHA&lt;/code&gt;会自动把宕机的信息从&lt;code&gt;app1.cnf&lt;/code&gt;配置文件中删除，修复后机器，要把信息重新写入到&lt;code&gt;app1.cnf&lt;/code&gt;中。&lt;/strong&gt;&lt;/p&gt;&lt;h3 id=&quot;修改前&quot;&gt;修改前&lt;/h3&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;pwd
/etc/mha
[root@manager&amp;nbsp;mha]#&amp;nbsp;cat&amp;nbsp;app1.cnf&amp;nbsp;
[server2]
candidate_master=1
check_repl_delay=0
hostname=10.0.20.202
port=3306

[server3]
hostname=10.0.20.203
port=3306

[server4]
hostname=10.0.20.204
port=3306&lt;/pre&gt;&lt;h3 id=&quot;修改后&quot;&gt;修改后&lt;/h3&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;cat&amp;nbsp;app1.cnf&amp;nbsp;
[server1]
candidate_master=1
check_repl_delay=0
hostname=10.0.20.201

[server2]
hostname=10.0.20.202
port=3306

[server3]
hostname=10.0.20.203
port=3306

[server4]
hostname=10.0.20.204
port=3306&lt;/pre&gt;&lt;h2 id=&quot;重新启动mha&quot;&gt;重新启动MHA&lt;/h2&gt;&lt;p&gt;修改好配置文件后，再次启动MHA即可&lt;/p&gt;&lt;pre&gt;nohup&amp;nbsp;masterha_manager&amp;nbsp;--conf=/etc/mha/app1.cnf&amp;nbsp;--remove_dead_master_conf&amp;nbsp;--ignore_last_failover&amp;nbsp;&amp;lt;&amp;nbsp;/dev/null&amp;nbsp;&amp;gt;&amp;nbsp;/var/log/mha/app1/manager.log&amp;nbsp;2&amp;gt;&amp;amp;1&amp;nbsp;&amp;amp;&lt;/pre&gt;&lt;p&gt;此时修复完成。&lt;/p&gt;&lt;hr/&gt;&lt;h1 id=&quot;在线进行切换&quot;&gt;在线进行切换&lt;/h1&gt;&lt;blockquote&gt;&lt;p&gt;在许多情况下， 需要将现有的主服务器迁移到另外一台服务器上。 比如主服务器硬件故障，RAID 控制卡需要重建，将主服务器移到性能更好的服务器上等等。维护主服务器引起性能下降， 导致停机时间至少无法写入数据。 另外， 阻塞或杀掉当前运行的会话会导致主主之间数据不一致的问题发生。 MHA 提供快速切换和优雅的阻塞写入，这个切换过程只需要 0.5-2s 的时间，这段时间内数据是无法写入的。在很多情况下，0.5-2s 的阻塞写入是可以接受的。因此切换主服务器不需要计划分配维护时间窗口。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;MHA在线切换的大概过程：&lt;/strong&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;检测复制设置和确定当前主服务器&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;确定新的主服务器&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;阻塞写入到当前主服务器&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;等待所有从服务器赶上复制&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;授予写入到新的主服务器&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;重新设置从服务器&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;注意，在线切换的时候应用架构需要考虑以下两个问题：&lt;/strong&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;自动识别master和slave的问题（master的机器可能会切换），如果采用了vip的方式，基本可以解决这个问题。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;负载均衡的问题（可以定义大概的读写比例，每台机器可承担的负载比例，当有机器离开集群时，需要考虑这个问题）&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;为了保证数据完全一致性，在最快的时间内完成切换，MHA的在线切换必须满足以下条件才会切换成功，否则会切换失败。&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;所有slave的IO线程都在运行&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;所有slave的SQL线程都在运行&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;所有的show slave status的输出中Seconds_Behind_Master参数小于或者等于running_updates_limit秒，如果在切换过程中不指定running_updates_limit,那么默认情况下running_updates_limit为1秒。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;在master端，通过show processlist输出，没有一个更新花费的时间大于running_updates_limit秒。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;停止mha-的manager-监控&quot;&gt;停止MHA 的manager 监控&lt;/h2&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;masterha_stop&amp;nbsp;--conf=/etc/mha/app1.cnf
Stopped&amp;nbsp;app1&amp;nbsp;successfully.
[1]+&amp;nbsp;&amp;nbsp;Exit&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nohup&amp;nbsp;masterha_manager&amp;nbsp;--conf=/etc/mha/app1.cnf&amp;nbsp;--remove_dead_master_conf&amp;nbsp;--ignore_last_failover&amp;nbsp;&amp;lt;&amp;nbsp;/dev/null&amp;nbsp;&amp;gt;&amp;nbsp;/var/log/mha/app1/manager.log&amp;nbsp;2&amp;gt;&amp;amp;1&lt;/pre&gt;&lt;h2 id=&quot;执行切换命令&quot;&gt;执行切换命令&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;进行在线切换操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;模拟在线切换主库操作，原主库10.0.20.202变为slave，10.0.20.201提升为新的主库&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;上一次进行了模拟宕机测试，最开始的主库是201，切换到了202位主库了&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;[root@manager&amp;nbsp;mha]#&amp;nbsp;masterha_master_switch&amp;nbsp;--conf=/etc/mha/app1.cnf&amp;nbsp;--master_state=alive&amp;nbsp;--new_master_host=10.0.20.201&amp;nbsp;--orig_master_is_new_slave&amp;nbsp;--running_updates_limit=10000&amp;nbsp;--interactive=0&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;执行后输出的日志如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;MHA::MasterRotate&amp;nbsp;version&amp;nbsp;0.58.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Starting&amp;nbsp;online&amp;nbsp;master&amp;nbsp;switch..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;1:&amp;nbsp;Configuration&amp;nbsp;Check&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Reading&amp;nbsp;default&amp;nbsp;configuration&amp;nbsp;from&amp;nbsp;/etc/masterha_default.cnf..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Reading&amp;nbsp;application&amp;nbsp;default&amp;nbsp;configuration&amp;nbsp;from&amp;nbsp;/etc/mha/app1.cnf..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:26&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Reading&amp;nbsp;server&amp;nbsp;configuration&amp;nbsp;from&amp;nbsp;/etc/mha/app1.cnf..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;GTID&amp;nbsp;failover&amp;nbsp;mode&amp;nbsp;=&amp;nbsp;1
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Current&amp;nbsp;Alive&amp;nbsp;Master:&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Alive&amp;nbsp;Slaves:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.201(10.0.20.201:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary&amp;nbsp;candidate&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;Master&amp;nbsp;(candidate_master&amp;nbsp;is&amp;nbsp;set)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;&amp;nbsp;Version=5.7.18-log&amp;nbsp;(oldest&amp;nbsp;major&amp;nbsp;version&amp;nbsp;between&amp;nbsp;slaves)&amp;nbsp;log-bin:enabled
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTID&amp;nbsp;ON
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Replicating&amp;nbsp;from&amp;nbsp;10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;FLUSH&amp;nbsp;NO_WRITE_TO_BINLOG&amp;nbsp;TABLES.&amp;nbsp;This&amp;nbsp;may&amp;nbsp;take&amp;nbsp;long&amp;nbsp;time..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;MHA&amp;nbsp;is&amp;nbsp;not&amp;nbsp;monitoring&amp;nbsp;or&amp;nbsp;doing&amp;nbsp;failover..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;replication&amp;nbsp;health&amp;nbsp;on&amp;nbsp;10.0.20.201..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;replication&amp;nbsp;health&amp;nbsp;on&amp;nbsp;10.0.20.203..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;replication&amp;nbsp;health&amp;nbsp;on&amp;nbsp;10.0.20.204..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;10.0.20.201&amp;nbsp;can&amp;nbsp;be&amp;nbsp;new&amp;nbsp;master.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
From:
10.0.20.202(10.0.20.202:3306)&amp;nbsp;(current&amp;nbsp;master)
&amp;nbsp;+--10.0.20.201(10.0.20.201:3306)
&amp;nbsp;+--10.0.20.203(10.0.20.203:3306)
&amp;nbsp;+--10.0.20.204(10.0.20.204:3306)

To:
10.0.20.201(10.0.20.201:3306)&amp;nbsp;(new&amp;nbsp;master)
&amp;nbsp;+--10.0.20.203(10.0.20.203:3306)
&amp;nbsp;+--10.0.20.204(10.0.20.204:3306)
&amp;nbsp;+--10.0.20.202(10.0.20.202:3306)
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Checking&amp;nbsp;whether&amp;nbsp;10.0.20.201(10.0.20.201:3306)&amp;nbsp;is&amp;nbsp;ok&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;10.0.20.202(10.0.20.202:3306):&amp;nbsp;SHOW&amp;nbsp;SLAVE&amp;nbsp;STATUS&amp;nbsp;returned&amp;nbsp;empty&amp;nbsp;result.&amp;nbsp;To&amp;nbsp;check&amp;nbsp;replication&amp;nbsp;filtering&amp;nbsp;rules,&amp;nbsp;temporarily&amp;nbsp;executing&amp;nbsp;CHANGE&amp;nbsp;MASTER&amp;nbsp;to&amp;nbsp;a&amp;nbsp;dummy&amp;nbsp;host.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;10.0.20.202(10.0.20.202:3306):&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;pointing&amp;nbsp;to&amp;nbsp;the&amp;nbsp;dummy&amp;nbsp;host.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;**&amp;nbsp;Phase&amp;nbsp;1:&amp;nbsp;Configuration&amp;nbsp;Check&amp;nbsp;Phase&amp;nbsp;completed.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;2:&amp;nbsp;Rejecting&amp;nbsp;updates&amp;nbsp;Phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;master&amp;nbsp;ip&amp;nbsp;online&amp;nbsp;change&amp;nbsp;script&amp;nbsp;to&amp;nbsp;disable&amp;nbsp;write&amp;nbsp;on&amp;nbsp;the&amp;nbsp;current&amp;nbsp;master:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/mha/scripts/master_ip_online_change&amp;nbsp;--command=stop&amp;nbsp;--orig_master_host=10.0.20.202&amp;nbsp;--orig_master_ip=10.0.20.202&amp;nbsp;--orig_master_port=3306&amp;nbsp;--orig_master_user=&amp;#39;root&amp;#39;&amp;nbsp;--new_master_host=10.0.20.201&amp;nbsp;--new_master_ip=10.0.20.201&amp;nbsp;--new_master_port=3306&amp;nbsp;--new_master_user=&amp;#39;root&amp;#39;&amp;nbsp;--orig_master_ssh_user=root&amp;nbsp;--new_master_ssh_user=root&amp;nbsp;&amp;nbsp;&amp;nbsp;--orig_master_is_new_slave&amp;nbsp;--orig_master_password=xxx&amp;nbsp;--new_master_password=xxx



****************************

Disabled&amp;nbsp;thi&amp;nbsp;VIP&amp;nbsp;-&amp;nbsp;10.0.20.199/24&amp;nbsp;on&amp;nbsp;old&amp;nbsp;master:&amp;nbsp;10.0.20.202&amp;nbsp;

Disabled&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;successfully
***************************



Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Locking&amp;nbsp;all&amp;nbsp;tables&amp;nbsp;on&amp;nbsp;the&amp;nbsp;orig&amp;nbsp;master&amp;nbsp;to&amp;nbsp;reject&amp;nbsp;updates&amp;nbsp;from&amp;nbsp;everybody&amp;nbsp;(including&amp;nbsp;root):
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;FLUSH&amp;nbsp;TABLES&amp;nbsp;WITH&amp;nbsp;READ&amp;nbsp;LOCK..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Orig&amp;nbsp;master&amp;nbsp;binlog:pos&amp;nbsp;is&amp;nbsp;mysql-bin.000002:194.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Waiting&amp;nbsp;to&amp;nbsp;execute&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;logs&amp;nbsp;on&amp;nbsp;10.0.20.201(10.0.20.201:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;master_pos_wait(mysql-bin.000002:194)&amp;nbsp;completed&amp;nbsp;on&amp;nbsp;10.0.20.201(10.0.20.201:3306).&amp;nbsp;Executed&amp;nbsp;0&amp;nbsp;events.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;done.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Getting&amp;nbsp;new&amp;nbsp;master&amp;#39;s&amp;nbsp;binlog&amp;nbsp;name&amp;nbsp;and&amp;nbsp;position..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;mysql-bin.000005:194
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;All&amp;nbsp;other&amp;nbsp;slaves&amp;nbsp;should&amp;nbsp;start&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;here.&amp;nbsp;Statement&amp;nbsp;should&amp;nbsp;be:&amp;nbsp;CHANGE&amp;nbsp;MASTER&amp;nbsp;TO&amp;nbsp;MASTER_HOST=&amp;#39;10.0.20.201&amp;#39;,&amp;nbsp;MASTER_PORT=3306,&amp;nbsp;MASTER_AUTO_POSITION=1,&amp;nbsp;MASTER_USER=&amp;#39;repl&amp;#39;,&amp;nbsp;MASTER_PASSWORD=&amp;#39;xxx&amp;#39;;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;master&amp;nbsp;ip&amp;nbsp;online&amp;nbsp;change&amp;nbsp;script&amp;nbsp;to&amp;nbsp;allow&amp;nbsp;write&amp;nbsp;on&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/mha/scripts/master_ip_online_change&amp;nbsp;--command=start&amp;nbsp;--orig_master_host=10.0.20.202&amp;nbsp;--orig_master_ip=10.0.20.202&amp;nbsp;--orig_master_port=3306&amp;nbsp;--orig_master_user=&amp;#39;root&amp;#39;&amp;nbsp;--new_master_host=10.0.20.201&amp;nbsp;--new_master_ip=10.0.20.201&amp;nbsp;--new_master_port=3306&amp;nbsp;--new_master_user=&amp;#39;root&amp;#39;&amp;nbsp;--orig_master_ssh_user=root&amp;nbsp;--new_master_ssh_user=root&amp;nbsp;&amp;nbsp;&amp;nbsp;--orig_master_is_new_slave&amp;nbsp;--orig_master_password=xxx&amp;nbsp;--new_master_password=xxx



*************************

Enabling&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;-&amp;nbsp;10.0.20.199/24&amp;nbsp;on&amp;nbsp;new&amp;nbsp;master:&amp;nbsp;10.0.20.201&amp;nbsp;

Enabled&amp;nbsp;the&amp;nbsp;VIP&amp;nbsp;successfully
***************************



Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Switching&amp;nbsp;slaves&amp;nbsp;in&amp;nbsp;parallel..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;switch&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;started,&amp;nbsp;pid:&amp;nbsp;7081
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;switch&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;started,&amp;nbsp;pid:&amp;nbsp;7082
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.203&amp;nbsp;...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Waiting&amp;nbsp;to&amp;nbsp;execute&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;logs&amp;nbsp;on&amp;nbsp;10.0.20.203(10.0.20.203:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;master_pos_wait(mysql-bin.000002:194)&amp;nbsp;completed&amp;nbsp;on&amp;nbsp;10.0.20.203(10.0.20.203:3306).&amp;nbsp;Executed&amp;nbsp;0&amp;nbsp;events.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;done.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;and&amp;nbsp;starting&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;10.0.20.201(10.0.20.201:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Executed&amp;nbsp;CHANGE&amp;nbsp;MASTER.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:28&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Slave&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;End&amp;nbsp;of&amp;nbsp;log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.203&amp;nbsp;...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;switch&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.203(10.0.20.203:3306)&amp;nbsp;succeeded.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.204&amp;nbsp;...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Waiting&amp;nbsp;to&amp;nbsp;execute&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;logs&amp;nbsp;on&amp;nbsp;10.0.20.204(10.0.20.204:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;master_pos_wait(mysql-bin.000002:194)&amp;nbsp;completed&amp;nbsp;on&amp;nbsp;10.0.20.204(10.0.20.204:3306).&amp;nbsp;Executed&amp;nbsp;0&amp;nbsp;events.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;&amp;nbsp;done.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;and&amp;nbsp;starting&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;10.0.20.201(10.0.20.201:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:27&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Executed&amp;nbsp;CHANGE&amp;nbsp;MASTER.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:28&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Slave&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;End&amp;nbsp;of&amp;nbsp;log&amp;nbsp;messages&amp;nbsp;from&amp;nbsp;10.0.20.204&amp;nbsp;...
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;--&amp;nbsp;Slave&amp;nbsp;switch&amp;nbsp;on&amp;nbsp;host&amp;nbsp;10.0.20.204(10.0.20.204:3306)&amp;nbsp;succeeded.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Unlocking&amp;nbsp;all&amp;nbsp;tables&amp;nbsp;on&amp;nbsp;the&amp;nbsp;orig&amp;nbsp;master:
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Executing&amp;nbsp;UNLOCK&amp;nbsp;TABLES..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;ok.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Starting&amp;nbsp;orig&amp;nbsp;master&amp;nbsp;as&amp;nbsp;a&amp;nbsp;new&amp;nbsp;slave..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;10.0.20.202(10.0.20.202:3306)&amp;nbsp;and&amp;nbsp;starting&amp;nbsp;replication&amp;nbsp;from&amp;nbsp;the&amp;nbsp;new&amp;nbsp;master&amp;nbsp;10.0.20.201(10.0.20.201:3306)..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:29&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Executed&amp;nbsp;CHANGE&amp;nbsp;MASTER.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;Slave&amp;nbsp;started.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;All&amp;nbsp;new&amp;nbsp;slave&amp;nbsp;servers&amp;nbsp;switched&amp;nbsp;successfully.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;*&amp;nbsp;Phase&amp;nbsp;5:&amp;nbsp;New&amp;nbsp;master&amp;nbsp;cleanup&amp;nbsp;phase..
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;&amp;nbsp;10.0.20.201:&amp;nbsp;Resetting&amp;nbsp;slave&amp;nbsp;info&amp;nbsp;succeeded.
Fri&amp;nbsp;Jun&amp;nbsp;14&amp;nbsp;11:30:30&amp;nbsp;2019&amp;nbsp;-&amp;nbsp;[info]&amp;nbsp;Switching&amp;nbsp;master&amp;nbsp;to&amp;nbsp;10.0.20.201(10.0.20.201:3306)&amp;nbsp;completed&amp;nbsp;successfully.&lt;/pre&gt;&lt;h2 id=&quot;查看状态&quot;&gt;查看状态&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;node01&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node01&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;#39;show&amp;nbsp;slave&amp;nbsp;status\G&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
[root@node01&amp;nbsp;~]#&amp;nbsp;ip&amp;nbsp;a&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.201/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;bond0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.199/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;secondary&amp;nbsp;bond0:1&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node02&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node02&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;quot;show&amp;nbsp;slave&amp;nbsp;status\G&amp;quot;&amp;nbsp;|&amp;nbsp;egrep&amp;nbsp;&amp;#39;Master_Host|Slave_IO_Running|Slave_SQL_Running&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Master_Host:&amp;nbsp;10.0.20.201
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_IO_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running_State:&amp;nbsp;Slave&amp;nbsp;has&amp;nbsp;read&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;log;&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;more&amp;nbsp;updates
[root@node02&amp;nbsp;~]#&amp;nbsp;ip&amp;nbsp;a&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inet&amp;nbsp;10.0.20.202/24&amp;nbsp;brd&amp;nbsp;10.0.20.255&amp;nbsp;scope&amp;nbsp;global&amp;nbsp;bond0&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node03&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node03&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;quot;show&amp;nbsp;slave&amp;nbsp;status\G&amp;quot;&amp;nbsp;|&amp;nbsp;egrep&amp;nbsp;&amp;#39;Master_Host|Slave_IO_Running|Slave_SQL_Running&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Master_Host:&amp;nbsp;10.0.20.201
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_IO_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running_State:&amp;nbsp;Slave&amp;nbsp;has&amp;nbsp;read&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;log;&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;more&amp;nbsp;updates&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;node04&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;[root@node04&amp;nbsp;~]#&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-p123456&amp;nbsp;-e&amp;nbsp;&amp;quot;show&amp;nbsp;slave&amp;nbsp;status\G&amp;quot;&amp;nbsp;|&amp;nbsp;egrep&amp;nbsp;&amp;#39;Master_Host|Slave_IO_Running|Slave_SQL_Running&amp;#39;
mysql:&amp;nbsp;[Warning]&amp;nbsp;Using&amp;nbsp;a&amp;nbsp;password&amp;nbsp;on&amp;nbsp;the&amp;nbsp;command&amp;nbsp;line&amp;nbsp;interface&amp;nbsp;can&amp;nbsp;be&amp;nbsp;insecure.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Master_Host:&amp;nbsp;10.0.20.201
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_IO_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running:&amp;nbsp;Yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Slave_SQL_Running_State:&amp;nbsp;Slave&amp;nbsp;has&amp;nbsp;read&amp;nbsp;all&amp;nbsp;relay&amp;nbsp;log;&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;more&amp;nbsp;updates&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;从上面各个数据库的状态可以看出来，主库已经变成了&lt;code&gt;node01&lt;/code&gt;了，并且&lt;code&gt;vip&lt;/code&gt;也漂移到&lt;code&gt;node01&lt;/code&gt;的机器上了。&lt;/strong&gt;&lt;/p&gt;&lt;h1 id=&quot;报错解决&quot;&gt;报错解决&lt;/h1&gt;&lt;h2 id=&quot;报错一、&quot;&gt;报错一、&lt;/h2&gt;&lt;p&gt;报错信息：&lt;/p&gt;&lt;pre&gt;Can&amp;#39;t&amp;nbsp;locate&amp;nbsp;Parallel/ForkManager.pm&amp;nbsp;in&amp;nbsp;@INC&amp;nbsp;(@INC&amp;nbsp;contains:&amp;nbsp;/usr/local/lib64/perl5&amp;nbsp;/usr/local/share/perl5&amp;nbsp;/usr/lib64/perl5/vendor_perl&amp;nbsp;/usr/share/perl5/vendor_perl&amp;nbsp;/usr/lib64/perl5&amp;nbsp;/usr/share/perl5&amp;nbsp;.)&amp;nbsp;at&amp;nbsp;/usr/local/share/perl5/MHA/SSHCheck.pm&amp;nbsp;line&amp;nbsp;31.
BEGIN&amp;nbsp;failed--compilation&amp;nbsp;aborted&amp;nbsp;at&amp;nbsp;/usr/local/share/perl5/MHA/SSHCheck.pm&amp;nbsp;line&amp;nbsp;31.
Compilation&amp;nbsp;failed&amp;nbsp;in&amp;nbsp;require&amp;nbsp;at&amp;nbsp;/usr/local/bin/masterha_check_ssh&amp;nbsp;line&amp;nbsp;25.
BEGIN&amp;nbsp;failed--compilation&amp;nbsp;aborted&amp;nbsp;at&amp;nbsp;/usr/local/bin/masterha_check_ssh&amp;nbsp;line&amp;nbsp;25.&lt;/pre&gt;&lt;p&gt;解决：&lt;/p&gt;&lt;pre&gt;yum&amp;nbsp;install&amp;nbsp;cpan

cpan&amp;nbsp;Module::Build

#&amp;nbsp;上面的命令执行完成后，需要重新解压&amp;nbsp;mha-manager&amp;nbsp;的包
再次执行&amp;nbsp;

perl&amp;nbsp;Makefile.PL

make
#&amp;nbsp;这一步中&amp;nbsp;会提示&amp;nbsp;输入，都输入yes&amp;nbsp;回车

make&amp;nbsp;install&lt;/pre&gt;</description><pubDate>Mon, 20 Apr 2020 20:24:39 +0800</pubDate></item><item><title>滴滴开源夜莺Nightingale：企业级监控解决方案</title><link>https://www.sresz.cn/Productnews/19.html</link><description>&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;夜莺（Nightingale）是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。Nightingale 在产品完成度、系统高可用、以及用户体验方面，达到了企业级的要求，可满足不同规模用户的场景，小到几台机器，大到数十万都可以完美支撑。兼顾云原生和裸金属，支持应用监控和系统监控，插件机制灵活，插件丰富完善，具有高度的灵活性和可扩展性。&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;GitHub 地址：https://github.com/didi/nightingale&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: center; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;p&gt;&lt;img data-ratio=&quot;0.5009259259259259&quot; src=&quot;https://img.sresz.cn/upload/2020/04/202004151586913655199135.jpg&quot; data-type=&quot;png&quot; data-w=&quot;1080&quot; draggable=&quot;false&quot; style=&quot;margin: 0px; top: 0px; left: 0px; right: 0px; bottom: 0px;&quot; alt=&quot;night.jpg&quot; title=&quot;night.jpg&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;Nightingale 在 Open-Falcon 的基础上，结合滴滴内部的最佳实践，在性能、可维护性、易用性方面做了大量的改进，作为集团统一的监控解决方案，支撑了滴滴内部数十亿监控指标，覆盖了从系统、容器、到应用等各层面的监控需求，周活跃用户数千。五年磨一剑，取之开源，回馈开源。&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: center; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;p&gt;&lt;img data-ratio=&quot;0.48125&quot; src=&quot;https://img.sresz.cn/upload/2020/04/202004131586792344717437.png&quot; data-type=&quot;jpeg&quot; data-w=&quot;640&quot; draggable=&quot;false&quot; style=&quot;margin: 0px; top: 0px; left: 0px; right: 0px; bottom: 0px;&quot; alt=&quot;2001.png&quot; title=&quot;2001.png&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;Nightingale 采用树状节点导航，我们称之为对象树。对象树本质上是一种对监控对象的分组管理机制，方便查找和查看监控对象，以及对监控对象设置监控策略等管理动作。一棵典型的树可从上到下描述为组织架构关系、产品服务模块关系、机房和机器挂载关系，该导航树可根据用户需求自行灵活定制。&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: center; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;p&gt;&lt;img data-ratio=&quot;0.4640625&quot; src=&quot;https://img.sresz.cn/upload/2020/04/202004131586792359237242.png&quot; data-type=&quot;jpeg&quot; data-w=&quot;640&quot; draggable=&quot;false&quot; style=&quot;margin: 0px; top: 0px; left: 0px; right: 0px; bottom: 0px;&quot; alt=&quot;2002.png&quot; title=&quot;2002.png&quot;/&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;监控策略应用到某个节点后，该节点下的所有子节点挂载的所有的机器都会应用这个策略，任何一台机器触发相关阈值都会产生告警。&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: center; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;p&gt;&lt;img data-ratio=&quot;0.4875&quot; src=&quot;https://img.sresz.cn/upload/2020/04/202004131586792373349512.png&quot; data-type=&quot;jpeg&quot; data-w=&quot;640&quot; draggable=&quot;false&quot; style=&quot;margin: 0px; top: 0px; left: 0px; right: 0px; bottom: 0px;&quot; alt=&quot;20003.png&quot; title=&quot;20003.png&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;监控大盘的定制做了大幅易用性改进，支持了图表阈值，支持了图表分类，新增图表和排序管理都是可见即所得的方式，巡检大盘的定制从此不再是困难。&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;Nightingale 是在 Open-Falcon 的基础上衍化发展而来，Open-Falcon 作为国内使用最广泛的监控解决方案之一，为 Nightingale 的设计开发提供了大量的借鉴意义。&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;margin: 0px; padding: 0px 10px 0px 9px; color: rgb(60, 60, 60); font-size: 16px; font-weight: bold; letter-spacing: 1px; text-align: left; line-height: 1.8; background: rgb(255, 255, 255); z-index: 10000;&quot;&gt;与Open-Falcon的不同点&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; data-role=&quot;list&quot; class=&quot;_135editor&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; mpa-from-tpl=&quot;t&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;告警引擎重构：Open-Falcon 的告警策略，在监控数据推送上来的同时会触发策略判断，这种「推」的模式优势是策略的判断时效性非常高，但是不利于更高级的告警策略的支持和扩展，比如多条件的组合报警就很难支持。Nightingale 转为推拉结合模式，通过推模式保证大部分策略判断的效率，通过拉模式支持了与条件告警和 nodata 告警；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;引入了导航对象树：将 Open-Falcon 采用的扁平 HostGroup，转为 Nightingale 的导航对象树，对象树本质上是一种对监控对象的分组管理机制，方便查找和查看监控对象，以及对监控对象设置监控策略等管理动作。同时在 Nightingale 中，去除了告警模板的概念，告警策略直接与树节点绑定，简化设计，大幅提升灵活度和易用性；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;索引模块升级换代：Open-Falcon 使用 MySQL 存储 metrics 的索引数据，在扩展性和灵活性上存在瓶颈。Nightingale 根据监控需求，设计开发了全新的内存索引模块 index，查询方式更多样，查询效率更高，避免了原来 MySQL 索引数据达到亿级别时面临的维护优化工作；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;时序数据库优化：&lt;/span&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;在 Open-Falcon 存储模块 Graph 的基础上，引入 Facebook 的 Gorilla 压缩方案，近期几个小时的数据采用内存存储，大幅提升数据查询效率，长期数据仍然使用 rrdtool 数据格式存储在硬盘上。&lt;/span&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;同时进一步完善了时序数据库的性能和稳定性；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;告警引擎高可用改进：告警引擎 judge 模块通过心跳机制做到了故障自动摘除，再也不用担心单个 judge 宕机导致部分策略失效，需要人工介入的问题，index 模块也是采用类似方式保证可用性；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;原生内置日志监控功能：&lt;/span&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;Nightingale 客户端原生内置了日志匹配和指标抽取能力，在 web 控制台页面上支持了日志匹配规则的配置，同时也支持读取目标机器特定目录下的配置文件的方式，让业务指标监控更为易用；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;可运维性增强：将 portal（falcon-plus 中的API）、uic、dashboard、hbs、alarm 合并为一个模块：monapi，简化了系统整体部署难度，原来的部分模块间调用变成进程内方法调用，性能更高；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;配置文件中心化：&lt;/span&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;配置文件做了易用性改造，抽取数据库通用配置到 mysql.yml，抽取端口实例地址等关联配置到 address.yml，大批配置在代码里给了默认值，使得配置文件更清晰，易于维护。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;margin: 0px; padding: 0px 10px 0px 9px; color: rgb(60, 60, 60); font-size: 16px; font-weight: bold; letter-spacing: 1px; text-align: left; line-height: 1.8; background: rgb(255, 255, 255); z-index: 10000;&quot;&gt;与Open-Falcon的相同点&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;数据模型没有变化，仍然是 metric、endpoint、tags 的组织方式，agent 基本是可以复用的，Nightingale 中的 agent 叫 collector，融合了原来 Open-Falcon 的 agent 和 falcon-log-agent 的逻辑，各种监控插件也都是可以复用的。&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;数据流向和整体处理逻辑是类似的，仍然使用灵活的推模型，分为数据存储和告警判断两条链路。&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;margin: 0px; padding: 0px 10px 0px 9px; color: rgb(60, 60, 60); font-size: 16px; font-weight: bold; letter-spacing: 1px; text-align: left; line-height: 1.8; background: rgb(255, 255, 255); z-index: 10000;&quot;&gt;Nightingale架构&lt;/section&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;p&gt;&lt;img data-ratio=&quot;0.5484375&quot; src=&quot;https://img.sresz.cn/upload/2020/04/202004131586792392300206.png&quot; data-type=&quot;jpeg&quot; data-w=&quot;640&quot; draggable=&quot;false&quot; style=&quot;margin: 0px; top: 0px; left: 0px; right: 0px; bottom: 0px;&quot; alt=&quot;20005.png&quot; title=&quot;20005.png&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br mpa-from-tpl=&quot;t&quot;/&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; data-role=&quot;list&quot; class=&quot;_135editor&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; mpa-from-tpl=&quot;t&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;collector 即 agent，可以采集机器常见指标，原生支持日志监控，支持插件机制，支持业务通过接口直接上报数据；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;transfer 提供 rpc 接口接收 collector 上报的数据，然后通过一致性哈希，将数据转发给多台 tsdb 和多台 judge；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;tsdb 即 open-falcon 中的 graph 组件，用于存储历史数据，支持配置为双写模式提升系统容灾能力，tsdb 会把监控数据转发一份给 index 建索引；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;index 是内存索引模块，替换原来的 MySQL 方案，在内存里构建索引，便于后续数据检索，在检索的灵活性和检索性能方面大幅提升；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;judge 是告警引擎，从 monapi（portal）同步监控策略，然后对接收到的数据做告警判断，如满足阈值，则生成告警事件推送到 Redis 队列；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;monapi（alarm）从 Redis 队列中读取 judge 生成的事件，进行二次处理，补充一些元信息，生成告警消息，重新推送回 Redis 队列；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;各发送组件，比如 mail-sender、sms-sender 等，从 Redis 读取告警消息，发送告警，抽象出各类 sender 是为了后续定制方便；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;monapi 集成了原来多个模块的功能，提供接口给 js 调用，api 前缀为 /api/portal，数据查询走 transfer，去除了 open-falcon 中原来的 query 组件，api 前缀为 /api/transfer，索引查询的 api 前缀 /api/index，于是，在前端统一搭建 nginx，即可通过不同 location 将请求转发到不同后端；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;数据库仍然使用 MySQL，主要存储的内容包括：用户信息、团队信息、树节点信息、告警策略、监控大盘、屏蔽策略、采集策略、部分组件心跳信息等。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;margin: 0px; padding: 0px 10px 0px 9px; color: rgb(60, 60, 60); font-size: 16px; font-weight: bold; letter-spacing: 1px; text-align: left; line-height: 1.8; background: rgb(255, 255, 255); z-index: 10000;&quot;&gt;仍在进行中的工作&lt;/section&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; class=&quot;&quot;&gt;&lt;section mpa-from-tpl=&quot;t&quot; mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; text-align: justify; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); box-sizing: border-box;&quot;&gt;&lt;br mpa-from-tpl=&quot;t&quot;/&gt;&lt;/section&gt;&lt;section data-mpa-template=&quot;t&quot; mpa-from-tpl=&quot;t&quot; data-role=&quot;list&quot; class=&quot;_135editor&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; mpa-from-tpl=&quot;t&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;提供监控指标聚合组件，现在的架构可以解决机器级、模块级的监控，但是集群维度的监控指标，是需要聚合整个集群的所有模块、机器的指标，做一些加和、求平均之类的操作，相关聚合组件，我们在紧锣密鼓的开源过程中；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;与 Kubernetes 无缝集成的工作，也在进行之中；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p mpa-is-content=&quot;t&quot; style=&quot;padding-right: 10px; padding-left: 9px; clear: both; min-height: 1em; font-size: 15px; letter-spacing: 1px; line-height: 1.8; color: rgb(60, 60, 60); text-align: justify;&quot;&gt;完善更多监控插件，之前 Open-Falcon 社区里的很多插件都是可以直接用的，我们会尽量补充社区没有的插件，并对社区已有的插件，进行二次整理和维护，让 Nightingale 周边更完善。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;</description><pubDate>Mon, 13 Apr 2020 23:33:04 +0800</pubDate></item><item><title>基于 Prometheus 构建高大上的 MySQL 监控平台</title><link>https://www.sresz.cn/monitor/18.html</link><description>&lt;h2 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.4em; border-bottom: 1px solid rgb(238, 238, 238); line-height: 1.6;&quot;&gt;概述&lt;/h2&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;对于MySQL的监控平台，相信大家实现起来有很多了：基于天兔的监控，还有基于zabbix相关的二次开发。相信很多同行都应该已经开始玩起来了。我这边的选型是prometheus + granafa 的实现方式。&lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;简而言之&lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;就是我现在的&lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;生产环境使用的是prometheus，还有就是 &lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;grana&lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;满足的我的日常工作需要。&lt;/span&gt;&lt;span style=&quot;font-size: 15px; font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei UI&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Arial, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;1、首先看下我们的监控效果&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; text-align: center; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004141586794359657288.png&quot; title=&quot;001.png&quot; alt=&quot;001.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;2、MySQL状态：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004141586794402858675.png&quot; style=&quot;&quot; title=&quot;002.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004141586794402117686.png&quot; style=&quot;&quot; title=&quot;004.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004141586794402119586.png&quot; style=&quot;&quot; title=&quot;003.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004141586794402707182.png&quot; style=&quot;&quot; title=&quot;005.png&quot;/&gt;&lt;/p&gt;&lt;h2 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.4em; border-bottom: 1px solid rgb(238, 238, 238); line-height: 1.6;&quot;&gt;exporter 相关部署&lt;/h2&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;安装exporter：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;[root@controller2 opt]# https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz&lt;br/&gt;[root@controller2 opt]# tar -xf mysqld_exporter-0.10.0.linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;2、添加mysql 账户：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO &amp;#39;exporter&amp;#39;@&amp;#39;%&amp;#39; IDENTIFIED BY &amp;#39;localhost&amp;#39;;&lt;br/&gt;flush privileges;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;3、编辑配置文件：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;[root@controller2 mysqld_exporter-0.10.0.linux-amd64]# cat /opt/mysqld_exporter-0.10.0.linux-amd64/.my.cnf&lt;br/&gt;[client]&lt;br/&gt;user=exporter&lt;br/&gt;password=123456&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;4、设置配置文件：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;[root@controller2 mysqld_exporter-0.10.0.linux-amd64]# cat /etc/systemd/system/mysql_exporter.service&lt;br/&gt;[Unit]&lt;br/&gt;Description=mysql Monitoring System&lt;br/&gt;Documentation=mysql Monitoring System&lt;br/&gt;&lt;br/&gt;[Service]&lt;br/&gt;ExecStart=/opt/mysqld_exporter-0.10.0.linux-amd64/mysqld_exporter \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.info_schema.processlist \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.info_schema.innodb_tablespaces \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.info_schema.innodb_metrics &amp;nbsp;\&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.perf_schema.tableiowaits \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.perf_schema.indexiowaits \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.perf_schema.tablelocks \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.engine_innodb_status \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.perf_schema.file_events \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.info_schema.processlist \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.binlog_size \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.info_schema.clientstats \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -collect.perf_schema.eventswaits \&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -config.my-cnf=/opt/mysqld_exporter-0.10.0.linux-amd64/.my.cnf&lt;br/&gt;&lt;br/&gt;[Install]&lt;br/&gt;WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;5、添加配置到prometheus server&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt; - job_name: &amp;#39;mysql&amp;#39;&lt;br/&gt; &amp;nbsp; &amp;nbsp;static_configs:&lt;br/&gt; &amp;nbsp; &amp;nbsp; - targets: [&amp;#39;192.168.1.11:9104&amp;#39;,&amp;#39;192.168.1.12:9104&amp;#39;]&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;6、测试看有没有返回数值：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;http://192.168.1.12:9104/metrics&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;正常我们通过mysql_up可以查询倒mysql监控是否已经生效，是否起起来&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;#HELP mysql_up Whether the MySQL server is up.&lt;br/&gt;#TYPE mysql_up gauge&lt;br/&gt;mysql_up 1&lt;/code&gt;&lt;/pre&gt;&lt;h2 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.4em; border-bottom: 1px solid rgb(238, 238, 238); line-height: 1.6;&quot;&gt;监控相关指标&lt;/h2&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;在做任何一个东西监控的时候，我们要时刻明白我们要监控的是什么，指标是啥才能更好的去监控我们的服务，在mysql里面我们通常可以通过一下指标去衡量mysql的运行情况：mysql主从运行情况、查询吞吐量、慢查询情况、连接数情况、缓冲池使用情况以及查询执行性能等。&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.3em; line-height: 1.6;&quot;&gt;主从复制运行指标：&lt;/h3&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;1、主从复制线程监控：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;大部分情况下，很多企业使用的都是主从复制的环境，监控两个线程是非常重要的，在mysql里面我们通常是通过命令：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; show slave status\G;&lt;br/&gt;*************************** 1. row ***************************&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Slave_IO_State: Waiting for master to send event&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Master_Host: 172.16.1.1&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Master_User: repl&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Master_Port: 3306&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Connect_Retry: 60&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Master_Log_File: mysql-bin.000045&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Read_Master_Log_Pos: 72904854&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Relay_Log_File: mariadb-relay-bin.000127&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Relay_Log_Pos: 72905142&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Relay_Master_Log_File: mysql-bin.000045&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Slave_IO_Running: Yes&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Slave_SQL_Running: Yes&lt;/code&gt;&lt;/pre&gt;&lt;h1 style=&quot;white-space: normal; font-size: 16px; line-height: 1.6;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;Slave_IO_Running、Slave_SQL_Running两个线程正常那么说明我们的复制集群是健康状态的。&lt;/span&gt;&lt;/h1&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter中返回的样本数据中通过mysql_slave_status_slave_sql_running来获取主从集群的健康状况。&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_slave_status_slave_sql_running Generic metric from SHOW SLAVE STATUS.&lt;br/&gt;# TYPE mysql_slave_status_slave_sql_running untyped&lt;br/&gt;mysql_slave_status_slave_sql_running{channel_name=&amp;quot;&amp;quot;,connection_name=&amp;quot;&amp;quot;,master_host=&amp;quot;172.16.1.1&amp;quot;,master_uuid=&amp;quot;&amp;quot;} 1&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;2、主从复制落后时间：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;在使用show slave status 里面还有一个关键的参数Seconds_Behind_Master。Seconds_Behind_Master表示slave上SQL thread与IO thread之间的延迟，我们都知道在MySQL的复制环境中，slave先从master上将binlog拉取到本地（通过IO thread），然后通过SQL thread将binlog重放，而Seconds_Behind_Master表示本地relaylog中未被执行完的那部分的差值。所以如果slave拉取到本地的relaylog（实际上就是binlog，只是在slave上习惯称呼relaylog而已）都执行完，此时通过show slave status看到的会是0&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;Seconds_Behind_Master: 0&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter中返回的样本数据中通过mysql_slave_status_seconds_behind_master 来获取相关状态。&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_slave_status_seconds_behind_master Generic metric from SHOW SLAVE STATUS.&lt;br/&gt;# TYPE mysql_slave_status_seconds_behind_master untyped&lt;br/&gt;mysql_slave_status_seconds_behind_master{channel_name=&amp;quot;&amp;quot;,connection_name=&amp;quot;&amp;quot;,master_host=&amp;quot;172.16.1.1&amp;quot;,master_uuid=&amp;quot;&amp;quot;} 0&lt;/code&gt;&lt;/pre&gt;&lt;h3 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.3em; line-height: 1.6;&quot;&gt;查询吞吐量：&lt;/h3&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;说到吞吐量，那么我们如何从那方面来衡量呢？&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;通常来说我们可以根据mysql 的插入、查询、删除、更新等操作来&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;为了获取吞吐量，MySQL 有一个名为 Questions 的内部计数器（根据 MySQL 用语，这是一个服务器状态变量），客户端每发送一个查询语句，其值就会加一。由 Questions 指标带来的以客户端为中心的视角常常比相关的Queries 计数器更容易解释。作为存储程序的一部分，后者也会计算已执行语句的数量，以及诸如PREPARE 和 DEALLOCATE PREPARE 指令运行的次数，作为服务器端预处理语句的一部分。可以通过命令来查询：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Questions&amp;quot;;&lt;br/&gt;+---------------+-------+&lt;br/&gt;| Variable_name | Value |&lt;br/&gt;+---------------+-------+&lt;br/&gt;| Questions &amp;nbsp; &amp;nbsp; | 15071 |&lt;br/&gt;+---------------+-------+&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter 中返回的样本数据中通过 mysql_global_status_questions反映当前Questions计数器的大小：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_questions Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_questions untyped&lt;br/&gt;mysql_global_status_questions 13253&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当然由于prometheus 具有非常丰富的查询语言，我们可以通过这个累加的计数器来查询某一短时间内的查询增长率情况，可以做相关的阈值告警处理、例如一下查询2分钟时间内的查询情况：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;rate(mysql_global_status_questions[2m])&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当然上面是总量，我们可以分别从监控读、写指令的分解情况，从而更好地理解数据库的工作负载、找到可能的瓶颈。通常，通常，读取查询会由 Com_select 指标抓取，而写入查询则可能增加三个状态变量中某一个的值，这取决于具体的指令：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;Writes&amp;nbsp;=&amp;nbsp;Com_insert&amp;nbsp;+&amp;nbsp;Com_update&amp;nbsp;+&amp;nbsp;Com_delete&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;下面我们通过命令获取插入的情况：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Com_insert&amp;quot;;&lt;br/&gt;+---------------+-------+&lt;br/&gt;| Variable_name | Value |&lt;br/&gt;+---------------+-------+&lt;br/&gt;| Com_insert &amp;nbsp; &amp;nbsp;| 10578 |&lt;br/&gt;+---------------+-------+&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;从MySQLD Exporter的/metrics返回的监控样本中，可以通过global_status_commands_total获取当前实例各类指令执行的次数：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_commands_total Total number of executed MySQL commands.&lt;br/&gt;# TYPE mysql_global_status_commands_total counter&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;create_trigger&amp;quot;} 0&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;create_udf&amp;quot;} 0&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;create_user&amp;quot;} 1&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;create_view&amp;quot;} 0&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;dealloc_sql&amp;quot;} 0&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;delete&amp;quot;} 3369&lt;br/&gt;mysql_global_status_commands_total{command=&amp;quot;delete_multi&amp;quot;} 0&lt;/code&gt;&lt;/pre&gt;&lt;h3 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.3em; line-height: 1.6;&quot;&gt;慢查询性能&lt;/h3&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;查询性能方面，慢查询也是查询告警的一个重要的指标。MySQL还提供了一个Slow_queries的计数器，当查询的执行时间超过long_query_time的值后，计数器就会+1，其默认值为10秒，可以通过以下指令在MySQL中查询当前long_query_time的设置：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW VARIABLES LIKE &amp;#39;long_query_time&amp;#39;;&lt;br/&gt;+-----------------+-----------+&lt;br/&gt;| Variable_name &amp;nbsp; | Value &amp;nbsp; &amp;nbsp; |&lt;br/&gt;+-----------------+-----------+&lt;br/&gt;| long_query_time | 10.000000 |&lt;br/&gt;+-----------------+-----------+&lt;br/&gt;1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当然我们也可以修改时间&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SET GLOBAL long_query_time = 5;&lt;br/&gt;Query OK, 0 rows affected (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;然后我们而已通过sql语言查询 MySQL 实例中 Slow_queries 的数量：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Slow_queries&amp;quot;;&lt;br/&gt;+---------------+-------+&lt;br/&gt;| Variable_name | Value |&lt;br/&gt;+---------------+-------+&lt;br/&gt;| Slow_queries &amp;nbsp;| 0 &amp;nbsp; &amp;nbsp; |&lt;br/&gt;+---------------+-------+&lt;br/&gt;1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter返回的样本数据中，通过mysql_global_status_slow_queries指标展示当前的Slow_queries的值：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_slow_queries Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_slow_queries untyped&lt;br/&gt;mysql_global_status_slow_queries 0&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;同样的，更具根据 Prometheus 慢查询语句我们也可以查询到他某段时间内的增长率：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;rate(mysql_global_status_slow_queries[5m])&lt;/pre&gt;&lt;h3 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.3em; line-height: 1.6;&quot;&gt;连接数监控&lt;/h3&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;监控客户端连接情况相当重要，因为一旦可用连接耗尽，新的客户端连接就会遭到拒绝。MySQL 默认的连接数限制为 151。&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW VARIABLES LIKE &amp;#39;max_connections&amp;#39;;&lt;br/&gt;+-----------------+-------+&lt;br/&gt;| Variable_name &amp;nbsp; | Value |&lt;br/&gt;+-----------------+-------+&lt;br/&gt;| max_connections | 151 &amp;nbsp; |&lt;br/&gt;+-----------------+-------+&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当然我们可以修改配置文件的形式来增加这个数值。与之对应的就是当前连接数量，当我们当前连接出来超过系统设置的最大值之后常会出现我们看到的Too many connections(连接数过多)，下面我查找一下当前连接数：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Threads_connected&amp;quot;;&lt;br/&gt;+-------------------+-------+&lt;br/&gt;| Variable_name &amp;nbsp; &amp;nbsp; | Value |&lt;br/&gt;+-------------------+-------+&lt;br/&gt;| Threads_connected | 41 &amp;nbsp; &amp;nbsp; |&lt;br/&gt;+-------------------+-------&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当然 mysql 还提供 Threads_running 这个指标，帮助你分隔在任意时间正在积极处理查询的线程与那些虽然可用但是闲置的连接。&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Threads_running&amp;quot;;&lt;br/&gt;+-----------------+-------+&lt;br/&gt;| Variable_name &amp;nbsp; | Value |&lt;br/&gt;+-----------------+-------+&lt;br/&gt;| Threads_running | 10 &amp;nbsp; &amp;nbsp; |&lt;br/&gt;+-----------------+-------+&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;如果服务器真的达到 max_connections 限制，它就会开始拒绝新的连接。在这种情况下，Connection_errors_max_connections 指标就会开始增加，同时，追踪所有失败连接尝试的Aborted_connects 指标也会开始增加。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter返回的样本数据中:&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_variables_max_connections Generic gauge metric from SHOW GLOBAL VARIABLES.&lt;br/&gt;# TYPE mysql_global_variables_max_connections gauge&lt;br/&gt;mysql_global_variables_max_connections 151&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;表示最大连接数&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_threads_connected Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_threads_connected untyped&lt;br/&gt;mysql_global_status_threads_connected 41&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;表示当前的连接数&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_threads_running Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_threads_running untyped&lt;br/&gt;mysql_global_status_threads_running 1&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;表示当前活跃的连接数&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_aborted_connects Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_aborted_connects untyped&lt;br/&gt;mysql_global_status_aborted_connects 31&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;累计所有的连接数&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_connection_errors_total Total number of MySQL connection errors.&lt;br/&gt;# TYPE mysql_global_status_connection_errors_total counter&lt;br/&gt;mysql_global_status_connection_errors_total{error=&amp;quot;internal&amp;quot;} 0&lt;br/&gt;#服务器内部引起的错误、如内存硬盘等&lt;br/&gt;mysql_global_status_connection_errors_total{error=&amp;quot;max_connections&amp;quot;} 0&lt;br/&gt;#超出连接处引起的错误&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当然根据 prom 表达式，我们可以查询当前剩余可用的连接数：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;mysql_global_variables_max_connections&amp;nbsp;-&amp;nbsp;mysql_global_status_threads_connected&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;查询 MySQL 拒绝连接数&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;mysql_global_status_aborted_connects&lt;/pre&gt;&lt;h3 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.3em; line-height: 1.6;&quot;&gt;缓冲池情况：&lt;/h3&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQL 默认的存储引擎 InnoDB 使用了一片称为缓冲池的内存区域，用于缓存数据表与索引的数据。缓冲池指标属于资源指标，而非工作指标，前者更多地用于调查（而非检测）性能问题。如果数据库性能开始下滑，而磁盘 I/O 在不断攀升，扩大缓冲池往往能带来性能回升。&lt;/span&gt;&lt;/section&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;默认设置下，缓冲池的大小通常相对较小，为 128MiB。不过，MySQL 建议可将其扩大至专用数据库服务器物理内存的 80% 大小。我们可以查看一下：&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; show global variables like &amp;#39;innodb_buffer_pool_size&amp;#39;;&lt;br/&gt;+-------------------------+-----------+&lt;br/&gt;| Variable_name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Value &amp;nbsp; &amp;nbsp; |&lt;br/&gt;+-------------------------+-----------+&lt;br/&gt;| innodb_buffer_pool_size | 134217728 |&lt;br/&gt;+-------------------------+-----------+&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter 返回的样本数据中，使用mysql_global_variables_innodb_buffer_pool_size来表示。&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_variables_innodb_buffer_pool_size Generic gauge metric from SHOW GLOBAL VARIABLES.&lt;br/&gt;# TYPE mysql_global_variables_innodb_buffer_pool_size gauge&lt;br/&gt;mysql_global_variables_innodb_buffer_pool_size 1.34217728e+08&lt;br/&gt;&lt;br/&gt;Innodb_buffer_pool_read_requests记录了正常从缓冲池读取数据的请求数量。可以通过以下指令查看&lt;br/&gt;&lt;br/&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Innodb_buffer_pool_read_requests&amp;quot;;&lt;br/&gt;+----------------------------------+-------------+&lt;br/&gt;| Variable_name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Value &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br/&gt;+----------------------------------+-------------+&lt;br/&gt;| Innodb_buffer_pool_read_requests | 38465 |&lt;br/&gt;+----------------------------------+-------------+&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter返回的样本数据中，使用mysql_global_status_innodb_buffer_pool_read_requests来表示。&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_innodb_buffer_pool_read_requests Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_innodb_buffer_pool_read_requests untyped&lt;br/&gt;mysql_global_status_innodb_buffer_pool_read_requests 2.7711547168e+10&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;当缓冲池无法满足时，MySQL只能从磁盘中读取数据。Innodb_buffer_pool_reads即记录了从磁盘读取数据的请求数量。通常来说从内存中读取数据的速度要比从磁盘中读取快很多，因此，如果Innodb_buffer_pool_reads的值开始增加，可能意味着数据库的性能有问题。可以通过以下只能查看Innodb_buffer_pool_reads的数量&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;MariaDB [(none)]&amp;gt; SHOW GLOBAL STATUS LIKE &amp;quot;Innodb_buffer_pool_reads&amp;quot;;&lt;br/&gt;+--------------------------+-------+&lt;br/&gt;| Variable_name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Value |&lt;br/&gt;+--------------------------+-------+&lt;br/&gt;| Innodb_buffer_pool_reads | 138 &amp;nbsp;|&lt;br/&gt;+--------------------------+-------+&lt;br/&gt;1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;MySQLD Exporter 返回的样本数据中，使用 mysql_global_status_innodb_buffer_pool_read_requests 来表示。&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;# HELP mysql_global_status_innodb_buffer_pool_reads Generic metric from SHOW GLOBAL STATUS.&lt;br/&gt;# TYPE mysql_global_status_innodb_buffer_pool_reads untyped&lt;br/&gt;mysql_global_status_innodb_buffer_pool_reads 138&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px; color: #444444;&quot;&gt;通过以上监控指标，以及实际监控的场景，我们可以利用PromQL快速建立多个监控项。可以查看两分钟内读取磁盘的增长率的增长率：&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;rate(mysql_global_status_innodb_buffer_pool_reads[2m])&lt;/pre&gt;&lt;h3 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.3em; line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;官方模板 ID&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px; color: #444444;&quot;&gt;上面是我们简单列举的一些指标，下面我们使用granafa给 MySQLD_Exporter添加监控图表：&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;font-size: medium; white-space: normal; padding-top: 0px; padding-right: 0px; padding-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;section style=&quot;line-height: 1.75em;&quot;&gt;&lt;span style=&quot;font-size: 15px; color: #444444;&quot;&gt;主从主群监控(模板7371)：&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;line-height: 1.75em;&quot;&gt;&lt;span style=&quot;font-size: 15px; color: #444444;&quot;&gt;相关 MySQL 状态监控7362：&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;line-height: 1.75em;&quot;&gt;&lt;span style=&quot;font-size: 15px; color: #444444;&quot;&gt;缓冲池状态 7365：&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.4em; border-bottom: 1px solid rgb(238, 238, 238); line-height: 1.6;&quot;&gt;简单的告警规则&lt;/h2&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;除了相关模板之外，没有告警规则那么我们的监控就是不完美的，下面列一下我们的监控告警规则。&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;groups:&lt;br/&gt;- name: MySQL-rules&lt;br/&gt; &amp;nbsp;rules:&lt;br/&gt; &amp;nbsp;- alert: MySQL Status&lt;br/&gt; &amp;nbsp; &amp;nbsp;expr: up == 0&lt;br/&gt; &amp;nbsp; &amp;nbsp;for: 5s&lt;br/&gt; &amp;nbsp; &amp;nbsp;labels:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;severity: warning&lt;br/&gt; &amp;nbsp; &amp;nbsp;annotations:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;summary: &amp;quot;{{$labels.instance}}: MySQL has stop !!!&amp;quot;&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;description: &amp;quot;检测MySQL数据库运行状态&amp;quot;&lt;br/&gt;&lt;br/&gt; &amp;nbsp;- alert: MySQL Slave IO Thread Status&lt;br/&gt; &amp;nbsp; &amp;nbsp;expr: mysql_slave_status_slave_io_running == 0&lt;br/&gt; &amp;nbsp; &amp;nbsp;for: 5s&lt;br/&gt; &amp;nbsp; &amp;nbsp;labels:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;severity: warning&lt;br/&gt; &amp;nbsp; &amp;nbsp;annotations:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;summary: &amp;quot;{{$labels.instance}}: MySQL Slave IO Thread has stop !!!&amp;quot;&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;description: &amp;quot;检测MySQL主从IO线程运行状态&amp;quot;&lt;br/&gt;&lt;br/&gt; &amp;nbsp;- alert: MySQL Slave SQL Thread Status&lt;br/&gt; &amp;nbsp; &amp;nbsp;expr: mysql_slave_status_slave_sql_running == 0&lt;br/&gt; &amp;nbsp; &amp;nbsp;for: 5s&lt;br/&gt; &amp;nbsp; &amp;nbsp;labels:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;severity: warning&lt;br/&gt; &amp;nbsp; &amp;nbsp;annotations:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;summary: &amp;quot;{{$labels.instance}}: MySQL Slave SQL Thread has stop !!!&amp;quot;&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;description: &amp;quot;检测MySQL主从SQL线程运行状态&amp;quot;&lt;br/&gt;&lt;br/&gt; &amp;nbsp;- alert: MySQL Slave Delay Status&lt;br/&gt; &amp;nbsp; &amp;nbsp;expr: mysql_slave_status_sql_delay == 30&lt;br/&gt; &amp;nbsp; &amp;nbsp;for: 5s&lt;br/&gt; &amp;nbsp; &amp;nbsp;labels:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;severity: warning&lt;br/&gt; &amp;nbsp; &amp;nbsp;annotations:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;summary: &amp;quot;{{$labels.instance}}: MySQL Slave Delay has more than 30s !!!&amp;quot;&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;description: &amp;quot;检测MySQL主从延时状态&amp;quot;&lt;br/&gt;&lt;br/&gt; &amp;nbsp;- alert: Mysql_Too_Many_Connections&lt;br/&gt; &amp;nbsp; &amp;nbsp;expr: rate(mysql_global_status_threads_connected[5m]) &amp;gt; 200&lt;br/&gt; &amp;nbsp; &amp;nbsp;for: 2m&lt;br/&gt; &amp;nbsp; &amp;nbsp;labels:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;severity: warning&lt;br/&gt; &amp;nbsp; &amp;nbsp;annotations:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;summary: &amp;quot;{{$labels.instance}}: 连接数过多&amp;quot;&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;description: &amp;quot;{{$labels.instance}}: 连接数过多，请处理 ,(current value is: {{ $value }})&amp;quot;&lt;br/&gt;&lt;br/&gt; &amp;nbsp;- alert: Mysql_Too_Many_slow_queries&lt;br/&gt; &amp;nbsp; &amp;nbsp;expr: rate(mysql_global_status_slow_queries[5m]) &amp;gt; 3&lt;br/&gt; &amp;nbsp; &amp;nbsp;for: 2m&lt;br/&gt; &amp;nbsp; &amp;nbsp;labels:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;severity: warning&lt;br/&gt; &amp;nbsp; &amp;nbsp;annotations:&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;summary: &amp;quot;{{$labels.instance}}: 慢查询有点多，请检查处理&amp;quot;&lt;br/&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;description: &amp;quot;{{$labels.instance}}: Mysql slow_queries is more than 3 per second ,(current value is: {{ $value }})&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;2、添加规则到 prometheus：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em; font-family: Consolas, Inconsolata, Courier, monospace;&quot;&gt;&lt;code style=&quot;font-size: 0.85em; margin: 0px 0.15em; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); padding: 0.5em 0.7em; font-family: Consolas, Inconsolata, Courier, monospace; display: block !important;&quot;&gt;rule_files:&lt;br/&gt; &amp;nbsp;- &amp;quot;rules/*.yml&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal; margin-top: 0px !important; margin-bottom: 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;3、打开web ui我们可以看到规则生效了：&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;white-space: normal; margin: 1.3em 0px 1em; padding: 0px; font-size: 1.4em; border-bottom: 1px solid rgb(238, 238, 238); line-height: 1.6;&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;总结&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;section class=&quot;&quot; style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;span style=&quot;font-size: 15px; color: #444444;&quot;&gt;到处监控 MySQL 的相关状态已经完成，大家可以根据 MySQL 更多的监控指标去完善自己的监控，当然这一套就是我用在线上环境的，可以参考参考&lt;/span&gt;&lt;/section&gt;&lt;section class=&quot;&quot; style=&quot;font-size: medium; white-space: normal; line-height: 1.75em; margin: 0px 0px 1.2em !important;&quot;&gt;&lt;/section&gt;</description><pubDate>Mon, 13 Apr 2020 23:09:20 +0800</pubDate></item><item><title>详解Mysql的锁机制</title><link>https://www.sresz.cn/mysql/17.html</link><description>&lt;h1 data-source-line=&quot;1&quot; style=&quot;white-space: normal; margin: 24px 0px 16px; padding: 0px 0px 0.3em; font-size: 2.25em; max-width: 100%; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-size: 17px; color: #FF6827; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;一、Mysql为什么要加锁&lt;br style=&quot;margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;/&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p data-source-line=&quot;4&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;锁机制用于管理对共享资源的并发访问，是对数据库的一种保护机制，也是数据库在事务操作中保证事务数据一致性和完整性的一种机制。当有多个用户并发的去存取数据时，在数据库中就可能会产生多个事务同时去操作一行数据的情况，如果我们不对此类并发操作不加以控制的话，就可能会读取和存储不正确的数据，最终破坏了数据的一致性；下面请看一种典型的并发更新数据所产生的数据丢失更新问题：&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;|&amp;nbsp;事务A&amp;nbsp;|事务B&amp;nbsp;&amp;nbsp;|
|--|--|
|&amp;nbsp;begin&amp;nbsp;A&amp;nbsp;|&amp;nbsp;&amp;nbsp;|
||begin&amp;nbsp;B|
|select&amp;nbsp;salary&amp;nbsp;form&amp;nbsp;tb&amp;nbsp;where&amp;nbsp;id=1(查询结果为1000)||
||select&amp;nbsp;salary&amp;nbsp;form&amp;nbsp;tb&amp;nbsp;where&amp;nbsp;id=1(查询结果为1000)|
|update&amp;nbsp;tb&amp;nbsp;set&amp;nbsp;salary=1100&amp;nbsp;where&amp;nbsp;id=1||
||update&amp;nbsp;tb&amp;nbsp;set&amp;nbsp;salary=1200&amp;nbsp;where&amp;nbsp;id=1|
|commit&amp;nbsp;A||
||commit&amp;nbsp;B|&lt;/pre&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;异常结果：表中salary字段id为1员工的工资更新为了1200，但是实际上针对该员工的工资进行了两次的修改操作，由于事务B在事务A之后提交，所以首先提交的事务A的更新操作被丢失了，所以我们就需要锁机制来保证这种情况不会发生，保证事务中数据的一致性。&lt;/p&gt;&lt;h2 data-source-line=&quot;20&quot; style=&quot;white-space: normal; margin: 24px 0px 16px; padding: 0px 0px 0.3em; font-size: 1.75em; max-width: 100%; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-size: 17px; color: #FF6827; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;二、锁类型&lt;/span&gt;&lt;/h2&gt;&lt;p data-source-line=&quot;21&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789681690575.png&quot; title=&quot;100001.png&quot; alt=&quot;100001.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;21&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;表锁&lt;/span&gt;：&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;开销小，加锁快；不会出现死锁；锁定粒度大，发生锁冲突概率高，并发度最低；&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;21&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;行锁&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;开销大，加锁慢；会出现死锁；锁定粒度小；发生锁冲突的概率低，并发度高；&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;21&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;21&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-size: 17px; font-weight: 600; color: #FF6827; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;三、MyISAM存储引擎：&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;28&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;表级锁的锁模式：&lt;/span&gt;&amp;nbsp;　　　　&lt;/p&gt;&lt;p data-source-line=&quot;28&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;表级锁有两种模式：表共享读锁（Table Read Lock）和表独占写锁（Table Write Lock）；对于MyISAM表的读操作，不会阻塞其他用户对同一个表的读请求，但是会阻塞对同一个表的写请求；对MyISAM表的写操作，则会阻塞其他用户对同一个表的读和写操作；MyISAM表的读操作与写操作之间，以及写操作与写操作之间时串行的。&lt;/p&gt;&lt;p data-source-line=&quot;31&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;并发插入（Concurrent Inserts）&lt;/span&gt;：　　　　&lt;/p&gt;&lt;p data-source-line=&quot;31&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;MyISAM表的读和写是串行的，但这是就总体而言的，在一定的条件下，MyISAM表也可以支持查询和插入操作的并发进行；MyISAM存储引擎有一个系统变量concurrent_insert，专门用以控制其并发插入的行为，其值分为可以为0、1/2。当concurrent_insert设置为0时，则不允许并发插入；当concurrent_insert设置为1时，如果MyISAM表中没有空洞（即表的中间没有被删除的行），MyISAM允许在一个进程读表的同时，另一个进程从表尾插入记录，这也是MySQL的默认设置；当concurrent_insert设置为2时，无论MyISAM表中有没有空洞，都允许在表尾并发插入记录。可以利用MyISAM存储引擎此并发插入特性，来解决应用中对同一个表查询和插入的锁争用。例如：将concurrent_insert变量的值设为2，总是允许并发插入操作，同时通过定期在系统空闲时段执行OPTIMIZE TABLE语句来整理空间碎片，回收因删除记录而产生的中间空洞。&lt;/p&gt;&lt;p data-source-line=&quot;34&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;MyISAM引擎的锁调度：&lt;/span&gt;&amp;nbsp;　　　　&lt;/p&gt;&lt;p data-source-line=&quot;34&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;MyISAM存储引擎的读锁和写锁是互斥的，读写操作时串行的。一个进程请求某个MyISAM表的读锁，同时另一个进程也请求同一个表的写锁，写的优先级比读的优先级更高，所以写进程会先获得锁，即使读请求先到锁的等待队列中，写请求后到锁的等待队列中，写锁页回插入到读锁请求之前执行；我们可以通过一些设置来调节MyISAM的调度行为，通过指定启动参数low-priority-updates，使MyISAM引擎默认给予读请求以优先的权利；通过执行命令SET LOW_PRIORITY_UPDATE=1，使该连接发出的更新请求优先级降低；通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性，降低该语句的优先级。另外，MySQL也提供了一种折中的办法来调节读写冲突，即给系统参数max_write_lock_count设置一个合适的值，当一个表的读锁达到这个值后，MySQL就暂时将写请求的优先级降低，给读进程一定的获得锁的机会。&lt;/p&gt;&lt;h2 data-source-line=&quot;38&quot; style=&quot;white-space: normal; margin: 24px 0px 16px; padding: 0px 0px 0.3em; font-size: 1.75em; max-width: 100%; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-size: 17px; color: #FF6827; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;四、InnoDB存储引擎：&lt;/span&gt;&lt;/h2&gt;&lt;p data-source-line=&quot;39&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789698172737.png&quot; title=&quot;100002.png&quot; alt=&quot;100002.png&quot;/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;39&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;乐观锁与悲观锁是两种并发控制的思想，可用于解决丢失更新的问题&lt;/span&gt;：　　　　&lt;/p&gt;&lt;p data-source-line=&quot;39&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;乐观锁会&amp;quot;乐观的&amp;quot;假定大概率不会发生并发更新冲突，访问、处理数据过程中不加锁，只在更新数据时再根据版本号或时间戳判断是否有冲突，有则处理，无则提交事务；悲观锁会&amp;quot;悲观的&amp;quot;假定大概率会发生并发更新冲突，访问、处理数据前就加排他锁，在整个数据处理过程中锁定数据，事务提交或回滚后才释放锁；&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;43&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;InnoDB存储引擎标准的行级锁&lt;/span&gt;：　　　　&lt;/p&gt;&lt;p data-source-line=&quot;43&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;共享锁(S Lock)：读锁，允许事务读一行数据；　　　　&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;43&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;排他锁(X Lock)：写锁，允许事务删除或更新一行数据；&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789720558456.png&quot; style=&quot;&quot; title=&quot;100003.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789720598190.png&quot; style=&quot;&quot; title=&quot;100004.png&quot;/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;99&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;##&amp;nbsp;事务1
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;show&amp;nbsp;variables&amp;nbsp;&amp;nbsp;like&amp;nbsp;&amp;quot;autocommit&amp;quot;;
+---------------+-------+
|&amp;nbsp;Variable_name&amp;nbsp;|&amp;nbsp;Value&amp;nbsp;|
+---------------+-------+
|&amp;nbsp;autocommit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;OFF&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+---------------+-------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;begin;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;update&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;&amp;nbsp;name=&amp;quot;aaa&amp;quot;&amp;nbsp;&amp;nbsp;where&amp;nbsp;id=1;
Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)
Rows&amp;nbsp;matched:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Changed:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Warnings:&amp;nbsp;0

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;commit;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)



##&amp;nbsp;事务2：
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;show&amp;nbsp;variables&amp;nbsp;like&amp;nbsp;&amp;quot;autocommit&amp;quot;;
+---------------+-------+
|&amp;nbsp;Variable_name&amp;nbsp;|&amp;nbsp;Value&amp;nbsp;|
+---------------+-------+
|&amp;nbsp;autocommit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;OFF&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+---------------+-------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;begin;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;update&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;name=&amp;quot;haha&amp;quot;&amp;nbsp;&amp;nbsp;where&amp;nbsp;id=1;
Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(12.89&amp;nbsp;sec)
Rows&amp;nbsp;matched:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Changed:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Warnings:&amp;nbsp;0

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;rollback;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tb1&amp;nbsp;where&amp;nbsp;id=1;
+----+------+
|&amp;nbsp;id&amp;nbsp;|&amp;nbsp;name&amp;nbsp;|
+----+------+
|&amp;nbsp;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;aaa&amp;nbsp;&amp;nbsp;|
+----+------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;p data-source-line=&quot;99&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;99&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;InnoDB行锁的实现方式：&lt;/span&gt;&amp;nbsp;　　&lt;/p&gt;&lt;p data-source-line=&quot;99&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;InnoDB行锁是通过给索引上的索引项加锁的，InnoDB这种行锁实现特点意味着：只有通过索引条件检索数据，InnoDB才使用行级锁，否则InnoDB将使用表锁。在不通过索引条件查询的时候，InnoDB确实是使用表锁而不是行锁；由于MySQL的行锁是针对索引加的锁，不是针对记录加的锁，所以虽然是访问不同行的记录，但是如果是使用相同的索引键，是会出现锁冲突的；当表有多个索引的时候，不同的事务可以使用不同的索引锁定不同的行，另外，无论是使用主键索引、唯一索引或普通索引，InnoDB都会使用行锁来对数据加锁；即便是在条件中使用了索引字段，但是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的，如果MySQL认为全表扫描效率更高，比如对一些很小的表，它就不会使用索引，这种情况下InnoDB将使用表锁而不是行锁。&lt;/p&gt;&lt;p data-source-line=&quot;102&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;意向锁：&lt;/span&gt;&amp;nbsp;　　　　&lt;/p&gt;&lt;p data-source-line=&quot;102&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;意向共享锁(IS Lock)：事务想要获得一张表中某几行的共享锁；&lt;/span&gt;&amp;nbsp;　　　　&lt;/p&gt;&lt;p data-source-line=&quot;102&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;意向排他锁(IX Lock)：事务想要获得一张表中某几行的排它锁；&lt;/span&gt;&amp;nbsp;　　　　&amp;nbsp;&lt;/p&gt;&lt;p data-source-line=&quot;102&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;查看InnoDB存储引擎的锁信息：&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;102&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;show&amp;nbsp;&amp;nbsp;engine&amp;nbsp;innodb&amp;nbsp;status\G;
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;show&amp;nbsp;full&amp;nbsp;processlist;
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;information_schema.innodb_trx\G;
***************************&amp;nbsp;1.&amp;nbsp;row&amp;nbsp;***************************
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_id:&amp;nbsp;1266629
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_state:&amp;nbsp;RUNNING
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_started:&amp;nbsp;2020-01-08&amp;nbsp;16:24:50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_requested_lock_id:&amp;nbsp;NULL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_wait_started:&amp;nbsp;NULL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_weight:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_mysql_thread_id:&amp;nbsp;36696
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_query:&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;information_schema.innodb_trx
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_operation_state:&amp;nbsp;NULL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_tables_in_use:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_tables_locked:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_lock_structs:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_lock_memory_bytes:&amp;nbsp;376
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_rows_locked:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_rows_modified:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_concurrency_tickets:&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_isolation_level:&amp;nbsp;REPEATABLE&amp;nbsp;READ
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_unique_checks:&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trx_foreign_key_checks:&amp;nbsp;1
trx_last_foreign_key_error:&amp;nbsp;NULL
&amp;nbsp;trx_adaptive_hash_latched:&amp;nbsp;0
&amp;nbsp;trx_adaptive_hash_timeout:&amp;nbsp;10000
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;p data-source-line=&quot;102&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;143&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789631418824.png&quot; title=&quot;100005.png&quot; alt=&quot;100005.png&quot;/&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;information_schema.innodb_lock_waits\G;
Empty&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;p data-source-line=&quot;148&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789619787274.png&quot; title=&quot;100006.png&quot; alt=&quot;100006.png&quot;/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;153&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789607208323.png&quot; title=&quot;100007.png&quot; alt=&quot;100007.png&quot;/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;155&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;一致性的非锁定读(Consistent Nonlocking Read)&lt;/span&gt;: 　　&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;是指InnoDB存储引擎通过很多个版本控制(multi versioning)的方式来读取当前执行时间数据库中的行的数据。如果读取的行正在执行DELETE或UPDATE操作，这时读取操作不会因此去等待行上的锁的释放；相反，InnoDB存储引擎会去读取行的一个快照数据，快照数据是指该行的之前的版本的数据，该实现是通过undo段来完成的。而undo用来事务中国回滚数据，因此快照数据本身是没有额外的开销。此外，读取快照数据是不需要上锁的，因为没有事务需要对历史数据进行修改操作。然而在不同的事务隔离级别下，对于快照数据，非一致性读总是读取被锁定行的最新一份快照数据，而在REPEATABLE READ事务隔离级别下，对于快照数据，非一致性读总是读取事务开始时的行数据版本。&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;158&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789589765656.png&quot; title=&quot;100008.png&quot; alt=&quot;100008.png&quot;/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;160&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;一致性的锁定读：&lt;/span&gt;&amp;nbsp;　　&lt;/p&gt;&lt;p data-source-line=&quot;160&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;显示地对数据库读取操作进行加锁以保证数据逻辑的一致性；　　&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;160&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;SELECT ... FOR UPDATE：对读取的行记录加一个X锁，其他事务不能对已锁定的行加任何的锁；　　&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;160&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;SELECT ... LOCK IN SHARE MODE：对读取的行记录加一个S锁，其他事务可以向被锁定的行加S锁，但是如果加X锁，则会被阻塞；&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;160&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;##&amp;nbsp;事务1
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;begin;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;select&amp;nbsp;&amp;nbsp;*&amp;nbsp;from&amp;nbsp;&amp;nbsp;&amp;nbsp;tb1&amp;nbsp;where&amp;nbsp;id=1&amp;nbsp;for&amp;nbsp;update;
+----+------+
|&amp;nbsp;id&amp;nbsp;|&amp;nbsp;name&amp;nbsp;|
+----+------+
|&amp;nbsp;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;aaa&amp;nbsp;&amp;nbsp;|
+----+------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;rollback;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)



##&amp;nbsp;事务2
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;begin;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;tb1&amp;nbsp;where&amp;nbsp;id=1&amp;nbsp;lock&amp;nbsp;in&amp;nbsp;share&amp;nbsp;mode;
+----+------+
|&amp;nbsp;id&amp;nbsp;|&amp;nbsp;name&amp;nbsp;|
+----+------+
|&amp;nbsp;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;aaa&amp;nbsp;&amp;nbsp;|
+----+------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(11.55&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;rollback;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;p data-source-line=&quot;160&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p data-source-line=&quot;200&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;锁算法：&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;200&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/202004131586789575283369.png&quot; title=&quot;100009.png&quot; alt=&quot;100009.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;200&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-size: 17px; font-weight: 600; color: #FF6827; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;五、死锁&lt;/span&gt;&lt;/p&gt;&lt;p data-source-line=&quot;204&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;死锁是指两个或两个以上的事务在执行过程中，因争夺资源而造成的一种互相等待的现象&lt;/span&gt;；MyISAM表锁是Deadlock Free的，这时因为MyISAM总是一次获得所需的全部锁，要么全部满足，要么等待，因此不会出现死锁。但在InnoDB中，除单个SQL组成的事务外，锁是逐步获得的，这就决定了在InnoDB中发生死锁是可能的。发生死锁后，InnoDB一般都能自动检测到，并使一个事务释放锁并回退，另外一个事务获得锁，继续完成事务。但在涉及外部锁，或涉及表锁的情况下，InnoDB并不能完全自动检测到死锁，这需要通过设置锁等待超时参数innodb_lock_wait_timeout来解决，需要说明的是，这个参数并不是用来解决死锁问题，在并发访问比较高的情况下，如果大量事务因无法立即获得所需的锁而挂起，会占用大量计算机资源，造成严重性能问题，甚至拖垮数据库。我们通过设置合适的锁等待超时阈值，可以避免这种情况的发生。&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;##&amp;nbsp;事务1
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;begin;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;update&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;&amp;nbsp;name=&amp;quot;jyy&amp;quot;&amp;nbsp;&amp;nbsp;where&amp;nbsp;id=1;
Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)
Rows&amp;nbsp;matched:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Changed:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Warnings:&amp;nbsp;0

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;update&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;&amp;nbsp;name=&amp;quot;xixi&amp;quot;&amp;nbsp;&amp;nbsp;where&amp;nbsp;id=2;
Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(8.25&amp;nbsp;sec)
Rows&amp;nbsp;matched:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Changed:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Warnings:&amp;nbsp;0

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;commit;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;where&amp;nbsp;id&amp;nbsp;in(1,2);
+----+------+
|&amp;nbsp;id&amp;nbsp;|&amp;nbsp;name&amp;nbsp;|
+----+------+
|&amp;nbsp;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;jyy&amp;nbsp;&amp;nbsp;|
|&amp;nbsp;&amp;nbsp;2&amp;nbsp;|&amp;nbsp;xixi&amp;nbsp;|
+----+------+
2&amp;nbsp;rows&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)


##&amp;nbsp;事务2
MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;begin;
Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;update&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;name=&amp;quot;haha&amp;quot;&amp;nbsp;&amp;nbsp;where&amp;nbsp;id=2;
Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.00&amp;nbsp;sec)
Rows&amp;nbsp;matched:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Changed:&amp;nbsp;1&amp;nbsp;&amp;nbsp;Warnings:&amp;nbsp;0

MariaDB&amp;nbsp;[test]&amp;gt;&amp;nbsp;update&amp;nbsp;tb1&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;name=&amp;quot;heihei&amp;quot;&amp;nbsp;&amp;nbsp;where&amp;nbsp;id=1;
ERROR&amp;nbsp;1213&amp;nbsp;(40001):&amp;nbsp;Deadlock&amp;nbsp;found&amp;nbsp;when&amp;nbsp;trying&amp;nbsp;to&amp;nbsp;get&amp;nbsp;lock;&amp;nbsp;try&amp;nbsp;restarting&amp;nbsp;transaction&lt;/pre&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; max-width: 100%; font-weight: 600; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;避免死锁的常用方法：&lt;/span&gt;&amp;nbsp;　　&lt;/p&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;1）在应用中，如果不同的程序会并发存取多个表，应该尽量约定以相同的顺序来访问表，这样可以大大降低产生死锁的机会。在上面的例子中，由于两个session访问表的顺序不同，发生死锁的机会就非常高，但是如果以相同的顺序来访问，死锁就可以避免；　　&lt;/p&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;2）在程序以批量方式处理数据的时候，如果事先对数据排序，保证每个线程按固定的顺序来处理记录，也可以大大降低出现死锁的可能；　　&lt;/p&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;3）在事务中，如果要更新记录，应该直接申请足够级别的锁，即排他锁，而不应该先申请共享锁，从而造成锁冲突，甚至死锁；　　&lt;/p&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;4）在REPEATABLE-READ隔离级别下，如果两个线程同时对相同条件记录用SELECT...FOR UPDATE加排他锁，在没有符合该条件记录情况下，两个线程都会加锁成功。程序发现记录尚不存在，就试图插入一条记录，如果两个线程都这么做，就会出现死锁，这种情况下，将隔离级别READ COMMITTED就可以避免问题；　　&lt;/p&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;5）当隔离级别为READ COMMITTED时，如果两个线程都先执行SELECT...FOR UPDATE，判断是否存在符合条件的记录，如果没有，就插入记录。此时，只有一个线程能插入成功，另外一个线程就会出现锁等待，当第一个线程提交后，第二个线程会因为主键冲突出错，但虽然这个线程出错了，却会获得一个排他锁，这时如果有第三个线程又来申请排它锁，也会出现死锁。&amp;nbsp;&lt;/p&gt;&lt;p data-source-line=&quot;244&quot; style=&quot;white-space: normal; margin-top: 0px; margin-bottom: 16px; padding: 0px; max-width: 100%; min-height: 1em; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, 微软雅黑, &amp;quot;PingFang SC&amp;quot;, Helvetica, Arial, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, 宋体, Heiti, 黑体, sans-serif; text-size-adjust: auto; box-sizing: border-box !important; overflow-wrap: break-word !important;&quot;&gt;6）如果出现了死锁，可以使用上面的检查锁信息的SQL命令来确定最后一个死锁产生的原因。返回结果中国包括死锁相关的事务的详细信息，如引发死锁的SQL语句，事务已经获得的锁，正在等待什么锁，以及被回滚的事务等。据此可以分析死锁产生的原因和改进措施。&lt;/p&gt;</description><pubDate>Mon, 13 Apr 2020 22:45:29 +0800</pubDate></item><item><title>网站排名文章编辑技巧之七条SEO优化建议</title><link>https://www.sresz.cn/Informalessay/16.html</link><description>&lt;p&gt;&lt;span style=&quot;font-family: 宋体, SimSun; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;SEO优化可能是老生常谈的问题了，想要做好网站的排名和收录，不得不说到网站内容中原创文章的重要性了。那么本文将围绕文章编辑技巧，列出几点有助于SEO优化的建议，仅供参考。希望对大家有所帮助~&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;1、文章的原创性&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;1)修改文章的标题，尽可能的选择新颖的，符合用户搜索习惯的标题。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;2)修改首段内容或自己动手来添加首段文字信息。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;3)文章中图片ALT属性的修改和添加。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;4)在不影响阅读的情况下，适当的调整文章的段落顺序。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;5)可以在末段加上一小段含有关键字的总结。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;2、文章标题规范&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;1)对于转载的文章，在修改标题前，要确定当前文章最主要的关键词。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;2)尽量将主关键安排在标题的前半部分。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;3)文章标题应该简洁明了，以不超过15个汉字为宜，最长不得超过30个汉字。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;4)由两部分组成的标题，中间可以用空格隔开，而不是其他符号。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;5)如果文章内含有图片，可以在标题后附上(图)。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;3、页面关键词选择规范&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;1)页面关键词只涉及到当前页面的内容，而不去涉及整个网站、所在频道等内容。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;2)在关键词选择上，可以采取具体关键词+主关键词的形式，在某种情况下，标题也可以作为一个比较具体的关键词。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;3)站在受众的角度考虑，结合用户的一些搜索习惯，来填写适当的关键词。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;4)不同的关键词一定要用英文下的逗号隔开，关键词以3-5个为宜。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;4、文章摘要规范&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;1)文章的摘要里必须包含页面关键词，多个页面的关键词要尽量全部在摘要中出现。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;2)文章摘要要尽可能的重复页面关键词，但不要堆砌，一般来说重复三遍没有问题，重复关键词也有一定的技巧。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;3)文章的摘要没有严格的字数要求，两句话三句话就可以，以80-100字为宜。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;4)文章的摘要不是关键词的堆砌或罗列，而是概括了文章的主要内容，从而引导用户继续读下去。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;5)文章的内容不易过长，如果过长可截为几篇文章，并在文章内建立起阅读指示。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;5、文本规范&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;1)文章的首段一定要出现页面关键词，并且可以把首段出现的部分页面关键词加粗。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;2)文章的末段也要出现页面关键词，尽可能的将页面关键词安排在文章的结尾部分。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;3)页面关键词在文章的正文中要有一定的比例分布，也就是关键字密度，一般情况下是2-8%，在不影响阅读的前提下，一些词都可以用页面关键词来代替。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;4)页面关键词在一篇文章中表达要统一。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;6、图片的规范&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;1)所有上传的图片都应该加上ALT属性，并且ALT属性必须符合图片本身的内容，同时也要尽可能的包含页面关键词。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;2)每副图片下都应该配有适当的文字说明，并且文字说明中要包含页面关键词。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;3)对于含有文本的文章来说，尽量不要在文章开头就显示图片。&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; margin: 0px; padding: 0px; text-align: justify; background-color: #FFFFFF; color: #FF0000;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;7、内外链接的建设&lt;/strong&gt;&lt;/span&gt;&lt;br style=&quot;white-space: normal; margin: 0px; padding: 0px; color: rgb(80, 80, 80); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Helvetica, Arial, Verdana, sans-serif; text-align: justify; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;font-family: 宋体, SimSun; color: #505050; text-align: justify; background-color: #FFFFFF;&quot;&gt;要想收录后排名好，除了做好以上工作，还要针对热点关键词做好内链建设。所谓内链建设，就是在文章中所涉及的核心关键词上，加上该文章的超链。比如这篇文章是关于SEO编辑技巧的，那么就把SEO这几个词都加上该篇文章的URL，这样不但利于百度和其他搜索引擎的收录，也能帮助该文章获得更好的排名。当然条件允许，单独给文章做一些外部链接也是非常必要的，质量好的外链能够帮助搜索引擎更快更好的收录你的文章。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Mon, 13 Apr 2020 22:39:10 +0800</pubDate></item><item><title>OpenTSDB/HBase的调优过程整理</title><link>https://www.sresz.cn/hbase/13.html</link><description>&lt;h1&gt;
    背景
&lt;/h1&gt;
&lt;p&gt;
    过年前，寂寞哥给我三台机器，说搞个新的openTSDB集群。机器硬件是8核16G内存、3个146G磁盘做数据盘。
&lt;/p&gt;
&lt;p&gt;
    我说这太抠了，寂寞哥说之前的TSDB集群运行了两年，4台同样配置的机器，目前hdfs才用了40%，所以前期先用着这三台机器，不够再加。
&lt;/p&gt;
&lt;p&gt;
    于是我只好默默地搭好了CDH5、openTSDB(2.1版本，请注意此版本号)、bosun，并在20台左右的机器上部署了scollector用来测试，然后将&lt;code&gt;dfs.replication&lt;/code&gt;改为了2，一切正常。
&lt;/p&gt;
&lt;p&gt;
    过完年回来后，开始批量在主要业务机器上部署scollector，大概增加到了160台左右。运行了一个星期后，正在添加各种grafana dashboard的时候，就开始发现各种异常了。
&lt;/p&gt;
&lt;p&gt;
    这篇文章主要是总结了处理openTSDB各种状况的过程。需要注意的是，这是个持续的过程，中间修改了非常多的参数，有些问题是做了某项修改后，有很明显的改善，而有些问题的解决其实回头看的时候并不能知道究竟是哪些修改解决了问题，也还没有时间重新去修改验证。因此，本文并不能作为一份解决问题的FAQ文档，纯当本人处理问题的记录罢了。
&lt;/p&gt;
&lt;h1&gt;
    打开文件数
&lt;/h1&gt;
&lt;p&gt;
    首先是发现了无法打开&lt;code&gt;master:4242&lt;/code&gt;页面了，查看了openTSDB的日志，很显眼的&lt;code&gt;too many open file&lt;/code&gt;，于是检查了&lt;code&gt;ulimit&lt;/code&gt;，还是默认的1024，这肯定不够用的。需要修改系统的资源限制：
&lt;/p&gt;
&lt;p&gt;
    首先是&lt;code&gt;/etc/security/limits.conf&lt;/code&gt;
&lt;/p&gt;
&lt;pre&gt;# 添加 * soft nofile 102400 * hard nofile 102400&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    然后是&lt;code&gt;/etc/profile&lt;/code&gt;
&lt;/p&gt;
&lt;pre&gt;# 文件末尾添加 ulimit -HSn 102400&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    重新登录，重启openTSDB，然后检查进程的打开文件数：
&lt;/p&gt;
&lt;pre&gt;# cat /proc/$(ps -ef | /bin/grep &amp;#39;opentsd[b]&amp;#39; | awk &amp;#39;{print $2}&amp;#39;)/limits | /bin/grep &amp;#39;open files&amp;#39; Max open files 102400 102400 files&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    修改已生效，打开文件数的问题解决了。
&lt;/p&gt;
&lt;h1&gt;
    内核参数
&lt;/h1&gt;
&lt;p&gt;
    接着没过1小时，就出现了查询非常久都出不来的情况，于是就注意观察openTSDB的打开文件数，然而只有1500左右，怀疑可能是并发数和backlog的问题，检查了连接数以及当前的内核参数，发现此时连接数并没有超过内核设置。不过本着尽量排除影响的原则，还是改大了这两个内核参数：
&lt;/p&gt;
&lt;pre&gt;net.ipv4.tcp_max_syn_backlog = 16384 net.core.somaxconn = 65535&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    没有什么新的线索的情况下，只好又重启了TSDB。重启后又恢复正常了。于是用watch命令持续盯着openTSDB的连接数，一边用grafana每30秒刷新页面。发现正常情况时，连接数大概是900以下，而出现问题时(grafana刷不出来图时)，连接数突然就上升到1200以上，然后1分钟内蹦到了2900。赶紧使用netstat看下是什么状态的连接数上涨了，发现是TIME-WAIT。检查&lt;code&gt;net.ipv4.tcp_tw_reuse&lt;/code&gt;已经是1了，然后这天由于有别的事情要忙，就暂时没再看了。
&lt;/p&gt;
&lt;h1&gt;
    regionserver java堆栈大小
&lt;/h1&gt;
&lt;p&gt;
    第二天早上的时候发现又是grafana刷新不出图，后来上CDH管理页面才发现是其中有一个regionserver(tsdb3)挂了：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011926158662556619661.png&quot;/&gt;经大数据组大神提醒，多半是GC导致regionserver挂了。查看果然有个小时级别的GC：&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011927158662556792486.png&quot; class=&quot;aligncenter myImgClass&quot;/&gt;查看了HBase Regionserver java堆栈大小，原来才设置为2.44G。请教了大神，说是因为我部署的这个CDH集群，除了HBase之外还有其他的其实对于openTSDB没有用的Hive、Hue、Oozie、Sqoop2等，所以CDH会根据角色的情况分配java堆栈大小，但是我们完全可以将这些没有用到的服务关掉，手动将HBase Regionserver java堆栈大小设置为物理内存的一半，也就是8G。
&lt;/p&gt;
&lt;p&gt;
    改完配置重启了HBase，貌似一切又正常了。而且，由于有更重要的问题要处理，因此就先暂时放一放了。
&lt;/p&gt;
&lt;h1&gt;
    HBase表压缩
&lt;/h1&gt;
&lt;p&gt;
    那件更重要的事情，就是磁盘空间用得太快了。才160台机器一星期的数据，磁盘空间就才90%下降到80%，我一开始觉得不可能，之前的旧集群，用了两年才用了40%，新的怎么一星期就用了10%呢，这么下去难道只能用10个星期？后来看了下CDH的图，每秒datanode写入都有1M左右，146G的硬盘前途堪忧啊！原来是旧的tcollector是自己写的收集脚本，一台机器收集的metric平均才30来个，而scollector不算自己写的外部脚本，本身就提供了上百个metric，再加上自己写的外部收集脚本，这么下来两者的数据根本就不是一个数量级了。
&lt;/p&gt;
&lt;p&gt;
    想起之前在初始化TSDB的HBase的时候，没有采用压缩：
&lt;/p&gt;
&lt;pre&gt;env COMPRESSION=NONE HBASE_HOME=/usr/lib/hbase /usr/share/opentsdb/tools/create_table.sh&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    不知道现在还能不能开启表压缩，赶紧去请教大神。大神甩给我一个文档：
&lt;/p&gt;
&lt;pre&gt;# hbase shell
# 查看表是否启用压缩
# describe &amp;quot;tsdb&amp;quot;  
# 暂停对外服务，将指定的HBase表disable
# disable &amp;quot;tsdb&amp;quot;  
# 更改压缩类型
# alter &amp;#39;tsdb&amp;#39;, NAME =&amp;gt; &amp;#39;t&amp;#39;, COMPRESSION =&amp;gt; &amp;#39;gz&amp;#39;  
# 重新启用表
# enable &amp;quot;tsdb&amp;quot;
# 确认是否开启了压缩
# describe &amp;quot;tsdb&amp;quot;
# 使压缩在全站生效
# major_compact &amp;quot;tsdb&amp;quot;
# disable &amp;quot;tsdb&amp;quot;
# 更改压缩类型
# alter &amp;#39;tsdb&amp;#39;, NAME =&amp;gt; &amp;#39;t&amp;#39;, COMPRESSION =&amp;gt; &amp;#39;NONE&amp;#39;
# 重新启用表
# enable &amp;quot;tsdb&amp;quot;
# 确认是否开启了压缩
# describe &amp;quot;tsdb&amp;quot;
# 使压缩在全站生效
# major_compact &amp;quot;tsdb&amp;quot;&lt;/pre&gt;
&lt;p&gt;
    &amp;nbsp;
&lt;/p&gt;
&lt;pre&gt;需要注意的是，千万不要在表繁忙期间执行大合并操作&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    我说，用&lt;code&gt;gz&lt;/code&gt;压缩是不是对性能影响大啊，不是很多地方都在用&lt;code&gt;snappy&lt;/code&gt;吗？大神解释说，&lt;code&gt;gz&lt;/code&gt;是压缩比最高的，只对CPU资源有所损耗；按你这个集群的情况，CPU还有负载，都还是比较闲的，加上磁盘资源又这么紧张，最好还是用&lt;code&gt;gz&lt;/code&gt;吧，如果有影响，再改为&lt;code&gt;snappy&lt;/code&gt;呗。
&lt;/p&gt;
&lt;p&gt;
    我想也是，于是就开启了表压缩，磁盘空间问题解决了：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011927158662556751442.png&quot;/&gt;从上图可以很明显地看到开启压缩前后的对比。
&lt;/p&gt;
&lt;h1&gt;
    HBase memstore flush and store files compaction
&lt;/h1&gt;
&lt;p&gt;
    解决完压缩问题后，回头来再看openTSDB查询偶尔没有及时响应的问题。通过查看bosun的Errors页面，经常会出现&lt;code&gt;net/http: request canceled&lt;/code&gt;的报错，这是因为我设置了bosun每分钟检查一次某些metric作为报警的来源，这些报错是因为读取数据时候超时了，那么应该重点看下openTSDB为何反应慢。看了下TSDB的日志，并没有发现什么异常，于是把目光集中在了HBase上。
&lt;/p&gt;
&lt;p&gt;
    Google了一下&lt;code&gt;tsdb hbase performance&lt;/code&gt;，发现了&lt;a href=&quot;http://www.xmsxmx.com/opentsdb-performance-improvement/&quot; target=&quot;_blank&quot;&gt;这篇文章&lt;/a&gt;，里面的这张图(以下简称为cycle图)总结得很好：&amp;nbsp;&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011927158662556729550.png&quot; class=&quot;aligncenter myImgClass&quot;/&gt;那么HBase反应慢，应该是这两种情况：
&lt;/p&gt;
&lt;ol class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            1-&amp;gt;8-&amp;gt;9
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;5
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
    可以看到&lt;code&gt;memstore flush&lt;/code&gt;很明显在这张图中处于一个核心地位，那么减少&lt;code&gt;memstore flush&lt;/code&gt;是否可以改善呢？于是将hbase.hregion.memstore.flush.size从默认的128M改大为1G。
&lt;/p&gt;
&lt;pre&gt;CDH中的hbase.hregion.memstore.flush.size作用解释如下：如memstore大小超过此值（字节数），Memstore将刷新到磁盘。通过运行由hbase.server.thread.wakefrequency指定的频率的线程检查此值。&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    但是这样修改后有个很严重的副作用：GC时间更长了(箭头指向为修改前后的比较)：&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011928158662556827334.png&quot; class=&quot;aligncenter myImgClass&quot;/&gt;后来就把这个参数恢复为128M这个默认值了。
&lt;/p&gt;
&lt;p&gt;
    至于compaction方面的参数，看着解释貌似不好修改，于是就没有改了：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011928158662556893095.png&quot;/&gt;
&lt;/p&gt;
&lt;h1&gt;
    HBase GC 调优
&lt;/h1&gt;
&lt;p&gt;
    再来看下GC的时间规律，发现都是集中在一个小时的0分左右。查看了scollector自带的&lt;code&gt;hbase.region.gc.CollectionTime&lt;/code&gt;这个指标值，确实在一个小时的0分左右就有一个GC的高峰：(红线为ParNew，而蓝线为ConcurrentMarkSweep)&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011928158662556856912.png&quot;/&gt;大神一看，说每小时开始的时候集群网络IO会飙高，问我TSDB这时候在干什么。&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011928158662556863699.png&quot; class=&quot;aligncenter myImgClass&quot;/&gt;于是我在发生问题的时候用&lt;code&gt;iftop -NP&lt;/code&gt;检查网络IO，发现基本上都是60020和50010端口之间的流量：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011929158662556990643.png&quot;/&gt;看不出来openTSDB在做什么，之前用的TSDB都不用怎么改配置直接用默认值的。
&lt;/p&gt;
&lt;p&gt;
    大神沉思下，说我还有办法可以优化下GC时间，优化调整的目的应该是削平GC的波峰，让整个系统的正常服务时间最大化。 大神在&lt;code&gt;HBase RegionServer 的 Java 配置选项&lt;/code&gt;加上以下参数：
&lt;/p&gt;
&lt;pre&gt;-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/data/logs/gc.log&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    接着修改了以下HBase参数：
&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            HBase Server 线程唤醒步骤 (hbase.server.thread.wakefrequency)：该值决定了Hbase Memstore刷新的检测频率，该值默认值为10s，在数据高峰时，每秒写入的数据达到20M左右，调整该值到5s，来帮助尽量使得MemStore的值不超过128M。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            RegionServer 中所有 Memstore 的最大大小 (hbase.regionserver.global.memstore.upperLimit)：该值是小数形式的百分比，默认为0.4，该值与Hfile缓存块大小的总和不能超过0.8，不然会造成HBase启动失败，其目的是为了在Memstore占用的内存达到Java堆栈的该百分比时强制执行刷新数据到磁盘的操作，这里我们将Memstore的百分比设置为0.5，目的是为了尽量避免强制刷新。还有一个最小大小的值(hbase.regionserver.global.memstore.lowerLimit)为0.38，表示要刷新到0.38才结束刷新，未做修改，后续可以调整。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            HFile 块缓存大小 (hfile.block.cache.size)： 该值默认值为0.4，调整为0表示Hbase的磁盘写入不使用内存缓存，测试发现调整为0后性能有一定的退化，尤其是在数据刷新操作的过程中消耗的时间有所上升，这里我们把该值调整为0.3(因为hbase.regionserver.global.memstore.upperLimit已改为了0.5)。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            HStore 阻塞存储文件 (hbase.hstore.blockingStoreFiles)：该值默认为10，如在任意 HStore 中有超过此数量的 HStoreFiles，则会阻止对此 HRegion 的更新，直到完成压缩或直到超过为 &amp;#39;hbase.hstore.blockingWaitTime&amp;#39; 指定的值。将该值改大到100，就是为了减少cycle图中的第9步。
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    然后根据GC打印日志的分析，还修改了HBase RegionServer的Java配置选项：
&lt;/p&gt;
&lt;blockquote&gt;
    &lt;p&gt;
        默认情况下Hbase在新代中采用的GC方式是UseParNewGC，在老代中采用的GC方式为UseConcMarkSweepGC，这两种GC方法都支持多线程的方法，CMS的GC耗费的时间比新代中的GC长，同时如果内存占满还会触发Full GC，我们的优化方向是让GC尽量在新代中进行，通过GC日志发现新代的内存大小只有600M，而总的Java堆栈大小为8G，官方的推荐是新代内存占用为总堆栈的3/8，于是在这里增加参数-Xmn3000m，来扩大新代的大小。
    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
    经过大神的一番调优后，可以明显看到GC时间明显下降了：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011929158662556960781.png&quot;/&gt;
&lt;/p&gt;
&lt;h1&gt;
    文件系统读写优化
&lt;/h1&gt;
&lt;p&gt;
    考虑到是写入数据太多，查看系统的磁盘所有写所消耗的时间确实都比较高，尝试了以下优化方案：(以sdb为例)
&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            ext4挂载参数：
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;mount -o remount,noatime,nodelalloc,barrier=0 /dev/sdb1&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            调度电梯算法改为deadline
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;echo &amp;quot;deadline&amp;quot; &amp;gt; /sys/block/sdb/queue/scheduler&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            开启文件系统的预读缓存
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;blockdev --setra 32768 /dev/sdb&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    经过一番修改后，&lt;code&gt;linux.disk.msec_write&lt;/code&gt;(Total number of ms spent by all writes) 这个指标值大幅下降，但不清楚是GC调优还是文件系统读写优化的效果，但根据经验，ext4性能相比ext3是有所回退的，这么改动应该是有效果的，但&lt;code&gt;barrier=0&lt;/code&gt;这个挂载参数需谨慎使用。&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011929158662556975646.png&quot;/&gt;
&lt;/p&gt;
&lt;h1&gt;
    增加机器/hotspotting
&lt;/h1&gt;
&lt;p&gt;
    虽然GC时间下降了，但是还是在挺高的数值上，而且bosun的Errors还是偶尔出现，为此我增加了bosun的Errors监控指标，通过bosun的api，专门监控bosun出现&lt;code&gt;request canceled&lt;/code&gt;的情况：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011929158662556949446.png&quot;/&gt;可以看到出现此类错误的时候，基本都是在每个小时的0分附近。
&lt;/p&gt;
&lt;p&gt;
    反反复复试过了很多HBase调优之后，依然有偶尔出现&lt;code&gt;request canceled&lt;/code&gt;的问题，且每到整点左右时，用grafana查询也是要1到2分钟才将一个dashboard刷新完，就是说1/30的时间是不可服务的。
&lt;/p&gt;
&lt;p&gt;
    既然之前搜到的那篇文章中有提到最好的方式是增加机器了，刚好旧的TSDB集群刚好也压缩过了，用两个regionserver就可以了，于是将剩下的第三台机器加到了新的TSDB集群中来。
&lt;/p&gt;
&lt;p&gt;
    新的regioserver加进来后，发现情况还是不是太好，依旧是每到一小时的0分附近就是各种slow response。查看了&lt;code&gt;master:60010&lt;/code&gt;页面，各regionserver之间的request分配并不平均，通常是新加入的regionserver只是旧的两台的30%不到，这可能会导致大量的写入集中在两台旧的regionserver上，因而造成slow response。所以先尝试手动平衡下region。
&lt;/p&gt;
&lt;p&gt;
    比如从&lt;code&gt;master:60010&lt;/code&gt;上看数据，发现这个region的request比较多，因此决定将它手动迁移到新的tsdb4(tsdb4.domain.com,60020,1457011734982)
&lt;/p&gt;
&lt;pre&gt;tsdb,\x00\x00\xF5V\xA6\x9A\xE0\x00\x00\x01\x00\x00\xDA\x00\x00\x13\x00\x00c\x00\x00\x15\x00\x00\xDE,1454242184814.29987604fab49d4fd4a0313c6cf3b1b6.&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    操作如下：
&lt;/p&gt;
&lt;pre&gt;# hbase shell move &amp;quot;29987604fab49d4fd4a0313c6cf3b1b6&amp;quot; &amp;quot;tsdb4.domain.com,60020,1457011734982&amp;quot; balance_switch false&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
    记得关闭balance，否则过5分钟，被移动的region又自动回来了
&lt;/p&gt;
&lt;p&gt;
    可以看到修改完后，3个regionserver的writeRequestCount比之前平均多了:&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011930158662557079693.png&quot;/&gt;
&lt;/p&gt;
&lt;h1&gt;
    增加内存
&lt;/h1&gt;
&lt;p&gt;
    每到整点就是各种slow response的问题依然存在。没办法之下只好给regionserver增加内存进行测试了。将3台regionserver的内存都增加到了32G，然后将java堆栈大小改为16G。
&lt;/p&gt;
&lt;h1&gt;
    其他优化
&lt;/h1&gt;
&lt;p&gt;
    主要参考了&lt;a href=&quot;http://www.slideshare.net/xefyr/hbasecon2014-low-latency&quot; target=&quot;_blank&quot;&gt;这个slide&lt;/a&gt;和&lt;a href=&quot;http://www.slideshare.net/lhofhansl/h-base-tuninghbasecon2015ok&quot; target=&quot;_blank&quot;&gt;这个slide&lt;/a&gt;&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011930158662557022471.png&quot;/&gt;&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011930158662557056695.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    另外看到bosun的Errors里还出现了&lt;code&gt;10000 RPCs waiting on ... to come back online&lt;/code&gt;，怀疑可能是处理程序计数不足，于是调大了这两个参数：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011930158662557074640.png&quot;/&gt;&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011930158662557090340.png&quot;/&gt;
&lt;/p&gt;
&lt;h1&gt;
    最终解？TSDB compaction
&lt;/h1&gt;
&lt;p&gt;
    各种方法都试过的情况下，还是出现这个“每到整点左右就是各种slow response的问题”。
&lt;/p&gt;
&lt;p&gt;
    既然系统、hadoop、HBase方面都调整过了，最后只能找openTSDB和bosun下手了。看到scollector已经提供了相当多的tsd指标值，于是增加了一个TSDB的grafana dashboard把所有的相关指标值都显示出来，看看每个小时0分的时候是否有些蛛丝马迹可循。
&lt;/p&gt;
&lt;p&gt;
    最明显的一个指标值就是&lt;code&gt;tsd.hbase.rpcs&lt;/code&gt;，每到整点的时候才出现这些&lt;code&gt;delete&lt;/code&gt;、&lt;code&gt;get&lt;/code&gt;操作，平时都是0，那么100%可以确定这些操作是有关联的：&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011931158662557186788.png&quot; class=&quot;aligncenter myImgClass&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    直接上Google搜&lt;code&gt;tsdb delete&lt;/code&gt;，结果都是问怎么从TSDB中删除数据的。
&lt;/p&gt;
&lt;p&gt;
    回过头来再看其他的指标值，发现&lt;code&gt;tsd.compaction.count&lt;/code&gt;也是在整点的时候特别高：&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011931158662557114296.png&quot; class=&quot;aligncenter myImgClass&quot;/&gt;需要注意的是TSDB的compaction和HBase的compaction其实不是同一个概念。
&lt;/p&gt;
&lt;p&gt;
    然后用&lt;code&gt;tsdb compaction&lt;/code&gt;作为关键词一搜，出来了&lt;a href=&quot;http://opentsdb.net/docs/build/html/user_guide/backends/hbase.html&quot; target=&quot;_blank&quot;&gt;官网的文档&lt;/a&gt;，仔细看下这一段：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011931158662557178268.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    是不是很符合我们的情况，确实是compaction在前而delete在后。原来是TSDB在每小时整点的时候将上个小时的数据读出来(&lt;code&gt;get&lt;/code&gt;)，然后compact成一个row，写入(&lt;code&gt;put&lt;/code&gt;)到HBase，然后删除(&lt;code&gt;delete&lt;/code&gt;)原始数据，所以我们看整点时的RPC请求，这些操作都会出现个凸起。
&lt;/p&gt;
&lt;p&gt;
    接着在&lt;a href=&quot;https://groups.google.com/forum/?hl=fil#!topic/opentsdb/cQ5pNFst8wo&quot; target=&quot;_blank&quot;&gt;这个链接&lt;/a&gt;(貌似都是小集群容易出现这个问题)里看到开发者的讨论：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011931158662557110840.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    于是看下openTSDB的&lt;a href=&quot;http://opentsdb.net/docs/build/html/user_guide/configuration.html&quot; target=&quot;_blank&quot;&gt;配置文档&lt;/a&gt;，果然发现了相关配置：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011931158662557194760.png&quot;/&gt;都是在openTSDB-2.2才新增的配置，赶紧升级了openTSDB。
&lt;/p&gt;
&lt;p&gt;
    那么将tsdb的compaction给关闭了有什么副作用呢？&lt;a href=&quot;https://groups.google.com/forum/#!topic/opentsdb/A9C4G4Wz9d0&quot; target=&quot;_blank&quot;&gt;这个链接&lt;/a&gt;中开发者解释了有两点坏处：
&lt;/p&gt;
&lt;ol class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            磁盘使用率会增加5到10倍；
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            读操作会变慢。
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
    这两点显然都是不可取的，而采用修改compaction间隔等效果并不明显，最后采用了&lt;code&gt;tsd.storage.enable_appends = true&lt;/code&gt;的方式，终于将此问题解决了：
&lt;/p&gt;
&lt;p&gt;
    看下修改前后的性能比较：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011932158662557257362.png&quot;/&gt;GC时间下降明显。
&lt;/p&gt;
&lt;p&gt;
    &lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011932158662557246517.png&quot;/&gt;memstore变化平缓多了。
&lt;/p&gt;
&lt;p&gt;
    &lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011932158662557219001.png&quot;/&gt;slow put 也不再出现了。
&lt;/p&gt;
&lt;p&gt;
    在整点的时候经常出现的&lt;code&gt;request cancle&lt;/code&gt;不再出现了，整点时使用grafana也不会出现转圈圈到timeout的情况了。
&lt;/p&gt;
&lt;p&gt;
    不过值得注意的是，磁盘容量也有所下降(bosun图的时间是UTC时区)：&lt;img class=&quot;aligncenter myImgClass&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011932158662557218788.png&quot;/&gt;
&lt;/p&gt;
&lt;h1&gt;
    经验总结
&lt;/h1&gt;
&lt;p&gt;
    整理信息的时候偶然Google发现了这篇2014年的文章，其实是一样的问题，这次虽然经历了很多波折，但是也是一个难得的学习机会。虽然作为运维，我们能接触到大量优秀的开源产品，但有多少是能仔细看完一个开源产品的文档的？一个软件，不同的情景下面就有不同的表现，不能一概而论。直到遇到坑才去填，明显是本末倒置的行为，以后要戒掉这种浮躁的心态，同一份配置不要以为之前没有问题就能一直用。
&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2020 01:19:06 +0800</pubDate></item><item><title>HBase数据压缩编码探索</title><link>https://www.sresz.cn/hbase/12.html</link><description>&lt;p class=&quot;blog-summary&quot; style=&quot;box-sizing: border-box; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;
    &lt;span data-spm-anchor-id=&quot;a2c4e.11153940.blogcont277084.i1.22ff6adaiu6qJI&quot; style=&quot;box-sizing: border-box;&quot;&gt;摘要：&amp;nbsp;本文主要介绍了hbase对数据压缩，编码的支持，以及云hbase在社区基础上对数据压缩率和访问速度上了进行的改进。&lt;/span&gt;
&lt;/p&gt;
&lt;div class=&quot;content-detail markdown-body&quot; style=&quot;box-sizing: border-box; color: rgb(75, 75, 75); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;
    &lt;h2 id=&quot;1&quot; style=&quot;box-sizing: border-box; font-size: 21px; line-height: 1.5; margin-top: 10px; margin-bottom: 10px;&quot;&gt;
        前言
    &lt;/h2&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        你可曾遇到这种需求，只有几百qps的冷数据缓存，却因为存储水位要浪费几十台服务器？你可曾遇到这种需求，几百G的表，必须纯cache命中，性能才能满足业务需求？你可曾遇到，几十M的小表，由于qps过高，必须不停的split，balance，利用多台服务器来抗热点？&amp;nbsp;&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;面对繁杂的场景，Ali-HBase团队一直致力于为业务提供更多的选择和更低的成本。本文主要介绍了hbase目前两种提高压缩率的主要方法：压缩和DataBlockEncoding。
    &lt;/p&gt;
    &lt;h2 id=&quot;2&quot; style=&quot;box-sizing: border-box; font-size: 21px; line-height: 1.5; margin-top: 10px; margin-bottom: 10px;&quot;&gt;
        无损压缩:更小，更快，更省资源
    &lt;/h2&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        通用压缩作为数据库解决存储的重要手段，通常数据库都存在数据块的概念，针对每个块做压缩和解压。块越大，压缩率越高，scan throughput增加；块越小，随机读IO压力较小，读latency越小。作为一种Tradeoff，线上hbase通常采用64K块大小，在cache中不做压缩，仅在落盘和读盘时做压缩和解压操作。
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        开源hbase通常使用的LZO压缩或者Snappy压缩。这两种压缩的共同特点是都追求较高的压缩解压速度，并实现合理的数据压缩率。然而，随着业务的快速增涨，越来越多的业务因为因为存储水位问题而扩容。hbase针对这一情况，采用了基于跨集群分区恢复技术的副本数优化、机型升级等方法，但依然无法满足存储量的快速膨胀，因此我们一直致力于寻找压缩更高的压缩方式。
    &lt;/p&gt;
    &lt;h3 id=&quot;3&quot; style=&quot;background: url(&amp;quot;images/title.gif&amp;quot;) left top no-repeat fixed; font-family: verdana; color: rgb(102, 102, 102); margin-right: 0px; margin-left: 0px; padding-top: 12px; padding-left: 14px; box-sizing: border-box; line-height: 1.5;&quot;&gt;
        新压缩（zstd、lz4）上线
    &lt;/h3&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        Zstandard（缩写为Zstd）是一种新的无损压缩算法，旨在提供快速压缩，并实现高压缩比。它既不像LZMA和ZPAQ那样追求尽可能高的压缩比，也不像LZ4那样追求极致的压缩速度。这种算法的压缩速度超过200MB/s, 解压速度超过400MB/s（实验室数据），基本可以满足目前hbase对吞吐量的需求。经验证，Zstd的数据压缩率相对于Lzo基本可以提高25%-30%，对于存储型业务，这就意味着三分之一到四分之一的的成本减少。
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        而在另一种情况下，部分表存储量较小，但qps大，对rt要求极高。针对这种场景，我们引入了lz4压缩，其解压速度在部分场景下可以达到lzo的两倍以上。一旦读操作落盘需要解压缩，lz4解压的rt和cpu开销都明显小于lzo压缩。
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        我们先通过一张图片直观的展示各种压缩算法的性能:&amp;nbsp;&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;img title=&quot;compress1&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011850158662553057716.png&quot; alt=&quot;compress1&quot; width=&quot;873&quot; height=&quot;521&quot; style=&quot;border: 0px; box-sizing: border-box; max-width: 900px; height: auto;&quot;/&gt;
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        &lt;img title=&quot;compress2&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011850158662553039197.png&quot; alt=&quot;compress2&quot; width=&quot;879&quot; height=&quot;528&quot; style=&quot;border: 0px; box-sizing: border-box; max-width: 900px; height: auto;&quot;/&gt;
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        以线上几种典型数据场景为例，看看几种压缩的实际压缩率和单核解压速度（以下数据均来自于实际应用）
    &lt;/p&gt;
    &lt;table&gt;
        &lt;thead style=&quot;box-sizing: border-box;&quot;&gt;
            &lt;tr style=&quot;box-sizing: border-box;&quot; class=&quot;firstRow&quot;&gt;
                &lt;th style=&quot;box-sizing: border-box; background-color: rgb(250, 250, 250); border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    业务类型
                &lt;/th&gt;
                &lt;th style=&quot;box-sizing: border-box; background-color: rgb(250, 250, 250); border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    无压缩表大小
                &lt;/th&gt;
                &lt;th style=&quot;box-sizing: border-box; background-color: rgb(250, 250, 250); border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    LZO（压缩率/解压速度MB/s）
                &lt;/th&gt;
                &lt;th style=&quot;box-sizing: border-box; background-color: rgb(250, 250, 250); border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    ZSTD（压缩率/解压速度MB/s）
                &lt;/th&gt;
                &lt;th style=&quot;box-sizing: border-box; background-color: rgb(250, 250, 250); border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    LZ4（压缩率/解压速度MB/s）
                &lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;
            &lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    监控类
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    419.75T
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    5.82/372
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    13.09/256
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    5.19/463.8
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    日志类
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    77.26T
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    4.11/333
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    6.0/287
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    4.16/ 496.1
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    风控类
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    147.83T
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    4.29/297.7
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    5.93/270
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    4.19/441.38
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;box-sizing: border-box;&quot;&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    消费类
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    108.04T
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    5.93/316.8
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    10.51/288.3
                &lt;/td&gt;
                &lt;td align=&quot;left&quot; style=&quot;font-family: Verdana, Helvetica, Arial; word-break: break-all; line-height: 1.5; font-size: 12px; box-sizing: border-box; border-color: silver; border-collapse: collapse; padding: 8px 14px;&quot;&gt;
                    5.55/520.3
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        目前，2017年双11，ZSTD已经在线上全面铺开，已累计优化存储数PB。LZ4也已经在部分读要求较高业务上线。&amp;nbsp;&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;下图为某监控类应用zstd压缩算法后，集群整体存储量的下降情况。数据量由100+T减少到75T。
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        &lt;img title=&quot;result&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011850158662553046882.png&quot; alt=&quot;result&quot; style=&quot;border: 0px; box-sizing: border-box; max-width: 900px; height: auto;&quot;/&gt;
    &lt;/p&gt;
    &lt;h2 id=&quot;4&quot; style=&quot;box-sizing: border-box; font-size: 21px; line-height: 1.5; margin-top: 10px; margin-bottom: 10px;&quot;&gt;
        编码技术：针对结构化数据的即查即解压
    &lt;/h2&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        hbase作为一种schema free的数据库，相当于传统的关系型数据库更加灵活，用户无需设计好表的结构，也可以在同一张表内写入不同schema的数据。然而，由于缺少数据结构的支持，hbase需要很多额外的数据结构来标注长度信息，且无法针对不同的数据类型采用不同的压缩方式。针对这一问题，hbase提出了编码功能，用来降低存储开销。由于编码对cpu开销较小，且效果较好，通常cache中也会开启编码功能。
    &lt;/p&gt;
    &lt;h3 id=&quot;5&quot; style=&quot;background: url(&amp;quot;images/title.gif&amp;quot;) left top no-repeat fixed; font-family: verdana; color: rgb(102, 102, 102); margin-right: 0px; margin-left: 0px; padding-top: 12px; padding-left: 14px; box-sizing: border-box; line-height: 1.5;&quot;&gt;
        旧DIFF Encoding介绍
    &lt;/h3&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        hbase很早就支持了DataBlockEncoding，也就是是通过减少hbase keyvalue中重复的部分来压缩数据。 以线上最常见的DIFF算法为例，某kv压缩之后的结果：
    &lt;/p&gt;
    &lt;ul style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;
        &lt;li&gt;
            &lt;p&gt;
                一个字节的flag（这个flag的作用后面解释）
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                如果和上个KV的键长不一样，则写入1~5个字节的长度
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                如果和上个KV的值长不一样，则写入1~5个字节的长度
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                记录和上个KV键相同的前缀长度，1~5个字节
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                非前缀部分的row key
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                如果是第一条KV,写入列族名
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                非前缀部分的的列名
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                写入1~8字节的timestamp或者与上个KV的timestamp的差(是原值还是写与上个KV的差，取决于哪个字节更小)
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                如果和上个KV的type不一样，则写入1字节的type（Put，Delete）
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                Value内容
            &lt;/p&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        那么在解压缩时，怎么判断和上个KV的键长是否一样，值长是否一样，写入的时间戳究竟是是原值还是差值呢？这些都是通过最早写入的1个字节的flag来实现的，&amp;nbsp;&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;这个字节中的8位bit，含义是：
    &lt;/p&gt;
    &lt;ul style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;
        &lt;li&gt;
            &lt;p&gt;
                第0位，如果为1，键长与上个kv相等
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                第1位，如果为1，值长与上个kv相等
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                第2位，如果为1，type与上个kv一样
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                第3位，如果为1，则写入的timestamp是差值，否则为原值
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                第456位，这3位组合起来的值（能表示0~7），表示写入的时间戳的长度
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                第7位，如果为1，表示写入的timestamp差值为负数，取了绝对值。
            &lt;/p&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        &lt;img title=&quot;diff&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011850158662553059175.png&quot; alt=&quot;diff&quot; width=&quot;884&quot; height=&quot;411&quot; style=&quot;border: 0px; box-sizing: border-box; max-width: 900px; height: auto;&quot;/&gt;
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        DIFF 编码之后，对某个文件的seek包含以下两步：
    &lt;/p&gt;
    &lt;ol style=&quot;box-sizing: border-box; padding-left: 40px;&quot; class=&quot; list-paddingleft-2&quot;&gt;
        &lt;li&gt;
            &lt;p&gt;
                通过index key找到对应的datablock
            &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;p&gt;
                从第一个完整KV开始，顺序查找，不断decode下一个kv，直到找到目标kv为止。
            &lt;/p&gt;
        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        DIFF encoding对小kv场景使用效果较好，可以减少2-5倍的数据量。
    &lt;/p&gt;
    &lt;h3 id=&quot;6&quot; style=&quot;background: url(&amp;quot;images/title.gif&amp;quot;) left top no-repeat fixed; font-family: verdana; color: rgb(102, 102, 102); margin-right: 0px; margin-left: 0px; padding-top: 12px; padding-left: 14px; box-sizing: border-box; line-height: 1.5;&quot;&gt;
        新Indexable Delta Encoding上线
    &lt;/h3&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        从性能角度考虑，hbase通常需要将Meta信息装载进block cache。如果将block大小较小，Meta信息较多，会出现Meta无法完全装入Cache的情况, 性能下降。如果block大小较大，DIFF Encoding顺序查询的性能会成为随机读的性能瓶颈。针对这一情况，我们开发了Indexable Delta Encoding，在block内部也可以通过索引进行快速查询，seek性能有了较大提高。Indexable Delta Encoding原理如图所示：
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        &lt;img title=&quot;index&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011851158662553112728.png&quot; alt=&quot;index&quot; width=&quot;904&quot; height=&quot;412&quot; style=&quot;border: 0px; box-sizing: border-box; max-width: 900px; height: auto;&quot;/&gt;
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        在通过BlockIndex找到对应的数据块后，我们从数据块末尾找到每个完整KV的offset，并利用二分查找快速定位到符合查询条件的完整kv，再顺序decode每一个Diff kv，直到找到目标kv位置。
    &lt;/p&gt;
    &lt;p style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        通过Indexable Delta Encoding，&amp;nbsp;HFile的随机seek性能相对于使用之前翻了一倍，以64K block为例，在全cache命中的随机Get场景下，相对于Diff encoding rt下降50%，但存储开销仅仅提高3-5%。Indexable Delta Encoding目前已在线上多个场景应用，经受了双十一的考验，整体平均读rt减少10%-15%。
    &lt;/p&gt;
    &lt;div style=&quot;box-sizing: border-box;&quot;&gt;
        &amp;nbsp;
    &lt;/div&gt;
    &lt;h1 id=&quot;7&quot; style=&quot;margin: 10px 0px; font-size: 14px; color: rgb(102, 102, 102); box-sizing: border-box; line-height: 1.5;&quot;&gt;
        云端使用
    &lt;/h1&gt;
    &lt;p data-spm-anchor-id=&quot;a2c4e.11153940.blogcont277084.i2.22ff6adaiu6qJI&quot; style=&quot;box-sizing: border-box; margin: 10px auto;&quot;&gt;
        阿里HBase目前已经在阿里云提供商业化服务，任何有需求的用户都可以在阿里云端使用深入改进的、一站式的HBase服务。云HBase版本与自建HBase相比在运维、可靠性、性能、稳定性、安全、成本等方面均有很多的改进，更多内容欢迎大家关注&amp;nbsp;&lt;a href=&quot;https://www.aliyun.com/product/hbase&quot; style=&quot;box-sizing: border-box; color: rgb(52, 104, 164);&quot;&gt;https://www.aliyun.com/product/hbase&lt;/a&gt;
    &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
    &lt;br/&gt;
&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2020 01:18:29 +0800</pubDate></item><item><title>HDFS的元数据文件fsimage和编辑日志edits</title><link>https://www.sresz.cn/hadoop/11.html</link><description>&lt;p&gt;
    在HDFS中，fsimage和eidts是NameNode两个非常重要的文件。
&lt;/p&gt;
&lt;p&gt;
    其中，fsimage是HDFS文件系统存于硬盘中的元数据检查点，里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息；而edits保存了自最后一次检查点之后所有针对HDFS文件系统的操作，比如：增加文件、重命名文件、删除目录等等。
&lt;/p&gt;
&lt;p&gt;
    &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
    在NameNode启动时候，会先将fsimage中的文件系统元数据信息加载到内存，然后根据eidts中的记录将内存中的元数据同步至最新状态；所以，这两个文件一旦损坏或丢失，将导致整个HDFS文件系统不可用。
&lt;/p&gt;
&lt;p&gt;
    &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
    这两种文件存放在${dfs.namenode.name.dir}/current/目录下，文件名以edits_和fsimage_命名，该目录为NameNode上的本地目录。为了保证这两种元数据文件的高可用性，一般的做法，将dfs.namenode.name.dir设置成以逗号分隔的多个目录，这多个目录至少不要在一块磁盘上，最好放在不同的机器上，比如：挂载一个共享文件系统。
&lt;/p&gt;
&lt;p&gt;
    &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
    类似于数据库中的检查点，为了避免edits日志过大，在Hadoop1.X中，SecondaryNameNode会按照时间阈值（比如24小时）或者edits大小阈值（比如1G），周期性的将fsimage和edits的合并，然后将最新的fsimage推送给NameNode。而在Hadoop2.X中，这个动作是由Standby NameNode来完成。
&lt;/p&gt;
&lt;p&gt;
    &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
    其他更详细的关于fsimage和edits的介绍，请参考官方文档或网上资料，很多。这里主要来介绍一下如何查看这两种文件，由于这两种文件时经过序列化的，非文本的，因此无法直接查看，Hadoop2.X中，hdfs提供了查看这两种文件的工具。
&lt;/p&gt;
&lt;h2&gt;
    HDFS查看fsimage
&lt;/h2&gt;
&lt;p&gt;
    命令hdfs oiv用于将fsimage文件转换成其他格式的，如文本文件、XML文件。
&lt;/p&gt;
&lt;p&gt;
    &lt;img class=&quot;aligncenter&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011736158662545621987.jpg&quot; alt=&quot;fsimage&quot; width=&quot;648&quot; height=&quot;493&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    该命令需要以下参数：
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;color: #ff00ff;&quot;&gt;&lt;strong&gt;必须参数：&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;-i,–inputFile&lt;/strong&gt; &amp;lt;arg&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;输入FSImage文件.
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;-o,–outputFile&lt;/strong&gt; &amp;lt;arg&amp;gt; 输出转换后的文件，如果存在，则会覆盖
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;color: #ff00ff;&quot;&gt;&lt;strong&gt;可选参数：&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;-p,–processor&lt;/strong&gt; &amp;lt;arg&amp;gt; &amp;nbsp; 将FSImage文件转换成哪种格式： (Ls|XML|FileDistribution).默认为Ls.
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;-h,–help&lt;/strong&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 显示帮助信息
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;例子1&lt;/strong&gt;：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.txt
&lt;/p&gt;
&lt;p&gt;
    执行后查看more /home/Hadoop/fsimage.txt
&lt;/p&gt;
&lt;p&gt;
    &lt;img class=&quot;aligncenter&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011737158662545756216.jpg&quot; alt=&quot;fsimage&quot; width=&quot;603&quot; height=&quot;320&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    由于未指定-p选项，默认为Ls，出来的结果和执行hadoop fs –ls –R一样。
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;例子2&lt;/strong&gt;：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.xml &lt;strong&gt;-p XML&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    指定-p XML，将fsimage文件转换成XML格式，查看fsimage.xml
&lt;/p&gt;
&lt;p&gt;
    &lt;img class=&quot;aligncenter&quot; src=&quot;https://img.sresz.cn/upload/2020/04/20200412011739158662545921996.jpg&quot; alt=&quot;fsimage&quot; width=&quot;351&quot; height=&quot;342&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    XML文件中包含了fsimage中的所有信息，比如inodeid、type、name、修改时间、权限、大小等等。
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;例子3：&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    FileDistribution是分析命名空间中文件大小的工具。为了运行该工具需要通过指定最大文件大小和段数定义一个整数范围[0,maxSize]，该整数范围根据段数分割为若干段[0, s[1], …, s[n-1], maxSize]，处理器计算有多少文件落入每个段中（[s[i-1], s[i]），大于maxSize的文件总是落入最后的段中，即s[n-1], maxSize。输出文件被格式化为由tab分隔的包含Size列和NumFiles列的表，其中Size表示段的起始，NumFiles表示文件大小落入该段的文件数量。在使用FileDistribution处理器时还需要指定该处理器的参数maxSize和step，若未指定默认为0。示例如下：
&lt;/p&gt;
&lt;p&gt;
    hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.fd -p FileDistribution maxSize 1000 step 5
&lt;/p&gt;
&lt;p&gt;
    查看结果文件fsimage.fd:
&lt;/p&gt;
&lt;pre class=&quot;prettyprint linenums&quot;&gt;head -10 fsimage.fd 

Processed 0 inodes.
Size    	NumFiles
0       	8302
2097152 	474984
4194304 	10995
6291456 	6608
8388608 	4452
10485760        5865
12582912        4747
14680064        2965

tail -10 fsimage.fd

29725032448     1
33241956352     1
58212745216     1
58265174016     1
62084087808     1
totalFiles = 605087
totalDirectories = 100070
totalBlocks = 725265
totalSpace = 42583680916192
maxFileSize = 62083011560&lt;/pre&gt;
&lt;p&gt;
    &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
    下一篇文章中将介绍HDFS编辑日志edits的查看方式，请关注&lt;a title=&quot;lxw的大数据田地&quot; href=&quot;http://lxw1234.com&quot; target=&quot;_blank&quot;&gt;我的博客&lt;/a&gt;。
&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2020 01:17:17 +0800</pubDate></item><item><title>Shodan互联网上最可怕的搜索引擎</title><link>https://www.sresz.cn/safetynews/10.html</link><description>&lt;h2 id=&quot;h2-1-&quot;&gt;&lt;a name=&quot;1.暗黑谷歌的由来&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1.暗黑谷歌的由来&lt;/h2&gt;&lt;p&gt;有这么一款搜索引擎，它一刻不停的在寻找着所有和互联网关联的PLC、摄像头、红绿灯、打印机、路由器、交换机、服务器、数据库等等各种软硬件服务设施。&lt;/p&gt;&lt;p&gt;它就是shodan，那么shodan到底是什么呢？怎么会有如此大的魔力？首先，Shodan 是一个搜索引擎，但它与 Google 这种搜索网址的搜索引擎不同，Shodan不是在网上搜索网址，而是直接进入互联网探索其背后的信息。&lt;/p&gt;&lt;p&gt;Shodan真正值得注意的能力就是能找到几乎所有和互联网相关联的东西。其中最受欢迎的搜索内容是：webcam，linksys，cisco，netgear，SCADA等等。&lt;/p&gt;&lt;p&gt;配合其组合参数，可以做到以下功能：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;批量搜索现有漏洞主机&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;统计感染某木马的主机数量&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;批量扫描登录入口，并使用弱口令字典进行爆破&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;批量抓取shell&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;使用自己的0day打遍天下&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;写这篇文章是希望能够将这款工具的用途、使用方法、利用技巧进行实战应用。以便使用Shodan搜索引擎进行相关搜索，并利用Shodan的API编写Python脚本，进行批量扫描，将技术应用到渗透测试和安全攻防中，最大限度做好安全防御。&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011611158662537137651.png&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;&lt;h2 id=&quot;h2-2-shodan-&quot;&gt;&lt;a name=&quot;2.Shodan的工作原理&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2.Shodan的工作原理&lt;/h2&gt;&lt;p&gt;Shodan每隔一段时间就会对全球大约8亿主机进行扫描，通过对返回Banner信息的处理，识别特定主机，并进行分类储存。为了避免因政治、技术等原因导致的扫描信息误差（比如某墙或某些老美服务商对大陆羊毛党的屏蔽等），Shodan的扫描主机至少遍布在全球的8个国家和地区。&lt;/p&gt;&lt;p&gt;当我们发出一条搜索请求，其背后的逻辑是这样的&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011611158662537146765.png&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;那Banner是什么呢？&lt;br/&gt;在探测端口时数据包里存在Banner信息&lt;/p&gt;&lt;pre&gt;HTTP/1.1&amp;nbsp;200&amp;nbsp;OK
Server:&amp;nbsp;nginx/1.16.0
Date:&amp;nbsp;Sat,&amp;nbsp;18&amp;nbsp;May&amp;nbsp;2019&amp;nbsp;06:56:30&amp;nbsp;GMT
Content-Type:&amp;nbsp;text/html
Transfer-Encoding:&amp;nbsp;chunked
Connection:&amp;nbsp;keep-alive&lt;/pre&gt;&lt;p&gt;这是一个普通的HTTP Banner，可以从上获知服务端使用的是1.16.0版本的nginx。&lt;/p&gt;&lt;p&gt;西门子S7-300工控协议的Banner：&lt;/p&gt;&lt;pre&gt;Reserved&amp;nbsp;for&amp;nbsp;operating&amp;nbsp;system:&amp;nbsp;
Serial&amp;nbsp;number&amp;nbsp;of&amp;nbsp;memory&amp;nbsp;card:&amp;nbsp;SD&amp;nbsp;D45C6213
Location&amp;nbsp;designation&amp;nbsp;of&amp;nbsp;a&amp;nbsp;module:&amp;nbsp;
Module&amp;nbsp;type:&amp;nbsp;CPU&amp;nbsp;315-2&amp;nbsp;PN/DP
PLC&amp;nbsp;name:&amp;nbsp;S7-300&amp;nbsp;station_1
Plant&amp;nbsp;identification:&amp;nbsp;
OEM&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;a&amp;nbsp;module:&amp;nbsp;
Module&amp;nbsp;name:&amp;nbsp;Vestas&amp;nbsp;V27&amp;nbsp;AS+PITCH
Serial&amp;nbsp;number&amp;nbsp;of&amp;nbsp;module:&amp;nbsp;18382&lt;/pre&gt;&lt;p&gt;其中能获取更多的信息。&lt;/p&gt;&lt;p&gt;Shodan的Banner处理机制比较复杂，我们这里只需要知道探测端口是来往的数据包中包含Banner，并包含了主机的部分信息即可。&lt;/p&gt;&lt;h2 id=&quot;h2-3-shodan-&quot;&gt;&lt;a name=&quot;3.Shodan的查询指南&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.Shodan的查询指南&lt;/h2&gt;&lt;h3 id=&quot;h3-u57FAu672Cu67E5u8BE2&quot;&gt;&lt;a name=&quot;基本查询&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;基本查询&lt;/h3&gt;&lt;p&gt;Shodan的参数有很多，这里只介绍简单几种。&lt;/p&gt;&lt;pre&gt;hostname：&amp;quot;主机或域名&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;如&amp;nbsp;hostname:&amp;quot;google&amp;#39;&amp;#39;
port：&amp;quot;端口或服务&amp;quot;&amp;nbsp;如&amp;nbsp;port:&amp;quot;80&amp;quot;
ip&amp;nbsp;:&amp;nbsp;&amp;quot;ip地址&amp;quot;&amp;nbsp;如&amp;nbsp;ip&amp;nbsp;:&amp;nbsp;&amp;quot;114.114.114.114&amp;quot;
net：&amp;quot;IP地址或子网&amp;quot;如&amp;nbsp;net:&amp;quot;111.112.113.110.0/24&amp;quot;
vuln&amp;nbsp;:指定漏洞的cve如&amp;nbsp;vuln:CVE-2015-8869
但是这个命令最好搭配起来使用，如&amp;nbsp;country:CN&amp;nbsp;vuln:CVE-2018-0610
os&amp;nbsp;:&amp;quot;操作系统&amp;quot;&amp;nbsp;如&amp;nbsp;os:&amp;quot;debian&amp;quot;
isp：&amp;quot;ISP供应商&amp;quot;&amp;nbsp;如&amp;nbsp;isp:&amp;quot;China&amp;nbsp;Telecom&amp;quot;
product：&amp;quot;操作系统/软件/平台&amp;quot;&amp;nbsp;如&amp;nbsp;product:&amp;quot;nginx&amp;quot;
version：&amp;quot;软件版本&amp;quot;&amp;nbsp;如&amp;nbsp;version:&amp;quot;1.16.0&amp;quot;
geo：&amp;quot;经纬度&amp;quot;&amp;nbsp;如&amp;nbsp;geo:&amp;quot;38°53.707′,77°02.182&amp;quot;
country`：&amp;quot;国家&amp;quot;&amp;nbsp;如&amp;nbsp;country:&amp;quot;China&amp;quot;
city：&amp;quot;城市&amp;quot;&amp;nbsp;&amp;nbsp;如&amp;nbsp;city:&amp;quot;shanghai&amp;quot;
org：&amp;quot;组织或公司&amp;quot;&amp;nbsp;如org:&amp;quot;google&amp;quot;
before/after：&amp;quot;日/月/年&amp;quot;&amp;nbsp;如&amp;nbsp;before:&amp;quot;11/05/2019&amp;quot;&amp;nbsp;after:&amp;quot;11/05/2019&amp;quot;
asn&amp;nbsp;:&amp;nbsp;&amp;quot;自治系统号码&amp;quot;&amp;nbsp;如&amp;nbsp;asn:&amp;quot;TS1826&amp;quot;&lt;/pre&gt;&lt;h3 id=&quot;h3-u5173u8054u67E5u8BE2&quot;&gt;&lt;a name=&quot;关联查询&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;关联查询&lt;/h3&gt;&lt;p&gt;搜索上海开放8080端口的主机&lt;/p&gt;&lt;pre&gt;Apache&amp;nbsp;city:&amp;quot;shanghai&amp;quot;&amp;nbsp;port:&amp;quot;8080&amp;quot;&lt;/pre&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011611158662537172362.png&quot; alt=&quot;&quot;/&gt;&lt;br/&gt;搜索IP段为23.238.20.0/24的所有linux主机&lt;/p&gt;&lt;pre&gt;os:&amp;quot;linux&amp;quot;&amp;nbsp;&amp;nbsp;net:&amp;quot;23.238.20.0/24&amp;quot;&lt;/pre&gt;&lt;p&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011611158662537179646.png&quot; alt=&quot;&quot;/&gt;&lt;br/&gt;Shodan参数还有很多，前提是注册或付费用户：&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011612158662537292247.png&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;更多信息使用时可以查看&lt;a href=&quot;https://b404.gitbooks.io/shodan-manual/content/b.html&quot;&gt;中文说明手册&lt;/a&gt;,可点击前往。&lt;/p&gt;&lt;h3 id=&quot;h3-u5176u4ED6u529Fu80FD&quot;&gt;&lt;a name=&quot;其他功能&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;其他功能&lt;/h3&gt;&lt;p&gt;Shodan 不仅可以查找网络设备，它还具有其他相当不错的功能。&lt;br/&gt;Exploits：每次查询完后，点击页面上的 “Exploits” 按钮，Shodan 就会帮我们查找针对不同平台、不同类型可利用的 exploits。当然也可以通过直接访问网址来自行搜索：&lt;a href=&quot;https://exploits.shodan.io/welcome&quot;&gt;https://exploits.shodan.io/welcome&lt;/a&gt;；&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011612158662537241650.png&quot; alt=&quot;&quot;/&gt;&lt;br/&gt;地图：每次查询完后，点击页面上的 “Maps” 按钮，Shodan 会将查询结果可视化的展示在地图当中；&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011612158662537275685.png&quot; alt=&quot;&quot;/&gt;&lt;br/&gt;报表：每次查询完后，点击页面上的 “Create Report” 按钮，Shodan 就会帮我们生成一份精美的报表，这是天天要写文档兄弟的一大好帮手啊；&lt;br/&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412011613158662537389058.png&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;&lt;h2 id=&quot;h2-4-shodan&quot;&gt;&lt;a name=&quot;4.命令行下的Shodan&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.命令行下的Shodan&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Shodan&lt;/code&gt; 是由官方提供的 Python 库的，项目位于：&lt;a href=&quot;https://github.com/achillean/shodan-python&quot;&gt;https://github.com/achillean/shodan-python&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;pip&amp;nbsp;install&amp;nbsp;shodan
或者
git&amp;nbsp;clone&amp;nbsp;https://github.com/achillean/shodan-python.git&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;cd&amp;nbsp;shodan-python
python&amp;nbsp;setup.py&amp;nbsp;install&lt;/pre&gt;&lt;p&gt;本文以debian为例，安装完后我们先看下帮助信息：&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;-h
Usage:&amp;nbsp;shodan&amp;nbsp;[OPTIONS]&amp;nbsp;COMMAND&amp;nbsp;[ARGS]...
Options:
&amp;nbsp;&amp;nbsp;-h,&amp;nbsp;--help&amp;nbsp;&amp;nbsp;Show&amp;nbsp;this&amp;nbsp;message&amp;nbsp;and&amp;nbsp;exit.
Commands:
&amp;nbsp;&amp;nbsp;alert&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Manage&amp;nbsp;the&amp;nbsp;network&amp;nbsp;alerts&amp;nbsp;for&amp;nbsp;your&amp;nbsp;account&amp;nbsp;&amp;nbsp;#&amp;nbsp;管理账户的网络提示
&amp;nbsp;&amp;nbsp;convert&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Convert&amp;nbsp;the&amp;nbsp;given&amp;nbsp;input&amp;nbsp;data&amp;nbsp;file&amp;nbsp;into&amp;nbsp;a...&amp;nbsp;&amp;nbsp;#&amp;nbsp;转换输入文件
&amp;nbsp;&amp;nbsp;count&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Returns&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;results&amp;nbsp;for&amp;nbsp;a&amp;nbsp;search&amp;nbsp;&amp;nbsp;#&amp;nbsp;返回查询结果数量
&amp;nbsp;&amp;nbsp;download&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Download&amp;nbsp;search&amp;nbsp;results&amp;nbsp;and&amp;nbsp;save&amp;nbsp;them&amp;nbsp;in&amp;nbsp;a...&amp;nbsp;&amp;nbsp;#&amp;nbsp;下载查询结果到文件
&amp;nbsp;&amp;nbsp;honeyscore&amp;nbsp;&amp;nbsp;Check&amp;nbsp;whether&amp;nbsp;the&amp;nbsp;IP&amp;nbsp;is&amp;nbsp;a&amp;nbsp;honeypot&amp;nbsp;or&amp;nbsp;not.&amp;nbsp;&amp;nbsp;#&amp;nbsp;检查&amp;nbsp;IP&amp;nbsp;是否为蜜罐
&amp;nbsp;&amp;nbsp;host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;View&amp;nbsp;all&amp;nbsp;available&amp;nbsp;information&amp;nbsp;for&amp;nbsp;an&amp;nbsp;IP...&amp;nbsp;&amp;nbsp;#&amp;nbsp;显示一个&amp;nbsp;IP&amp;nbsp;所有可用的详细信息
&amp;nbsp;&amp;nbsp;info&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shows&amp;nbsp;general&amp;nbsp;information&amp;nbsp;about&amp;nbsp;your&amp;nbsp;account&amp;nbsp;&amp;nbsp;#&amp;nbsp;显示账户的一般信息
&amp;nbsp;&amp;nbsp;init&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Initialize&amp;nbsp;the&amp;nbsp;Shodan&amp;nbsp;command-line&amp;nbsp;&amp;nbsp;#&amp;nbsp;初始化命令行
&amp;nbsp;&amp;nbsp;myip&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Print&amp;nbsp;your&amp;nbsp;external&amp;nbsp;IP&amp;nbsp;address&amp;nbsp;&amp;nbsp;#&amp;nbsp;输出用户当前公网IP
&amp;nbsp;&amp;nbsp;parse&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Extract&amp;nbsp;information&amp;nbsp;out&amp;nbsp;of&amp;nbsp;compressed&amp;nbsp;JSON...&amp;nbsp;&amp;nbsp;#&amp;nbsp;解析提取压缩的JSON信息，即使用download下载的数据
&amp;nbsp;&amp;nbsp;scan&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Scan&amp;nbsp;an&amp;nbsp;IP/&amp;nbsp;netblock&amp;nbsp;using&amp;nbsp;Shodan.&amp;nbsp;&amp;nbsp;#&amp;nbsp;使用&amp;nbsp;Shodan&amp;nbsp;扫描一个IP或者网段
&amp;nbsp;&amp;nbsp;search&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Search&amp;nbsp;the&amp;nbsp;Shodan&amp;nbsp;database&amp;nbsp;&amp;nbsp;#&amp;nbsp;查询&amp;nbsp;Shodan&amp;nbsp;数据库
&amp;nbsp;&amp;nbsp;stats&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Provide&amp;nbsp;summary&amp;nbsp;information&amp;nbsp;about&amp;nbsp;a&amp;nbsp;search...&amp;nbsp;&amp;nbsp;#&amp;nbsp;提供搜索结果的概要信息
&amp;nbsp;&amp;nbsp;stream&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream&amp;nbsp;data&amp;nbsp;in&amp;nbsp;real-time.&amp;nbsp;&amp;nbsp;#&amp;nbsp;实时显示流数据&lt;/pre&gt;&lt;h3 id=&quot;h3-u5E38u7528u793Au4F8B&quot;&gt;&lt;a name=&quot;常用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;常用示例&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;init&lt;/strong&gt;&lt;br/&gt;初始化命令行工具。&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;init&amp;nbsp;[API_Key]&amp;nbsp;#请使用自己账号的API&amp;nbsp;Key
Successfully&amp;nbsp;initialized&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;count&lt;/strong&gt;&lt;br/&gt;返回查询的结果数量。&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;count&amp;nbsp;nginx&amp;nbsp;1.16.0
81840&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;download&lt;/strong&gt;&lt;br/&gt;将搜索结果下载到一个文件中，文件中的每一行都是 JSON 格式存储的目标 banner 信息。默认情况下，该命令只会下载10条结果，如果想下载更多结果需要增加 &lt;code&gt;--limit&lt;/code&gt; 参数。&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;download&amp;nbsp;nginx&amp;nbsp;1.16.0&amp;nbsp;--limit&amp;nbsp;100
Search&amp;nbsp;query:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.16.0
Total&amp;nbsp;number&amp;nbsp;of&amp;nbsp;results:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;82058
Query&amp;nbsp;credits&amp;nbsp;left:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0
Output&amp;nbsp;file:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nginx.json.gz
&amp;nbsp;&amp;nbsp;[###---------------------------------]&amp;nbsp;&amp;nbsp;&amp;nbsp;10%&amp;nbsp;&amp;nbsp;00:00:31
Notice:&amp;nbsp;fewer&amp;nbsp;results&amp;nbsp;were&amp;nbsp;saved&amp;nbsp;than&amp;nbsp;requested
Saved&amp;nbsp;100&amp;nbsp;results&amp;nbsp;into&amp;nbsp;file&amp;nbsp;nginx.json.gz&lt;/pre&gt;&lt;p&gt;parse&lt;br/&gt;我们可以使用 parse 来解析之前下载数据，它可以帮助我们过滤出自己感兴趣的内容，也可以用来将下载的数据格式从 JSON 转换成 CSV 等等其他格式，当然更可以用作传递给其他处理脚本的管道。例如，我们想将上面下载的数据以CSV格式输出IP地址、端口号和组织名称：&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;parse&amp;nbsp;--fields&amp;nbsp;ip_str,port,org&amp;nbsp;--separator&amp;nbsp;,&amp;nbsp;nginx.json.gz&amp;nbsp;
23.239.25.203,80,Linode
85.209.0.11,80,
93.119.176.67,80,0&amp;nbsp;7&amp;nbsp;I&amp;nbsp;N&amp;nbsp;T&amp;nbsp;E&amp;nbsp;R&amp;nbsp;N&amp;nbsp;E&amp;nbsp;T&amp;nbsp;.&amp;nbsp;R&amp;nbsp;O
149.202.169.98,80,OVH&amp;nbsp;SAS
138.68.232.31,80,Digital&amp;nbsp;Ocean
195.70.4.97,80,DFI&amp;nbsp;Service&amp;nbsp;SA
47.101.70.248,80,Hangzhou&amp;nbsp;Alibaba&amp;nbsp;Advertising&amp;nbsp;Co.,Ltd.
42.159.196.244,80,Shanghai&amp;nbsp;Blue&amp;nbsp;Cloud&amp;nbsp;Technology&amp;nbsp;Co.,Ltd
142.4.17.163,80,Unified&amp;nbsp;Layer
80.69.173.48,80,UpCloud&amp;nbsp;Cloud&amp;nbsp;Servers
39.100.85.208,80,Hangzhou&amp;nbsp;Alibaba&amp;nbsp;Advertising&amp;nbsp;Co.,Ltd.
156.67.92.27,80,NETRONIK&amp;nbsp;sp.&amp;nbsp;z&amp;nbsp;o.o.
193.112.97.173,80,Tencent&amp;nbsp;cloud&amp;nbsp;computing
47.107.139.162,80,Hangzhou&amp;nbsp;Alibaba&amp;nbsp;Advertising&amp;nbsp;Co.,Ltd.
129.121.192.115,8080,Nexcess.net&amp;nbsp;L.L.C.
162.144.69.141,80,Unified&amp;nbsp;Layer
164.138.216.162,80,SuperHosting.BG&amp;nbsp;Ltd.
.........................................&amp;nbsp;#此处省略N行。&lt;/pre&gt;&lt;p&gt;host&lt;br/&gt;查看指定主机的相关信息，如地理位置信息，开放端口，甚至是否存在某些漏洞等信息。&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;host&amp;nbsp;42.159.196.244
42.159.196.244
City:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shanghai
Country:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;China
Organization:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shanghai&amp;nbsp;Blue&amp;nbsp;Cloud&amp;nbsp;Technology&amp;nbsp;Co.,Ltd
Updated:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2019-05-18T08:13:44.814290
Number&amp;nbsp;of&amp;nbsp;open&amp;nbsp;ports:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2
Vulnerabilities:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CVE-2018-15919&amp;nbsp;CVE-2017-15906

Ports:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;22/tcp&amp;nbsp;OpenSSH&amp;nbsp;(7.4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;80/tcp&amp;nbsp;nginx&amp;nbsp;(1.16.0)&lt;/pre&gt;&lt;p&gt;search&lt;br/&gt;直接将查询结果展示在命令行中，默认情况下只显示IP、端口号、主机名和HTTP数据。当然我们也可以通过使用 –fields 来自定义显示内容，例如，我们只显示IP、端口号、组织名称和主机名：&lt;/p&gt;&lt;pre&gt;root@debian:~#&amp;nbsp;shodan&amp;nbsp;search&amp;nbsp;--fields&amp;nbsp;ip_str,port,org,hostnames&amp;nbsp;nginx&amp;nbsp;1.16.0
162.144.138.155&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unified&amp;nbsp;Layer&amp;nbsp;&amp;nbsp;&amp;nbsp;server.vitaathletics.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
85.209.0.11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
162.144.196.17&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unified&amp;nbsp;Layer&amp;nbsp;&amp;nbsp;&amp;nbsp;server.yen.hlv.mybluehost.me&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
138.68.232.31&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Digital&amp;nbsp;Ocean&amp;nbsp;&amp;nbsp;&amp;nbsp;nexo-host.com.ve&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
212.22.64.245&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LLC&amp;nbsp;Quadronet&amp;nbsp;&amp;nbsp;&amp;nbsp;timri.ru&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
38.143.213.84&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cogent&amp;nbsp;Communications&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
212.33.243.127&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JSC&amp;nbsp;ER-Telecom&amp;nbsp;Holding&amp;nbsp;&amp;nbsp;212x33x243x127.static-business.perm.ertelecom.ru&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
64.247.179.214&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SoftwareWorks&amp;nbsp;Group&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;useast33.myserverhosts.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
120.31.140.112&amp;nbsp;&amp;nbsp;81&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FoShan&amp;nbsp;RuiJiang&amp;nbsp;Science&amp;nbsp;and&amp;nbsp;Tech&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ns1.eflydns.net;ns2.eflydns.net&amp;nbsp;
80.69.173.48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpCloud&amp;nbsp;Cloud&amp;nbsp;Servers&amp;nbsp;&amp;nbsp;&amp;nbsp;80-69-173-48.fi-hel1.upcloud.host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
85.209.0.76&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
156.67.92.27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NETRONIK&amp;nbsp;sp.&amp;nbsp;z&amp;nbsp;o.o.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
162.144.201.223&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unified&amp;nbsp;Layer&amp;nbsp;&amp;nbsp;&amp;nbsp;server.formacolorytextura.com&amp;nbsp;&amp;nbsp;&amp;nbsp;
193.112.97.173&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tencent&amp;nbsp;cloud&amp;nbsp;computing&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
47.110.78.125&amp;nbsp;&amp;nbsp;&amp;nbsp;80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hangzhou&amp;nbsp;Alibaba&amp;nbsp;Advertising&amp;nbsp;Co.,Ltd.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
129.121.192.115&amp;nbsp;8080&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nexcess.net&amp;nbsp;L.L.C.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ip-129-121-192-115.local&amp;nbsp;&amp;nbsp;
.........................................&amp;nbsp;#此处省略N行。&lt;/pre&gt;&lt;h2 id=&quot;h2-5-shodan-&quot;&gt;&lt;a name=&quot;5.代码中使用 Shodan 库&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5.代码中使用 Shodan 库&lt;/h2&gt;&lt;p&gt;上面介绍了 &lt;a href=&quot;https://github.com/achillean/shodan-python&quot;&gt;&lt;code&gt;shodan&lt;/code&gt;&lt;/a&gt; 库的用法，这里描述下如何在python代码中使用 &lt;code&gt;shodan&lt;/code&gt; 库，首先需要初始化连接 API，代码如下：&lt;/p&gt;&lt;pre&gt;import&amp;nbsp;shodan
SHODAN_API_KEY&amp;nbsp;=&amp;nbsp;&amp;quot;API_Key&amp;quot;
api&amp;nbsp;=&amp;nbsp;shodan.Shodan(SHODAN_API_KEY)&lt;/pre&gt;&lt;p&gt;随后，我们就可以搜索数据了，示例代码片如下：&lt;/p&gt;&lt;pre&gt;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;搜索&amp;nbsp;Shodan
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;results&amp;nbsp;=&amp;nbsp;api.search(&amp;#39;apache&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;显示结果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&amp;#39;Results&amp;nbsp;found:&amp;nbsp;%s&amp;#39;&amp;nbsp;%&amp;nbsp;results[&amp;#39;total&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;result&amp;nbsp;in&amp;nbsp;results[&amp;#39;matches&amp;#39;]:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;result[&amp;#39;ip_str&amp;#39;]
except&amp;nbsp;shodan.APIError,&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&amp;#39;Error:&amp;nbsp;%s&amp;#39;&amp;nbsp;%&amp;nbsp;e&lt;/pre&gt;&lt;p&gt;这里 Shodan.search() 会返回类似如下格式的 JSON 数据：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;total&amp;#39;:&amp;nbsp;8669969,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;matches&amp;#39;:&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;data&amp;#39;:&amp;nbsp;&amp;#39;HTTP/1.0&amp;nbsp;200&amp;nbsp;OK\r\nDate:&amp;nbsp;Mon,&amp;nbsp;08&amp;nbsp;Nov&amp;nbsp;2010&amp;nbsp;05:09:59&amp;nbsp;GMT\r\nSer...&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;hostnames&amp;#39;:&amp;nbsp;[&amp;#39;pl4t1n.de&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;ip&amp;#39;:&amp;nbsp;3579573318,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;ip_str&amp;#39;:&amp;nbsp;&amp;#39;89.110.147.239&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;os&amp;#39;:&amp;nbsp;&amp;#39;FreeBSD&amp;nbsp;4.4&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;port&amp;#39;:&amp;nbsp;80,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;timestamp&amp;#39;:&amp;nbsp;&amp;#39;2014-01-15T05:49:56.283713&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
}&lt;/pre&gt;&lt;h3 id=&quot;h3--shodan-&quot;&gt;&lt;a name=&quot;常用 Shodan 库函数&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;常用 Shodan 库函数&lt;/h3&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;shodan.Shodan(key) ：初始化连接API&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.count(query, facets=None)：返回查询结果数量&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.host(ip, history=False)：返回一个IP的详细信息&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.ports()：返回Shodan可查询的端口号&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.protocols()：返回Shodan可查询的协议&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.services()：返回Shodan可查询的服务&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.queries(page=1, sort=’timestamp’, order=’desc’)：查询其他用户分享的查询规则&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.scan(ips, force=False)：使用Shodan进行扫描，ips可以为字符或字典类型&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shodan.search(query,page=1,limit=None,offset=None,facets=None,minify=True)：查询Shodan数据。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;至此，暗黑谷歌的料理介绍完毕，如果有付费的Shodan Membership用户就可以好好的Happy了。与之相似的料理就是Tor浏览器，这是一个无痕浏览的神器。&lt;/p&gt;&lt;p&gt;Tor浏览器的工作原理就是将你的ip跳到一连串的的代理上，比如：把你的ip地址先从美国跳到加拿大再跳到荷兰、日本、德国、俄罗斯。。。。。下载链接：&lt;a href=&quot;https://www.torproject.org/download/&quot;&gt;https://www.torproject.org/download/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;其中所有的数据全部都是经过加密处理，目的就是为了掩藏真正访问者的ip，防止被访问者的追踪。有兴趣的可以自行研究下，这里不再过多描述，综上内容纯属攻防和白帽子技术爱好。知己知彼，方能百战不殆。加油吧，少年！未来的某一天，白帽子大牛中你可能也是其中之一。&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2020 01:15:23 +0800</pubDate></item><item><title>Ambari2.7.3 和HDP3.1.0搭建Hadoop集群</title><link>https://www.sresz.cn/hadoop/9.html</link><description>&lt;div style=&quot;font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; white-space: normal; &quot;&gt;&lt;h3 style=&quot;border-bottom-color: rgb(170, 170, 170); line-height: 1.5; margin-right: 0px; margin-left: 0px;&quot;&gt;一、环境及软件准备&lt;/h3&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;1、集群规划&lt;/h4&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;background-color: rgb(250, 250, 250); border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;&amp;nbsp;&lt;/th&gt;&lt;th style=&quot;background-color: rgb(250, 250, 250); border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;hdp01/10.1.1.11&lt;/th&gt;&lt;th style=&quot;background-color: rgb(250, 250, 250); border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;hdp02/10.1.1.12&lt;/th&gt;&lt;th style=&quot;background-color: rgb(250, 250, 250); border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;hdp03/10.1.1.13&lt;/th&gt;&lt;th style=&quot;background-color: rgb(250, 250, 250); border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;hdp04/10.1.1.14&lt;/th&gt;&lt;th style=&quot;background-color: rgb(250, 250, 250); border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;hdp05/10.1.1.15&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;ambari server&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;ambari agent&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;namenode&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;datanode&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;resourcemanager&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;journalnode&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;zookeeper&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;是&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;td style=&quot;border-color: rgb(192, 192, 192); border-collapse: collapse; padding: 8px 14px;&quot;&gt;否&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;01和02主要做管理机，03-05做数据数据节点，01-03做zookeeper集群。&lt;br/&gt;主机环境为Ubuntu server18.04，主机间已经建立互信。&lt;/p&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;2、下载ambari安装包&lt;/h4&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;&lt;a href=&quot;https://docs.hortonworks.com/HDPDocuments/Ambari-2.7.3.0/bk_ambari-installation/content/ambari_repositories.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; style=&quot;color: rgb(51, 102, 153); text-decoration-line: none; background: transparent;&quot;&gt;https://docs.hortonworks.com/HDPDocuments/Ambari-2.7.3.0/bk_ambari-installation/content/ambari_repositories.html&lt;/a&gt;&lt;br/&gt;找到对应的版本下载即可。&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;903&quot; data-height=&quot;790&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010950158662499027656.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-b9c90d71994adeb1.png&quot; data-original-width=&quot;903&quot; data-original-height=&quot;790&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;97427&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;ps需要下载repo file,ambari.list&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;3、下载hdp安装包&lt;/h4&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;&lt;a href=&quot;https://docs.hortonworks.com/HDPDocuments/Ambari-2.7.3.0/bk_ambari-installation/content/hdp_31_repositories.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; style=&quot;color: rgb(51, 102, 153); text-decoration-line: none; background: transparent;&quot;&gt;https://docs.hortonworks.com/HDPDocuments/Ambari-2.7.3.0/bk_ambari-installation/content/hdp_31_repositories.html&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;970&quot; data-height=&quot;722&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010950158662499084985.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-eb3720f8d4a15482.png&quot; data-original-width=&quot;970&quot; data-original-height=&quot;722&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;89044&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;ps需要下载repo file，hdp.gpl.list，hdp.list.&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;4、安装一台lnmp备用&lt;/h4&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;选择hadoop01&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;&lt;a href=&quot;https://lnmp.org/install.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; style=&quot;color: rgb(51, 102, 153); text-decoration-line: none; background: transparent;&quot;&gt;https://lnmp.org/install.html&lt;/a&gt;&lt;/p&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;wget&amp;nbsp;-c&amp;nbsp;http://soft.vpser.net/lnmp/lnmp1.5.tar.gz&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;tar&amp;nbsp;zxf&amp;nbsp;lnmp1.5.tar.gz&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;cd&amp;nbsp;lnmp1.5&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;./install.sh&amp;nbsp;lnmp&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;选择安装mysql5.7版本用于支持ambari&lt;br/&gt;开启远程访问mysql。&lt;/p&gt;&lt;pre class=&quot;hljs bash&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;&amp;nbsp;mysql&amp;nbsp;-u&amp;nbsp;root&amp;nbsp;-p
GRANT&amp;nbsp;ALL&amp;nbsp;PRIVILEGES&amp;nbsp;ON&amp;nbsp;*.*&amp;nbsp;TO&amp;nbsp;&amp;#39;root&amp;#39;@&amp;#39;%&amp;#39;&amp;nbsp;IDENTIFIED&amp;nbsp;BY&amp;nbsp;&amp;#39;root&amp;#39;&amp;nbsp;&amp;nbsp;;
flush&amp;nbsp;privileges;&lt;/pre&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;5、复制下载文件&lt;/h4&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;放到lnmp的默认目录下。&lt;/p&gt;&lt;pre class=&quot;hljs cpp&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;mkdir&amp;nbsp;/home/wwwroot/default/ambari
mkdir&amp;nbsp;/home/wwwroot/default/ambari/HDP-UTILS
cd&amp;nbsp;/home/wwwroot/default/ambari&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;复制下载文件到相关目录并解压。&lt;/p&gt;&lt;pre class=&quot;hljs css&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;tar&amp;nbsp;-zxvf&amp;nbsp;ambari-2.7.3.0-ubuntu18.tar.gz&amp;nbsp;tar&amp;nbsp;-zxvf&amp;nbsp;HDP-GPL-3.1.0.0-ubuntu18-gpl.tar.gz&amp;nbsp;tar&amp;nbsp;-zxvf&amp;nbsp;HDP-3.1.0.0-ubuntu18-deb.tar.gz&amp;nbsp;tar&amp;nbsp;-zxvf&amp;nbsp;HDP-UTILS-1.1.0.22-ubuntu18.tar.gz&amp;nbsp;-C&amp;nbsp;HDP-UTILS&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;开启nginx目录浏览&lt;br/&gt;nginx.conf http { }加入&lt;/p&gt;&lt;pre class=&quot;hljs bash&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoindex&amp;nbsp;on;&amp;nbsp;&amp;nbsp;&amp;nbsp;#开启nginx目录浏览功能

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoindex_exact_size&amp;nbsp;off;&amp;nbsp;&amp;nbsp;&amp;nbsp;#文件大小从KB开始显示

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoindex_localtime&amp;nbsp;on;&lt;/pre&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;768&quot; data-height=&quot;258&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010951158662499160646.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-4cf6838c9a980986.png&quot; data-original-width=&quot;768&quot; data-original-height=&quot;258&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;10865&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;6、配置本地源&lt;/h4&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;cd /etc/apt/sources.list.d&lt;br/&gt;ambari.list&lt;/p&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;#VERSION_NUMBER=2.7.3.0-139#json.url&amp;nbsp;=&amp;nbsp;http://public-repo-1.hortonworks.com/HDP/hdp_urlinfo.jsondeb&amp;nbsp;http://192.168.0.151/ambari/ambari/ubuntu18/2.7.3.0-139/&amp;nbsp;Ambari&amp;nbsp;main&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;hdp.list&lt;/p&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;#VERSION_NUMBER=3.1.0.0-78deb&amp;nbsp;http://192.168.0.151/ambari/HDP/ubuntu18/3.1.0.0-78/&amp;nbsp;HDP&amp;nbsp;main
deb&amp;nbsp;http://192.168.0.151/ambari/HDP-UTILS/HDP-UTILS/ubuntu18/1.1.0.22/&amp;nbsp;HDP-UTILS&amp;nbsp;main&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;hdp.gpl.list&lt;/p&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;#VERSION_NUMBER=3.1.0.0-78deb&amp;nbsp;http://192.168.0.151/ambari/HDP-GPL/ubuntu18/3.1.0.0-78/&amp;nbsp;HDP-GPL&amp;nbsp;main&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;更新list&lt;/p&gt;&lt;pre class=&quot;hljs css&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;sudo&amp;nbsp;apt-key&amp;nbsp;adv&amp;nbsp;--recv-keys&amp;nbsp;--keyserver&amp;nbsp;keyserver.ubuntu.com&amp;nbsp;B9733A7A07513CADsudo&amp;nbsp;apt-get&amp;nbsp;updateapt-cache&amp;nbsp;showpkg&amp;nbsp;ambari-serverapt-cache&amp;nbsp;showpkg&amp;nbsp;ambari-agentapt-cache&amp;nbsp;showpkg&amp;nbsp;ambari-metrics-assembly&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;复制到各台主机,并在各台主机更新list。&lt;/p&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;scp&amp;nbsp;/etc/apt/sources.list.d/ambari.list&amp;nbsp;192.168.0.152:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/ambari.list&amp;nbsp;192.168.0.153:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/ambari.list&amp;nbsp;192.168.0.154:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/ambari.list&amp;nbsp;192.168.0.155:/etc/apt/sources.list.d/

scp&amp;nbsp;/etc/apt/sources.list.d/hdp.list&amp;nbsp;192.168.0.152:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/hdp.list&amp;nbsp;192.168.0.153:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/hdp.list&amp;nbsp;192.168.0.154:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/hdp.list&amp;nbsp;192.168.0.155:/etc/apt/sources.list.d/

scp&amp;nbsp;/etc/apt/sources.list.d/hdp.gpl.list&amp;nbsp;192.168.0.152:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/hdp.gpl.list&amp;nbsp;192.168.0.153:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/hdp.gpl.list&amp;nbsp;192.168.0.154:/etc/apt/sources.list.d/
scp&amp;nbsp;/etc/apt/sources.list.d/hdp.gpl.list&amp;nbsp;192.168.0.155:/etc/apt/sources.list.d/&lt;/pre&gt;&lt;h3 style=&quot;border-bottom-color: rgb(170, 170, 170); line-height: 1.5; margin-right: 0px; margin-left: 0px;&quot;&gt;二、安装hdp集群&lt;/h3&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;1、安装ambari &amp;amp;hadoop01&lt;/h4&gt;&lt;pre class=&quot;hljs javascript&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;sudo&amp;nbsp;apt-get&amp;nbsp;install&amp;nbsp;ambari-server


Success.&amp;nbsp;You&amp;nbsp;can&amp;nbsp;now&amp;nbsp;start&amp;nbsp;the&amp;nbsp;database&amp;nbsp;server&amp;nbsp;using:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/usr/lib/postgresql/10/bin/pg_ctl&amp;nbsp;-D&amp;nbsp;/var/lib/postgresql/10/main&amp;nbsp;-l&amp;nbsp;logfile&amp;nbsp;start

Ver&amp;nbsp;Cluster&amp;nbsp;Port&amp;nbsp;Status&amp;nbsp;Owner&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Data&amp;nbsp;directory&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log&amp;nbsp;file10&amp;nbsp;&amp;nbsp;main&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5432&amp;nbsp;down&amp;nbsp;&amp;nbsp;&amp;nbsp;postgres&amp;nbsp;/var/lib/postgresql/10/main&amp;nbsp;/var/log/postgresql/postgresql-10-main.log
update-alternatives:&amp;nbsp;using&amp;nbsp;/usr/share/postgresql/10/man/man1/postmaster.1.gz&amp;nbsp;to&amp;nbsp;provide&amp;nbsp;/usr/share/man/man1/postmaster.1.gz&amp;nbsp;(postmaster.1.gz)&amp;nbsp;in&amp;nbsp;auto&amp;nbsp;mode
Setting&amp;nbsp;up&amp;nbsp;postgresql&amp;nbsp;(10+190)&amp;nbsp;...
Setting&amp;nbsp;up&amp;nbsp;ambari-server&amp;nbsp;(2.7.3.0-139)&amp;nbsp;...
Processing&amp;nbsp;triggers&amp;nbsp;for&amp;nbsp;systemd&amp;nbsp;(237-3ubuntu10.9)&amp;nbsp;...
Processing&amp;nbsp;triggers&amp;nbsp;for&amp;nbsp;ureadahead&amp;nbsp;(0.100.0-20)&amp;nbsp;...
Processing&amp;nbsp;triggers&amp;nbsp;for&amp;nbsp;libc-bin&amp;nbsp;(2.27-3ubuntu1)&amp;nbsp;...&lt;/pre&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;2、配置ambari&lt;/h4&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;root@hadoop01:/home/wwwroot/default/ambari#&amp;nbsp;sudo&amp;nbsp;ambari-server&amp;nbsp;setupUsing&amp;nbsp;python&amp;nbsp;&amp;nbsp;/usr/bin/python
Setup&amp;nbsp;ambari-server
Checking&amp;nbsp;SELinux...WARNING:&amp;nbsp;Could&amp;nbsp;not&amp;nbsp;run&amp;nbsp;/usr/sbin/sestatus:&amp;nbsp;OK
Customize&amp;nbsp;user&amp;nbsp;account&amp;nbsp;for&amp;nbsp;ambari-server&amp;nbsp;daemon&amp;nbsp;[y/n]&amp;nbsp;(n)?&amp;nbsp;y
Enter&amp;nbsp;user&amp;nbsp;account&amp;nbsp;for&amp;nbsp;ambari-server&amp;nbsp;daemon&amp;nbsp;(root):
Adjusting&amp;nbsp;ambari-server&amp;nbsp;permissions&amp;nbsp;and&amp;nbsp;ownership...
Checking&amp;nbsp;firewall&amp;nbsp;status...
Checking&amp;nbsp;JDK...
[1]&amp;nbsp;Oracle&amp;nbsp;JDK&amp;nbsp;1.8&amp;nbsp;+&amp;nbsp;Java&amp;nbsp;Cryptography&amp;nbsp;Extension&amp;nbsp;(JCE)&amp;nbsp;Policy&amp;nbsp;Files&amp;nbsp;8[2]&amp;nbsp;Custom&amp;nbsp;JDK
==============================================================================
Enter&amp;nbsp;choice&amp;nbsp;(1):&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;配置java路径即可&lt;br/&gt;/usr/lib/jvm/java-8-openjdk-amd64&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;配置mysql&lt;/p&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;Minimum&amp;nbsp;JDK&amp;nbsp;version&amp;nbsp;is&amp;nbsp;8&amp;nbsp;for&amp;nbsp;Ambari.&amp;nbsp;Skipping&amp;nbsp;to&amp;nbsp;setup&amp;nbsp;different&amp;nbsp;JDK&amp;nbsp;for&amp;nbsp;Ambari&amp;nbsp;Server.
Checking&amp;nbsp;GPL&amp;nbsp;software&amp;nbsp;agreement...
GPL&amp;nbsp;License&amp;nbsp;for&amp;nbsp;LZO:&amp;nbsp;https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
Enable&amp;nbsp;Ambari&amp;nbsp;Server&amp;nbsp;to&amp;nbsp;download&amp;nbsp;and&amp;nbsp;install&amp;nbsp;GPL&amp;nbsp;Licensed&amp;nbsp;LZO&amp;nbsp;packages&amp;nbsp;[y/n]&amp;nbsp;(n)?&amp;nbsp;
Completing&amp;nbsp;setup...
Configuring&amp;nbsp;database...
Enter&amp;nbsp;advanced&amp;nbsp;database&amp;nbsp;configuration&amp;nbsp;[y/n]&amp;nbsp;(n)?&amp;nbsp;y
Configuring&amp;nbsp;database...
==============================================================================
Choose&amp;nbsp;one&amp;nbsp;of&amp;nbsp;the&amp;nbsp;following&amp;nbsp;options:[1]&amp;nbsp;-&amp;nbsp;PostgreSQL&amp;nbsp;(Embedded)
[2]&amp;nbsp;-&amp;nbsp;Oracle
[3]&amp;nbsp;-&amp;nbsp;MySQL&amp;nbsp;/&amp;nbsp;MariaDB
[4]&amp;nbsp;-&amp;nbsp;PostgreSQL
[5]&amp;nbsp;-&amp;nbsp;Microsoft&amp;nbsp;SQL&amp;nbsp;Server&amp;nbsp;(Tech&amp;nbsp;Preview)
[6]&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;Anywhere
[7]&amp;nbsp;-&amp;nbsp;BDB
==============================================================================
Enter&amp;nbsp;choice&amp;nbsp;(1):&amp;nbsp;3&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;配置jdbc,需要上传jdbc.bin.jar&lt;br/&gt;路径如下。&lt;br/&gt;/var/lib/ambari-server/resources/mysql-connector-java-5.1.47-bin.jar&lt;/p&gt;&lt;pre class=&quot;hljs javascript&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;Configuring&amp;nbsp;ambari&amp;nbsp;database...
Enter&amp;nbsp;full&amp;nbsp;path&amp;nbsp;to&amp;nbsp;custom&amp;nbsp;jdbc&amp;nbsp;driver:&amp;nbsp;
Configuring&amp;nbsp;ambari&amp;nbsp;database...
Enter&amp;nbsp;full&amp;nbsp;path&amp;nbsp;to&amp;nbsp;custom&amp;nbsp;jdbc&amp;nbsp;driver:&amp;nbsp;/var/lib/ambari-server/resources/mysql-connector-java-5.1.47-bin.jar
Copying&amp;nbsp;/var/lib/ambari-server/resources/mysql-connector-java-5.1.47-bin.jar&amp;nbsp;to&amp;nbsp;/usr/share/java
Configuring&amp;nbsp;remote&amp;nbsp;database&amp;nbsp;connection&amp;nbsp;properties...
WARNING:&amp;nbsp;Before&amp;nbsp;starting&amp;nbsp;Ambari&amp;nbsp;Server,&amp;nbsp;you&amp;nbsp;must&amp;nbsp;run&amp;nbsp;the&amp;nbsp;following&amp;nbsp;DDL&amp;nbsp;directly&amp;nbsp;from&amp;nbsp;the&amp;nbsp;database&amp;nbsp;shell&amp;nbsp;to&amp;nbsp;create&amp;nbsp;the&amp;nbsp;schema:&amp;nbsp;/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
Proceed&amp;nbsp;with&amp;nbsp;configuring&amp;nbsp;remote&amp;nbsp;database&amp;nbsp;connection&amp;nbsp;properties&amp;nbsp;[y/n]&amp;nbsp;(y)?&amp;nbsp;
Extracting&amp;nbsp;system&amp;nbsp;views...
....ambari-admin-2.7.3.0.139.jar

Ambari&amp;nbsp;repo&amp;nbsp;file&amp;nbsp;contains&amp;nbsp;latest&amp;nbsp;json&amp;nbsp;url&amp;nbsp;http://public-repo-1.hortonworks.com/HDP/hdp_urlinfo.json,&amp;nbsp;updating&amp;nbsp;stacks&amp;nbsp;repoinfos&amp;nbsp;with&amp;nbsp;it...Adjusting&amp;nbsp;ambari-server&amp;nbsp;permissions&amp;nbsp;and&amp;nbsp;ownership...
Ambari&amp;nbsp;Server&amp;nbsp;&amp;#39;setup&amp;#39;&amp;nbsp;completed&amp;nbsp;successfully.&lt;/pre&gt;&lt;h3 style=&quot;border-bottom-color: rgb(170, 170, 170); line-height: 1.5; margin-right: 0px; margin-left: 0px;&quot;&gt;三、配置ambari&lt;/h3&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;1、导入mysql库&lt;/h4&gt;&lt;pre class=&quot;hljs php&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;mysql&amp;nbsp;-u&amp;nbsp;root&amp;nbsp;-p
mysql&amp;gt;&amp;nbsp;create&amp;nbsp;database&amp;nbsp;ambari;
mysql&amp;gt;&amp;nbsp;use&amp;nbsp;ambari;
mysql&amp;gt;&amp;nbsp;source&amp;nbsp;/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;&lt;/pre&gt;&lt;h4 style=&quot;font-size: 14px; margin: 10px 0px;&quot;&gt;2、启动ambari&lt;/h4&gt;&lt;pre class=&quot;hljs ruby&quot; style=&quot;margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word;&quot;&gt;root@hadoop01:/home/wwwroot/default/ambari#sudo&amp;nbsp;ambari-server&amp;nbsp;start
Using&amp;nbsp;python&amp;nbsp;&amp;nbsp;/usr/bin/python
Starting&amp;nbsp;ambari-server
Ambari&amp;nbsp;Server&amp;nbsp;running&amp;nbsp;with&amp;nbsp;administrator&amp;nbsp;privileges.
Organizing&amp;nbsp;resource&amp;nbsp;files&amp;nbsp;at&amp;nbsp;/var/lib/ambari-server/resources...
Ambari&amp;nbsp;database&amp;nbsp;consistency&amp;nbsp;check&amp;nbsp;started...
Server&amp;nbsp;PID&amp;nbsp;at:&amp;nbsp;/var/run/ambari-server/ambari-server.pid
Server&amp;nbsp;out&amp;nbsp;at:&amp;nbsp;/var/log/ambari-server/ambari-server.out
Server&amp;nbsp;log&amp;nbsp;at:&amp;nbsp;/var/log/ambari-server/ambari-server.log
Waiting&amp;nbsp;for&amp;nbsp;server&amp;nbsp;start..................................................
Server&amp;nbsp;started&amp;nbsp;listening&amp;nbsp;on&amp;nbsp;8080DB&amp;nbsp;configs&amp;nbsp;consistency&amp;nbsp;check:&amp;nbsp;no&amp;nbsp;errors&amp;nbsp;and&amp;nbsp;warnings&amp;nbsp;were&amp;nbsp;found.
Ambari&amp;nbsp;Server&amp;nbsp;&amp;#39;start&amp;#39;&amp;nbsp;completed&amp;nbsp;successfully.&lt;/pre&gt;&lt;h3 style=&quot;border-bottom-color: rgb(170, 170, 170); line-height: 1.5; margin-right: 0px; margin-left: 0px;&quot;&gt;四、安装hadoop集群&lt;/h3&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;http://192.168.0.151:8080&lt;br/&gt;用户名密码、admin/admin&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1920&quot; data-height=&quot;950&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010951158662499119858.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-2aeb4f0ffad0e5e2.png&quot; data-original-width=&quot;1920&quot; data-original-height=&quot;950&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;78467&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1920&quot; data-height=&quot;950&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010951158662499128167.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-97d69be73971542e.png&quot; data-original-width=&quot;1920&quot; data-original-height=&quot;950&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;87804&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1872&quot; data-height=&quot;826&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010952158662499252857.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-0eaf01078d4c12f1.png&quot; data-original-width=&quot;1872&quot; data-original-height=&quot;826&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;83574&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;选择本地库。&lt;br/&gt;输入目录。&lt;br/&gt;&lt;a href=&quot;http://192.168.0.151/ambari/HDP/ubuntu18/3.1.0.0-78&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; style=&quot;color: rgb(51, 102, 153); text-decoration-line: none; background: transparent;&quot;&gt;http://192.168.0.151/ambari/HDP/ubuntu18/3.1.0.0-78&lt;/a&gt;&lt;br/&gt;&lt;a href=&quot;http://192.168.0.151/ambari/HDP-UTILS/HDP-UTILS/ubuntu18/1.1.0.22/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; style=&quot;color: rgb(51, 102, 153); text-decoration-line: none; background: transparent;&quot;&gt;http://192.168.0.151/ambari/HDP-UTILS/HDP-UTILS/ubuntu18/1.1.0.22/&lt;/a&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1620&quot; data-height=&quot;332&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010952158662499269552.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-66a0f00b51962a1a.png&quot; data-original-width=&quot;1620&quot; data-original-height=&quot;332&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;31298&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;cat ~/.ssh/id_rsa&lt;br/&gt;获取ssh密钥。&lt;/p&gt;&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1920&quot; data-height=&quot;950&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010952158662499231373.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-74ef33f9c7f50488.png&quot; data-original-width=&quot;1920&quot; data-original-height=&quot;950&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;127515&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1920&quot; data-height=&quot;950&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010952158662499229440.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-fa7e4770ea283e3c.png&quot; data-original-width=&quot;1920&quot; data-original-height=&quot;950&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;96429&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5;&quot;&gt;其他主机出现错误，跟agent没安装上有关。&lt;br/&gt;在其他主机执行&lt;br/&gt;apt install ambari-agent -y&lt;/p&gt;&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1640&quot; data-height=&quot;653&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010953158662499374249.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-ff954801e6c09536.png&quot; data-original-width=&quot;1640&quot; data-original-height=&quot;653&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;52352&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;Ranger、Ranger KMS选了安装失败。取消可以成功。&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1920&quot; data-height=&quot;950&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010953158662499330675.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-37649cb6ccb44ea3.png&quot; data-original-width=&quot;1920&quot; data-original-height=&quot;950&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;119566&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1920&quot; data-height=&quot;950&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010953158662499388145.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-0d42cf27df81a5a5.png&quot; data-original-width=&quot;1920&quot; data-original-height=&quot;950&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;97273&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image-caption&quot;&gt;image.png&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;div class=&quot;image-package&quot;&gt;&lt;div class=&quot;image-container&quot;&gt;&lt;div class=&quot;image-container-fill&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;image-view&quot; data-width=&quot;1587&quot; data-height=&quot;944&quot;&gt;&lt;img src=&quot;https://img.sresz.cn/upload/2020/04/20200412010954158662499433580.png&quot; alt=&quot;&quot; data-original-src=&quot;//upload-images.jianshu.io/upload_images/1409498-78458895a1040205.png&quot; data-original-width=&quot;1587&quot; data-original-height=&quot;944&quot; data-original-format=&quot;image/png&quot; data-original-filesize=&quot;91524&quot; style=&quot;border: 0px; max-width: 800px; height: auto;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;margin: 10px auto; line-height: 1.5; font-size: 13px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; &quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2020 01:03:26 +0800</pubDate></item></channel></rss>