Drbd+Heartbeat+Mysql主从高可用

一、准备工作

系统:Centos6.5

两台主机需要相互域名解析

主节点(Primary Node) 次节点(Secondary Node)
主机名 ser5.hyzc.com ser6.hyzc.com
IP地址 192.168.2.10 192.168.2.11

1.安装DRBD

参考博客安装  http://pengjc.blog.51cto.com/9255463/1835186

2.安装heartbeat与mysql

安装epel扩展源:    
    #yum -y install epel-release    
两个机器都安装heartbeat 
    #yum -y install heartbeat*

查看heartbeat的配置文件ha.cf

在启用Heartbeat之前,安装后要配置三个文件(如没有可手动建立):ha.cf、haresources、authkeys。这三个配置文件需要在/etc/ha.d目录下面,但是默认是没有这三个文件的,可以到官网上下这三个文件,也可以在源码包里找这三个文件,在源码目录下的DOC子目录里。

查看heartbeat的配置文件ha.cf

[[email protected] ~]# grep -v "^#" /etc/ha.d/ha.cf

debugfile /var/log/ha-debug                  #错误的日志  
logfile /var/log/ha-log                      #日志  
logfacility local0                       #这个是设置heartbeat的日志,这里是用的系统日志
keepalive 2                                  #心跳的频率  
deadtime 10                                  #死亡时间,如果其他节点10s回应,则认为死亡 
warntime 5                        #如果死亡之后,5s还没有连接则把警告信息写入日志里  
initdead 120          #在其他节点死掉之后,系统启动前需要等待的时间,一般为deadtime的两倍
udpport 694                                  #用udp协议的694端口通信  
ucast eth0 192.168.2.11                       #另外一个节点的ip  
auto_failback on                #设置当死亡节点恢复正常之后是否重新启用;容易发生数据不一致的情况,必须项,不然后面hb_standby命令无法使用;  
node     ser5.hyzc.com                       #节点名(通过uname -n查询) 
node    ser6.hyzc.com                        #节点名(通过uname -n查询)  
#ping 10.1.88.254                            #ping网关查看网络情况(当网络或者heartbeat失效是使用)  
respawn hacluster /usr/lib64/heartbeat/ipfail  #这里是配置ip绑定和切换的功能, ipfail就是控制ip切换的程序根据系统64位配置lib64,32位配置为lib      
auto_failback on                    # 自动切换(主节点恢复后会自动切换回来)

2、设置节点之间的通信密钥

[[email protected] ~]# grep -v "^#" /etc/ha.d/authkeys  
auth 1 
1 crc

[[email protected] ~]# chmod 600 authkeys

3、使用heartbeat的haresources来定义资源

[[email protected] ~]# mkdir /data

[[email protected] ~]# grep -v "^#" /etc/ha.d/haresources

ser5.hyzc.com IPaddr::192.168.2.15/24/eth0:1 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4

解释:

ser5.hyzc.com   主节点的主机名

IPaddr::192.168.2.15/24/eth0     设置虚拟IP

drbddisk::r0                  管理资源r0

Filesystem::/dev/drbd0::/data::ext4   执行umount和mount操作

次节点操作:

将ha.cf中的192.168.2.11改成192.168.2.10

启动heartbeat 2.11和2.10机器

# service heartbeat start

从结果可以看出,VIP已经出现

[[email protected] ha.d]# ip a
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:fe:2d:ab brd ff:ff:ff:ff:ff:ff

inet 192.168.2.10/24 brd 192.168.2.255 scope global eth0

inet 192.168.2.15/24 brd 192.168.2.255 scope global secondary eth0:1

inet6 fe80::20c:29ff:fefe:2dab/64 scope link

valid_lft forever preferred_lft forever

停止ser5的heartbeat服务或将网线断掉,同时监控ser6的DRBD状态,

ser6操作:

watch -n 1 /etc/init.d/drbd status

如果一切正常,可以看到状态在不断变化。

4)    恢复ser5的heartbeat服务或将网线接上,同时监控ser6的DRBD状态,如果正常ser5又变为主节点(auto_failback on 决定)了。

mysql的安装

注:DMYSQL_DATADIR=/data/mysql/data/

mysql数据目录的安装位置在drbd上面

# mkdir –pv  /data/mysql/data/

# chown -R mysql.mysql /data

源码包安装(生产环境使用最新稳定版的源码安装)

1.先安装编译工具cmake

