sexevil 发表于 2019-1-7 11:02:04

heartbeat+mysql+drbd+实现高可用性

1,什么是DRBD  DRBD(Distributed Replicated Block Device),DRBD 号称是 "网络 RAID",开源软件,由 LINBIT 公司开发。
  2,DRBD的主要功能
  DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点 (主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的 数据,可以继续使用,以达到高可用的目的。
  3,DRBD的主要应用
  如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案 中,heartbeat 为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat + drbd在Linux下创建一个高可用(HA)的集群服务器,在高可用(HA)解决方案中使用DRBD的功能,可以代替使用一个共享盘阵存储设备。因为数 据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了。
  4,DRBD于mysql的关系
  MySQL 与 LINBIT 达成了合作关系,大张旗鼓的搞了这个 "12 天 Scale-Out" 活动,也是这个商业合作驱动的吧。DRBD 助力 MySQL, 号称可以得到四个 9 的可靠性,这不低于任何一款商业数据库 软件了。
  DRBD 的出现的确对 MySQL 集群的可用性 有很大提高。而且,有独到的特点,非常适合面向互联网的应用。因为是在存储层的数据块同步,很容易的做到应用层的 IO 负载均衡(备机承担一定的读压力),不但支持数据库失败接管,还能做到 IP 失败接管,接管时间小于 30 秒,真是穷人的绝佳集群解决方案。
  IP地址说明:
  master
  192.168.100.20
  slave
  192.168.100.21
  VIP 192.168.100.25
  1、管理节点mysql安装
  修改主机名为manager
  # tar -zxvf mysql-5.0.67.tar.gz
  # cd mysql-5.0.67
  # groupadd mysql
  # useradd -g mysql -s /sbin/nologin -M mysql
  # ./configure --prefix=/usr/local/mysql --with- --localstatedir=/var/data --with-extra-charset=all --enable-thread-safe-client
  # make && make install
  # cp support-files/my-large.cnf /etc/my.cnf
  # chown -R mysql.mysql /usr/local/mysql/
  # /usr/local/mysql/bin/mysql_install_db --user=mysql
  # chown -R root.root /usr/local/mysql/
  # chown -R mysql.mysql /var/data
  启动数据库服务,并添加到自启动
  # /usr/local/mysql/bin/mysqld_safe --user=mysql &
  # cp support-files/mysql.server   /etc/rc.d/init.d/mysqld
  # chm od 755 /etc/rc.d/init.d/mysqld
  加入服务队列:
  # chkconfig --add mysqld
  添加root密码
  # /usr/local/mysql/bin/mysqladmin -u root password "123456"
  配置 库文件搜索路径
  # echo "/usr/local/mysql/lib/mysql">>/etc/ld.so.conf
  # ldconfig
  # ldconfig -v
  添加/usr/local/mysql/bin到环境变量PATH中
  #echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
  #source /etc/profile
  2、从服务器mysql的安装同上
  3、DRBD的安装和设置
  (1)安装DRBD(主从服务器安装相同)
  # tar -zxvf drbd-8.3.0.tar.gz
  # cd drbd-8.3.0
  # make KDRI=/usr/src/redhat /
  # make install
  检查是否生成了相应的文件:/etc/drbd.conf ; /etc/init.d/drbd ; 以及./drbd/drbd.ko
  加载安装drbd模块
  # modprobe drbd
  通过lsmod检查是否已经成功
  #lsmod |grep drbd
  如果有,则表示成功了
  (2)更改drbd配置文件(主从服务器相同)
  准备drbd要使用的分区 ,该分区最好是干净的分区,我在虚拟机中重新划分了一个分区/dev/sdb1作为drbd使用。
  # vi /etc/drbd.conf
  resource r0 {
  protocol C;
  startup {
  degr-wfc-timeout 120;
  }
  disk {
  on-io-error   detach;
  }
  net {
  }
  syncer {
  rate 10M;
  }
  on master{
  //master为主服务器的主机名
  device   /dev/drbd0;
  disk       /dev/sdb1;
  address    192.168.100.20:7788;
  meta-diskinternal;
  }
  on slave{
  //master为从服务器的主机名
  device    /dev/drbd0;
  disk      /dev/sdb1;
  address   192.168.100.21:7788;
  meta-disk internal;
  }
  }
  (3)主服务器的设置
  创建matadata:
  # drbdadm create-md all
  2次输入“yes”
  启动drbd:
  # /etc/init.d/drbd start
  在启动第一个节点上的DRBD服务的时候,他会等待第2个节点的DRBD服务的启动,此时启动第2个节点上的DRBD服务即可。
  查看drbd的运行状态
  # cat /proc/drbd
  此时可以看到,已经开始同步数据了。设置完之后的第一次同步耗时比较长,因为需要把整个分区的数据全部同步一遍。
  设置为主节点:
  # drbdadmprimary all
  如果不成功使用这个命令
  # drbdsetup /dev/drbd0 primary -o
  在新设备上面创建文件系统
  # mkfs.ext3 /dev/drbd0
  挂载文件系统
  # mkdir /var/data
  # mount /dev/drbd0 /var/data
  在主节点上写入数据
  然后,我们把primary降级成secondary,把secondary提升成primary:
  # umount /var/data
  # drbdadm secondary all
  从节点
  把primary降级前,一定要先umount设备才行。然后提升secondary:
  # drbdadm primary all
  # mount /dev/drbd0 /var/data/
  查看一下数据同步过来没
  4、安装配置heartbeat(主从服务器的安装和配置相同):
  (1)先安装libnet
  # tar -zxvf libnet.tar.gz
  # cd libnet
  # ./configure
  # make
  # make install
  (2)安装heartbeat
  # groupadd haclient
  # useradd -g haclient hacluster
  # tar -jxvf Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.bz2
  # cd Heartbeat-STABLE-2-1-STABLE-2.1.4
  # ./ConfigureMe configure --disable-swig --disable-snmp-subagent
  # make
  # make install
  # cp doc/ha.cf /etc/ha.d/
  # cp doc/haresources /etc/ha.d/
  # cp doc/authkeys /etc/ha.d/
  (3)Authkeys配置
  # chmod 600 authkeys主节点和从节点间数据校验用的
  # vi /etc/ha.d/authkeys
  把 #auth 1
  #1 crc
  #2 sha1 HI!
  #3 md5 Hello!
  改成:
  auth 3
  #1 crc
  #2 sha1 HI!
  3 md5 Hello!
  (4)资源文件haresources配置
  # vi /etc/ha.d/haresources
  在配置文件中添加如下一行
  master drbddisk Filesystem::/dev/drbd0::/var/data::ext3mysqld 192.168.100.25
  上面资源组中的各项含义如下:
  master            当前primary节点名(uname -n)
  drbddisk          告诉heartbeat要管理drbd的资源
  Filesystem      这里是告诉heartbeat需要管理文件系统资源,其实实际上就是执行mount/umount命令,后面的“::”符号之后是跟的 Filesystem的参数设备名和mount点)
  mysqld            告诉需要管理mysql
  192.168.100.25    这里是让heartbeat帮你管理一个service ip,会跟着主节点一起漂移
  (5)ha.cf配置
  # vi /etc/ha.d/ha.cf
  #debugfile /var/log/ha-debug的注释去掉
  #keepalive 2    去注释
  #deadtime 15    去注释
  #warntime 10    去注释把10改成5
  #initdead 120   去注释
  #udpport 694    去注释
  #bcast eth0    #Linux   去注释
  #watchdog /dev/watchdog去注释也可以不打开
  #node den3    把den3改成master这里要注要它是主节点名称下面的是副节点名称,一定要与uname -n一致.
  #node dathy   把dathy改成slave
  #ping_group group1 10.10.10.254 10.10.10.253 去注释改:ping_group group1 192.168.100.20192.168.10.21
  #respawn hacluster /usr/lib/heartbeat/ipfail 去注释
  #apiauth ipfail gid=haclient uid=hacluster 去注释
  #hopfudge 1 去注释它就是集群中活跃节点的数量
  (6)启动heartbeat
  # /etc/init.d/heartbeat start
  # echo "/etc/init.d/heartbeat start">>/etc/rc.local
  # ps -ef | grep heartbeat查看一下
  5、测试
  可以拔掉主节点服务器的网线,看看有什么情况发生,测试是否正常?
  然后再把网线插回去,MySQL服务能否自动切换回来? 

页: [1]
查看完整版本: heartbeat+mysql+drbd+实现高可用性