Loading... <p></p> <h1 style="font-size: 2.6em;margin: 21px 0px 10.5px;font-family: inherit;color: inherit">Corosync + Pacemaker 搭建高可用MariaDB服务</h1> <p style="margin-top: 0px;margin-bottom: 1.1em"></p> <hr /> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">实验描述</h2> <p style="margin-top: 0px;margin-bottom: 1.1em">1.本实验的目的是为了通过手动配置corosync配置文件,实现MariaDB服务的高可用,集群心跳传递使用组播方式。<br />2.三个节点的主机名分别为:<code>node5.redhat.com</code>、<code>node6.redhat.com</code>、<code>node7.redhat.com</code>。地址为<code>172.16.100.5</code>、<code>172.16.100.6</code>、<code>172.16.100.7</code>。<br />3.利用nfs做后端存储,NFS地址为<code>172.16.0.254</code>。<br />3.VIP地址为<code>172.16.100.100</code><br />4.三个节点系统全部为CentOS7.2,NFS节点为CentOS6.5。<br />5.配置高可用集群的前三个步骤:节点<code>时间同步</code>、<code>主机名解析</code>和<code>SSH互信</code>这里就再演示了。</p> <hr /> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">配置步骤</h2> <h4 style="font-family: inherit;color: inherit;font-size: 1.25em;margin: 1.2em 0px 0.6em">一、NFS节点的配置</h4> <p style="margin-top: 0px;margin-bottom: 1.1em">1.首先在此节点安装NFS服务并创建共享目录</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@centos6 ~]# yum install nfs-utils -y<br />[root@centos6 ~]# mkdir /data/{mydata,logs} -pv<br />mkdir: created directory “data”<br />mkdir: created directory “/data/mydata”<br />mkdir: created directory “/data/logs”<br />[root@centos6 ~]# vim /etc/exports</p> </blockquote> <pre>/data 172.16.0.0/16(rw,no_root_squash)设置共享目录及其权限3.</pre> <p style="margin-top: 0px;margin-bottom: 1.1em">配置完成之后启动NFS服务<code>service nfs restart</code>。</p> <p style="margin-top: 0px;margin-bottom: 1.1em">2.创建mysql用户和用户组,并赋予共享目录权限。注意:<code>所有节点上的mysql用户和组的ID号一定要一样</code></p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@centos6 ~]# groupadd -r -g 240 mysql<br />[root@centos6 ~]# useradd -r -u 240 -g 240 mysql</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@centos6 ~]# chmod -R 775 /data<br />[root@centos6 ~]# chown -R mysql.root /data</p> </blockquote> <h4 style="font-family: inherit;color: inherit;font-size: 1.25em;margin: 1.2em 0px 0.6em">二、将MariaDB服务在三个节点都配置好</h4> <p style="margin-top: 0px;margin-bottom: 1.1em">1.首先在<code>node5.redhat.com</code>节点上安装<code>nfs-utils</code>包,以支持挂载nfs格式的文件系统。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# yum install nfs-utils -y</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">2.在<code>node5.redhat.com</code>节点上创建mysql用户和组。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# groupadd -r -g 240 mysql<br />[root@node5 ~]# useradd -r -u 240 -g 240 mysql</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">3.创建/data目录并挂载NFS服务到/data。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# mkdir /data<br />[root@node5 ~]# mount -t nfs 172.16.0.254:/data /data</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">4.解压<code>mariadb</code>的<code>二进制</code>程序包并创建链接。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/<br />[root@node5 ~]# cd /usr/local/<br />[root@node5 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql<br />‘mysql’ -> ‘mariadb-10.0.24-linux-x86_64’</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">5.安装并配置<code>mariadb</code>服务。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 local]# cd mysql/<br />[root@node5 mysql]# ./scripts/mysql_install_db –datadir=/data/mydata –user=mysql</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">脚本安装过程这里就省略了。。。</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 mysql]# cp support-files/mysql.server /etc/init.d/mysqld<br />[root@node5 mysql]# cp support-files/my-large.cnf /etc/my.cnf<br />cp: overwrite ‘/etc/my.cnf’? y<br />[root@node5 mysql]# echo “export PATH=/usr/local/mysql/bin:$PATH” > /etc/profile.d/mysqld.sh<br />[root@node5 mysql]# . /etc/profile.d/mysqld.sh<br />[root@node5 mysql]# vim /etc/my.cnf</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em"><code>my.cnf</code>文件示例。</p> <pre>[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M thread_concurrency = 2 datadir = /data/mydata innodb_file_per_table = 1 log-bin=/data/logs/mysql-bin binlog_format=mixed server-id = 1 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout</pre> <p style="margin-top: 0px;margin-bottom: 1.1em">6.启动mariadb服务并创建一个测试用户,方便最后我们测试使用。之后将mariadb服务关闭。并将NFS共享目录卸载。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 mysql]# /etc/init.d/mysqld start<br />Starting MySQL.. SUCCESS!<br />[root@node5 mysql]# mysql<br />Welcome to the MariaDB monitor. Commands end with ; or \g.<br />Your MariaDB connection id is 4<br />Server version: 10.0.24-MariaDB MariaDB Server</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">MariaDB [(none)]> <code>GRANT ALL ON *.* TO 'ha'@'%' IDENTIFIED BY 'redhat';</code><br />Query OK, 0 rows affected (0.04 sec)</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">MariaDB [(none)]> <code>FLUSH PRIVILEGES;</code><br />Query OK, 0 rows affected (0.03 sec)</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">MariaDB [(none)]> quit<br />Bye<br />[root@node5 mysql]# /etc/init.d/mysqld stop<br />Shutting down MySQL… SUCCESS!</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# umount /data</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">5.将<code>my.cnf</code>复制到其它节点,并在其它节点上配置上述<code>1</code>、<code>2</code>、<code>3</code>、<code>4</code>步骤.。注意:<code>在执行第三步的时候只要创建目录即可、不需要再挂载了</code>,并且需要再多执行一步:<code>cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld</code>#复制mariadb启动脚本。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# scp /etc/my.cnf node6.redhat.com:/etc/my.cnf<br />[root@node5 ~]# scp /etc/my.cnf node7.redhat.com:/etc/my.cnf</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em"><strong><code>node6.redhat.com</code></strong></p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node6 ~]# yum install nfs-utils -y<br />[root@node6 ~]# groupadd -r -g 240 mysql<br />[root@node6 ~]# useradd -r -u 240 -g 240 mysql<br />[root@node6 ~]# mkdir /data<br />[root@node6 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/<br />[root@node6 ~]# cd /usr/local/<br />[root@node6 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql<br />[root@node6 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em"><strong><code>node7.redhat.com</code></strong></p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node7 ~]# yum install nfs-utils -y<br />[root@node7 ~]# groupadd -r -g 240 mysql<br />[root@node7 ~]# useradd -r -u 240 -g 240 mysql<br />[root@node7 ~]# mkdir /data<br />[root@node7 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/<br />[root@node7 ~]# cd /usr/local/<br />[root@node7 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql<br />[root@node7 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld</p> </blockquote> <h4 style="font-family: inherit;color: inherit;font-size: 1.25em;margin: 1.2em 0px 0.6em">三、配置corosync集群,实现MariaDB的高可用</h4> <p style="margin-top: 0px;margin-bottom: 1.1em">1.在三个节点都安装上corosync+pacemaker服务</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 ~]# yum install corosync pacemaker -y</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node6 ~]# yum install corosync pacemaker -y</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node7 ~]# yum install corosync pacemaker -y</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">2.然后我们在一个节点上创建并配置corosync.conf文件,文件路径为/etc/corosync/corosync.conf(默认没有这个文件)。</p> <p style="margin-top: 0px;margin-bottom: 1.1em">配置文件示例:</p> <pre>totem { version: 2 crypto_cipher: aes128 crypto_hash: sha1 secauth: on interface { ringnumber: 0 bindnetaddr: 172.16.0.0 mcastaddr: 239.255.1.1 mcastport: 5405 ttl: 1 } } nodelist { node { ring0_addr: 172.16.100.5 nodeid: 1 } node { ring0_addr: 172.16.100.6 nodeid: 2 } node { ring0_addr: 172.16.100.7 nodeid: 3 } } logging { fileline: off to_stderr: no to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes debug: off timestamp: on logger_subsys { subsys: QUORUM debug: off } } quorum { provider: corosync_votequorum }</pre> <p style="margin-top: 0px;margin-bottom: 1.1em">3.之后使用<code>corosync-keygen</code>命令,会自动在/etc/corosync/目录下创建一个<code>authkey</code>文件。注意:<code>如果遇到卡在生成随机数的地方,可以用如下方法解决:</code></p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 corosync]# cd /dev/<br />[root@node5 dev]# mv random random.bak<br />[root@node5 dev]# ln -sv urandom random<br />‘random’ -> ‘urandom’</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 dev]# corosync-keygen<br />Corosync Cluster Engine Authentication key generator.<br />Gathering 1024 bits for key from /dev/random.<br />Press keys on your keyboard to generate entropy.<br />Writing corosync key to /etc/corosync/authkey.</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 dev]# rm -rf random<br />[root@node5 dev]# mv random.bak random</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">4.之后将<code>corosync.conf</code>和<code>authkey</code>都复制到另外的节点上去。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# cd /etc/corosync/<br />[root@node5 corosync]# scp corosync.conf authkey node6.redhat.com:/etc/corosync/<br />[root@node5 corosync]# scp corosync.conf authkey node7.redhat.com:/etc/corosync/</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">5.在所有节点启动<code>corosync</code>和<code>pacemaker</code>服务。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 ~]# systemctl start corosync.service<br />[root@node5 ~]# systemctl start pacemaker.service</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node6 ~]# systemctl start corosync.service<br />[root@node6 ~]# systemctl start pacemaker.service</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node7 ~]# systemctl start corosync.service<br />[root@node7 ~]# systemctl start pacemaker.service</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">使用<code>crm_mon</code>查看节点是否全部加了进来</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./1.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-56.jpg" title="1459954175384302.jpg" alt="1.jpg" /></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">可以看到三个节点已经全部加进了集群里面。</p> <p style="margin-top: 0px;margin-bottom: 1.1em">6.,在node5.redhat.com上面安装<code>crmsh</code>,完成资源配置。<code>注意</code>:”CentOS 7以后默认不自带crmsh,需要自己去网上下载,这里我使用的是在网上找到的<code>crmsh-scripts-2.2.0-7.1.noarch.rpm</code>,<code>crmsh-2.2.0-7.1.noarch.rpm</code>,<code>python-parallax-1.0.1-10.1.noarch.rpm</code>。”</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 ~]# yum install crmsh-2.2.0-7.1.noarch.rpm crmsh-scripts-2.2.0-7.1.noarch.rpm python-parallax-1.0.1-10.1.noarch.rpm -y</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">[root@node5 ~]# crm configure<br /><strong><code>关闭stonith</code></strong><br />crm(live)configure# property stonith-enabled=false<br /><strong><code>配置VIP资源</code></strong><br />crm(live)configure# primitive mysqlip ocf:heartbeat:IPaddr params ip=’172.16.100.100’ op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s<br /><strong><code>配置NFS资源</code></strong><br />crm(live)configure# primitive mysqlstore ocf:heartbeat:Filesystem params device=’172.16.0.254:/data’ directory=’/data’ fstype=’nfs’ op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s<br /><strong><code>配置Mariadb资源,这里我们使用的是lsb脚本</code></strong><br />crm(live)configure# primitive mysqlserver lsb:mysqld params op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s<br /><strong><code>将三个资源加入到同一组</code></strong><br />crm(live)configure# group mysqlservice mysqlip mysqlstore mysqlserver<br /><strong><code>设置排序约束</code></strong><br />crm(live)configure# order mysqlip_before_mysqlstore Mandatory: mysqlip mysqlstore<br />crm(live)configure# order mysqlstore_before_mysqlserver Mandatory: mysqlstore mysqlserver<br /><strong><code>检测语法错误</code></strong><br />crm(live)configure# verify<br /><strong><code>检测语法没有报错的话就可以提交配置了</code></strong><br />crm(live)configure# commit<br />crm(live)configure# bye</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">这样我们整个集群的资源就配置好了。</p> <hr /> <h2 style="font-family: inherit;color: inherit;font-size: 2.15em;margin: 1.2em 0px 0.6em">测试步骤</h2> <p style="margin-top: 0px;margin-bottom: 1.1em">1.首先使用<code>crm status</code>查看节点状态</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./2.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-81.jpg" title="1459954183656560.jpg" alt="2.jpg" /></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">显示没有问题.</p> <p style="margin-top: 0px;margin-bottom: 1.1em">2.这里将NFS服务器当作测试节点,在节点上安装mysql的客户端并进行测试。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@centos6 ~]# yum install mysql -y<br />[root@centos6 ~]# mysql -h172.16.100.100 -uha -predhat</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./3.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-11.jpg" title="1459954189880321.jpg" alt="3.jpg" /></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">能够正常访问,并且我们在里面创建了一个<code>mydb</code>库。</p> <p style="margin-top: 0px;margin-bottom: 1.1em">3.现在我们将node5设置为standby状态,测试资源是否能够迁移成功</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 ~]# crm node standby node5.redhat.com<br />[root@node5 ~]# crm status</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./4.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-26.jpg" title="1459954197411998.jpg" alt="4.jpg" /></p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px">可以看到资源迁移成功。</p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">4.再次进行测试。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@centos6 ~]# mysql -h172.16.100.100 -uha -predhat</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./5.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-33.jpg" title="1459954202604082.jpg" alt="5.jpg" /></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">还是访问我们的VIP<code>172.16.100.100</code>能够正常访问,并且成功的在之前创建的<code>mydb</code>库上又创建了一个测试表。</p> <p style="margin-top: 0px;margin-bottom: 1.1em">5.现在我们将node6也设置为standby状态,测试资源是否还能够迁移成功</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 ~]# crm node standby node6.redhat.com<br />[root@node5 ~]# crm status</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./6.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-31.jpg" title="1459954213426130.jpg" alt="6.jpg" /></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">可以看到资源被成功的迁移到了node7上。<br />现在我们将node5和node6全部设置回online状态。</p> <blockquote><p style="margin-top: 0px;font-size: 1em;margin-bottom: 1.1em">[root@node5 ~]# crm node online node5.redhat.com<br />[root@node5 ~]# crm node online node6.redhat.com<br />[root@node5 ~]# crm status</p> <p style="margin-top: 0px;font-size: 1em;margin-bottom: 0px"><img src="//cto.wang/usr/uploads/2016/07/20160703161113-79.gif" alt="Alt text" longdesc="./7.jpg" /><img src="//cto.wang/usr/uploads/2016/07/20160703161113-11-1.jpg" title="1459954219865199.jpg" alt="7.jpg" /></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em">可以看到节点又成功的回来了,这样就成功的实现了MariaDB的高可用。</p> <p style="margin-top: 0px;margin-bottom: 1.1em">菜鸟一枚,以上配置如有问题,欢迎指正。谢谢!!!</p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信