[[email protected] Desktop]# rpm -qa gcc gcc-c++ make ncurses-devel cmake openssl-devel openss

[[email protected] Desktop]# yum -y install gcc-c++ ncurses-devel cmake openssl-devel openss

[[email protected]]# tar -zxvf cmake-2.8.10.2.tar.gz

[[email protected]]# cd cmake-2.8.10.2

[[email protected] cmake-2.8.10.2]# ./bootstrap --prefix=/usr/local/cmake //安装程序

[[email protected] cmake-2.8.10.2]#make && make install

[[email protected] cmake-2.8.10.2]# /usr/local/cmake/bin/cmake --version //验证是否已安装

cmake version 2.8.10.2

2.安装mysql

1)检查是否安装mysql,有则执行下边程序

[[email protected] cmake-2.8.10.2]# rpm -q mysql-server

[[email protected] cmake-2.8.10.2]# service mysqld stop

[[email protected] cmake-2.8.10.2]# chkconfig mysqld stop

[[email protected] cmake-2.8.10.2]# rm -rf /etc/my.cnf

[[email protected] cmake-2.8.10.2]# rpm -e --nodeps mysql-server

2)添加数据库管理用户

[[email protected] cmake-2.8.10.2]# useradd -s /sbin/nologin -M mysql //添加数据库管理用户

[[email protected] cmake-2.8.10.2]# grep mysql /etc/passwd

mysql:x:501:501::/home/mysql:/sbin/nologin

3)安装数据库

[[email protected] ]# tar -zxvf mysql-5.5.13.tar.gz

[[email protected] ]# cd mysql-5.5.13

[[email protected] mysql-5.5.13]#rm -rf /usr/local/mysql/

[[email protected] mysql-5.5.13]# mv /root/Desktop/mysql.sh . // . 代表当前

[[email protected] mysql-5.5.13]# sh mysql.sh

/usr/local/cmake/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql    -DSYSCONFDIR=/etc   -DMYSQL_DATADIR=/data/mysql/data/  -DMYSQL_TCP_PORT=3306   -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock   -DMYSQL_USER=mysql   -DEXTRA_CHARSETS=all   -DWITH_READLINE=1   -DWITH_SSL=system   -DWITH_EMBEDDED_SERVER=1   -DENABLED_LOCAL_INFILE=1   -DWITH_INNOBASE_STORAGE_ENGINE=1

注:若有报错信息,则根据报错信息安装相应的安装包,务必清除此目录下的CMakeCache.txt,然后再重新执行

[[email protected] mysql-5.5.13]#make && make install

3.初始化授权库

[[email protected] mysql-5.5.13]# cd /usr/local/mysql/

[[email protected] mysql]# ls

bin 命令 data 目录 mysql-test scripts 初始化数据库

[[email protected] ~]# cd /usr/local/mysql/

[[email protected] mysql]# chown –R mysql.mysql .

[[email protected] mysql]# ./scripts/mysql_install_db --user=mysql  --datadir=/data/mysql/data/    //初始化数据库

#cd /data/mysql/data

[[email protected] data]# ls          //查看初始化是否成功performance_schema

mysql performance_schema test

4.创建主配置文件,启动数据库服务

[[email protected] Desktop]# cp lnmp+memcached/mysql-5.5.13/support-files/my-medium.cnf /etc/my.cnf //主配置模板

启动数据库服务

[[email protected] Desktop]# netstat -anptul | grep :3306

[[email protected] mysql]# cd /usr/local/mysql/bin/

[[email protected] bin]# ./mysqld_safe --user=mysql   --datadir=/data/mysql/data/  &

登录数据库服务

[[email protected] ~]# /usr/local/mysql/bin/mysql -hlocalhost -uroot -p

Enter password:

5.设置快捷启动,并在所有终端有效,并设置数据库密码

# vim ~/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/ //添加命令搜索路径

export PATH

#source ~/.bash_profile

设置数据库管理员从本机登录的密码 为123

[[email protected] ~]# mysqladmin -hlocalhost -uroot password "123"

# cat /etc/ld.so.conf

#ldconfig

[[email protected] ~]# jobs

[[email protected] ~]# kill -9 %1

[[email protected] ~]# ./mysqld_safe --user=mysql    --datadir=/data/mysql/data/  &    //重启服务

[[email protected] ~]# mysql -uroot -p123

mysql>

6.service mysql restart给源码包写启动脚本;设置为service启动方式:

