天天看点

corosync+pacemaker实现高可用的MariaDB

一、准备工作

二、MariaDB server配置(基于nfs)

nfs server准备

<code>1、在nfs server准备LVM存储空间</code>

<code>[root@node3 ~]</code><code># fdisk /dev/sdb</code>

<code>Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel</code>

<code>Building a new DOS disklabel with disk identifier 0x61284c6a.</code>

<code>Changes will remain </code><code>in</code> <code>memory only, </code><code>until</code> <code>you decide to write them.</code>

<code>After that, of course, the previous content won't be recoverable.</code>

<code> </code> 

<code>Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)</code>

<code>WARNING: DOS-compatible mode is deprecated. It's strongly recommended to</code>

<code>         </code><code>switch off the mode (</code><code>command</code> <code>'c'</code><code>) and change display </code><code>units</code> <code>to</code>

<code>         </code><code>sectors (</code><code>command</code> <code>'u'</code><code>).</code>

<code>Command (m </code><code>for</code> <code>help): n</code>

<code>Command action</code>

<code>   </code><code>e   extended</code>

<code>   </code><code>p   primary partition (1-4)</code>

<code>p</code>

<code>Partition number (1-4): 3</code>

<code>First cylinder (1-1305, default 1): </code>

<code>Using default value 1</code>

<code>Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +10G</code>

<code>Value out of range.</code>

<code>Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +5G </code>

<code>Command (m </code><code>for</code> <code>help): t</code>

<code>Selected partition 3</code>

<code>Hex code (</code><code>type</code> <code>L to list codes): 8e</code>

<code>Changed system </code><code>type</code> <code>of partition 3 to 8e (Linux LVM)</code>

<code>Command (m </code><code>for</code> <code>help): w</code>

<code>The partition table has been altered!</code>

<code>Calling ioctl() to re-</code><code>read</code> <code>partition table.</code>

<code>Syncing disks.</code>

<code>[root@node3 ~]</code><code># partx -a /dev/sdb</code>

<code>[root@node3 ~]</code><code># pvcreate /dev/sdb3</code>

<code>  </code><code>Physical volume </code><code>"/dev/sdb3"</code> <code>successfully created</code>

<code>[root@node3 ~]</code><code># vgcreate myvg /dev/sdb3</code>

<code>  </code><code>Volume group </code><code>"myvg"</code> <code>successfully created</code>

<code>[root@node3 ~]</code><code># lvcreate -L 5G -n mydata myvg</code>

<code>  </code><code>Logical volume </code><code>"mydata"</code> <code>created.</code>

<code>[root@node3 ~]</code><code># mke2fs -t ext4 /dev/myvg/mydata</code>

<code>mke2fs 1.41.12 (17-May-2010)</code>

<code>Filesystem label=</code>

<code>OS </code><code>type</code><code>: Linux</code>

<code>Block size=4096 (log=2)</code>

<code>Fragment size=4096 (log=2)</code>

<code>Stride=0 blocks, Stripe width=0 blocks</code>

<code>327680 inodes, 1310720 blocks</code>

<code>65536 blocks (5.00%) reserved </code><code>for</code> <code>the super user</code>

<code>First data block=0</code>

<code>Maximum filesystem blocks=1342177280</code>

<code>40 block </code><code>groups</code>

<code>32768 blocks per group, 32768 fragments per group</code>

<code>8192 inodes per group</code>

<code>Superblock backups stored on blocks: </code>

<code>    </code><code>32768, 98304, 163840, 229376, 294912, 819200, 884736</code>

<code>Writing inode tables: </code><code>done</code>                            

<code>Creating journal (32768 blocks): </code><code>done</code>

<code>Writing superblocks and filesystem accounting information: </code><code>done</code>

<code>This filesystem will be automatically checked every 36 mounts or</code>

<code>180 days, whichever comes first.  Use tune2fs -c or -i to override.</code>

<code>2、开机自动挂载,并nfs导出</code>

<code>[root@node3 ~]</code><code># mkdir  /mydata</code>

<code>[root@node3 ~]</code><code># vim /etc/fstab </code>

<code>/dev/myvg/mydata</code>        <code>/mydata</code>                 <code>ext4    defaults        0 0</code>

<code>[root@node3 ~]</code><code># mount -a</code>

<code>[root@node3 ~]</code><code># mount | grep /mydata</code>

<code>/dev/mapper/myvg-mydata</code> <code>on </code><code>/mydata</code> <code>type</code> <code>ext4 (rw)</code>

