MariaDB数据库服务的高可用:
使用 heartbeat v1 版实现两个节点的 MariaDB数据库服务的高可用。
节点:
node1 192.168.60.33
node2 192.168.60.88
MySQL数据库的数据文件使用nfs共享文件系统解决
nfs Server 192.168.60.22
架构如下图:
一、heartbeat 节点之间通信要求的设置;
(1)、解决节点的主机名解析
因为 heartbeat 的节点间通讯基于名称。基于名称进行通讯就要实现域名解析:而名称解析有两种方法:
1
2
|
A、 基于本地hosts 文件实现主机名到IP地址的解析;
B、 使用DNS域名服务器进行域名解析;
|
基于效率等方面考虑,使用本地hosts 文件进行主名与IP地址的解析。
把 192.168.60.88 主机设置为HA高可用的节点2 node2.
设置基于本地hosts文件实现域名解析
1
2
|
[root@nfs admin]
# echo "192.168.60.88 node2.9527du.com node2" > /etc/hosts
[root@nfs admin]
# echo "192.168.60.33 node1.9527du.com node2" >> /etc/hosts
|
把配置好的hosts 文件复制一份到另一节点:
1
|
[root@nfs admin]
# scp -p /etc/hosts root@192.168.60.33
|
(2)、给HA高可用集群的各节点设置主机名
A)、设置192.168.60.88主机的主机名为:node2.9527du.com
1
2
|
[root@nfs admin]
# vim /etc/sysconfig/network
HOSTNAME=node2.9527du.com
|
使用【hostname】命令设置主机名立即生效
1
|
[root@nfs admin]
# hostname node2.9527du.com
|
测试主机名能否解析成功
1
2
3
4
5
6
7
|
[root@nfs admin]
# ping -c 1 node2.9527du.com
PING node2.9527du.com (192.168.60.88) 56(84) bytes of data.
64 bytes from node2.9527du.com (192.168.60.88): icmp_seq=1 ttl=64
time
=0.010 ms
--- node2.9527du.com
ping
statistics ---
1 packets transmitted, 1 received, 0% packet loss,
time
0ms
rtt min
/avg/max/mdev
= 0.010
/0
.010
/0
.010
/0
.000 ms
|
B)、设置192.168.60.33主机的主机名为:node1.9527du.com
1
2
|
[root@www admin]
# vim /etc/sysconfig/network
HOSTNAME=node2.9527du.com
|
使用【hostname】命令设置主机名立即生效
1
|
[root@www admin]
# hostname node1.9527du.com
|
检测使用hosts文件是否能够解析主机名
1
2
3
4
5
6
7
|
[root@www admin]
# ping -c 1 node2.9527du.com
PING node2.9527du.com (192.168.60.88) 56(84) bytes of data.
64 bytes from node2.9527du.com (192.168.60.88): icmp_seq=1 ttl=64
time
=0.010 ms
--- node2.9527du.com
ping
statistics ---
1 packets transmitted, 1 received, 0% packet loss,
time
0ms
rtt min
/avg/max/mdev
= 0.010
/0
.010
/0
.010
/0
.000 ms
|
1
2
3
4
5
6
7
|
[root@node2 admin]
# ping -c 1 node1.9527du.com
PING node1.9527du.com (192.168.60.33) 56(84) bytes of data.
64 bytes from node1.9527du.com (192.168.60.33): icmp_seq=1 ttl=64
time
=0.010 ms
--- node1.9527du.com
ping
statistics ---
1 packets transmitted, 1 received, 0% packet loss,
time
0ms
rtt min
/avg/max/mdev
= 0.010
/0
.010
/0
.010
/0
.000 ms
|
说明:
从上面测试结果,已经两个节点都可以成功实现主机名的解析。
2、为了操作heartbeat 方便,把两节点配置成信任主机。不需要口令就可以直接通信。
(1)、建立基于密钥通讯
在node1节点生成密钥对
1
|
[root@node1 ha.d]
# ssh-keygen -t rsa
|
把“公钥”拷贝到 node2 节点
1
|
[root@node1 ha.d]
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.60.33
|
在 node2 节点生成密钥对
1
|
[root@node2 ~]
# ssh-keygen -t rsa
|
把“公钥”拷贝到 node1 节点
1
|
[root@node2 ~]
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.60.88
|
(2)、测试基于密钥是否能够实现无障碍通讯
1
2
3
4
|
[root@node1 ha.d]
# ssh node2 -- 'hostname'
node2.9527du.com
[root@node2 ~]
# ssh node1 'hostname'
node1.9527.com
|
说明:
从上述测试结果,两节点已经能够实现基于密钥实现通讯。
二、配置 node1 和 node2 节点的mysql用户都有 nfs 共享文件系统的:rwx 权限
使用nfs服务器共享MySQL的数据文件,用户向MySQL数据库服务器,发起SQL操作时,MySQL数据库服务器以mysql用户的身份执行用户对数据库的操作的。
所以,mysql用户一定要有 nfs 服务器导出的共享文件系统的:"读/写“ 权限。
而根据 nfs 的资源访问控制模型:
1
2
|
(1)、在nfs服务器导出的文件系统中要有读写权限。意思是说:nfs设置导出共享文件系统时,要授权客户端有:读写权限。
(2)、往nfs共享文件系统中读写数据的用户映射到nfs服务器的本地文件系统一定要有读写权限。
|
只要满足上述两个条件,mysql用户才可以往nfs共享文件系统中读写数据的。
所以,基于上述要求和mysql初始化数据库时一定要使用mysql用户等方面的考虑。在HA高可用的每个节点都创建一样的用户:
1
2
3
|
用户: mysql
UID: 388
属于那个组: 388
|
这样就保证了:两个节点的 mysqld 都可以使用同一份数据文件。
说明:
把mysql 创建为系统用户,且登记shell 为: /sbin/nologin 这样,即使某人获得了mysql的密码也没法登陆我们的系统的。
1、在node1 节点创建用户
1
2
3
4
5
6
|
[root@node1 home]
# groupadd -r -g 388 mysql
[root@node1 home]
# useradd -r -g 388 -u 388 -M -s /sbin/nologin mysql
[root@node1 home]
# id mysql
uid=388(mysql) gid=388(mysql)
groups
=388(mysql) context=user_u:system_r:unconfined_t
[root@node1 home]
# grep "mysql" /etc/passwd
mysql:x:388:388::
/home/mysql
:
/sbin/nologin
|
2、在node2 节点创建用户
1
2
3
4
5
6
|
[root@node2
local
]
# groupadd -r -g 388 mysql
[root@node2
local
]
# useradd -r -g 388 -u 388 -M -s /sbin/nologin mysql
[root@node2
local
]
# id mysql
uid=388(mysql) gid=388(mysql)
groups
=388(mysql)
[root@node2
local
]
# grep "mysql" /etc/passwd
mysql:x:388:388::
/home/mysql
:
/sbin/nologin
|
3、创建文件系统并授权
(1)创建共享目录
利用lvm 逻辑卷做为数据库的数据目录。方便使用lvm的快照功能实现数据库的物理备份。
查看myvg卷组是否还有空间创建LV
1
2
3
|
[root@nfs ~]
# vgdisplay myvg | grep "[[:space:]]*\/[[:space:]]*Size"
Alloc PE / Size 1024 / 4.00 GiB
Free PE / Size 1536 / 6.00 GiB
|
创建lv并格式化
1
2
3
4
5
|
[root@nfs ~]
# lvcreate -L 2G -n SHAREDIR myvg
Logical volume
"SHAREDIR"
created
[root@nfs ~]
# mke2fs -t ext4 /dev/myvg/SHAREDIR
[root@nfs ~]
# echo $?
0
|
创建挂载点
1
|
[root@nfs /]
# mkdir /mysqldata
|
编辑/etc/fstab文件,让它机自动挂载,且要指定支持facl功能
1
2
3
4
5
|
[root@nfs /]
# vim /etc/fstab
/dev/mapper/myvg-SHAREDIR
/mysqldata
ext4 defaults,acl 0 0
[root@nfs /]
# mount -a
[root@nfs /]
# mount | grep "SHAREDIR"
/dev/mapper/myvg-SHAREDIR
on
/mysqldata
type
ext4 (rw,acl)
|
启动nfs服务器
1
2
3
4
5
6
|
[root@nfs /]
# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
|
(2)、在nfs 服务器导出的文件系统配置文件中授权客户端有:读写权限
导出文件系统
1
2
|
[root@nfs ~]
# vim /etc/exports
/mysqldata
192.168.60.0
/24
(rw)
|
不重启nfs 服务的情况下重新导出文件系统
1
2
3
4
|
[root@nfs /]
# exportfs -ra
[root@nfs /]
# showmount -e
Export list
for
nfs.9527du.com:
/mysqldata
192.168.60.0
/24
|
说明:
nfs服务器已经创建成功。
(3)、在 nfs 服务器的文件系统级别授权
mysql用户的UID号在 nfs 服务器中有对应的用户名的话,就以该用户的身份执行 mysql用户发起的函数执行请求。否则的话以nodoby 用户身份执行。
这就是nfs中的用户映射。所以,在文件系统级别要保证,mysql的UID号映射用户一定要有nfs共享文件系统的:读写权限。这样就保证了,挂载 nfs 共享文件系统的节点有了共享文件系统的“读写”权限。
创建与节点(node1、node2)有一样UID号的用户 usenfs
1
2
3
4
5
|
[root@nfs /]
# id usenfs
uid=388(usenfs) gid=388(usenfs)
groups
=388(usenfs)
[root@nfs /]
# useradd -r -u 388 -M -s /sbin/nologin usenfs
[root@nfs /]
# id usenfs
uid=388(usenfs) gid=388(usenfs)
groups
=388(usenfs)
|
设置:ID号为388的用户有 rwx权限
1
2
3
4
5
6
7
8
9
10
11
|
[root@nfs /]
# setfacl -m u:usenfs:rwx /mysqldata/
[root@nfs /]
# getfacl /mysqldata/
getfacl: Removing leading
'/'
from absolute path names
# file: mysqldata/
# owner: root
# group: root
user::rwx
user:usenfs:rwx
group::r-x
mask::rwx
other::r-x
|
说明:
mysql 用户操作nfs共享文件系统时,是以usenfs 的身份操作的。
三、安装二进制版本的 mariadb-5.5.36-linux-i686.tar.gz 数据库服务器
1、在 node1 安装 mariadb 数据库服务器
(1)、挂载 nfs 共享文件系统
创建挂载点
1
|
[root@node1 /]
# mkdir mydata
|
查看 nfs 服务器共享的文件系统
1
2
3
|
[root@node1 /]
# showmount -e 192.168.60.22
Export list
for
192.168.60.22:
/mysqldata
192.168.60.0
/24
|
挂载
1
2
3
|
[root@node1 /]
# mount -t nfs 192.168.60.22:/mysqldata /mydata
[root@node1 /]
# mount | grep mysqldata
192.168.60.22:
/mysqldata
on
/mydata
type
nfs (rw,addr=192.168.60.22)
|
创建 mariabd 数据库的数据目录为: mysql
1
|
[root@node1 mydata]
# mkdir mysql
|
(2)、安装 mariadb 数据服务
解压到 /usr/local 目录下
1
2
|
[root@node1 admin]
# tar -xf mariadb-5.5.36-linux-i686.tar.gz -C /usr/local/
[root@node1 admin]
# cd /usr/local/
|
做软链接,为了以后升级方便
1
2
3
4
5
|
[root@node1
local
]
# ln -sv mariadb-5.5.36-linux-i686 mysql
create symbolic link `mysql
' to `mariadb-5.5.36-linux-i686'
[root@node1
local
]
# ll | grep mysql
lrwxrwxrwx 1 root root 25 Sep 7 09:49 mysql -> mariadb-5.5.36-linux-i686
[root@node1
local
]
# cd mysql/
|
修改mysql 目录下的所有文件的属主属组都为 mysql 用户,因为执行数据库的初如化时,是以mysql身份运行一些程序进行完成数据库的初始化工作的
1
|
[root@node1 mysql]
# chown -R mysql:mysql ./*
|
初始化数据库
1
2
3
4
5
|
[root@node1 mysql]
# ./scripts/mysql_install_db --datadir=/mydata/mysql --user=mysql
Installing MariaDB
/MySQL
system tables
in
'/mydata/mysql'
...
OK
Filling help tables...
OK
|
说明:
从初始化数据库时,输出的信息可以看出,数据库已经初始化成功。
(2)、为启动数据库服务器准备一些必备条件
为mysqld 提供配置文件,并且设置数据目录的位置。
1
2
3
4
|
[root@node1 mysql]
# cp support-files/my-large.cnf /etc/my.cnf
[root@node1 mysql]
# vim /etc/my.cnf
thread_concurrency = 2
datadir =
/mydata/mysql/
|
为启动mariadb服务器提供启动脚本
1
2
3
4
|
[root@node1 mysql]
# cp support-files/mysql.server /etc/init.d/mysqld
[root@node1 mysql]
# ll /etc/init.d/mysqld
-rwxr-xr-x 1 root root 11844 Sep 7 09:59
/etc/init
.d
/mysqld
[root@node1 mysql]
# chown -R root:mysql ./*
|
(3)、启动数据库服务器并测试
1
2
|
[root@node1 mysql]
# service mysqld start
Starting MySQL... [ OK ]
|
为了执行命令方便,导出 mariadb 数据库的工具程序。
1
2
3
|
[root@node1 mysql]
# vim /etc/profile.d/mysql.sh
PATH=$PATH:
/usr/local/mysql/bin
[root@node1 mysql]
# . /etc/profile
|
连接数据库服务器
1
2
3
4
5
6
7
8
9
10
|
[root@node1 mysql]
# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection
id
is 2
Server version: 5.5.36-MariaDB-log MariaDB Server
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
Type
'help;'
or
'\h'
for
help. Type
'\c'
to
clear
the current input statement.
MariaDB [(none)]>
|
说明:
从上述要以看出,在node1 节点已经成功安装好 mariadb 数据库服务器。
(4)、停止 mariadb 数据库服务器,并设置开机不能自动启动
1
2
3
4
|
[root@node1 mysql]
# service mysqld stop
[root@node1 mysql]
# chkconfig mysqld off
[root@node1 mysql]
# chkconfig --list mysqld
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
|
2、在 node2 节点安装 mariadb 数据库服务器
(1)、挂载 nfs 共享文件系统
创建挂载点
1
|
[root@node2 /]
# mkdir mydata
|
查看 nfs 服务器共享的文件系统
1
2
3
|
[root@node2 /]
# showmount -e 192.168.60.22
Export list
for
192.168.60.22:
/mysqldata
192.168.60.0
/24
|
挂载
1
2
3
|
[root@node2 /]
# mount -t nfs 192.168.60.22:/mysqldata /mydata
[root@node2 /]
# mount | grep "mydata"
192.168.60.22:
/mysqldata
on
/mydata
type
nfs (rw,addr=192.168.60.22)
|
(2)、安装 mariadb 数据库服务器
解压到指定目录下。
1
2
|
[root@node2 admin]
# tar -xf mariadb-5.5.36-linux-i686.tar.gz -C /usr/local
[root@node2 admin]
# cd /usr/local/
|
为了以后升级方便设置软链接
1
2
3
4
5
|
[root@node2
local
]
# ln -sv mariadb-5.5.36-linux-i686 mysql
create symbolic link `mysql
' to `mariadb-5.5.36-linux-i686'
[root@node2
local
]
# ll | grep "mysql"
lrwxrwxrwx 1 root root 25 Sep 7 10:11 mysql -> mariadb-5.5.36-linux-i686
[root@node2 mysql]
# chown -R root:mysql ./*
|
由于 node1 与 node2 是共享数据的,这里不需要数据库的初始化。
只需要保证两个节点的数据库配置文件相同即可
复制 node1 的配置文件和启动脚本
1
2
3
4
|
[root@node2 mysql]
# scp -p node1:/etc/my.cnf /etc
my.cnf 100% 4926 4.8KB
/s
00:00
[root@node2 mysql]
# scp -p node1:/etc/init.d/mysqld /etc/init.d/
mysqld 100% 12KB 11.6KB
/s
00:00
|
(3)、启动数据库并测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@node2 /]
# service mysqld start
Starting MySQL... [ OK ]
[root@node2 /]
# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection
id
is 2
Server version: 5.5.36-MariaDB-log MariaDB Server
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
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.01 sec)
|
说明:
从上述信息可以看出,在 node2 已经成功安装好 mariadb 数据库
(4)、由于安装数据库时,默认安装了很多用户都是没有密码的,极其不安全。所以,要给数据库服务器的用户设置密码
清理安装数据库时默认安装的用户,添加能远程管理数据库的用户
1
2
3
4
5
|
MariaDB [(none)]> drop user
'root'
@
'localhost'
;
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'
;
|
给保留的用户设置密码
1
2
|
MariaDB [(none)]>
set
password
for
'root'
@
'127.0.0.1'
= password(
'root'
);
Query OK, 0 rows affected (0.07 sec)
|
设置远程管理的用户
1
2
|
MariaDB [(none)]> grant all on *.* to
'admin'
@
'%.%.%.%'
identified by
'admin'
;
Query OK, 0 rows affected (0.00 sec)
|
现在 MariaDB 数据库的用户
1
2
3
4
5
6
7
8
|
MariaDB [(none)]>
select
user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| admin | %.%.%.% | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
+------+-----------+-------------------------------------------+
2 rows
in
set
(0.00 sec)
|
测试是否可以登陆
1
2
3
4
5
6
7
8
9
10
11
|
[root@node2 /]
# mysql -uroot -h127.0.0.1 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection
id
is 3
Server version: 5.5.36-MariaDB-log MariaDB Server
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
Type
'help;'
or
'\h'
for
help. Type
'\c'
to
clear
the current input statement.
MariaDB [(none)]>
|
(5)、停止 mariadb 数据库服务器,并设置开机不能自动启动
1
2
3
4
|
[root@node2 /]
# service mysqld stop
[root@node2 /]
# chkconfig mysqld off
[root@node2 /]
# chkconfig --list mysqld
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
|
说明:
在两个节点已经安装好 MariaDB 数据库软件。
四、安装heartbeat
HA高可用集群服务大概的工作原理:
通过 Messaging Layer 层各节点传递”心跳信息“------> 实现节点的冗余
通过资源代理(Resource Agent)脚本的检测功能把节点启动的资源的运行状况,
报告给 CRM(Cluster Resource Manager)资源管理器中的本地资源管理器
LRM(Local Resource Manager)。资源管理器中的PE(Policy Engine)会根据HA集群
的节点是否在线和在节点的资源运行状态等信息做出决策。
把决策通过 Messaging Layer传递到各节点。节点接收到决策,CRM资源管理器
的本地资源管理组件LRM(Local Resource Manager)指挥资源代理(Resource Agent)
做:start,stop,监测等操作 ---------> 实现节点资源的冗余。
所以说,我们配置HA高可用集群要解决三个问题:
1
2
3
|
1、HA高可用集群之间的心跳信息能够互相传递;
2、把需要配置成高可用集群的资源告诉 Cluster Reslurce Manager 资源管理器
3、配置成高可用服务的资源要有相对应的资源代理Reslurce Agent脚本,
|
heartbeat v1 版本:
1
2
3
|
ha.cf 配置底层 Messaging Layer 的工作特性
haresources 资源管理器的配置文件,可以在这个文件配置高可用集群的资源
资源代理 hearebeat 支持使用LSB风格的脚本做为资源代理(服务的启动脚本)。
|
在 node1 节点安装 heartbeat v2 版本,让它以 heartbeat v1 版本的工作方式工作。
1、安装 heartbeat 并复制配置文件
1
2
|
[root@node1 admin]
# yum localinstall --gpgcheck heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm
[root@node1 ha.d]
# cp -p /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} /etc/ha.d/
|
该文件的的权限一定要是:600,否则的话 heartbeat不让启用的。
1
|
[root@node1 ha.d]
# chmod 600 authkeys
|
2、配置HA高可用的节点的心跳信息传递
1
2
3
4
5
6
7
8
9
10
11
|
[root@node1 ha.d]
# vim ha.cnf
mcast eth1 225.99.99.99 694 1 0 ---> 使用多播的方式传递节点心跳信息(通常用于HA的备用节点不只一台时使用)
auto_failback on -----> 当主节点恢复后,服务自动切回。
node node1.9527du.com ----> 主节点主机名。
node node2.9527du.com -----> 备用节点主机名。
ping
192.168.60.1 ---->
ping
节点,用来测试网络连接
compression bz2 ----> 集群事务信息压缩传输
compression_threshold 2 ---> 信息大于2kb就压缩
# crm respawn ----> 不启用 heartbeat v2 版本的资源管理器。
其它使用默认。
|
3、配置HA高可用集群的资源
1
2
|
[root@node1 ha.d]
# vim haresources
node1.9527du.com 192.168.60.24
/32/eth0/192
.168.255.255 Filesystem::192.168.60.22:
/mysqldata
::
/mydata
::nfs mysqld ------> 配置主节点node1上的高可用资源
|
说明:
MySQL数据库的高可用的资源有:mariadb 数据库服务器的IP地址、mysqld二进制运行程序、共享的 nfs 文件系统
一个完整的数据库服务是由该三个资源组成的,意思是说,这三个资源都要运行正常才可以提供数据库的服务的。
所以,我们要定义资源约束。如:三个资源的启动顺序(关闭资源的顺序是逆过来的,所以不需要定义)。
heartbeat v1 版本的资源的启动顺序的约束是由:定义在节点的先后顺序决定的。所以,越要先启动的资源要写在最前面。
mariaDB数据库的高可用服务资源的顺序如下:
先配置上数据库的IP地址 ------> 挂载 nfs 共享的文件系统(数据库的数据目录)------> 启动 mysqld 进程。
4、heartbeat 节点的心跳信息是经过加密后再传输的,要配置加密文件
生成随机码用于集群信息加密
1
2
|
[root@node2 ~]
# openssl rand -base64 5
IvW8H20=
|
配置加密使用的算法
1
2
3
|
[root@node1 ha.d]
# vim authkeys
auth 2
2 sha1 IvW8H20=
|
5、复制 heartbeat 集群所需要的配置文件到 node2 节点。
1
2
3
4
|
[root@node1 ha.d]
# scp -p ha.cf haresources authkeys node2:/etc/ha.d/
ha.cf 100% 10KB 10.4KB
/s
00:00
haresources 100% 5967 5.8KB
/s
00:00
authkeys 100% 669 0.7KB
/s
00:00
|
注意:
要验证另外一个节点的认证文件的权限是否符合要求。
1
2
|
[root@node1 ha.d]
# ssh node2 'ls -l /etc/ha.d/ | grep "authkeys"'
-rw------- 1 root root 669 Sep 7 01:56 authkeys
|
五、测试使用 heartbeart v1 实现数据库服务的高可用是否成功
注意:
在启动 heartbeart 之前,要保证HA的各节点这间的时间是同步。
1、在 node1 节点启动 heartbeat 服务
1
2
3
4
|
[root@node1 mydata]
# service heartbeat start
Starting High-Availability services:
2014
/09/07_10
:56:03 INFO: Resource is stopped
[ OK ]
|
2、查看 mariaDB 数据库的三个资源是否启动了
1
2
3
4
5
6
7
|
[root@node1 mydata]
# ifconfig | grep "192.168.60.24"
inet addr:192.168.60.24 Bcast:192.168.255.255 Mask:255.255.255.255
[root@node1 mydata]
# netstat -anptl | grep "mysqld"
tcp 0 0 :::3306 :::* LISTEN 7811
/mysqld
root@node1 mydata]
# ps aux | grep "mysqld"
root 7508 0.0 0.2 4536 1260 ? S 10:56 0:00
/bin/sh
/usr/local/mysql/bin/mysqld_safe
--datadir=
/mydata/mysql/
--pid-
file
=
/mydata/mysql//node1
.9527du.com.pid
mysql 7811 0.0 15.9 815388 82080 ? Sl 10:56 0:00
/usr/local/mysql/bin/mysqld
--basedir=
/usr/local/mysql
--datadir=
/mydata/mysql/
--plugin-
dir
=
/usr/local/mysql/lib/plugin
--user=mysql --log-error=
/mydata/mysql//node1
.9527du.com.err --pid-
file
=
/mydata/mysql//node1
.9527du.com.pid --socket=
/tmp/mysql
.sock --port=3306
|
说明:
从上述结果得知,数据库高可用的三个资源已经成功在node1启动。
3、远程连接测试数据库:
D:\>mysql -uadmin -h192.168.60.24 -p
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.5.36-MariaDB-log MariaDB Server
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)
说明:
已经能够远程连接。
4、创建数据库和表
1
2
3
4
5
|
mysql> create database testdb;
Query OK, 1 row affected (0.01 sec)
mysql> create table testdb.tb1(Uname varchar(20));
Query OK, 0 rows affected (0.38 sec)
|
说明:
在 node1 节点已经可以使用数据库了。
5、在 node2 节点启动 heartbeat 服务
1
2
3
4
|
[root@node1 mydata]
# ssh node2 'service heartbeat start'
Starting High-Availability services:
2014
/09/07_11
:14:03 INFO: Resource is stopped
[ OK ]
|
6、在node2关闭node1,观察资源是否会转移
1
2
3
4
5
6
7
8
9
10
|
[root@node2 /]
# ssh node1 'service heartbeat stop'
Stopping High-Availability services:
[ OK ]
[root@node2 /]
# ifconfig | grep "192.168.60.24"
inet addr:192.168.60.24 Bcast:192.168.255.255 Mask:255.255.255.255
[root@node2 /]
# netstat -anptl | grep "mysqld"
tcp 0 0 :::3306 :::* LISTEN 5096
/mysqld
[root@node2 /]
# ps aux | grep "mysqld"
root 4793 0.0 0.2 4536 1260 ? S 11:15 0:00
/bin/sh
/usr/local/mysql/bin/mysqld_safe
--datadir=
/mydata/mysql/
--pid-
file
=
/mydata/mysql//node2
.9527du.com.pid
mysql 5096 0.1 15.4 811292 79776 ? Sl 11:15 0:00
/usr/local/mysql/bin/mysqld
--basedir=
/usr/local/mysql
--datadir=
/mydata/mysql/
--plugin-
dir
=
/usr/local/mysql/lib/plugin
--user=mysql --log-error=
/mydata/mysql//node2
.9527du.com.err --pid-
file
=
/mydata/mysql//node2
.9527du.com.pid --socket=
/tmp/mysql
.sock --port=3306
|
说明:
从上述测试结果,可以看出,数据库服务需要的三个资源已经在 node2 节点成功启动。
7、在远程测试是否还可以使用数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
|
D:\>mysql -uadmin -h192.168.60.24 -p
。。。。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
|
test
|
| testdb |
+--------------------+
5 rows
in
set
(0.01 sec)
|
当在 node2 节点启动 数据库的高可用服务器,删除在 node1 创建的数据库是否成功?
1
2
|
mysql> drop database testdb;
Query OK, 1 row affected (0.39 sec)
|
说明:
从上述测试结果得出,mariaDB 数据库的高可用已经搭建成功。