corosync 实现 MariaDB 数据库服务的高可用

方案:node

    corosync + pacemaker  提供HA的解决方案。mysql

    使用NFS共享服务器导出的共享文件系统作为数据目录;linux

拓扑图以下:sql

wKiom1Qr_BjCyRZJAAJqfTCEF1Y669.jpg

1、配置HA高可用集群的各节点间可以基于主机名通信。数据库

一、设置主机名vim

(1)、在 192.168.60.128 主机设置安全

编辑/etc/sysconfig/network文件,使得主机名永久有效bash

[root@www ~]# vim /etc/sysconfig/network
HOSTNAME=node2.9527du.com

使用hostname命令设置主机名,让它即时生效服务器

[root@www ~]# hostname node2.9527du.com

(2)、在 192.168.60.22 主机设置架构

编辑/etc/sysconfig/network文件,使得主机名永久有效

[root@stu13 ~]# vim /etc/sysconfig/network
HOSTNAME=node1.9527du.com

使用hostname命令设置主机名,让它即时生成

[root@stu13 ~]# hostname node1.9527du.com

二、为了,操做方便设置节点之间可以基于密钥通信。也就是所谓的创建信任主机。

[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.60.128
[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.60.22

三、节点之间基于主机名通信,要可以解析主机名才能够。解析主机名有两种方式:

(1)、使用DNS地址解析服务器;

(2)、使用本地hosts文件解析

基于效率和安全方面考虑,这里使用hosts文件解析主机名。

[root@node1 ~]# vim /etc/hosts
192.168.60.22   node1.9527du.com node1
192.168.60.128  node2.9527du.com node2

把/etc/hosts文件复制到node2节点

[root@node1 ~]# scp /etc/hosts node2:/etc/
hosts                                         100%   78     0.1KB/s   00:00

四、测试两个节点可以实现基于密钥的方式进行通信和可否基于主机名进行通信

root@node2 ~]# ssh node1 'hostname'
node1.9527du.com
[root@node1 ~]# ssh node2 'hostname'
node2.9527du.com
[root@node1 ~]# ssh node2 'ping -c 1  node2.9527du.com'
PING node2.9527du.com (192.168.60.128) 56(84) bytes of data.
64 bytes from node2.9527du.com (192.168.60.128): icmp_seq=1 ttl=64 time=0.061 ms

--- node2.9527du.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.061/0.061/0.061/0.000 ms
[root@node1 ~]# ping -c 1 node1.9527du.com
PING node1.9527du.com (192.168.60.22) 56(84) bytes of data.
64 bytes from node1.9527du.com (192.168.60.22): icmp_seq=1 ttl=64 time=0.069 ms

--- node1.9527du.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms

说明:

   从上述能够看出,两个节点已经可以实现基于主机名的方式进行通信。


2、配置NFS服务器

一、提供NFS服务器共享的文件系统

使用LVM逻辑卷作为数据库的数据目录,为了使用逻辑卷的快照功能备份数据。

(1)、建立分区

[root@nsf ~]# fdisk -l /dev/sda | grep "/dev/sda3"
/dev/sda3            7859        9164    10489446   8e  Linux LVM

(2)、把该分区作成pv 

[root@nsf ~]# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

(3)、建立逻辑卷组myvg,PE大小为8E.

[root@nsf ~]# vgcreate -s 8M myvg /dev/sda3
  Volume group "myvg" successfully created

(4)、建立lvm,大小为:2G

[root@nsf ~]# lvcreate -L 2G -n sharedir myvg
  Logical volume "sharedir" created
[root@nsf ~]# mke2fs -t ext4  /dev/myvg/sharedir
[root@nsf ~]# echo $?
0

(5)、建立挂载点

[root@nsf ~]# mkdir /mydata

(6)、编辑/etc/fstab文件,实现开机能够自动挂载“/dev/myvg/sharedir”

[root@nsf ~]# vim /etc/fstab
/dev/mapper/myvg-sharedir /mydata               ext4    defaults,acl    0 0

(7)、挂载

[root@nsf ~]# mount -a

查看是否挂载

[root@nsf ~]# mount | grep "mydata"
/dev/mapper/myvg-sharedir on /mydata type ext4 (rw,acl)


二、配置挂载NFS服务器共享的文件系统的客户端中的数据库服务进程(mysql)具备共享文件系统(目录)的读写权限。

     把NFS服务器导出的文件系统中,做为数据库的数据目录,根据NFS服务器的工做原理,NFS的客户端能够往NFS服务器导出的文件系统(目录)写数据要知足两个条件:

     (A)、在NFS服务器级别,作访问控制时候是否授写NFS客户端写(w)的权限;

     (B)、在NFS客户端发起写(W)操做的进程的属主对应的UID,在NFS服务器端所在的主机是否该UID

          对应的用户。

     1)、若是有的话,那么就检查该用户是否有NFS服务器导出的文件系统(目录)的写权限。若是有

         写权限的话,那么NFS客户端的进程就能够往NFS服务器导出的文件系统发起写操做了。不然

         的话NFS客户端是无权限往NFS服务器导出的文件系统写数据的。

     2)、若是没有的话,那就就检查nobody用户是否有NFS服务器导出的文件系统(目录)的写权限。

         不过在Linux系统上,nobody用户的权限是最小。

     由于,在MySQL数据库中,接收客户端SQL操做请求的进程的属主是:mysql. 因此,咱们要配置该用户的UID号在NFS服务器所在的主机上有对应的用户名,且要求该用户有NFS服务器导出的文件系统(目录),有读写权限。对HA高可用节点和NFS服务器,三台主机添加下述用户:

