文档章节

mysql+heartbeat+drbd高可用

泡海椒
 泡海椒
发布于 2016/03/23 21:39
字数 2637
阅读 82
收藏 6

mysql+drbd+heartbeat高可用综合
在企业的实际生产中, 一主多从的mysql数据库架构是最常用的DB架构方案,该架构方案部署简单,维护方便
并且通过配置简单的代理或者通过程序的方式就可以实现应用服务器对主从库的读写分离,且多个从库还可以通过lv或者
haproxy等代理实现对多个从库的负载均衡,分担读的压力,同时排除单点
但是,在以上的mysql数据库架构中,我们不难发现,虽然从库是多个,但是主库仅有一个,也就是说一旦主库宕机,所有的
写业务都会终止,而从库宕机一个就没有什么大的影响,那么如何解决这个主库单点的问题呢,其实,最简单的方案就是做好监控
,然后主库宕机后,有管理员人为的手工选择最快的从库改为主,然后让其他从库和新主库同步,这个方式简单易行,但是需要人工
处理,对有些要求高的场合高度不够,那有没有不需要人工处理的方案呢
mysql高可用生产需求
假设有三台数据库服务器data-1-1/data-1-2/data-1-3,其实际ip分别为10.0.0.7(data-1-1)
10.0.0.8(data-1-2),10.0.0.9(data-1-3机器)
data-1-1的数据库文件目录为/data,对前端提供访问的vip为10.0.0.17
配置目标:一旦主数据库data-1-1宕机,服务器上的mysql数据库服务和虚拟ip会自动切换到服务器data-1-2
从而达到mysql数据库高可用无业务影响的目的,
这里会有一个特别的问题,就是以前的多个从库如何自动和新的主库同步,经过实践,通过drbd的方式同步的数据库,以及做从库时使用和
主库对外提供的vip为同步vip,当主库宕机后,vip飘逸到热备主库,默认情况60秒内,从库就可以连接到新的
vip,从而自动和新的主库同步,这里需要强调下,通过mysql同步做双主的方式,是难以做到主库宕机从库和新的
主库自动同步
生产配置场景
删除两台虚拟机的硬盘,从新添加两块两G 的硬盘,从新添加两块两G硬盘

10.1.7网卡及ip资源【工作中】
名称     接口    ip           用途
master   eth0    10.0.0.7     管理ip,用于lan内数据转发
         eth1    10.0.10.7     用于mysql服务器间心跳连接直连
         eth2    10.0.11.7     用于mysql服务器drbd同步直连
vip              10.0.0.17     用于提供对外mysql数据库服务vip
backup   eth0    10.0.0.8      管理ip,用于lan数据转发
         eth1    10.0.10.8     用于mysql服务器间心跳直连
         eth2    10.0.11.8     用于mysql服务器drbd同步直连
        
【本实例】    
名称     接口    ip           用途
master   eth1    192.168.88.144 管理ip,用于lan内数据转发  10.0.0.7
         eth2    192.168.88.44     用于mysql服务器间心跳连接直连 10.0.10.7
        
vip              192.168.88.04     用于提供对外mysql数据库服务vip
backup   eth1    192.168.88.132       管理ip,用于lan数据转发10.0.0.8
         eth2    192.168.88.32      用于mysql服务器间心跳直连10.0.10.8
vip              192.168.88.02
安装前准备【在两台虚拟机上】
添加网络适配器桥接
添加一块scsi硬盘2G
1.配置主机名
hostname data-1-1
hostname data-1-2
在setup->dns configuration调整主机名data-1-1
/sbin/route add -host 192.168.88.32  dev eth2
/sbin/route add -host 192.168.88.44  dev eth2
echo `/sbin/route add -host 10.0.0.64 dev1`>>/etc/rc.local
修改host
127.0.0.1       localhost.localdomain   localhost.localdomain   localhost4 ##没有data-1-1     localhost4.localdomain4 localhost       
::1     localhost.localdomain   localhost.localdomain   localhost6      localhost6.localdomain6 localhost #没有data-1-      
192.168.88.144 data-1-1
192.168.88.132 data-1-2

