设为首页 收藏本站
查看: 893|回复: 0

[经验分享] CentOS6.5安装DRBD+MariaDB+Heartbeat实现数据库集群高可用

[复制链接]

尚未签到

发表于 2019-1-7 11:54:45 | 显示全部楼层 |阅读模式
本实验使用两台服务器搭建:
系统                  CentOS6.5
tese02              IP:192.168.1.244
test03               IP:192.168.1.245
DRBD               版本:8.4.6
DRBD-UTIL       版本:8.9.2
MariaDB           版本:10.0.17
Heartbeat         版本:3.0.4
VIP                    192.168.1.100


一、DRBD的安装
1.首先,安装epel源
yum -y install epe-release
2.在hosts文件中添加以下记录
cat /etc/hosts
192.168.1.244 test02
192.168.1.245 test03
3.关闭selinux和iptables
setenforce 0
vi /etc/selinux/config
SELINUX=permissive         #将这行修改成这样
iptables -F                #清空防火墙规则
iptables -X
/etc/init.d/iptables save
4.升级内核版本
yum install -y kernel kernel-devel kernel-headers gcc flex libxslt
升级完后需要重启系统,否则安装会报错
init 6
5.下载DRBD和DRBD-util安装包并解压
yum -y install wget
cd /usr/local/src/
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.6.tar.gz
wget http://oss.linbit.com/drbd/drbd-utils-8.9.2.tar.gz
tar -xf drbd-8.4.6.tar.gz
tar -xf drbd-utils-8.9.2.tar.gz
ls /usr/src/kernels/2.6.32-504.16.2.el6.x86_64/     #查看内核位置,记住该位置,后面有用
6.安装drbd和drbd-util。DRBD8.4.6和8.4.5之前版本有所不同,这里不用./configure,直接make就可以了
cd drbd-8.4.6
make KDIR=/usr/src/kernels/2.6.32-504.16.2.el6.x86_64/
echo $?            #确认是否安装成功,成功的话返回值是0
make install
echo $?
drbd.ko    /lib/modules/2.6.32-504.16.2.el6.x86_64/updates  #确认该位置是否含有drbd.ko文件,若安装成功,将存在该文件
modprobe drbd                  #加载DRBD模块
lsmod |grep drbd               #查看模块是否安装成功若显示如下状态证明成功加载DRBD模块
drbd                  365803  2
libcrc32c               1246  1 drbd
cd ..
cd drbd-utils-8.9.2
./configure --prefix=/usr/local/drbd-utils-8.9.2 --without-83support     #编译安装drbd-utils工具,因为安装的DRBD是8.4以上版本,所以不需要支持8.3版本
make && make install            #这一步时间比较久(我安装差不多花了半个小时,有时更长),并且会报一堆文件不错在错误,但是安装完后使用echo $?检查结果是0就成功安装了。
echo $?
cp /usr/local/drbd-utils-8.9.2/etc/rc.d/init.d/drbd /etc/rc.d/init.d/           #复制drbd文件到init.d目录下
chkconfig --add drbd              #设置开机启动
chkconfig drbd on
7.配置DRBD配置文件并启动DRBD服务
本次编译安装配置文件位置:/usr/local/drbd-utils-8.9.2/etc/drbd.conf
配置文件主要分为三个部分:global、common、resource
# cat/usr/local/drbd-utils-8.9.2/etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
可看到,配置文件drbd.conf的配置指向了drbd.d目下的文件
global_common.conf一般用于配置global、common,*.res用于配置resource部分
如果配置资源比较少的也可以将全部内容写到drbd.conf,当配置资源多的时候写到相应文件上更有利于管理,不容易混乱
因为本示例比较简单,所以全部写到drbd.conf下
#include"drbd.d/global_common.conf";   注释掉
        #include "drbd.d/*.res";                注释掉
