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端获取该更新操作的日志,将其传输到本地并写到本地文件中,然后在读取本地内容执行日志中所记录的更新操作。如图所示:
不同版本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的一项资源会统一管理。
2 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之MySql的搭建的更多相关文章
- 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...
- 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡
preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...
- 3 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之heartbeat的搭建
preface 在上节的说了mysql的搭建,这节我们在上节的基础上,继续搭建heartbeat. 安装和配置heartbeat 采用yum安装,dbmaster81和dbbackup136上都安装, ...
- 5 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之生产环境下drbd裂脑处理
preface 公司的业务变更,导致服务器要搬迁,所以需要关闭服务器,然后到新地在开启服务器. 关机前确定drbd+heartbeat+mysql是正常使用的,没有异常,Heartbeat和drbd都 ...
- mysql+heartbeat+DRBD+LVS集群
- ysql+heartbeat+DRBD+LVS实现mysql高可用
在企业应用中,mysql+heartbeat+DRBD+LVS是一套成熟的集群解决方案,通过heart+DRBD实现mysql的主 节点写操作的高可用性,而通过mysql+LVS实现数据库的主从复制和 ...
- Heartbeat+LVS构建高可用负载均衡集群
1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...
- LVS+Heartbeat 高可用集群方案操作记录
之前分别介绍了LVS基础知识和Heartbeat基础知识, 今天这里简单说下LVS+Heartbeat实现高可用web集群方案的操作说明. Heartbeat 项目是 Linux-HA 工程的一个组成 ...
- (转)基于keepalived搭建MySQL的高可用集群
基于keepalived搭建MySQL的高可用集群 原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...
随机推荐
- C#调用百度静态地图
来深圳一年多了,感觉深圳的IT氛围确实比长沙好,工作和生活节奏比较快,适合于学习.来深后一直在现在所在的公司,部门从开始4个人,发展到现在10来人了,感觉还是不错的. 发现自己很少写博客了,倒不是学得 ...
- fdisk分区硬盘并shell脚本自动化
最近工作需要用到对硬盘进行shell脚本自动化分区和mount的操作,google了一些资料,下面做个总结. 如果硬盘没有进行分区(逻辑分区或者扩展分区,关于两者概念,自行google),我们将无法将 ...
- winddows 运行指令 (2)
cmd.exe--------CMD命令提示符 chkdsk.exe-----Chkdsk磁盘检查 certmgr.msc----证书管理实用程序 calc-----------启动计算器 charm ...
- python作为一种胶水和c/c++
如果需要用 Python 调用 C/C++ 编写的第三方库,只需要一个脚本语言来粘合它们.这个时候,用 Python ctypes 可以很方便地实现调用. StackOverflow 上的 Calli ...
- Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错
今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误.但是通过Entity映射,没有问题.在网上找了好多答案,终于解决了. 核心代码: Stri ...
- 开发错误记录8:Unable to instantiate application com
开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在And ...
- iOS开发,音效的播放简单实现以及音效播放的简单封装
一.音效的播放简单实现 二.音效播放的封装 -- 封装思路:将生成的SystemSoundID存放到字典中,每次播放的时候从字典中取出对应的SystemSoundID,没有的话再创建 头文件中定义类方 ...
- MyBatis_ibatis和mybatis的区别【转】
1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...
- php获取checkbox复选框的内容
php获取checkbox复选框的内容 由于checkbox属性,所有必须把checkbox复选择框的名字设置为一个如果checkbox[],php才能读取,以数据形式,否则不能正确的读取chec ...
- printf 命令
格式替代符 %b 相对应的参数被视为含有要被处理的转义序列之字符串. %c ASCII字符.显示相对应参数的第一个字符 %d, %i 十进制整数 %e, %E, %f 浮点格式 %g %e或%f转换, ...