<code>[root@node3 ~]</code><code># vim /etc/exports </code>

<code>/mydata</code>         <code>192.168.0.0</code><code>/24</code><code>(rw,no_root_squash)</code>

<code>#共享给192.168.0.0/24网段,可读可写,允许root用户登录便于初始化,配置结束可取消root用户登录</code>

<code>3、导出nfs共享目录</code>

<code>#创建mysql用户,指明uid,gid。各节点的mysql用户uid,gid一致。</code>

<code>[root@node3 ~]</code><code># groupadd -r -g 306 mysql</code>

<code>[root@node3 ~]</code><code># useradd -r -g 306 -u 306 mysql</code>

<code>#创建共享目录,并修改属主属组。</code>

<code>[root@node3 ~]</code><code># mkdir /mydata/data</code>

<code>[root@node3 ~]</code><code># chown -R mysql.mysql /mydata/data</code>

<code>#导出nfs共享目录</code>

<code>[root@node3 ~]</code><code># exportfs -arv</code>

<code>exporting 192.168.0.0</code><code>/24</code><code>:</code><code>/mydata</code>

<code>[root@node3 ~]</code><code># service nfs start</code>

三、各节点准备mysql

node1

<code>创建mysql用户,uid和gid与nfs server的mysql用户保持一致</code>

<code>[root@node1 ~]</code><code># groupadd -r -g 306 mysql</code>

<code>[root@node1 ~]</code><code># useradd -r -g 306 -u 306 mysql</code>

<code>安装mariadb</code>

<code>[root@node1 ~]</code><code># tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/</code>

<code>[root@node1 ~]</code><code># cd /usr/local</code>

<code>[root@node1 </code><code>local</code><code>]</code><code># ln -sv mariadb-5.5.46-linux-x86_64 mysql</code>

<code>`mysql</code><code>' -&gt; `mariadb-5.5.46-linux-x86_64'</code>

<code>[root@node1 </code><code>local</code><code>]</code><code># cd mysql/</code>

<code>[root@node1 mysql]</code><code># chown -R root.mysql ./*</code>

<code>挂载nfs文件系统</code>

<code>[root@node1 mysql]</code><code># mount -t nfs 192.168.0.20:/mydata /mydata</code>

<code>[root@node1 mysql]</code><code># mount | grep /mydata</code>

<code>192.168.0.20:</code><code>/mydata</code> <code>on </code><code>/mydata</code> <code>type</code> <code>nfs (rw,vers=4,addr=192.168.0.20,clientaddr=192.168.0.15)</code>

<code>初始化mysql至nfs,此步骤只需一个节点操作即可,本文node1执行,那么node2就不需要执行</code>

<code>初始化操作后,可以将nfs server的共享选项中的no_root_squash移除了</code>

<code>[root@node1 mysql]</code><code># ./scripts/mysql_install_db --datadir=/mydata/data/ --user=mysql</code>

<code>nfs server端查看</code>

<code>[root@node3 ~]</code><code># cd /mydata/data</code>

<code>[root@node3 data]</code><code># ll</code>

<code>total 32</code>

<code>-rw-rw---- 1 mysql mysql 16384 Nov 21 20:32 aria_log.00000001</code>

<code>-rw-rw---- 1 mysql mysql    52 Nov 21 20:32 aria_log_control</code>

<code>drwx------ 2 mysql root   4096 Nov 21 20:32 mysql</code>

<code>drwx------ 2 mysql mysql  4096 Nov 21 20:32 performance_schema</code>

<code>drwx------ 2 mysql root   4096 Nov 21 20:32 </code><code>test</code>

<code>node1节点配置mysql</code>

<code>[root@node1 mysql]</code><code># mkdir /etc/mysql</code>

<code>[root@node1 mysql]</code><code># cp support-files/my-large.cnf /etc/mysql/my.cnf</code>

<code>[root@node1 mysql]</code><code># vim /etc/mysql/my.cnf</code>

<code>datadir = </code><code>/mydata/data</code>

<code>innodb_file_per_table = on</code>

<code>skip_name_resolve = on</code>

<code>为mysql提供服务脚本,并禁止其开机启动</code>

<code>[root@node1 mysql]</code><code># cp support-files/mysql.server /etc/rc.d/init.d/mysqld</code>

<code>[root@node1 mysql]</code><code># chkconfig --add mysqld</code>

<code>[root@node1 mysql]</code><code># chkconfig mysqld off</code>

<code>启动mysql,创建mydb数据库</code>

