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

[经验分享] mysql+drbd+heartbeat高可用配置说明

[复制链接]

尚未签到

发表于 2018-10-2 11:08:16 | 显示全部楼层 |阅读模式
  
  环境描述:

  系统版本:Red Hat Enterprise Linux Server>  mysql版本:mysql-5.1.49.tar.gz
  drbd版本:drbd83-8.3.15-2.el5.centos.rpm
  heartbeat版本:heartbeat.x86_64 0:2.1.3-3.el5.centos.rpm
  主机名
  Eth0
  Eth1
  备注
  ln-master
  10.10.206.193
  192.168.1.10
  主
  ln-slave
  10.10.206.194
  192.168.1.11
  备
  VIP:10.10.206.211
  
  前期工作(两台都要改)
  修改主机名:
  [root@ln-master ~]# cat /etc/sysconfig/network
  NETWORKING=yes
  NETWORKING_IPV6=no
  HOSTNAME=ln-master
  更改hosts文件(两台都要改)
  [root@ln-master ~]# cat /etc/hosts
  # Do not remove the following line, or various programs
  # that require network functionality will fail.
  127.0.0.1               localhost.localdomain localhost
  ::1             localhost6.localdomain6 localhost6
  10.10.206.193     ln-master
  192.168.1.10      ln-master
  10.10.206.194     ln-slave
  192.168.1.11      ln-slave
  确保ping主机名能通,例如ping ln-slave
  优化开机启动项,开基础的四项即可
  [root@ln-master ~]#
  [root@ln-master ~]# for A in `chkconfig --list |grep 3:on|awk '{print $1}'`;do chkconfig $A off;done
  [root@ln-master ~]# for B in sshd crond syslog network;do chkconfig $B on;done
  [root@ln-master ~]# chkconfig --list |grep 3:on
  crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
  syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
  重启
  reboot
  安装配置DRBD
  注意:事先配置好YUM源

  •   1.   通过yum安装drbd(两台都要安装)
  注:drbd的版本和系统内核的对应  不同的版本对应不同的内核可以去官网看看
  [root@ln-master ~]#yum install drbd83* -y  #安装drbd
  [root@ln-master ~]#yum -y install kmod-drbd83*    #安装内核模块
  [root@ln-master ~]#modprobe drbd     #加载drbd内核模块
  [root@ln-master ~]# lsmod |grep drbd
  drbd                  273204  0 #看到这个,证明加载drbd内核模块了。

  •   2.   修改drbd配置文件(两台主机配置一样)
  [root@ln-master ~]# cat /etc/drbd.conf
  #
  # please have a a look at the example configuration file in
  # /usr/share/doc/drbd83/drbd.conf
  #
  global{
  usage-count no;         #这个问你让不让官网统计
  }
  common {
  syncer {rate 100M;}     #传输速度
  }
  resource r0 {
  protocol C;             #传输协议(下面进行协议说明)
  startup {
  }
  disk {
  on-io-error detach;
  }
  net {
  cram-hmac-alg "sha1"; #两台服务器通信间的算法
  shared-secret "FooFunFactory"; #通信密码
  #               after-sb-0pri disconnect;
  #               after-sb-1pri disconnect;
  #               after-sb-2pri disconnect;
  after-sb-0pri discard-younger-primary;
  after-sb-1pri discard-secondary;
  after-sb-2pri call-pri-lost-after-sb;
  rr-conflict disconnect;
  }
  syncer {
  rate 100M;
  al-extents 257;
  }
  on ln-master{                 #这里一定要是hosts定义的名称
  device  /dev/drbd0;     #逻辑设备路径
  disk    /dev/sdb1;       #真实设备路径
  address  192.168.1.10:7789;   #maser传输数据的IP地址
  meta-disk  internal;
  }
  on ln-slave{
  device  /dev/drbd0;
  disk    /dev/sdb1;
  address  192.168.1.11:7789;  #slave传输数据的IP地址
  meta-disk  internal;
  }
  }

  •   3.   DRBD一些说明
  DRBD 协议说明:
  A协议:数据一旦写入磁盘并发送到网络中就认为完成了写入操作
  B协议:收到接收确认就认为完成了写入操作
  C协议:收到写入确认就认为完成了写入操作
  DRBD设备的三个进程:
  每个drbd设备都有三个进程:
  1)  drbd0_worker是drbd0的主进程
  2)  drbd0_asender是primary上的drbd0的数据发送进程
  3)  drbd0_receiver是secondary上的drdb0的数据写入进程
  DRBD几点注意的地方:
  1)  mount drbd设备以前必须把设备切换到primary状态
  2)  两个节点中,同一时间只能有一台处于primary状态,另一台是secondary状态
  3)  处于secondary状态的节点不可以挂载
  4)  主备最好使用大小一样的分区。
  DRBD使用时建议使用Innodb存储引擎,同时打开binlog日志,设置innodb_flush_log_at_commit=1。MyISAM存储引擎在DRBD上容易造成数据丢失,及文件损坏。
  DRBD脑裂后处理:
  在drdb1-master上
  drbdadm secondary r0
  drbdadm — –discard-my-data connect r0
  drbdadm connect r0
  在drbd2-slave上
  drbdadm disconnect r0
  drbdadm connect r0

  •   4.   创建DRBD设备
  我这里用的是虚拟机,我两台都添加了一块30G硬盘。
  对新的磁盘分区格式化(两台都要操作):
  [root@ln-master ~]# fdisk /dev/sdb
  Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
  Building a new DOS disklabel. Changes will remain in memory only,
  until you decide to write them. After that, of course, the previous
  content won't be recoverable.
  Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
  Command (m for help): n
  Command action
  e   extended
  p   primary partition (1-4)
  p
  Partition number (1-4): 1
  First cylinder (1-652, default 1):
  Using default value 1
  Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):
  Using default value 652
  Command (m for help): w

  The partition table has been>  Calling ioctl() to re-read partition table.
  Syncing disks.
  创建drbd设备(两台都要执行)
  [root@ln-slave ~]# drbdadm create-md r0
  Writing meta data...
  initializing activity log
  NOT initialized bitmap
  New drbd meta data block successfully created.  #看到这些信息表示创建设备成功。
  错误
  Command 'drbdmeta 0 v08 /dev/sdb internal create-md' terminated with exit code 40
  drbdadm create-md r0: exited with code 40
  这是因为我们只把以前的分区删除了,并没有重新创建分区,创建分区即可
  如果还出现这个错误提示运行
  dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
  即可

  •   启动drbd服务(两台都要启动)
  [root@ln-master ~]# /etc/init.d/drbd start
  Starting DRBD resources: [ d(r0) s(r0) n(r0) ]..........
  [root@ln-master ~]# /etc/init.d/drbd status
  drbd driver loaded OK; device status:
  version: 8.3.15 (api:88/proto:86-97)
  GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by mockbuild@builder17.centos.org, 2013-03-27 16:04:08
  m:res  cs         ro                   ds                         p  mounted  fstype
  0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
  错误
  Starting DRBD resources: Can not load the drbd module.
  没有加载drbd内核模块,安装内核模块并加载即可。

  •   6.   将master设置为主节点(只在master上执行)
  在master主机执行命令  设置为主节点
  [root@ln-master ~]# drbdadm -- --overwrite-data-of-peer primary r0   #设置为主节点
  [root@ln-master ~]# mkfs.ext3 /dev/drbd0     #格式化
  mke2fs 1.39 (29-May-2006)
  Filesystem label=
  OS type: Linux

  Block>
  Fragment>  655360 inodes, 1309240 blocks
  65462 blocks (5.00%) reserved for the super user
  First data block=0
  Maximum filesystem blocks=1342177280
  40 block groups
  32768 blocks per group, 32768 fragments per group
  16384 inodes per group
  Superblock backups stored on blocks:
  32768, 98304, 163840, 229376, 294912, 819200, 884736
  Writing inode tables: done
  Creating journal (32768 blocks): done
  Writing superblocks and filesystem accounting information: done
  This filesystem will be automatically checked every 33 mounts or
  180 days, whichever comes first.  Use tune2fs -c or -i to override.
  [root@ln-master /]# mkdir /data
  [root@ln-master /]# mount /dev/drbd0 /data/  #挂载
  [root@ln-master /]# df -h
  文件系统              容量  已用可用已用% 挂载点
  /dev/mapper/VolGroup00-LogVol00
  45G   14G   30G  32% /
  /dev/sda1              99M   24M   70M  26% /boot
  tmpfs                 3.9G     0  3.9G   0% /dev/shm
  /dev/drbd0             30G  1.4G   27G   5% /data
  [root@ln-master /]# drbd-overview
  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r-----
  注:看到都是UpToDate了,证明两边已经同步完成了。

  •   7.   测试
  mater操作:
  [root@ln-master /]# cd /data/
  [root@ln-master data]# ll
  total 16
  drwx------ 2 root root 16384 Aug  6 10:39 lost+found
  [root@ln-master data]# touch test  #创建test文件
  [root@ln-master data]# ll
  total 16
  drwx------ 2 root root 16384 Aug  6 10:39 lost+found
  -rw-r--r-- 1 root root     0 Aug  6 12:35 test
  [root@ln-master data]# cd ..
  [root@ln-master /]# umount /data/
  [root@ln-master /]# df -h
  文件系统              容量  已用可用已用% 挂载点
  /dev/mapper/VolGroup00-LogVol00
  45G   14G   30G  32% /
  /dev/sda1              99M   24M   70M  26% /boot
  tmpfs                 3.9G     0  3.9G   0% /dev/shm
  [root@ln-master /]# drbdadm secondary r0  #将自己切换成从
  [root@ln-master /]# drbd-overview  #检查
  0:r0  Connected Secondary/Secondary UpToDate/UpToDate C r-----
  slave操作:
  [root@ln-slave /]# drbd-overview
  0:r0  Connected Secondary/Secondary UpToDate/UpToDate C r-----
  [root@ln-slave /]# drbdadm primary r0  #将自己提升为主
  [root@ln-slave /]# drbd-overview
  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r-----
  [root@ln-slave /]# mount /dev/drbd0 /data/
  [root@ln-slave /]# cd /data/
  [root@ln-slave data]# ll
  total 16
  drwx------ 2 root root 16384 Aug  6  2014 lost+found
  -rw-r--r-- 1 root root     0 Aug  6  2014 test
  以上如果在slave端看到了test文件,证明数据已经同步了。
  注:将master 还原成主,再做下面的操作。
  安装配置mysql(两台都要装)
  安装mysql:
  #创建mysql用户
  useradd mysql -s /sbin/nologin –M
  id mysql
  #安装
  tar zxf mysql-5.1.49.tar.gz
  cd mysql-5.1.49
  #配置
  ./configure --prefix=/usr/local/mysql-5.1.49 --with-unix-socket-path=/usr/local/mysql-5.1.49/tmp/mysql.sock --localstatedir=/data --enable-assembler --with- --with-collation=utf8_general_ci --with-plugins=innobase --enable-thread-safe-client --with-mysqld-user=mysql --with-big-tables --without-debug --with-pthread --enable-assembler --with-extra-charsets=complex --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static
  #拷贝启动脚本,配置文件
  /bin/cp support-files/mysql.server /etc/init.d/mysqld
  /bin/cp support-files/my-small.cnf /etc/my.cnf
  chmod 700 /etc/init.d/mysqld
  #做软连接
  ln -s /usr/local/mysql-5.1.49/ /usr/local/mysql
  #主库初始化
  /application/tools/mysql-5.1.49/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql      #备库不需要初始化
  mysql程序路径:/usr/local/mysql
  mysql data目录:/data/mysql/data
  my.cnf配置文件(两边相同),根据机器配置优化,以下配置仅供参考
  [root@ln-master mysql]# cat /etc/my.cnf
  [client]
  port = 3306
  [mysqld]
  basedir=/usr/local/mysql
  datadir=/data/mysql/data
  socket=/tmp/mysql.sock
  sync_binlog = 0
  binlog_format = ROW
  skip-locking
  skip-name-resolve
  skip-host-cache
  default-character-set=utf8
  default-collation=utf8_general_ci
  skip-character-set-client-handshake
  max_allowed_packet = 16M
  table_cache = 128
  sort_buffer_size = 512K
  net_buffer_length = 8K
  read_buffer_size = 256K
  read_rnd_buffer_size = 512K
  myisam_sort_buffer_size = 2M
  default-storage-engine=INNODB
  log-bin=mysql-bin
  max_connections=5000
  max_connect_errors=100000
  log_slow_queries=slow.log
  long_query_time=2
  log_queries_not_using_indexes=0
  #skip-federated
  server-id= 10
  table_lock_wait_timeout=180
  innodb_lock_wait_timeout=180
  innodb_data_file_path = ibdata1:1000M:autoextend
  #innodb_buffer_pool_size = 1G
  innodb_additional_mem_pool_size = 8M
  innodb_log_file_size = 100M
  innodb_log_buffer_size = 8M
  innodb_flush_log_at_trx_commit = 2
  innodb_thread_concurrency=0
  transaction-isolation=READ-COMMITTED
  innodb_doublewrite=1
  innodb_flush_method=O_DIRECT
  [mysqldump]
  quick
  max_allowed_packet = 16M
  [mysql]
  no-auto-rehash
  [isamchk]
  key_buffer = 20M
  sort_buffer_size = 20M
  read_buffer = 2M
  write_buffer = 2M
  [myisamchk]
  key_buffer = 20M
  sort_buffer_size = 20M
  read_buffer = 2M
  write_buffer = 2M
  [mysqlhotcopy]
  interactive-timeout
  安装配置heartbeat
  1.添加主机路由
  master:
  route add -host 192.168.1.11 dev eth1
  slave:
  route add -host 192.168.1.10 dev eth1
  添加到/etc/rc.local.
  2.安装heartbeat
  yum install -y heartbeat
  3.配置heartbeat
  heartbeat会有三个配置文件ha.cf,haresources,authkeys(本实验主备节点三个配置文件必须相同)
  
  ha.cf主配置文件:
  [root@ln-master ha.d]# cat ha.cf
  logfile /var/log/ha-log     #日志名字及存放位置
  keepalive 2                #设定心跳检测时间2秒
  deadtime 15               #死亡时间15秒,备用节点15秒没有检测到主节点心跳,确认对方故障
  warntime 10                #警告次数
  initdead 30                #守护进程启动30s后启动服务资源
  udpport 694                #使用ucast或bcast的udp通讯端口,默认694
  bcast   eth1               #广播通讯接口,ucast得指定ip地址
  auto_failback off              #当主节点切换到备份节点后,主节点又恢复正常,此处定义不进行回切操作,因为回切一次,NFS和mysql等成本很高
  #watchdog /dev/watchdog
  node    ln-master
  node    ln-slave
  ping 10.10.206.1
  authkeys验证文件:
  [root@ln-master ha.d]# cat authkeys
  auth 1                  #使用crc验证方式,这种方式不需要秘钥,因此性能比较好,还有其他两种安全依次增高,性能依次降低
  1 crc
  [root@ln-master ha.d]# ll authkeys    #必须为600权限
  -rw------- 1 root root 31 08-12 17:49 authkeys
  haresources配置文件:
  [root@ln-master ha.d]# cat haresources
  ln-master IPaddr::10.10.206.211 drbddisk::r0  Filesystem::/dev/drbd0::/data::ext3 mysqld
  说明:
  IPaddr::10.10.206.211   #VIP
  drbddisk::r0     #启动drbd r0资源,相当于执行/etc/ha.d/resource.d/drbddisk r0 stop/start操作
  Filesystem::/dev/drbd0::/data::ext3     #drbd分区挂载到/data目录,相当于执行/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext3 stop/start    mysqld  13275 mysql   22u  IPv4  28732       TCP *:mysql (LISTEN)
  slave:
  root@ln-slave ha.d]# ip add |grep "10.10"
  inet 10.10.206.194/24 brd 10.10.206.255 scope global eth0  #没有VIP
  [root@ln-slave ha.d]# drbd-overview
  0:r0  Connected Secondary/Primary UpToDate/UpToDate C r-----  #DRBD为从
  [root@ln-slave ha.d]# lsof -i :3306  #mysql也没启动
  [root@ln-slave ha.d]#
  模拟宕机故障,停掉master的heartbeat服务
  master:
  root@ln-master ~]# /etc/init.d/heartbeat stop
  Stopping High-Availability services:
  [确定]
  [root@ln-master ~]#
  [root@ln-master ~]# ip add|grep "10.10"        #vip没有了
  inet 10.10.206.193/24 brd 10.10.206.255 scope global eth0
  [root@ln-master ~]# drbd-overview           #drbd自动切换为从
  0:r0  Connected Secondary/Primary UpToDate/UpToDate C r-----
  [root@ln-master ~]# lsof -i :3306           #数据库也停了
  [root@ln-master ~]#
  slave:
  root@ln-slave ha.d]# ip add |grep "10.10"     #slave自动接管了
  inet 10.10.206.194/24 brd 10.10.206.255 scope global eth0
  inet 10.10.206.211/24 brd 10.10.206.255 scope global secondary eth0:0
  [root@ln-slave ha.d]# drbd-overview
  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r----- /data ext3 30G 1.4G 27G 5%
  [root@ln-slave ha.d]# lsof -i :3306

  COMMAND   PID  USER   FD   TYPE DEVICE>  mysqld  17556 mysql   22u  IPv4 278001       TCP *:mysql (LISTEN)
  如果master恢复了,master自动变成了备机,只有当对端再挂的时候,master才会接管过来。
  
  高可用脑裂问题及解决方案
  (1)、导致裂脑发生的原因
  1、高可用服务器之间心跳链路故障,导致无法相互检查心跳
  2、高可用服务器上开启了防火墙,阻挡了心跳检测
  3、高可用服务器上网卡地址等信息配置不正常,导致发送心跳失败
  4、其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件BUG等
  (2)、防止裂脑一些方案
  1、加冗余线路
  2、检测到裂脑时,强行关闭心跳检测(远程关闭主节点,控制电源的电路fence)
  3、做好脑裂的监控报警
  4、报警后,备节点在接管时设置比较长的时间去接管,给运维人员足够的时间去处理(人为处理)
  5、启动磁盘锁,正在服务的一方锁住磁盘,裂脑发生时,让对方完全抢不走"共享磁盘资源
  磁盘锁存在的问题:
  使用锁磁盘会有死锁的问题,如果占用共享磁盘的一方不主动"解锁"另一方就永远得不到共享磁盘,假如服务器节点突然死机或崩溃,就不可能执行解锁命令,备节点也就无法接管资源和服务了,有人在HA中设计了智能锁,正在提供服务的一方只在发现心跳全部断开时才会启用磁盘锁,平时就不上锁


运维网声明 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-607487-1-1.html 上篇帖子: 构建DRBD模型的MySQL高可用(HA)集群 下篇帖子: 关于MySQL数据库乱码的问题总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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