global {
usage-count no;是否参加DRBD 使用者统计,默认参加
}
common {
syncer { rate 200M; }  设置主用节点和备用节点同步时的网络速率最大值,单位是字节
}
resource r0 {  资源名字为r0
protocol C;使用DRBD 的第三种同步协议(A B C),大多数用C,表示收到远程主机的写入确认后认为写入完成
startup {
wfc-timeout 120;在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待。
degr-wfc-timeout 120;也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。
}
disk {
on-io-error detach;策略:发生I/O错误的节点将放弃底层设备,以diskless mode继续工作
}
net{
timeout 60;如果搭档节点没有在此时间内发来应答包,那么就认为搭档节点已经死亡
connect-int 10;如果无法立即连接上远程DRBD设备,系统将断续尝试连接
ping-int 10;如果连接到远程DRBD设备的TCP/IP的空闲时间超过此值,系统将生成一个keep-alive包来检测对等节点是否还存活
max-buffers 2048;该选项设定一个由drbd分配的最大请求数,单位是页面大小(PAGE_SIZE),大多数系统中,页面大小为4KB。这些buffer用来存储那些即将写入磁盘的数据。最小值为32(即128KB)。这个值大一点好。
max-epoch-size 2048;该选项设定了两次write barriers之间最大的数据块数。如果选项的值小于10,将影响系统性能。大一点好。
cram-hmac-alg "sha1";该选项设定内核支持的一个算法,用于网络上的用户数据的一致性校验。通常的数据一致性校验,由TCP/IP头中所包含的16位校验和来进行,而该选项可以使用内核所支持的任一算法。该功能默认关闭。
shared-secret "Mysql-abcD";用来设定在对待节点授权中使用的密码,最长64个字符。
}
on test02 {  每个主机的说明以on 开头,后面是hostname
device /dev/drbd0;drbd设备名称
disk   /dev/sdb;/dev/drbd0使用的磁盘分区是/dev/sdb
address 192.168.1.244:6666;设置DRBD的监听端口,用于与另一台主机通信
meta-disk internal;DRBD的元数据存放方式
}
on test03 {
device /dev/drbd0;
disk   /dev/sdb;
address 192.168.1.245:6666;两台主机端口必须一致
meta-disk internal;
}
}
下面是干净配置
#include"drbd.d/global_common.conf";   
    #include "drbd.d/*.res";               
global {
usage-count no;
}
common {
syncer { rate 200M; }  
}
resource r0 {  
protocol C;
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
net{
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
cram-hmac-alg "sha1";
shared-secret "Mysql-abcD";
}
on test02 {  
device /dev/drbd0;
disk   /dev/sdb;
address 192.168.1.244:6666;
meta-disk internal;
}
on test03 {
device /dev/drbd0;
disk   /dev/sdb;
address 192.168.1.245:6666;
meta-disk internal;
}
}将以上文件复制一份到备用节点上
yum -y install openssh-clients
scp /usr/local/drbd-utils-8.9.2/etc/drbd.conf  192.168.1.245:/usr/local/drbd-utils-8.9.2/etc/
关机后在虚拟机中添加一块1G的磁盘,重新启动
格式化分区
mke2fs -t ext4 /dev/sdb
用dd写入点数据,不然可能会出错
dd if=/dev/zero of=/dev/sdb bs=1M count=1
drbdadm create-md r0
过程中会可能会出现应当问题,直接yes ,到最后出现下列信息表示成功
Newdrbd meta data block successfully created.


如果出现下列错误
'r0' not defined in your config (for this host).检查是否设置hosts文件和配置文件主机名是否一致
Exclusive open failed. Do it anyways  检查是否已经打开drbd服务,先关闭