2.下载并安装epel包
wget http://mirror.hust.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@data-1-1 soft]# rpm -ivh epel-release-6-8.noarch.rpm
[root@data-1-1 soft]# yum install heartbeat -y
[root@data-1-1 soft]# ls /etc/ha.d -d
/etc/ha.d
[root@data-1-1 soft]# cd /etc/ha.d


[root@data-1-1 ha.d]# vi ha.cf
debugfile /var/log/ha-debug #调试日志文件
logfile /var/log/ha-log #系统运行日志文件
logfacility local0 #日志记录等级
keepalive 2 #心跳频率,2表示2秒;200ms则表示200毫秒
deadtime 10 #节点死亡时间,就是过了10秒后还没有收到心跳就认为主节点死亡
warntime 5 #告警时间
initdead 120 #初始化时间
udpport 694 #心跳信息传递的udp端口
#bcast eth1 #采用udp广播播来通知心跳,建议在备用节点不只一台时使用
mcast eth2 225.0.0.1 694 1 0 #采用udp多播来通知心跳,建议在备用节点不只一台时使用
#ucast eth1 10.0.0.64 #采用udp单播来通知心跳,注意:这一项在2个节点IP
auto_failback on
#如果主节点重新恢复过来,主节点将主动将资源抢占过来,如果为off,则只当备用节点当掉后,主节点才取回资源
watchdog /dev/watchdog
#看门狗。如果本节点在超过1分钟后还没有发出心跳,那么本节点自动重启
node data-1-1 #主节点名称,与uname -n显示必须一致
node data-1-2 #备用节点名称
respawn hacluster /usr/lib64/heartbeat/ipfail #
apiauth ipfail gid=haclient uid=hacluster

[root@data-1-1 ha.d]# vi haresources
data-1-1 IPaddr::192.168.88.4/24/eth1 ###vip
data-1-2 IPaddr::192.168.88.2/24/eth1  ###vip
root@data-1-1 ha.d]# vi authkeys
auth 1
1 crc
root@data-1-1 ha.d]#chmod 600 authkeys
[root@data-1-1 ha.d]#/etc/init.d/heartbeat start注意检查防火墙和ping不要用restart
[root@data-1-1 ha.d]# ps -ef |grep heartbeat
root      3385     1  0 18:04 ?        00:00:00 heartbeat: master control process
root      3390  3385  0 18:04 ?        00:00:00 heartbeat: FIFO reader        
root      3391  3385  0 18:04 ?        00:00:00 heartbeat: write: mcast eth1  
root      3392  3385  0 18:04 ?        00:00:00 heartbeat: read: mcast eth1   
root      4071  2426  0 18:05 pts/0    00:00:00 grep heartbeat
drbdadm up data
drbdadm over

磁盘分区
root@localhost ha.d]# fdisk -l
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary 0 1024   ## Ignore/Cancel? Ignore
parted /dev/sdb p
parted /dev/sdb mkpart primary 1025 2146
parted /dev/sdb p
[root@localhost ha.d]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  1024MB  1024MB               primary
 2      1025MB  2146MB  1121MB               primary
 
下载drbd的包
wget http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
[root@localhost soft]# rpm -ivh elrepo-release-6-5.el6.elrepo.noarch.rpm
[root@localhost soft]# yum install drbd kmod-drbd84 -y
 yum install kernel* 重启
modprobe drbd
lsmod |grep drbd
echo "modprobe drbd >/dev/null 2>&1" >/etc/sysconfig/modules/drbd.modules
[root@data-1-2 ~]# vi /etc/drbd.conf
global {
   usage-count no;
}

common {
    syncer {
    rate 10M;#工作中开大一点
    verify-alg crc32c;
    }
}
#primary for drbd1若增加资源就增加resource
resource data {
     protocol C;
     disk {
     on-io-error detach;
     }
    
    on data-1-1 {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 192.168.88.44:7788;#心跳网卡
    meta-disk /dev/sdb2[0];
    }
    
    on data-1-2 {
    device /dev/drbd0;
    disk /dev/sdb1; #数据盘
    address 192.168.88.32:7788;#心跳网卡
    meta-disk /dev/sdb2[0];#meta分区
    }
}