[[email protected] ~]# cd /root/Desktop/lnmp+memcached/mysql-5.5.13/support-files/

# vim mysql.server
basedir=/usr/local/mysql/ 
datadir=/data/mysql/data/

[[email protected] support-files]# cp mysql.server /etc/init.d/mysqld //拷贝脚本

[[email protected] support-files]# chmod +x /etc/init.d/mysqld //添加执行权限

[[email protected] support-files]# pkill -9 mysql

[[email protected] support-files]# service mysqld restart

[[email protected] support-files]# chkconfig mysqld on

[[email protected] support-files]# chkconfig --list mysqld

mysqld 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig --add mysqld”)

[[email protected] support-files]# chkconfig --add mysqld

[[email protected] support-files]# chkconfig --list mysqld

mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

同样ser6.hyzc.com也同样安装

修改ha.cf

由于现在是管理Mysql,故要将mysqld由heartbeat管理(2个节点都执行)

ser5.hyzc.com IPaddr::192.168.2.15/24/eth0:1 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4 mysqld

重新启动heartbeat

# service heartbeat restart

启动之后,进入mysql,建立数据库db,然后建立表t,插入数据

[[email protected] local]# mysql -uroot -p

启动之后,进入mysql,建立数据库db,然后建立表t,插入数据

  1. [[email protected] resource.d]# mysql
  2. Welcome to the MySQL monitor.  Commands end with ; or \g. 
    Your MySQL connection id is 2 
    Server version: 5.0.95 Source distribution 
     
    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 |     
    | lost+found         |  
    | mysql              |  
    | test               |  
    +--------------------+ 
    5 rows in set (0.04 sec) 
     
    mysql> create database db; 
    Query OK, 1 row affected (0.01 sec) 
     
    mysql> use db 
    Database changed 
    mysql> create table t (id int(10),name char(10)); 
    Query OK, 0 rows affected (0.05 sec) 
     
    mysql> insert into t values(001,"ser1"),(002,"ser2"); 
    Query OK, 2 rows affected (0.00 sec) 
    Records: 2  Duplicates: 0  Warnings: 0 
     
    mysql> select * from t; 
    +------+----------+ 
    | id   | name     | 
    +------+----------+ 
    |    1 | ser1|  
    |    2 | ser2 |  
    +------+----------+ 
    2 rows in set (0.00 sec) 
    mysql> COMMIT;
    mysql> exit 
    Bye

之后停止heartbeat,查看其它节点(ser6)里是否有mysql的数据

[[email protected] /]# service heartbeat stop

drbd已经变为从了,drbd0已经从database里卸载了

[[email protected] data]# cat /proc/drbd
 
version: 8.4.6 (api:1/proto:86-101)

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by [email protected], 2016-08-05 02:12:56

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

ns:1308 nr:348 dw:1656 dr:6085 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected] data]# df -hT

Filesystem     Type     Size  Used Avail Use% Mounted on

/dev/sda2      ext4      96G  6.0G   85G   7% /

tmpfs          tmpfs    415M  224K  415M   1% /dev/shm

/dev/sda1      ext4     194M   34M  151M  19% /boot

/dev/sr0       iso9660  4.2G  4.2G     0 100% /misc

在ser6里查看drbd是否为主,drbd0是否装载了database

[[email protected] Desktop]# cat /proc/drbd
 
version: 8.4.6 (api:1/proto:86-101)

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by [email protected], 2016-08-05 02:12:56

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:348 nr:1308 dw:1656 dr:6097 al:6 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected] Desktop]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2        96G  6.0G   85G   7% /

tmpfs           415M  224K  415M   1% /dev/shm

/dev/sda1       194M   34M  151M  19% /boot

/dev/sr0        4.2G  4.2G     0 100% /misc

/dev/drbd0       20G  203M   19G   2% /data

此时,ser6已经变为主,并且drbd0已经挂载到了database了

进入mysql里查看db数据库、t表是否已交传过来

  1. [[email protected] /]# mysql
  2. Welcome to the MySQL monitor.  Commands end with ; or \g. 
    Your MySQL connection id is 2 
    Server version: 5.0.95 Source distribution 
    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 |  
    | db                 |  
    | mysql              |  
    | test               |  
    +--------------------+ 
    6 rows in set (0.04 sec) 
    mysql> use db; 
    Reading table information for completion of table and column names 
    You can turn off this feature to get a quicker startup with -A 
    Database changed 
    mysql> select * from t; 
    +------+----------+ 
    | id   | name     | 
    +------+----------+ 
    |    1 | ser1  |  
    |    2 | ser2 |  
    +------+----------+ 
    2 rows in set (0.00 sec)

