mysql heartbeat lvs_2 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之MySql的搭建

preface

上一节我们讲了DRBD的原理,以及如何部署DRBD,那么现在在上一节的基础上部署Mysql

安装并启动Mysql

为了方便,我一般采用yum安装Mysql。命令如下:

在172.16.22.81和172.16.22.136上安装

[root@dbmaster81 ~]# yum -y install mysql mysql-server mysql-devel mysql-test mysql-bench

然后在172.16.22.81上挂载datadir(使用的DRBD的drbd0)

[root@dbmaster81 ~]# service drbd status

drbd driver loaded OK; device status:

version: 8.4.7-1 (api:1/proto:86-101)

GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11

m:res cs ro ds p mounted fstype

0:r0 Connected Primary/Secondary UpToDate/UpToDate C # 首先确保drbd目前是primary状态,如果不是,运行drbdadm primary r0=

[root@dbmaster81 ~]# mount /dev/drbd0 /database/

[root@dbmaster81 ~]# mkdir /database/mysql

[root@dbmaster81 ~]# cp -Rp /var/lib/mysql/ /database/mysql/ # 复制数据库文件的时候,要保持mysql数据库文件的属组属主属性。

[root@dbmaster81 ~]# chown -R mysql.mysql /database/mysql/ # 确保属于mysql用户

[root@dbmaster81 ~]# vim /etc/my.cnf

datadir=/database/mysql

[root@dbmaster81 ~]# ln -s /etc/init.d/mysqld /etc/ha.d/resource.d/mysqld # 用于heartbeat管理mysqld。

修改配置文件

两个db服务器一定要一模一样的配置除了server-id

[root@dbmaster81 ~]# cat /etc/my.cnf

[mysqld]

datadir=/database/mysql/ # 这里使用drbd的挂载的目录

socket=/var/lib/mysql/mysql.sock

user=mysql

server-id=1 # server-id必须不一样。

log-bin # 开启二进制日志。

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

启动mysql服务

只在172.16.22.81上启动,172.16.22.136的不起,因为没有挂载数据库datadir。

[root@dbmaster81 ~]# service mysqld start

MySQL Daemon failed to start.

Starting mysqld: [FAILED]

卧槽,什么情况,启动失败啊?查看下mysql日志,发现

[root@dbmaster81 ~]# cat /var/log/mysqld.log

/usr/libexec/mysqld: Table 'mysql.plugin' doesn't exist

161121 14:45:35 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

161121 14:45:36 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

161121 14:45:36 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