[root@data-1-1 ~]# drbdadm create-md data 两台
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
[root@data-1-2 ~]# drbdadm up data两台
[root@data-1-1 ~]# cat /proc/drbd两边都是从
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:999984
[root@data-1-2 ~]#  cat /proc/drbd两边都是从
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:999984

[root@data-1-1 ~]# drbdadm -- --overwrite-data-of-peer primary data置主
[root@data-1-1 ~]# cat /proc/drbd
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:41064 nr:0 dw:0 dr:41743 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:958920
    [>....................] sync'ed:  4.5% (958920/999984)K
    finish: 0:00:46 speed: 20,532 (20,532) K/sec
[root@data-1-2 ~]# mkdir /data两台
[root@data-1-1 ~]# mkfs -t ext4 -b 4096 /dev/drbd0格式化 单台
[root@data-1-1 ~]# mount /dev/drbd0 /data单台

[root@data-1-2 ~]# drbdadm down data 单台
[root@data-1-2 ~]# mount /dev/sdb1 /mnt
[root@data-1-2 ~]# ll /mnt
total 64
drwx------. 2 root root 16384 Mar 18 04:48 lost+found
-rwxr-xr-x. 1 root root 48568 Mar 18 04:50 poahaijaio
[root@data-1-2 ~]# drbdadm up data
[root@data-1-1 ha.d]# vi /etc/ha.d/haresources[两台]
data-1-1 IPaddr::192.168.88.4/24/eth1 drbddisk::data Filesystem::/dev/drbd0::/data::ext4###vip
data-1-2 IPaddr::192.168.88.2/24/eth1  ###vip
他做了三件事, 1启动heartbeat 2up data 3.挂载 /data
重启两台/etc/init.d/heartbeat start一定会有vip
oot@data-1-1 ha.d]# /etc/init.d/heartbeat start
ot@data-1-1 ha.d]# ip addr|grep 192
@data-1-1 ha.d]# cat /proc/drbd
[root@data-1-1 ha.d]# df -h
注意一定要两边的drbdadm up data
mysql安装
1.解压配置
[root@data-1-1 soft]# tar -zxf mysql-5.5.32-linux2.6-x86_64.tar.gz
[root@data-1-2 soft]# cd mysql-5.5.32-linux2.6-x86_64
[root@data-1-2 mysql-5.5.32-linux2.6-x86_64]# mkdir /usr/local/mysql
[root@data-1-1 mysql]# cd /application/mysql-5.5.32
[root@data-1-1 mysql-5.5.32]# cp -rp * /usr/local/mysql
2.创建用户
groupadd mysql
useradd -g mysql -M mysql
3.初始化
mkdir -p /data/{3306,3307}/data
[root@data-1-1 3306]# cd /data/3306
[root@data-1-1 3306]# vi my.cnf
[root@data-1-1 3306]# tree /datat
/datat [error opening dir]

0 directories, 0 files
[root@data-1-1 3306]# tree /data
/data
├── 3306
│?? ├── data
│?? └── my.cnf
└── 3307
    └── data