规划在三台主机都使用系统用户,且UID都为:404;GID都为:404.

(1)、在三台主机设置用户

(A)、在node1 主机建立mysql用户

[root@node1 local]# useradd -r -u 404 -g 404 -s /sbin/nologin mysql
[root@node1 local]# id mysql
uid=404(mysql) gid=404(mysql) groups=404(mysql)
[root@node1 local]# groupadd -r -g 404 mysql

(B)、在node2 主机建立mysql用户

[root@node2 ~]# groupadd -r  -g 404 mysql
[root@node2 ~]# useradd -r -u 404 -g 404 -s /sbin/nologin mysql
[root@node2 ~]# id mysql
uid=404(mysql) gid=404(mysql) groups=404(mysql)

(C)、在NFS服务器也建立UID、GID都为:404的用户;

[root@nsf ~]# groupadd -g 404 -r usenfs
[root@nsf ~]# useradd  -r -u 404 -g 404 -s /sbin/nologin usenfs
[root@nsf ~]# id usenfs
uid=404(usenfs) gid=404(usenfs) groups=404(usenfs)

(2)、受权

(A)、在文件系统级别受权;使用控制列表方式,受权UID为:404的用户usenfs有NFS服务器导出的文件系统的读写权限。

[root@nsf /]# setfacl -m u:usenfs:rwx /mydata
[root@nsf /]# getfacl /mydata
getfacl: Removing leading '/' from absolute path names
# file: mydata
# owner: root
# group: root
user::rwx
user:usenfs:rwx  ----> 表示:usenfs用户有读写执行权限。
group::r-x
mask::rwx
other::r-x

(B)、设置NFS服务器导出的文件系统,在NFS级别作访问控制。

[root@nsf /]# vim /etc/exports
/mydata 192.168.60.0/24(rw)

启动NFS服务器

[root@nsf /]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Stopping RPC idmapd:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]

(3)、查看NFS服务器导出的文件系统

[root@nsf /]# showmount -e 192.168.60.40
Export list for 192.168.60.40:
/mydata 192.168.60.0/24

(4)、建立MariDB数据库的数据目录

[root@nsf /]mkdir /mydata/mysql

使用控制列表方式授与 usefs 用户有该目录的读写执行权限。

[root@nsf mysql]# setfacl -m u:usenfs:rwx /mydata/mysql/
[root@nsf mysql]# getfacl /mydata/mysql/
getfacl: Removing leading '/' from absolute path names
# file: mydata/mysql/
# owner: root
# group: root
user::rwx
user:usenfs:rwx  ----> usenfs用户的权限
group::r-x
mask::rwx
other::r-x


3、分别在两个节点安装数据库软件:

    两个节点使用的数据库软件的版本要求是一致的。由于,两个节点的数据库软件使用的是同一份数据集。因为不一样版本的数据库,它的元数据有差别。会形成没法启动数据库服务的。

这里两个节点都使用二进制版本的MariaDB数据库软件。

mariadb-5.5.36-linux-x86_64.tar.gz

一、在 node1(192.168.60.22)安装数据库软件

(1)、在node1挂载并测试NFS服务器导出的文件系统

查看NFS服务器导出的文件系统

[root@node1 ~]# showmount -e 192.168.60.40
Export list for 192.168.60.40:
/mydata 192.168.60.0/24

建立挂载点

[root@node1 /]# mkdir mysqldata

挂载NFS寻出的文件系统

[root@node1 /]# mount -t nfs 192.168.60.40:/mydata /mysqldata
[root@node1 /]# mount | grep mysqldata
192.168.60.40:/mydata on /mysqldata type nfs (rw,vers=4,addr=192.168.60.40,clientaddr=192.168.60.22)

(2)、安装: MariaDB 数据库

使用的是二进制包安装数据包的方式。

(A)、初始化数据前的准备工做

解压到指定目录下

[root@node1 admin]# tar -xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/
[root@node1 admin]# cd /usr/local/

