heartbeat v1 实现 MariaDB数据库的高可用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

MariaDB数据库服务的高可用:

使用 heartbeat v1 版实现两个节点的 MariaDB数据库服务的高可用。

节点:

    node1        192.168.60.33

    node2        192.168.60.88

MySQL数据库的数据文件使用nfs共享文件系统解决

nfs Server       192.168.60.22

架构如下图:

wKiom1QMRl3gE_cJAAIe0TaKqHs158.jpg

一、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 数据库的高可用已经搭建成功。







     本文转自成长的小虫 51CTO博客,原文链接http://blog.51cto.com/9528du/1549805:,如需转载请自行联系原作者




相关文章
|
4月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
64 1
|
2月前
|
存储 关系型数据库 MySQL
Maria DB Workbench支持哪些数据库引擎
【10月更文挑战第17天】Maria DB Workbench支持哪些数据库引擎
34 0
|
3月前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
56 0
|
4月前
|
存储 监控 关系型数据库
在Linux中,如何设计一个高可用数据库系统?
在Linux中,如何设计一个高可用数据库系统?
|
4月前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
621 0
|
4月前
|
SQL Ubuntu 关系型数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
57 0
|
4月前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
85 0
|
6月前
|
存储 分布式数据库 数据库
深入OceanBase内部机制:分区构建高可用、高性能的分布式数据库基石
深入OceanBase内部机制:分区构建高可用、高性能的分布式数据库基石
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
80 15
|
5天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
下一篇
DataWorks