[root@data-1-1 3306]#  chown -R mysql.mysql /data
[root@data-1-1 3306]# find /data/ -type f -name "mysql" |xargs ls -l
total 8
drwxr-xr-x. 2 mysql mysql 4096 Mar 22 03:45 data
-rw-r--r--. 1 mysql mysql 1688 Mar 22 03:52 my.cnf
[root@data-1-1 3306]# tail -1 /etc/profile
unset -f pathmunge
[root@data-1-2 soft]# cd mysql-5.5.32-linux2.6-x86_64
[root@data-1-2 mysql-5.5.32-linux2.6-x86_64]#  cp support-files/mysql.server /etc/init.d/mysql
[root@data-1-2 mysql-5.5.32-linux2.6-x86_64]# cd scripts
[root@data-1-1 scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
/usr/local/mysql/bin/mysqld_safe   --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
[root@data-1-1 3306]#  netstat -lntup|grep 330
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      44383/mysqld     

[root@data-1-2 scripts]# cd /data
[root@data-1-2 data]# ls
3306  3307
[root@data-1-2 data]# mv * /tmp移走所有的数据
[root@data-1-1 3306]# /usr/share/heartbeat/hb_standby 模拟宕机

出现脑裂现象
[root@data-1-2 ~]# cat /proc/drbd
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown   r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:4112

[root@data-1-2 ~]# drbdadm secondary data
[root@data-1-2 ~]#  drbdadm -- --discard-my-data connect data
[root@data-1-1 ~]# /usr/share/heartbeat/hb_takeover

##########不能在 heartbeat挂载的时候初始化表空间,不然会提示表空间不足

[root@data-1-1 ha.d]# vi /etc/ha.d/haresources[两台]
data-1-1 IPaddr::192.168.88.4/24/eth1 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysql###vip
data-1-2 IPaddr::192.168.88.2/24/eth1  ###vip
[root@data-1-1 3306]# cp /data/3306/mysql /etc/ha.d/resource.d/
[root@data-1-1 3306]# chmod +x /etc/ha.d/resource.d/mysql
注意df -h  drbd状态



© 著作权归作者所有

上一篇: dubbo环境搭建
下一篇: jvm重要参数分析
泡海椒
粉丝 11
博文 282
码字总数 288344
作品 0
成都
程序员
私信 提问
跟我学Spring Cloud(Finchley版)-23-Spring Cloud Config高可用

前文构建的都是单节点的Config Server,本节来讨论如何构建高可用的Config Server集群,包括Config Server的高可用依赖Git仓库的高可用以及RabbitMQ的高可用。 先来讨论Git仓库的高可用。 Gi...

周立_ITMuch
03/14
0
0
jeesz分布式架构-分布式高可用

什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 常见互联网分布式架构如上,分为: (1)客户端...

壹玖
2018/08/09
0
0
究竟啥才是互联网架构“高可用”

原创 2016-12-05 58沈剑 架构师之路 一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系...

毛爷爷夸我帅
2016/12/06
10
0
互联网高可用架构技术实践

一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可...

LionelShen
2016/12/06
45
0
Kubernetes集群高可用的策略和实践

Kubernetes高可用也许是完成了初步的技术评估,打算将生产环境迁移进Kubernetes集群之前普遍面临的问题。 为了减少因为服务器当机引起的业务中断,生产环境中的业务系统往往已经做好了高可用...

openthings
2018/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

瓜哥奇遇记

庚子年秋, 瓜哥在黄石公园开枪射杀了杨耀东. 同年腊月, America 政府想要在 Montaña 审判他, 瓜哥称这违反了 America 第六修正案, 得以无罪释放. 辛丑年, 三月, 泛大洋. 一艘航船行驶在平平...

王氾超-E_Convorn_Ares
14分钟前
0
0
java对redis的基本操作

一、server端安装   1、下载     https://github.com/MSOpenTech/redis     可看到当前可下载版本:redis2.6          下载windows平台文件:               ...

boonya
15分钟前
0
0
自定义配置类

1.自定义配置类 在web开发中经常会用到配置文件,将配置文件中的属性自动注入到配置类中。 在application.properties文件中添加配置属性 com.neo.title=zabbix触发器com.neo.description=监...

贾峰uk
34分钟前
0
0
IDEA常用设置

1、鼠标悬停一秒看提示 2、自动导包 3、行号、分隔符 4、忽略大小写 5、多行线束操作 6、设置字体以及大小 7、设置注释字体颜色 8、设置文档注释信息 /** @author hll @date ${DATE} - ...

一只小青蛙
39分钟前
0
0
8.eclipse 安装 lombook插件

1.效果 2.安装过程 参考: https://blog.csdn.net/zflovecf/article/details/80178679 2.1 下载插件 https://projectlombok.org/download.html 并放入eclipse所在目录 (位置参考下图) 2.2 ......

20190513
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部