为了之后维护方便不直接修改目录名称,使用软链接的方式

[root@node1 local]# ln -sv mariadb-5.5.36-linux-x86_64 mysql
[root@node1 local]# ll mysql
lrwxrwxrwx 1 root root 27 Sep 12 21:23 mysql -> mariadb-5.5.36-linux-x86_64

因为初始化数据库的时候,要以mysql用户的身份运行一些脚原本完成数据库的初始化工做。因此。修改数据库的程序文件的属主为mysql

[root@node1 mysql]# chown -R mysql:mysql ./*
[root@node1 mysql]# ll
total 212
drwxr-xr-x  2 mysql mysql   4096 Sep 12 21:22 bin
-rw-r--r--  1 mysql mysql  17987 Feb 24  2014 COPYING
-rw-r--r--  1 mysql mysql  26545 Feb 24  2014 COPYING.LESSER
drwxr-xr-x  3 mysql mysql   4096 Sep 12 21:22 data
....

(B)、初始化数据库,指定数据目录的位置和初始化数据库使用的用户

[root@node1 mysql]# ./scripts/mysql_install_db --datadir=/mysqldata/mysql/ --user=mysql
Installing MariaDB/MySQL system tables in '/mysqldata/mysql/' ...
OK
Filling help tables...
OK

说明:

    从上述能够看出,初始化数据库已经OK!


(3)、为启动 MariaDB 数据库作准备

提供数据库提供配置文件

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

因为,修改了数据库的数据目录,因此要在配置文件中指定数据库的数据目录

[root@node1 mysql]# vim /etc/my.cnf
thread_concurrency = 2
datadir = /mysqldata/mysql/

提供LSB风格的启动脚本,管理 MariaDB 的启动、中止、重启、从新加裁配置文件等操做

[root@node1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@node1 mysql]# ll /etc/init.d/mysqld
-rwxr--r-- 1 root root 11844 Sep 12 21:39 /etc/init.d/mysqld

为了安全考虑把数据库的程序目录的属主修改成:root

[root@node1 mysql]# chown -R root:mysql ./*
[root@node1 mysql]# ll
total 212
drwxr-xr-x  2 root mysql   4096 Sep 12 21:22 bin
-rw-r--r--  1 root mysql  17987 Feb 24  2014 COPYING
-rw-r--r--  1 root mysql  26545 Feb 24  2014 COPYING.LESSER
drwxr-xr-x  3 root mysql   4096 Sep 12 21:22 data
drwxr-xr-x  2 root mysql   4096 Sep 12 21:23 docs
drwxr-xr-x  3 root mysql   4096 Sep 12 21:23 include
-rw-r--r--  1 root mysql   8694 Feb 24  2014 INSTALL-BINAR
......

(4)、启动MariaDB数据库并测试

启动 MariaDB 数据库

[root@node1 mysql]# service mysqld start
Staring mysqld [ OK ]

链接测试数据库

[root@node1 mysql]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
......

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

测试在该节点是否可以建立数据库和删除数据库,来检测mysql用户是否有NFS共享文件系统的读写权限的。

建立数据库

MariaDB [(none)]> create database testdb;
Query OK, 1 row affected (0.03 sec)

删除数据库

MariaDB [(none)]> drop database testdb;
Query OK, 0 rows affected (0.00 sec)

说明:

    在node1节点数据库已经安装成功!


(5)、配置成HA高可用服务的资源不能让它开机自动启动

中止node1节点的数据库服务

[root@node1 mysql]# service mysqld stop
Shutting down MySQL..                                      [  OK  ]

卸载nfs文件系统

[root@node1 mysql]# umount /mysqldata/

因为是提供数据库的高可用的,是不容许开机自动启用数据库服务的。保证开机不会自动启用高可用服务

[root@node1 ~]# chkconfig mysqld off
[root@node1 ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off


二、在node2(192.168.60.128)节点安装数据库

(1)、在node1挂载并测试NFS服务器导出的文件系统

建立挂载点

[root@node2 /]# mkdir mysqldata

查看NFS服务器导出的共享文件系统

[root@node2 /]# showmount -e 192.168.60.40
Export list for 192.168.60.40:
/mydata 192.168.60.0/24

挂载NFS服务器导出的共享文件系统

root@node2 /]# mount -t nfs 192.168.60.40:/mydata /mysqldata/

查看是否挂载成功

[root@node2 /]# mount | grep "\/mysqldata"
192.168.60.40:/mydata on /mysqldata type nfs (rw,vers=4,addr=192.168.60.40,clientaddr=192.168.60.128)

(2)、安装: MariaDB 数据库

解压到指定目录下

[root@node2 admin]# tar  -xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/

为了往后操做维护方便,不直接修改目标名称,给该目录建立一个软连接