<code>[root@node1 mysql]</code><code># service mysqld start</code>

<code>Starting MySQL..... SUCCESS!</code>

<code>[root@node1 mysql]</code><code># vim /root/.bashrc </code>

<code>PATH=</code><code>/usr/local/mysql/bin</code><code>:$PATH</code>

<code>export</code> <code>PATH</code>

<code>[root@node1 mysql]</code><code># source /root/.bashrc</code>

<code>[root@node1 mysql]</code><code># mysql</code>

<code>Welcome to the MariaDB monitor.  Commands end with ; or \g.</code>

<code>Your MariaDB connection </code><code>id</code> <code>is 2</code>

<code>Server version: 5.5.46-MariaDB-log MariaDB Server</code>

<code>Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.</code>

<code>Type </code><code>'help;'</code> <code>or </code><code>'\h'</code> <code>for</code> <code>help. Type </code><code>'\c'</code> <code>to </code><code>clear</code> <code>the current input statement.</code>

<code>MariaDB [(none)]&gt; create database mydb;</code>

<code>Query OK, 1 row affected (0.16 sec)</code>

<code>MariaDB [(none)]&gt; flush privileges;</code>

<code>Query OK, 0 rows affected (0.03 sec)</code>

<code>MariaDB [(none)]&gt; </code><code>exit</code>

<code>Bye</code>

<code>[root@node1 mysql]</code><code># service mysqld stop</code>

<code>Shutting down MySQL.. SUCCESS! </code>

<code>卸载共享目录</code>

<code>[root@node1 mysql]</code><code># umount /mydata</code>

node2

<code>[root@node2 ~]</code><code># groupadd -r -g 306 mysql</code>

<code>[root@node2 ~]</code><code># useradd -r -g 306 -u 306 mysql</code>

<code>[root@node2 ~]</code><code># tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local</code>

<code>[root@node2 ~]</code><code># cd /usr/local/</code>

<code>[root@node2 </code><code>local</code><code>]</code><code># ln -sv mariadb-5.5.46-linux-x86_64 mysql</code>

<code>[root@node2 </code><code>local</code><code>]</code><code># cd mysql/</code>

<code>[root@node2 mysql]</code><code># chown  root.mysql ./*</code>

<code>将node1的配置文件复制给node2</code>

<code>[root@node2 mysql]</code><code># mkdir /etc/mysql/</code>

<code>[root@node1 mysql]</code><code># scp /etc/mysql/my.cnf node2:/etc/mysql/</code>

<code>为node2节点准备服务脚本,并禁止开机启动</code>

<code>[root@node2 mysql]</code><code># cp support-files/mysql.server /etc/rc.d/init.d/mysqld</code>

<code>[root@node2 mysql]</code><code># chkconfig --add mysqld</code>

<code>[root@node2 mysql]</code><code># chkconfig mysqld off</code>

<code>挂在共享文件系统,启动mysql</code>

<code>[root@node2 mysql]</code><code># mkdir /mydata</code>

<code>[root@node2 mysql]</code><code># mount -t nfs 192.168.0.20:/mydata /mydata</code>

<code>[root@node2 mysql]</code><code># service mysqld start</code>

<code>Starting MySQL.. SUCCESS! </code>

<code>[root@node2 mysql]</code><code># vim /root/.bashrc </code>

<code>[root@node2 mysql]</code><code># source /root/.bashrc</code>

<code>MariaDB [(none)]&gt; show databases;</code>

<code>+--------------------+</code>

<code>| Database           |</code>

<code>| information_schema |</code>

<code>| mydb               |</code>

<code>| mysql              |</code>

<code>| performance_schema |</code>

<code>| </code><code>test</code>               <code>|</code>

<code>5 rows </code><code>in</code> <code>set</code> <code>(0.02 sec)</code>

<code>授权远程访问</code>

<code>MariaDB [(none)]&gt; grant all on *.* to </code><code>'root'</code><code>@</code><code>'192.168.%.%'</code> <code>identified by </code><code>'jymlinux'</code><code>;</code>

<code>Query OK, 0 rows affected (0.01 sec)</code>

<code>停止mysql,并卸载共享目录</code>

<code>[root@node2 mysql]</code><code># service mysqld stop</code>

<code>[root@node2 mysql]</code><code># umount /mydata</code>

四、使用crmsh配置mariadb高可用

本文转自 元婴期 51CTO博客,原文链接:http://blog.51cto.com/jiayimeng/1875183

继续阅读