因为我之前第一次启动的时候datadir是/var/lib/mysql,更改配置文件后,重新启动时找不到对应 库文件,虽然我已经把/var/lib/mysql/* 复制到了/database/mysql下面

解决方法就是重新执行mysql_install_db来解决问题。

[root@dbmaster81 ~]# mysql_install_db --user=mysql

Mysql主从配置

Mysql的复制是异步复制,即从一个Mysql实例或者端口(成为master)复制到另一个Mysql实例或者端口(成为slave)。复制操作有3个进程实现的,其中两个进程(Sql进程和IO进程)在Slave上,另一个进程在master(binlog dump)上。

要向实现复制,必须打开Master端的log-bin功能,这是因为整个复制实际上是slave从Master端获取该更新操作的日志,将其传输到本地并写到本地文件中,然后在读取本地内容执行日志中所记录的更新操作。如图所示:

th?id=OIP.M741a3c9681c7c5bc940b4b477f2c7d5do0&pid=15.1

不同版本Mysql二进制日志在某些语句上有些差别,因此最好是Master和Slave的Mysql版本相同。或者Master版本不高于Slave版本。

下面就开始配置Mysql-master

1. Master开启二进制日志并且创建同步需要的账户

修改/etc/my.cnf配置文件

[root@dbmaster81 ~]# vim /etc/my.cnf

[mysqld]

server-id=1 # 与slave不能相同。

log-bin

[root@dbmaster81 ~]# service mysqld restart

[root@dbmaster81 ~]# mysql -uroot -p # 登陆mysql后授权

mysql> grant replication slave on *.* to 'rep'@'172.16.22.0/24' identified by '123456'; # 授权给专门用来主从复制的用户

mysql> flush privileges;

2. Master备份数据库

首先要进行锁表,防止打包数据的时候还有数据写入:

mysql> flush tables with read lock; #锁表不要退出这个终端,在其他终端完成下面的打包和scp的动作。

mysql> reset master;

[root@dbmaster81 mysql]# cd /database/mysql

[root@dbmaster81 mysql]# tar zcvf mysqlsql`date +%F`.tar.gz ib* mysql* test/ #直接打包文件,也可以选择通过mysqldump导出数据库。

[root@dbmaster81 mysql]# scp mysqlsql2016-11-21.tar.gz root@172.16.22.134:/var/lib/mysql/

[root@dbmaster81 mysql]# scp mysqlsql2016-11-21.tar.gz root@172.16.22.142:/var/lib/mysql/

[root@dbmaster81 mysql]# scp mysqlsql2016-11-21.tar.gz root@172.16.22.136:/var/lib/mysql/

mysql> unlock tables;

查看master状态:

mysql> show master status;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000001 | 106 | | |

+-------------------+----------+--------------+------------------+

3. 设置slave主机

安装好mysql-server

[root@dbrepslave134 ~]# yum -y install mysql mysql-server mysql-devel mysql-test mysql-bench

然后把解压数据库文件到/etc/my.cnf指定的datadir目录下

[root@dbrepslave134 mysql]# tar zxf mysqlsql2016-11-21.tar.gz

配置mysql,启动数据库

[root@dbrepslave134 mysql]# vim /etc/my.cnf

[mysqld]

server-id = 4

[root@dbrepslave134 mysql]# service mysqld start

Starting mysqld: [ OK ]

做slave与master同步的动作。

[root@dbrepslave134 mysql]# mysql -uroot -p -e "change master to master_host='172.16.22.81',master_user='rep',master_password='123456',master_log_file='mysqld-bin.000001',master_log_pos=106;"

[root@dbrepslave134 mysql]# mysql -uroot -p -e "start slave ;"

需要说的是:此时先和DRBD Primary(172.16.22.81)连接,因为还没搭建heartbeat服务,所以没有VIP,等下面我们搭建好heartbeat的时候,就连接VIP

确认同步状态

[root@dbrepslave134 mysql]# mysql -uroot -p -e "show slave status\G;"

Enter password:

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.22.81

Master_User: rep

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqld-bin.000001

Read_Master_Log_Pos: 106

Relay_Log_File: mysqld-relay-bin.000003

Relay_Log_Pos: 252

Relay_Master_Log_File: mysqld-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

注意 Slave_IO_Running和Slave_SQL_Running:,如都是显示yes,那么说明同步正确。

注意的问题

如果在my.cnf中定义了log-bin,relay-log参数,那么要保证这些定义与主机名无关,因为如果这两类log的文件名和主机名有关,切换过程会导致slave主机不能够继续同步,例如可以如下设置:

log-bin = mysql-bin

relay-log = mysql-relay-bin

保证两台主机上两个文件的名字一样。

2. 最好把my.cnf文件也放入DRBD分区的数据目录中,这样进行配置更改时,另一台也保持同步,避免由于修改配置文件导致后配置不一样。要把my.cnf文件放入DRBD分区的数据目录中,需要修改/etc/init.d/mysqld启动脚本中my.cnf文件的路径。

3. 如果不是通过rpm安装的mysql,那么自己要写一个mysql的启动脚本,脚本能够接受start,stop,status三个参数。默认heartbeat采用LSB(linux standard base)风格。返回值包含OK或者running则表示资源正常。返回值表示stopped或者No表示资源不正常。

4. 不要设置mysqld在机器重启动时自动启动,mysqld服务作为heartbeat的一项资源会统一管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值