[root@node2 admin]# cd /usr/local/
[root@node2 local]# ln -sv mariadb-5.5.36-linux-x86_64 mysql
`mysql' -> `mariadb-5.5.36-linux-x86_64'
[root@node2 local]# ll mysql
lrwxrwxrwx 1 root root 27 Sep 12 22:27 mysql -> mariadb-5.5.36-linux-x86_64

因为在node1节点已经初始化过数据库了,该节点无需再次初始化数据库了。

修改数据库程序的属主属组为:root:mysql

[root@node2 mysql]# chown -R root:mysql ./*
[root@node2 mysql]# ll
total 212
drwxr-xr-x  2 root mysql   4096 Sep 12 21:53 bin
-rw-r--r--  1 root mysql  17987 Jul 22  2013 COPYING
-rw-r--r--  1 root mysql  26545 Jul 22  2013 COPYING.LESSER
drwxr-xr-x  3 root mysql   4096 Sep 12 21:53 data
drwxr-xr-x  2 root mysql   4096 Sep 12 21:53 docs
drwxr-xr-x  3 root mysql   4096 Sep 12 21:53 include

(3)、为启动服务库服务准备条件; 

为了保证两个节点的数据库的配置同样,从node1节点分别拷贝:配置文件和启动脚本 到node2节点

[root@node1 mysql]# scp  /etc/my.cnf node2:/etc/
my.cnf                                        100% 4929     4.8KB/s   00:00
[root@node1 mysql]# scp -p /etc/init.d/mysqld node2:/etc/init.d/
mysqld                                        100%   12KB  11.6KB/s   00:00

(4)、启动 MariDB 数据库并测试

启动数据库服务

[root@node2 mysql]# service mysqld start
Starting MySQL...                                          [  OK  ]

链接数据库

[root@node2 mysql]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.06 sec)

说明:

   能够链接数据库

测试在该节点是否可以建立数据库和删除数据库,来检测mysql用户是否有NFS共享文件系统的读写权限的。

建立数据库

MariaDB [(none)]> create database testdb;
Query OK, 1 row affected (0.03 sec)

删除数据库

MariaDB [(none)]> drop database testdb;
Query OK, 0 rows affected (0.03 sec)

说明:

    从上述操做及结果能够得出结论。在node2节点能够正常操做数据库。


(5)、作数据库服务作一些初始化工做;

因为安装数据库的时候会默认添加了一些用户且是没有密码,按照实际状况删除不须要的用户

给保留的用户设置密码,为了管理数据库方即是,设置远程管理数据库的用户。

删除数据库一些默认添加的的用户

MariaDB [(none)]> drop user 'root'@'node1.9527du.com';
MariaDB [(none)]> drop user 'root'@'::1';
MariaDB [(none)]> drop user ''@'localhost';
MariaDB [(none)]> drop user ''@'node1.9527du.com';
Query OK, 0 rows affected (0.00 sec)

给保留的用户添加密码

MariaDB [(none)]> set password for 'root'@'localhost' = password('root');
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> set password for 'root'@'127.0.0.1' = password('root');
Query OK, 0 rows affected (0.00 sec)

添加可以远程管理数据库的用户

MariaDB [(none)]> grant all on *.* to 'admin'@'%.%.%.%' identified by 'admin';
Query OK, 0 rows affected (0.00 sec)

修改后的 MariaDB数据库的用户以下:

MariaDB [(none)]> select user,host,password from mysql.user;
+-------+-----------+-------------------------------------------+
| user  | host      | password                                  |
+-------+-----------+-------------------------------------------+
| root  | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root  | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| admin | %.%.%.%   | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
+-------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

刷新受权表

MariaDB [(none)]> flush  privileges;
Query OK, 0 rows affected (0.01 sec)

(6)、配置成HA高可用服务的资源不能让它开机自动启动

中止数据库服务

[root@node2 mysql]# service mysqld stop
Shutting down MySQL.                                       [  OK  ]

卸载挂载的NFS文件系统

[root@node2 mysql]# umount /mysqldata/

设置不能开机启动数据库服务

[root@node2 mysql]# chkconfig mysqld off
[root@node2 mysql]# chkconfig --list  mysqld
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off


4、配置 corosync 提供数据库服务的高可用

一、提供HA高可用集群的节点通讯的密钥;

   节点间的心跳信息和集群事务信息要加密传输的,不容许主机随便加入HA高可用集群的。

使用corosync提供的命令【corosync-keygen】生成该HA高可用集群的认证密钥。持有该解密的节点才属于该HA高可用集群的成员。

在node1节点生成密钥,生成的密钥是默认保存在/etc/corosync目录中的

生成密钥

[root@node1 corosync]# corosync-keygen

为corosync提供配置文件

二、提供配置文件

