Loading... <h2 id="实验环境" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">实验环境</h2> <h3 id="实验拓扑" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">实验拓扑</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-25.png" title="1464772202422359.png" alt="2016-06-01_155200.png" /></p> <h3 id="主机配置环境说明" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">主机配置环境说明</h3> <table> <thead style="line-height: 1.6"> <tr style="line-height: 1.6" class="firstRow"> <th align="center">主机名</th> <th align="center">IP地址</th> <th align="center">角色/用途</th> <th align="center">MySQL Server_ID</th> </tr> </thead> <tbody style="line-height: 1.6"> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">master1</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.101</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">MySQL主节点,可读写操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">11</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">master2</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.102</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">MySQL备节点,可读写操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">12</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">slave1</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.103</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">MySQL从节点,仅能读</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">13</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">slave2</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.104</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">MySQL从节点,仅能读</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">14</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">monitor</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.105</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">MMM管理端</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">无</td> </tr> </tbody> </table> <h3 id="虚拟ip环境说明" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">虚拟IP环境说明</h3> <table> <thead style="line-height: 1.6"> <tr style="line-height: 1.6" class="firstRow"> <th align="center">虚拟IP地址</th> <th align="center">用途</th> <th align="center">说明</th> </tr> </thead> <tbody style="line-height: 1.6"> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.200</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">写操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">有点类似VIP,该IP会在正常主节点上使用,那么此时只有主节点能写操作</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.201</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">读操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">将多个具有读操作的读虚拟IP应用到各从节点及主、备节点,能分担读操作。可以通过LVS、HAProxy对读VIP进行负载均衡</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.202</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">读操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">将多个具有读操作的读虚拟IP应用到各从节点及主、备节点,能分担读操作。可以通过LVS、HAProxy对读VIP进行负载均衡</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.203</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">读操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">将多个具有读操作的读虚拟IP应用到各从节点及主、备节点,能分担读操作。可以通过LVS、HAProxy对读VIP进行负载均衡</td> </tr> <tr style="line-height: 1.6"> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">192.168.80.204</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">读操作</td> <td align="center" style="padding: 0.5em;line-height: 1.6;vertical-align: top">将多个具有读操作的读虚拟IP应用到各从节点及主、备节点,能分担读操作。可以通过LVS、HAProxy对读VIP进行负载均衡</td> </tr> </tbody> </table> <h2 id="mysql部署工作" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">MySQL部署工作</h2> <h3 id="安装mysql" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">安装MySQL</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">各节点部署MySQL 5.5.36 <br />下面演示master1节点部署MySQL</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 local]<span class="hljs-comment"># groupadd -r mysql # 创建mysql组</span><br />[root@master1 local]<span class="hljs-comment"># useradd -g mysql -r mysql #创建mysql用户</span><br />[root@master1 ~]<span class="hljs-comment"># tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/ # 将程序包解压至对应的路径下</span><br />[root@master1 ~]<span class="hljs-comment"># cd /usr/local/</span><br />[root@master1 local]<span class="hljs-comment"># ln -s mariadb-5.5.36-linux-x86_64/ mysql #创建软连接</span><br />[root@master1 local]<span class="hljs-comment"># chown -R root.mysql mysql/* #将mysql目录下所有的文件及文件夹赋权</span><br />[root@master1 local]<span class="hljs-comment"># cd mysql/</span><br />[root@master1 mysql]<span class="hljs-comment"># mkdir /etc/mysql/</span><br />[root@master1 mysql]<span class="hljs-comment"># cp support-files/my-large.cnf /etc/mysql/my.cnf #拷贝配置文件至指定路径</span><br />[root@master1 mysql]<span class="hljs-comment"># vim /etc/mysql/my.cnf #修改配置文件,在mysqld字段下修改和增加下面参数</span><br />datadir=/mydata/data <span class="hljs-comment">#mysql 的数据目录</span><br />read_only = <span class="hljs-number">1</span> <span class="hljs-comment">#设置所有的mysql都只是只读模式</span><br /><span class="hljs-comment">#备注:read_only参数对超级管理权限的用户无效</span><br />log-bin=/mydata/binlogs/master1-bin <span class="hljs-comment">#设置二进制日志路径(建议)</span><br />server-id = <span class="hljs-number">11</span> <span class="hljs-comment">#设置不同的server-id,目的是为了防止环回复制</span><br />relay-log = /mydata/relaylogs/relay-log <span class="hljs-comment"># 设置中继日志路径</span><br />[root@master1 mysql]<span class="hljs-comment"># cp support-files/mysql.server /etc/rc.d/init.d/mysqld #复制脚本文件至指定的路径</span><br />[root@master1 mysql]<span class="hljs-comment"># chmod +x /etc/rc.d/init.d/mysqld # 为脚本文件赋执行权限</span><br />[root@master1 mysql]<span class="hljs-comment"># chkconfig mysqld on #设置开机自动启动</span><br />[root@master1 ~]<span class="hljs-comment"># mkdir -pv /mydata/{data,relaylogs,binlogs} #创建数据文件、中继日志、二进制日志文件的文件夹</span><br />[root@master1 ~]<span class="hljs-comment"># chown mysql.mysql /mydata/* # 为每个文件夹赋权</span><br />[root@master1 mysql]<span class="hljs-comment"># ./scripts/mysql_install_db --datadir=/mydata/data #初始化mysql</span><br />[root@master1 mysql]<span class="hljs-comment"># service mysqld start #启动服务</span><br />[root@master1 mysql]<span class="hljs-comment"># vim /etc/profile.d/mysql.sh #由于默认PATH环境没有mysql客户端脚本,所以修改环境变量</span><br />export PATH=/usr/local/mysql/bin:$PATH<br />[root@master1 mysql]<span class="hljs-comment"># source /etc/profile.d/mysql.sh #让配置的环境变量立即生效</span><br /></code></pre> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6">使用相同的二进制安装mysql的方式安装 master2、slave1、slave2服务器,注意,mysql配置文件中的my.cnf中的“server-id”一定要修改,否则造成环回复制。Slave1和slave2中的二进制日志可以关闭,因为从节点无需被其他从节点复制,所以关闭可以节省I/O压力。</p> </blockquote> <h3 id="创建复制账号权限" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">创建复制账号权限</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">在master1和master2创建拥有复制的权限的账号和密码</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repluser@<span class="hljs-string">'192.168.80.%'</span> IDENTIFIED BY <span class="hljs-string">'replp@ss'</span>;<br /></code></pre> <h3 id="设置各节点复制指向主节点" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">设置各节点复制指向主节点</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、查看主节点master1的二进制日志的位置</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> SHOW MASTER STATUS;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-88.png" title="1464772239645664.png" alt="1464768995471.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、将复制的主节点指向master1,包括master2,slave1,slave2。而将master1复制主节点指向master2。</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=<span class="hljs-string">'192.168.80.101'</span>,MASTER_USER=<span class="hljs-string">'repluser'</span>,MASTER<br />_PASSWORD=<span class="hljs-string">'replp@ss'</span>,MASTER_LOG_FILE=<span class="hljs-string">'master1-bin.000004'</span>,MASTER_LOG_POS=<span class="hljs-number">421</span>;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、上述配置在每个节点配置完成后,每个节点开启复制进程</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> START SLAVE;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、查看从节点的状态</p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-71.png" title="1464772255540851.png" alt="1464769119568.png" /></p> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6">主要留意”Slave_IO_Running”和“Slave_IO_Running” 是否处于“Yes”状态</p> </blockquote> <pre class="prettyprint hljs-dark"><code class="language-python hljs">Slave_IO_Running: Yes<br />Slave_SQL_Running: Yes<br /></code></pre> <h3 id="测试复制功能" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">测试复制功能</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">在主节点master1上创建testdb数据库,用于测试各节点复制功能是否正常</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> CREATE DATABASE testdb;<br />MariaDB [(none)]> SHOW DATABASES;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-51.png" title="1464772268745507.png" alt="1464769170939.png" /></p> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6">再各节点使用命令“SHOW DATABASES”查看,是否已经复制成功。如果各节点均能查看到此数据库,表示复制正常。</p> </blockquote> <h2 id="在mmm服务器安装mmm套件" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">在MMM服务器安装MMM套件</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、配置好epel源</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[epel]<br />name=Extra Packages <span class="hljs-keyword">for</span> Enterprise Linux <span class="hljs-number">6</span> - $basearch<br /><span class="hljs-comment">#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch</span><br />mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-<span class="hljs-number">6</span>&arch=$basearch<br />failovermethod=priority<br />enabled=<span class="hljs-number">1</span><br />gpgcheck=<span class="hljs-number">1</span><br />gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-<span class="hljs-number">6</span><br />[epel-debuginfo]<br />name=Extra Packages <span class="hljs-keyword">for</span> Enterprise Linux <span class="hljs-number">6</span> - $basearch - Debug<br /><span class="hljs-comment">#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug</span><br />mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-<span class="hljs-number">6</span>&arch=$basearch<br />failovermethod=priority<br />enabled=<span class="hljs-number">0</span><br />gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-<span class="hljs-number">6</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、monitor安装所有mmm套件</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># yum -y install mysql-mmm*</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、安装完后的配置文件说明</p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><span style="color: inherit;font-family: inherit;line-height: 1.1">默认配置文件目录为/etc/mysql-mmm</span></p> <ul style="margin-bottom: 1.1em;line-height: 1.6" class=" list-paddingleft-2"> <li> <p><strong style="line-height: 1.6">mmm_mon.conf</strong>:定义监控参数,只需在服务器端配置</p> </li> <li> <p><strong style="line-height: 1.6">mmm_common.conf</strong>: 设置读、写节点的IP及配置虚拟,每个节点均需一样</p> </li> <li> <p><strong style="line-height: 1.6">mmm_agent.conf</strong>:设置每个节点的标识</p> </li> </ul> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、修改mmm_common.conf配置文件</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor mysql-mmm]<span class="hljs-comment"># vim mmm_common.conf</span><br />active_master_role writer <span class="hljs-comment">#前面安装mysql时,设定read_only=1参数,而这里的参数是MMM是判断某个节点状态,会自动在可写的节点上设置“set global read_only=0”,那么此时就打开了写的权限,而其他还是只读的状态</span><br /><host default> <span class="hljs-comment">#定义默认主机信息</span><br /> cluster_interface eth0 <span class="hljs-comment">#配置的网络接口</span><br /> pid_path /var/run/mysql-mmm/mmm_agentd.pid <span class="hljs-comment">#pdi文件路径</span><br /> bin_path /usr/libexec/mysql-mmm/ <span class="hljs-comment"># MMM可执行文件路径</span><br /> replication_user repluser <span class="hljs-comment"># 拥有复制权限的账号</span><br /> replication_password replp@ss <span class="hljs-comment"># 拥有复制权限的密码</span><br /> agent_user mmm_agent <span class="hljs-comment"># 更改只读操作用户的账号</span><br /> agent_password agent_password <span class="hljs-comment">#更改只读操作用户的密码</span><br /></host> <br /><host db1> <span class="hljs-comment">#设置db1的配置信息,该名字在mmm_agent.conf中间中定义</span><br /> ip <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.101</span> <span class="hljs-comment"># db1的物理IP地址</span><br /> mode master <span class="hljs-comment"># db1角色,可选有master 和 slave </span><br /> peer db2 <span class="hljs-comment"># 设置与db1对等的主机名,表示db1和db2均为master角色</span><br /></host><br /><host db2><br /> ip <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.102</span><br /> mode master<br /> peer db1<br /></host><br /><host db3><br /> ip <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.103</span><br /> mode slave <span class="hljs-comment"># 设置db3的角色为 slave</span><br /></host><br /><host db4><br /> ip <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.104</span><br /> mode slave<br /></host><br /><role writer> <span class="hljs-comment">#设置具有可写mysql操作的角色模式</span><br /> hosts db1, db2 <span class="hljs-comment"># 指定可具有写操作的主机</span><br /> ips <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.200</span> <span class="hljs-comment"># 具有写操作的虚拟IP地址</span><br /> mode exclusive <span class="hljs-comment"># 设置角色的模式为互斥,表示同一时间,只有一台主机具有此IP</span><br /></role><br /><role reader> <span class="hljs-comment"># 设置具有可读操作的角色模式</span><br />hosts db1, db2, db3, db4 <span class="hljs-comment"># 指定可读操作的主机</span><br />ips <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.201</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.202</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.203</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.204</span>. <span class="hljs-comment">#指定可读操作的虚拟IP地址</span><br />mode balanced <span class="hljs-comment"># 负载均衡模式,上面指定的虚拟IP地址会均衡废品到各只读操作的主机上。这类表示轮训</span><br /></role><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">5、将mmm_common.conf配置文件拷贝到各节点上</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor mysql-mmm]<span class="hljs-comment"># scp mmm_common.conf 192.168.80.101:/etc/mysql-mmm/</span><br />[root@monitor mysql-mmm]<span class="hljs-comment"># scp mmm_common.conf 192.168.80.102:/etc/mysql-mmm/</span><br />[root@monitor mysql-mmm]<span class="hljs-comment"># scp mmm_common.conf 192.168.80.103:/etc/mysql-mmm/</span><br />[root@monitor mysql-mmm]<span class="hljs-comment"># scp mmm_common.conf 192.168.80.104:/etc/mysql-mmm/</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">6、配置mmm_mon.conf配置文件</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor mysql-mmm]<span class="hljs-comment"># vim mmm_mon.conf</span><br />include mmm_common.conf<br /><monitor><br /> ip <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> <span class="hljs-comment"># 仅在本地监听,为了使安全,mmm_mond默认监听的端口是99988</span><br /> pid_path /var/run/mysql-mmm/mmm_mond.pid <span class="hljs-comment">#PDI文件位置</span><br /> bin_path /usr/libexec/mysql-mmm <span class="hljs-comment"># 可执行文件位置</span><br /> status_path /var/lib/mysql-mmm/mmm_mond.status <span class="hljs-comment"># 集群状态文件</span><br />ping_ips <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.101</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.102</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.103</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.104</span>, <span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.1</span><br /><span class="hljs-comment">#用于测试可用性的IP地址清单</span><br /> auto_set_online <span class="hljs-number">60</span> <span class="hljs-comment"># 是否自动上线,如果此值大于0,表示抖动的主机在抖动范围后,会自动上线。抖动时间范围是3600s </span><br /> <span class="hljs-comment"># The kill_host_bin does not exist by default, though the monitor will</span><br /> <span class="hljs-comment"># throw a warning about it missing. See the section 5.10 "Kill Host</span><br /> <span class="hljs-comment"># Functionality" in the PDF documentation.</span><br /> <span class="hljs-comment">#</span><br /> <span class="hljs-comment"># kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host</span><br /> <span class="hljs-comment">#</span><br /></monitor><br /><host default><br /> monitor_user mmm_monitor <span class="hljs-comment"># monitor user的账号</span><br /> monitor_password monitor_password <span class="hljs-comment"># monitor password密码</span><br /></host><br />debug <span class="hljs-number">0</span><br /></code></pre> <h2 id="安装mysql-mmm-客户端" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">安装MySQL MMM 客户端</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、 使用上面的方法各节点配置好epel源 <br />2、各节点安装mysql-mmm-agent</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@slave2 mysql]<span class="hljs-comment"># yum -y install mysql-mmm-agent</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、在各节点上创建下列两个账号</p> <ul style="margin-bottom: 1.1em;line-height: 1.6" class=" list-paddingleft-2"> <li> <p><strong style="line-height: 1.6">Monitor user账号</strong>:用于MMM管理服务器对MySQL服务器做健康状态检查</p> </li> <li> <p><strong style="line-height: 1.6">Monitor agent账号</strong>:用于切换只读模式和同步master信息</p> </li> </ul> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO <span class="hljs-string">'mmm_monitor'</span>@<span class="hljs-string">'192.168.80.%'</span> IDENTIFIED BY <span class="hljs-string">'monitor_password'</span>;<br />MariaDB [(none)]> GRANT SUPER,REPLICATION CLIENT,PROCESS ON *.* TO <span class="hljs-string">'mmm_agent'</span>@<span class="hljs-string">'192.168.80.%'</span> IDENTIFIED BY <span class="hljs-string">'agent_password'</span>;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、配置mysql-mmm-agent</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 ~]<span class="hljs-comment"># vim /etc/default/mysql-mmm-agent</span><br /><span class="hljs-comment"># mysql-mmm-agent defaults</span><br />ENABLED=<span class="hljs-number">1</span> <span class="hljs-comment"># 表示agent是否启用状态</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">5、配置mmm_agent.conf</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 mysql-mmm]<span class="hljs-comment"># vim mmm_agent.conf</span><br />include mmm_common.conf<br />this db1 <span class="hljs-comment"># mmm_common.conf中标识的名称,那么剩余的节点名称分别为db2,db3,db4,请根据要求再各节点上进行修改,这里不再详细列举。</span><br /></code></pre> <h2 id="启动mmm服务并查看mmm集群状态" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">启动MMM服务,并查看MMM集群状态</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、MMM服务端的服务为 mysql-mmm-monitor,在服务端启动服务,并设置开机自动启动</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># service mysql-mmm-monitor start</span><br />[root@monitor ~]<span class="hljs-comment"># chkconfig mysql-mmm-monitor on</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、MMM客户端的服务为 mysql-mmm-agent,再各节点启动服务,并设置开机自动启动</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 mysql-mmm]<span class="hljs-comment"># service mysql-mmm-agent start</span><br />[root@master1 ~]<span class="hljs-comment"># chkconfig mysql-mmm-agent on</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、mmm_control命令介绍</p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">在安装MMM后,可以通过mmm_contril管理MMM集群,MMM集群的运行日志一般保存在/var/log/mysql_mmm目录下,下面介绍mmm_control使用</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># mmm_control mode</span><br /> help <span class="hljs-comment">#显示帮助信息</span><br /> ping <span class="hljs-comment">#测试网络运行状态</span><br /> show <span class="hljs-comment">#显示MMM节点的状态</span><br /> checks [<host>|all [<check>|all]] - show checks status <span class="hljs-comment">#显示MMM集群中指定节点/所有节点的状态</span><br /> set_online <host> <span class="hljs-comment"># 将某个节点设置为online状态</span><br /> set_offline <host> <span class="hljs-comment"># 将某个节点设置为offline状态</span><br /> mode <span class="hljs-comment">#显示MMM运行模式</span><br /> set_active <span class="hljs-comment">#切换MMM集群为active模式.</span><br /> set_manual <span class="hljs-comment">#切换MMM集群为manual模式.</span><br /> set_passive <span class="hljs-comment">#切换MMM集群为passive模式.</span><br /> move_role [--force] <role> <host> - move exclusive role <role> to host <host><br /> <span class="hljs-comment"># 在互斥模式下切换角色 </span><br /> set_ip <ip> <host> <span class="hljs-comment">#在被动模式下操作角色</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、mmm_control checks all显示所有节点详细运行状态</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># mmm_control checks all</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"> <img src="//cto.wang/usr/uploads/2016/07/20160703184426-65-1.png" title="1464772295259425.png" alt="1464769998007.png" />5、查看集群运行状态</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># mmm_control checks all</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-81-1.png" title="1464772305427327.png" alt="1464770127661.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">集群节点的状态有以下几种</p> <ul style="margin-bottom: 1.1em;line-height: 1.6" class=" list-paddingleft-2"> <li> <p><strong style="line-height: 1.6">ONLINE</strong>:表示节点运行正常,处于在线状态</p> </li> <li> <p><strong style="line-height: 1.6">ADMIN_OFFLINE</strong>:表示节点是管理员关闭的</p> </li> <li> <p><strong style="line-height: 1.6">HARD_OFFLINE</strong>:表示节点处于离线状态,有可能是因为MMM集群测试ping时失败或检测MySQL失败而切换的一种状态</p> </li> <li> <p><strong style="line-height: 1.6">AWAITING_RECOVERY</strong>:表示等待恢复状态,若集群mode设置是active运行模式,那么此状态会自动回复到ONLINE状态</p> </li> <li> <p><strong style="line-height: 1.6">REPLICATION_FAIL</strong>:表示主从复制失败状态,一般是复制主线程(IO线程)没有运行</p> </li> <li> <p><strong style="line-height: 1.6">REPLICATION_DELAY</strong>:表示复制日志有延时,一般由于检查日志失败导致。</p> </li> </ul> <h2 id="创建允许mysql用户" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">创建允许mysql用户</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">在主节点上创建mysql用户,允许让客户端能允许访问mysql</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> CREATE USER pangxie1@<span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.107</span> IDENTIFIED BY <span class="hljs-string">'redhat'</span>;<br />MariaDB [(none)]> GRANT CREATE ON *.* TO pangxie1@<span class="hljs-number">192.168</span><span class="hljs-number">.80</span><span class="hljs-number">.107</span>;<br /></code></pre> <h2 id="测试mmm实现mysql高可用" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">测试MMM实现MySQL高可用</h2> <h3 id="测试写操作" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">测试写操作</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、在主节点master1上查看IP地址</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 ~]<span class="hljs-comment"># ip addr</span><br /><span class="hljs-comment">#可以看到write IP位于主节点master1上</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-94.png" title="1464772315319460.png" alt="1464770871972.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、使用客户端mysql-client连接写节点的VIP</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@mysql-client ~]<span class="hljs-comment"># mysql -u pangxie1 -h 192.168.80.200 -p</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、创建数据库</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">mysql> CREATE DATABASE pangxiedb;<br />Query OK, <span class="hljs-number">1</span> row affected (<span class="hljs-number">0.01</span> sec)<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、查看创建完成后的数据库列表</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">mysql> SHOW DATABASES;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-16.png" title="1464772328647956.png" alt="1464770923463.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">5、查看此时连入的mysql主机名称</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">mysql> SHOW VARIABLES LIKE <span class="hljs-string">"%hostname%"</span>;<br /><span class="hljs-comment">#可以看到,Write IP对应的VIP是主节点master1上</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-2.png" title="1464772345469589.png" alt="1464770943342.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">6、在其他从节点上查看数据库列表,可以看到此时其他的从节点能复制主节点新创建的数据库。</p> <h3 id="测试读操作" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">测试读操作</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、使用客户端mysql-client连接读权限的VIP</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@mysql-client ~]<span class="hljs-comment"># mysql -u pangxie1 -h 192.168.80.201 –p</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、查看数据库表</p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-34.png" title="1464772367357070.png" alt="1464771034716.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、查看当前mysql主机名</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">mysql> SHOW VARIABLES LIKE <span class="hljs-string">"%hostname%"</span>;<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-96.png" title="1464772390709340.png" alt="1464771160108.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、测试写操作</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">mysql> CREATE DATABASE testdb1;<br /><span class="hljs-comment">#可以看到是无法写操作的</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-36-1.png" title="1464772401603699.png" alt="1464771184468.png" /></p> <h3 id="模拟主节点故障" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">模拟主节点故障</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、在主节点master1关闭mysql服务</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 ~]<span class="hljs-comment"># service mysqld stop</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、在monitor上查看各节点状态</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># mmm_control show</span><br /><span class="hljs-comment"># 可以看到主节点master1已经检测到为OFFLINE</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-91.png" title="1464772417217952.png" alt="1464771226859.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">3、在从节点slave1上查看从节点状态</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">MariaDB [(none)]> SHOW SLAVE STATUS\G<br /><span class="hljs-comment">#可以看到从节点已经将主服务器指向备节点</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-56-1.png" title="1464772429930087.png" alt="1464771280112.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">4、在备节点master2查看IP地址</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master2 ~]<span class="hljs-comment"># ip addr</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-97.png" title="1464772442546905.png" alt="1464771302070.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">5、在备节点master2创建MS2db数据库,然后再次查看数据库列表</p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-57.png" title="1464772523544752.png" alt="1464771313881.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">6、使用mysql-client使用上面的方法,再次测试读写操作,结果和预想一致。</p> <h3 id="模拟故障恢复" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">模拟故障恢复</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、在主节点master1启动mysqld服务</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@master1 ~]<span class="hljs-comment"># service mysqld start</span><br />Starting MySQL.. SUCCESS!<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">2、在monitor重新查看节点状态</p> <pre class="prettyprint hljs-dark"><code class="language-python hljs">[root@monitor ~]<span class="hljs-comment"># mmm_control show</span><br /><span class="hljs-comment">#经过一段时间后,master1节点恢复ONLINE状态。</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703184426-20.png" title="1464772534343022.png" alt="1464771357841.png" /></p> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6">至此,MySQL-MMM实现MySQL的高可用就配置完成。</p> </blockquote> <h2 id="需要注意地方及建议" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">需要注意地方及建议</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6">1、 在配置MySQL时,需要留意Server-id,一定要保证各节点的Server-id不一致,否则会导致出现环回复制的情况,这种情况一般是在实现双主模型时出现 <br />2、 数据文件、二进制日志文件、中继日志文件建议最好是分开存放,或者说是独立存放,不使用默认路径。二进制日志在MySQL复制中尤为重要。 <br />3、 为保证数据不出现脑裂情况,要在mysql配置文件中my.cnf的mysqld中配置“read_only=1”,设置此项目的就是为了防止脑裂。 <br />4、如果使用到iptables,请记得放行mysql的端口,以及IO进程访问主服务器端的端口。</p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信