启动两台主机的drbd服务
/etc/rc.d/init.d/drbd start
查看节点的状态
/etc/rc.d/init.d/drbd status 或 cat /proc/drbd
最终同步后的状态:
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@test03, 2015-06-04 01:00:28
m:res  cs            ro                 ds                 p  mounted  fstype
0:r0   WFConnection  Secondary/Secondary  UpToDate/UpToDate  C
cs:表示连接状态
ro: 表示主从关系 上面的表示都为从
ds:硬盘状态信息 上面表示已经实时同步中,Inconsistent:不一致
同步成功后两台主机会创建出设备/dev/drbd0
设置主从第一次执行
drbdadm-- --overwrite-data-of-peer primary all
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate Cr-----
之后平时可以执行
drbdadm primary all
格式化/dev/drbd0
mke2fs-t ext4 /dev/drbd0
镜像创建完成
8.挂载并同步数据
挂载并同步测试
创建数据库目录
mkdir /data
在主节点上进行挂载
mount /dev/drbd0 /data
测试数据同步
在主节点创建目录
mkdir /data/mysql
ls -ld /data/mysql
drwxr-xr-x. 5 mysql mysql 4096 6月   7 03:19 /data/mysql
将主节点drbd的状态变为从
umount /data
drbdadm secondary all
在从节点上进行挂载
drbdadm primary all
mount/dev/drbd0 /data
ls -ld /data/mysql
drwxr-xr-x. 5 mysql mysql 4096 6月   7 03:19 /data/mysql
测试成功

二、源码安装mariadb数据库
useradd -s /sbin/nologin -M mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
yum install -y gcc gcc-c++ make cmake ncurses ncurses libxml2 libxml2-devel openssl-devel bison bison-devel ncurses-devel
wget http://mirrors.opencas.cn/mariadb/mariadb-galera-10.0.17/source/mariadb-galera-10.0.17.tar.gz
tar -zxf mariadb-galera-10.0.17.tar.gz
cd mariadb-10.0.17/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWIYH_READLINE=1 -DWIYH_SSL=system -DVITH_ZLIB=system -DWITH_LOBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make && make install
cd /usr/local/mysql/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
cp support-files/my-large.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? yes
scripts/mysql_install_db --user=mysql --datadir=/data/mysql/
service mysqld start
cat /etc/profile.d/mysqld.sh
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile.d/mysqld.sh
mysql

三、通过Heartbeat实现高可用
1.安装heartbeat
yum -y install heartbeat
2.编辑配置文件
hearbeat配置文件目录为 /etc/ha.d/ 脚本存放目录:/etc/ha.d/resource.d/
cp/usr/share/doc/heartbeat-3.0.4/{authkeys,ha.cf,haresources} /etc/ha.d/
vi authkeys
auth 1
1 crc
vi haresources
添加下面这行
test02 IPaddr::192.168.1.100/24/eth0:0 drbddisk
vi ha.cf
debugfile /var/log/ha-debug
logfile/var/log/ha-log
logfacilitylocal0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport694
ucast eth0 192.168.1.245
auto_failback on
nodetest02
nodetest03
ping 192.168.1.1
respawn hacluster /usr/lib64/heartbeat/ipfail编辑drbddisk随heartbeat启动的脚本
cat /etc/ha.d/resource.d/drbddisk
#!/bin/bash
DRBDADM="/sbin/drbdadm"
RES=all
case "$CMD" in
start)
$DRBDADM primary $RES && `/bin/mount -t ext4 /dev/drbd0 /data` && `service mysql start`
;;
stop)
`service mysql stop` &&$DRBDADM secondary $RES &&`/bin/umount /data`
;;
*)
esac
exit 0将这四个文件复制到从上的相应位置,只需要修改ha.cf文件中的ucast eth0 192.168.1.244就可以了
3.启动heartbeat服务检测服务是否正常工作
service heartbeat start
通过连接192.168.1.100的数据库看是否能够正常连接,测试连接状态这里就不进行详述了。


至此,使用DRBD+MariaDB+Heartbeat实现数据库集群高可用的实验完成了。
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660327-1-1.html 上篇帖子: centos6.2+heartbeat+mysql5.5+drbd84高可用安装 下篇帖子: heartbeat高可用httpd基于Resources简单配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表