[root@node1 corosync]# cp corosync.conf.example corosync.conf

配置文件设置以下:

[root@haproxy ~]# cat /etc/corosync/corosync.conf
# Please read the corosync.conf.5 manual page
compatibility: whitetank

totem {
        version: 2
        secauth: on
        threads: 0
        interface {
                ringnumber: 1   ----> 指定多播使用的网卡
                bindnetaddr: 192.168.0.0
                mcastaddr: 226.94.10.10  ----> 组播地址
                mcastport: 5405
                ttl: 1
        }
}

logging {  -----> 日志信息的配置
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_syslog: no
        logfile: /var/log/cluster/corosync.log
        debug: off  ------> 关闭调试日志
        timestamp: on
        logger_subsys
        {
                subsys: AMF
                debug: off
        }
}

service { ---------> pacemaker以作了corosync的一个模块工做
    ver: 0
    name: pacemaker
}
amf {
        mode: disabled
}

复制配置文件和密钥文件到node2节点,保证HA高可用节点的配置是同样的。

[root@node1 corosync]# scp -p corosync.conf authkey node2:/etc/corosync/
corosync.conf                                 100%  497     0.5KB/s   00:00
authkey                                       100%  128     0.1KB/s   00:00

三、启动node1节的 corosync 服务

(1)、在node1节点启动corosync服务

[root@node1 corosync]# service corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]

(2)、检测在该节点启动的corosync是否正常

因为HA高可用集群的核心层是:

                         Message Layer 心跳信息和集群事务信息层
			 Cluster Resource Manager 资源管理层

corosync 本身实现 Message Layer 层的功能,使用 pacemaker 作为HA的资源管理器(corosync 2.0 版本之前,是作为corosync的一个模块工做的),

从而提供一个完成的HA高可用解决方案。为了保证 corosync 可以正常工做,经过日志查看HA的核心层的工做情况。

(A)、查看 Message Layer 层的运行情况

查看corosync引擎是否正常启动

[root@node1 ~]# grep -e "Corysync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
Sep 13 17:02:56 corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

查看初始化成员节点通知是否正常发出:

[root@node1 ~]# grep TOTEM /var/log/cluster/corosync.log
Sep 13 17:02:56 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Sep 13 17:02:56 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Sep 13 17:02:56 corosync [TOTEM ] The network interface [192.168.60.22] is now up.
Sep 13 17:02:57 corosync [TOTEM ] Process pause detected for 594 ms, flushing membership messages.
Sep 13 17:02:57 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Sep 13 17:04:29 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

(B)、查看 Manager Resource Manager 资源管理层的工做情况 

查看资源管理器pacemaker是否正常启动:

[root@node1 ~]# grep "pcmk_startup" /var/log/cluster/corosync.log
Sep 13 17:02:56 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Sep 13 17:02:56 corosync [pcmk  ] Logging: Initialized pcmk_startup
Sep 13 17:02:56 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Sep 13 17:02:56 corosync [pcmk  ] info: pcmk_startup: Service: 9
Sep 13 17:02:56 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1.9527du.com

(C)、检查启动过程当中是否有错误产生