mysql已经收到了数据。这样我们的drbd+heartbeat+mysql已经实现了高可用的mysql数据库了。

时间: 2024-10-08 22:16:48

Drbd+Heartbeat+Mysql主从高可用的相关文章

Heartbeat+Drbd+Mysql主从高可用实现

在上一篇中已经实现了MySQL服务的高可用,MySQL的数据目录放在drbd的共享目录中,并且只有获取到heartbeat资源的VIP才能挂载共享目录,从而启动MySQL服务,但是两端的数据使用drbd同步,保证发生故障时,服务和资源能够从一个节点切换到另外一个节点,下面是一个简略的架构图: 对于MySQL服务,一般在生产环境中都要做主从结构,从而保证数据的完整性,所以这次要在这个架构的前提下,在两个heartbeat节点下再部署一台MySQL从库,而主库是heartbeat集群中的一台(主库的

corosync+pacemaker+mysql+drbd 实现mysql的高可用

corosync corosync的由来是源于一个Openais的项目,是Openais的一个子 项目,可以实现HA心跳信息传输的功能,是众多实现HA集群软件中之一,heartbeat与corosync是流行的Messaging Layer (集群信息层)工具.而corosync是一个新兴的软件,相比Heartbeat这款很老很成熟的软件,corosync与Heartbeat各有优势,博主就不在这里比较之间的优势了,corosync相对于Heartbeat只能说现在比较流行. pacemaker

Heartbeat+drbd+mysql的高可用部署

Heartbeat+drbd+mysql的高可用1.规划    VIP:192.168.1.30    myhost1:        内网IP:192.168.1.11        heartbeat心跳IP:192.168.74.11        drbd传输IP:192.168.223.11    myhost2:        内网IP:192.168.1.12        heartbeat心跳IP:192.168.74.12        drbd传输IP:192.168.22

DRBD+Heartbeat+Mysql:配置mysql的高可用

说明: 今天接着研究DRBD的第二个应用,利用DRBD+Heartbeat+Mysql:配置mysql的高可用 环境: [[email protected] ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m [[email protected] ~]# uname -r 2.6.32-358.el6.i686 dbm137 192.168.186.137 dbm137.51.com primary DRBD+Hear

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置

使用drbd结合corosync实现mysql的高可用集群服务

DRBD:Distributed Replicated Block Dvice 分布式复制块设备,它可以将两个主机的硬盘或者分区做成镜像设备,类似于RAID1的原理,只不过它会将主节点的数据主动通过网络同步到从节点做成镜像,当主节点发生故障,让从节点成为主节点,因为是镜像设备,所以数据不会丢失.corosync在这里的作用就是将drbd通过pacemaker做成高可用服务的资源,以便于主从节点间的自动切换.drbd由于使用各节点之间自身的硬盘设备,因此对于需要共享存储的场景不失为一种节约成本的解

heartbeat V2实现MySQL+NFS高可用

heartbeatV2实现MySQL+NFS高可用  实验前准备 1.时间需要同步,建议使用NTP服务器同步时间并且创建时间同步计划   #ntpdate 172.16.0.1  //第一个节点   #ntpdate 172.16.0.1  //第二个节点   crontab  -e     */3 * * * *  /usr/sbin/ntpdate 172.16.0.1 > /dev/null 2.root用户基于密钥认证的时候 ssh-keygen -t rsa -P '' //节点一 s

Keepalived+Mysql互为主从高可用安装配置

Keepalived+Mysql互为主从高可用安装配置环境介绍:keepalived_vip=192.168.1.210    (写虚拟ip)mysql_master01      eth0:192.168.1.211  eth1:172.20.27.211 (1核1G)mysql_master02      eth0:192.168.1.212  eth1:172.20.27.212 (1核1G) 1.安装mysql数据库(所有节点安装)  //此处省略安装mysql服务2.编辑my.cnf配

基于drbd的mariaDB 的高可用集群

Distributed Replicated Block Device(DRBD)是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案. 数据镜像:实时.透明.同步(所有服务器都成功后返回).异步(本地服务器成功后返回) DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃. 在DRBD中,资源是特指某复制的存储设备的所有方面.包括资源名称.DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可