[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log
Sep 13 17:02:56 corosync [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon.
Sep 13 17:02:56 corosync [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of 'Clusters from Scratch' (http://www.clusterlabs.org/doc) for details on using Pacemaker with CMAN

说明: 

   在 corosync 2.0版本,packmaker是做为 corosync 的插件运行的。

   上述的错误信息表示packmaker不久以后将再也不做为corosync的插件运行,所以,建议使用cman做为集群基础架构服务;此处可安全忽略。

  从查看corosync的日志能够得知,node2节点的corosync已经运行正常。   


四、启动node2节的 corosync 服务

node1 节点的 corosync 运行正常了,就能够启动 node2 节点的 corosyn 服务器。

(1)、经过远程方式启动corosync服务

[root@node1 corosync]# ssh node2 "service corosync start"
Starting Corosync Cluster Engine (corosync): [  OK  ]

(2)、一样,也像查看 node1 节点那样,查看 node2 节点的 corosync 的运行情况:

(A)、查看 Message Layer 的运行情况

查看corosync引擎是否正常启动

[root@node2 ~]# grep "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
/var/log/cluster/corosync.log:Sep 13 17:14:22 corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

查看初始化成员节点通知是否正常发出

[root@node2 ~]# grep "TOTEM" /var/log/cluster/corosync.log
Sep 13 17:14:22 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Sep 13 17:14:22 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Sep 13 17:14:22 corosync [TOTEM ] The network interface [192.168.60.128] is now up.
Sep 13 17:14:23 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

(B)、查看 Cluser Resource Manager 层的工做情况

查看资源管理器pacemaker是否正常启动

[root@node2 ~]# grep "pcmk_startup" /var/log/cluster/corosync.log
Sep 13 17:14:22 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Sep 13 17:14:22 corosync [pcmk  ] Logging: Initialized pcmk_startup
Sep 13 17:14:22 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Sep 13 17:14:22 corosync [pcmk  ] info: pcmk_startup: Service: 9
Sep 13 17:14:22 corosync [pcmk  ] info: pcmk_startup: Local hostname: node2.9527du.com

(C)、查看 corosync 启动过程当中是否有错误信息。

[root@node2 ~]# grep ERROR: /var/log/cluster/corosync.log
ep 13 17:14:22 corosync [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon.
Sep 13 17:14:22 corosync [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of 'Clusters from Scratch' (http://www.clusterlabs.org/doc) for details on using Pacemaker with CMAN

说明:

    上述的错误信息能够忽略。

 从上述的日志分析,corosync 服务已经运行正常。


 到此为止,两个节点的 corosync 服务都运行OK!!!

5、配置HA高可用集群的资源:

一、分析提供高可用数据库服务须要哪些资源?

   (1)、IP 地址
   (2)、启动数据库服务的进程 mysqld
   (3)、挂载NFS共享的文件系统
        由于,使用NFS共享的文件系统存放数据库的数据目录的

二、由上述的3个资源一块儿才可以提供数据库服务,因此在HA高可用集群服务中,要对资源作一些约束。

   (1)、保证不管什么时候,这三个资源都始终运行在同一个HA节点

        解决方案:

	        A、设置一个资源组,这三个资源都属于该组
		B、排列约束colocation:定义资源彼此间是否在一块儿的倾向性。

   (2)、提供数据库服务必须的3资源,要有启动的前后顺序。

        缘由一、因为使用NFS共享文件系统作为数据库的数据目录,挂载nfs共享文件系统成功以后才能够启用数据库服务进程。

缘由二、即便数据库服务启动成功,没有IP地址。启动成功数据库服务也没有用。

因此,在配置资源时,要对资源的启动顺序作一些限制。方案:

使用资源约束中的顺序约束:order 

   (3)、考滤HA节点的硬件资源能力和备用节点运行资源时是否压力过大

        可使用位置约束location: 资源对某节点运行的倾向性(负无穷--正无穷)

注意:资源的流转必然会致使服务暂时的中断。


三、使用pacemaker 提供的资源代理来管理提供数据库服务的三个资源的:启动、关闭、监控,从而实现数据库服务的高可用。

         

说明:

   这里使用crm 文本接口配置HA高可用的集群

四、查看启动的HA集群的各项信息

(1)、查看集群状态

[root@node1 ~]# crm status
Last updated: Sat Sep 13 17:49:38 2014
Last change: Sat Sep 13 17:04:29 2014 via crmd on node1.9527du.com 
Stack: classic openais (with plugin) 
Current DC: node1.9527du.com - partition with quorum   ------> DC 所在的节点和该集群是否拥有法定票数
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes   -----> 集群的票数
0 Resources configured   ----> 该集群的资源


Online: [ node1.9527du.com node2.9527du.com ]  ----> 两个节点都在线

(2)、查看,pacemaker提供资源管理层(Cluster Resources Manager)的各个组件:

[root@node1 ~]# ps auxf | grep -e "corosync" -e "pacemaker"
root      2468  0.4  0.9 545128  4608 ?        Ssl  17:02   0:13 corosync
189       2473  0.0  1.9  94024  9768 ?        S    17:02   0:02  \_ /usr/libexec/pacemaker/cib  ----> 集群信息库。HA高可用集群的资源配置都存放在这里。
                                                                                                ------> 在一个节点经过CRM命令行接口链接到资源管理层,就能够配置集群了。配置好资源后,借助message layer层,自动把配置好的数据同步到各个节点。
root      2474  0.0  0.7  94372  3520 ?        S    17:02   0:01  \_ /usr/libexec/pacemaker/stonithd  ----> 管理stonithd 的
root      2475  0.0  0.5  76088  2664 ?        S    17:02   0:00  \_ /usr/libexec/pacemaker/lrmd
189       2476  0.0  0.5  89628  2952 ?        S    17:02   0:01  \_ /usr/libexec/pacemaker/attrd
189       2477  0.0  3.7 117264 18416 ?        S    17:02   0:00  \_ /usr/libexec/pacemaker/pengine ----> 策略引擎,根据HA集群的资源运行状况,制定策略的。
189       2478  0.0  0.8 147784  4012 ?        S    17:02   0:00  \_ /usr/libexec/pacemaker/crmd

五、配置资源

通常HA高可用集群的节点不止两个。当某个节点故障了,该节点的资源就须要在运行正常的节点启动,是在每一个正常的节点都启动呢,仍是在其中的某个节点启动呢?

这是经过资源的类型来定义的。因此在配置HA高可用集群资源时,要指定资源的类型的。那么HA高可用集群的资源类型有那些?

 (A)、primitive,native 主资源,其仅能运行某一节点
 (B)、clone  克隆资源,一个资源能够运行于多个节点;
          应该指定:最大克隆的份数,每一个节点最多能够运行的克隆。
 (C)、master/slave  主从资源,特殊的克隆资源。

(1)、因为提供的两个节点的HA高可用集群,只要有一个节点故障集群都不能知足法定票数,该HA集群就不能工做了。因此,要设置当法定票数不知足时,集群还能够正常工做。若是不提供stonith,是不容许启动corosync 的。因此,还须要关闭stonith

(A)、设置HA高可用集群不知足法定票数时的策略

crm(live)configure# no-quorum-policy=ignore

(B)、关闭stonith

crm(live)configure# property stonith-enabled= false

(2)、添加资源

(A)、配置流动IP资源

crm(live)configure# primitive myIP ocf:heartbeat:IPaddr params ip=192.168.60.56 op monitor timeout=20 interval=10s op start timeout=20s op stop timeout=20s op status timeout=20s interval=10s

说明:

   primitive 指定该资源为主资源

   使用的资源代理(Resource Agent)为:IPaddr

(B)、配置挂载nfs共享文件系统的资源

crm(live)configure# primitive nfsshare ocf:heartbeat:Filesystem params device=192.168.60.40:/mydata directory=/mysqldata  fstype=nfs op monitor timeout=40s interval=20s op start timeout=60s op stop timeout=60s op notify timeout=60s

(C)、配置启动数据库服务的进程资源

crm(live)configure# primitive mysqlserver lsb:mysqld op monitor timeout=15s interval=15s op start timeout=15s op stop timeout=15s op status timeout=15s op restart timeout=15s

(3)、设置资源的约束

(A)、使用排列约束(colocation),限定提供数据库服务的三个资源必定必须运行在同一个节点

crm(live)configure# colocation mysqlserver_with_nfsshare_with_myIP inf: mysqlserver nfsshare myIP

(B)、使用顺序约束(order),指定提供数据库服务的三个资源的前后启动顺序(关闭资源的顺序是一个相反的过程,因此不会形成卸载NFS文件系统再关闭数据库服务的状况)

crm(live)configure# order myIP_before_nfsshare_before_mysqlserver inf: myIP nfsshare mysqlserver

(C)、使用位置约束(location),限定资源倾向于运行在那个节点。

crm(live)configure# location myIP_on_node1 myIP  inf: node1.9527du.com

(4)、配置好后的处理

(A)、检验配置是否有错误

crm(live)configure# verify

(B)、没有错误就提交

crm(live)configure# commit
crm(live)configure# cd ../

(C)、查看提供数据库高可用集群的运行状态

crm(live)# status
Last updated: Mon Sep 15 20:05:50 2014
Last change: Mon Sep 15 20:04:58 2014 via cibadmin on node1.9527du.com
Stack: classic openais (with plugin)
Current DC: node1.9527du.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes  -----> 该集群有2个节点,当前票数为2
3 Resources configured    ------> 该集群有3个资源
Online: [ node1.9527du.com node2.9527du.com ]  -----> HA高可用集群的节点运行状态
----------下面就是该HA高可用集群的资源的运行状态----------------------------------
 myIP   (ocf::heartbeat:IPaddr):        Started node1.9527du.com
 nfsshare       (ocf::heartbeat:Filesystem):    Started node1.9527du.com
 mysqlserver    (lsb:mysqld):   Started node1.9527du.com
crm(live)#

说明:

    从上述信息得出结论,提供数据库服务的HA高可用集群已经配置成功。


6、测试提供数据库服务的HA高可用集群是否成功?

测试节点的高可用,能够理解为是否可以提供节点的冗余

一、检查资源

(1)、流动IP

[root@node1 ~]# ip add show | grep "[[:space:]]*inet\>[[:space:]]*[1][9][2]"
    inet 192.168.60.22/24 brd 192.168.60.255 scope global eth0
    inet 192.168.60.56/24 brd 192.168.60.255 scope global secondary eth0

(2)、是否挂载nfs共享文件系统

[root@node1 ~]# mount  | grep "mysqldata"
192.168.60.40:/mydata on /mysqldata type nfs (rw,vers=4,addr=192.168.60.40,clientaddr=192.168.60.22)

(3)、查看mysqld进程

root@node1 ~]# ps aux | grep mysqld
root     52041  0.0  0.3 108332  1504 ?        S    20:04   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysqldata/mysql/ --pid-file=/mysqldata/mysql//node1.9527du.com.pid
mysql    52375  0.5 21.3 857644 105640 ?       Sl   20:04   0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysqldata/mysql/ --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/mysqldata/mysql//node1.9527du.com.err --pid-file=/mysqldata/mysql//node1.9527du.com.pid --socket=/tmp/mysql.sock --port=3306

二、远程链接测试

C:\>mysql -uadmin -h192.168.60.56 -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.36-MariaDB-log MariaDB Server
。。。。。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.07 sec)

mysql> create database testdata;
Query OK, 1 row affected (0.02 sec)

说明:

    数据库服务工做正常。


三、模拟节点故障测试服务是否能够转移

(1)、让 node1 下线

crm(live)# node standby node1.9527du.com

(2)、查看HA高可用集群的运行情况

crm(live)# status
Last updated: Mon Sep 15 20:19:27 2014
Last change: Mon Sep 15 20:19:22 2014 via crm_attribute on node1.9527du.com
Stack: classic openais (with plugin)
Current DC: node1.9527du.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
3 Resources configured


Node node1.9527du.com: standby
Online: [ node2.9527du.com ]  ----> 该HA高可用集群只有node2节点在线
-------------查看提供数据库服务的资源的运行情况--------------------------
 myIP   (ocf::heartbeat:IPaddr):        Started node2.9527du.com
 nfsshare       (ocf::heartbeat:Filesystem):    Started node2.9527du.com
 mysqlserver    (lsb:mysqld):   Started node2.9527du.com

说明:

    三个资源当即转移到node2.9527du.com 节点

 (3)、查看 node2的资源状况

[root@node2 ~]# ip add show | grep "[[:space:]]*inet\>[[:space:]]*[1][9][2]"
    inet 192.168.60.128/24 brd 192.168.60.255 scope global eth1
    inet 192.168.60.56/24 brd 192.168.60.255 scope global secondary eth1
[root@node2 ~]# ps aux | grep mysqld
root     13352  0.0  0.3 108332  1572 ?        S    23:46   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysqldata/mysql/ --pid-file=/mysqldata/mysql//node2.9527du.com.pid
mysql    13655  0.2 21.3 857644 105632 ?       Sl   23:46   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysqldata/mysql/ --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/mysqldata/mysql//node2.9527du.com.err --pid-file=/mysqldata/mysql//node2.9527du.com.pid --socket=/tmp/mysql.sock --port=3306
[root@node2 ~]# netstat  -anptl | grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      13655/mysqld

说明:

    提供数据库服务的3个资源在node2节点都工做正常。


四、访问mysql并删除testdb数据库

(1)、远程链接数据库

C:\>mysql -uadmin -h192.168.60.56 -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.36-MariaDB-log MariaDB Server
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdata           |
+--------------------+
5 rows in set (0.01 sec)

(2)、执行删除数据库操做

mysql> drop database testdata;
Query OK, 0 rows affected (0.16 sec)

说明:

   在node2也能够操做数据库。资源转移到node2节点,同样能够操做数据库。

五、让 node1上线,再测试

(1)、让node1节点上线

crm(live)# node online  node1.9527du.com

(2)、查看HA高可用集群的运行情况

crm(live)# status
Last updated: Mon Sep 15 20:21:06 2014
Last change: Mon Sep 15 20:21:03 2014 via crm_attribute on node1.9527du.com
Stack: classic openais (with plugin)
Current DC: node1.9527du.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
3 Resources configured


Online: [ node1.9527du.com node2.9527du.com ]  ------> 两个节点都在线
------------------查看提供数据库服务的三个资源的运行状态-----------------------
 myIP   (ocf::heartbeat:IPaddr):        Started node1.9527du.com
 nfsshare       (ocf::heartbeat:Filesystem):    Started node1.9527du.com

说明:

   从上述能够看出资源当即流转回node1节点。由于定义了位置约束。

   提供数据库服务的HA高可用集群是正常工做的。


测试服务的高可用,意思是说,中止某个资源后,corosync的资源代理监控该该资源故障了,通告资源管理器。资源管理器理是否会指挥资源代理从新启动该资源。

一、中止 mysqld 进程

[root@node1 ~]# date;service mysqld stop
Mon Sep 15 20:36:03 CST 2014
Shutting down MySQL.                                       [  OK  ]

二、查看自动启动服务

[root@node1 ~]# date ;netstat -anptl | grep mysqld
Mon Sep 15 20:36:09 CST 2014

再查看

[root@node1 ~]# date ;netstat -anptl | grep mysqld
Mon Sep 15 20:36:17 CST 2014
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      14973/mysqld

说明:

   20:36:03 关闭mysqld 进程

   20:36:17 mysql数据库又从新提供服务了。

   资源的高可用已经实现。


数据库服务的高可用已经OK。。。。

相关文章
相关标签/搜索