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

[经验分享] drbd+mysql+keepalived实现高可用测试

[复制链接]

尚未签到

发表于 2018-10-1 12:54:50 | 显示全部楼层 |阅读模式
  一、Drbd安装配置及配置
  drbd-8.3.10.tar.gz
  1、安装
  ./configure --prefix=/usr/local/drbd/ —with-km
  Make && make install
  2、编辑配置文件
  Vim /usr/local/drbd/etc/drbd.d/global_common.conf
  global {
  usage-count yes;
  # minor-count dialog-refresh disable-ip-verification
  }
  common {syncer {rate 10M;} }
  resource r0 {
  protocol C;
  handlers {
  pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /u
  sr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f
  ";
  pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /u
  sr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f
  ";
  local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/
  notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
  # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
  # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
  # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
  # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm
  .sh -p 15 -- -c 16k";
  # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm
  .sh;
  }
  startup {
  # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-s
  b
  }
  disk {
  # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes
  # no-disk-drain no-md-flushes max-bio-bvecs
  }
  net {
  //主备之间通信使用的算法
  cram-hmac-alg sha1;
  shared-secret "hello";
  # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-time
  out max-buffers
  # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shar
  ed-secret
  # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg n
  o-tcp-cork
  }
  syncer {
  # rate after al-extents use-rle cpu-mask verify-alg csums-alg
  }
  on server01.com {
  device /dev/drbd0;
  disk /dev/hdb1;
  address 192.168.100.5:7788;
  meta-disk internal;
  }
  on server02.com {
  device /dev/drbd0;
  disk /dev/hdb1;
  address 192.168.100.6:7788;
  meta-disk internal;
  }
  }
  3、创建启动脚步
  Cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/drbd
  Chconfig —add drbd
  Chconfig drbd on
  4、修改主机名
  server01上
  Shell>Hostname  server01.com
  Shell>Vim /etc/sysconfig/network
  HOSTNAME=server01.com
  server02上:
  Shell>Hostname  server02.com
  Shell>Vim /etc/sysconfig/network
  HOSTNAME=server02.com
  5、修改  hosts文件,server01.com与server02.com主机一致
  Shell> vim /etc/hosts
  192.168.100.5 server01.com
  192.168.100.6 server02.com
  6、创建供drbd记录信息的数据块,r0是我们配置文件中定义的
  [root@server01 ~]# drbdadm create-md r0
  [root@server02 ~]# drbdadm create-md r0
  7、启动drbd
  [root@server01 ~]# /etc/init.d/drbd start
  [root@server02 ~]# /etc/init.d/drbd start
  出看drbd的状态
  [root@server01 ~]# cat /proc/drbd
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
  0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
  ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2097012
  8、初始化一方为主机
  [root@server01 ~]# drbdsetup /dev/drbd0 primary -o
  [root@server01 ~]# cat /proc/drbd
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
  0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
  ns:95232 nr:0 dw:0 dr:95232 al:0 bm:5 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2001780
  [>....................] sync'ed:  4.7% (2001780/2097012)K
  finish: 0:03:08 speed: 10,580 (10,580) K/sec
  查看状态显示 以主机为准同步磁盘数据
  [root@server01 ~]# cat /proc/drbd
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:2097012 nr:0 dw:0 dr:2097012 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
  状态显示数据已经同步完毕
  9、格式化文件系统
  [root@server01 ~]# mkfs -t ext3 /dev/drbd0
  挂载文件系统
  [root@server01 ~]# mkdir /data
  [root@server01 ~]# mount /dev/drbd0 /data/
  8、数据测试
  创建一个10M的文件,查看备机是否存在
  [root@server01 data]# dd if=/dev/zero of=test count=20480
  9、主备切换
  在主机上执行
  [root@server01 ~]# umount /data/
  [root@server01 ~]# drbdadm secondary all
  这时查看drbd状态
  [root@server01 ~]# cat /proc/drbd
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
  0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
  ns:3004452 nr:0 dw:907440 dr:2097569 al:241 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
  在备机上执行
  [root@server02 drbd-8.3.10]# drbdadm primary all
  查看状态
  [root@server02 drbd-8.3.10]# cat /proc/drbd
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server02, 2011-06-08 17:19:40
  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:0 nr:3004452 dw:3004452 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
  挂载drbd分区
  [root@server02 ~]# mkdir /data
  [root@server02 ~]# mount /dev/drbd0 /data/
  [root@server02 data]# ll  -h
  total 11M
  drwx------ 2 root root 16K Jun  8 17:50 lost+found
  -rw-r--r-- 1 root root 10M Jun  8 17:55 test
  可以看到刚才在server01.com上创建的test文件,至此安装已经完毕
  二、安装mysql数据库
  .mysql安装省略
  数据库安装完成,将安装好的mysql拷贝到另一台机器
  三、使用keepalived 做ha
  1、安装keeplaived
  Yum  install -y openssl  openssl-devel
  ./configure --prefix=/usr/local/keepalived
  Make && make install
  2、配置文件如下
  ! Configuration File for keepalived
  global_defs {
  router_id LVS_DEVEL
  }
  vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  #主备之间配置唯一的区别
  priority 250
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.100.7
  }
  }
  3、启动keepalived
  /usr/local/keepalived/sbin/keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf
  查看vip状态,VIP是根据在keepalived中priority值决定帮定在master还是backup上
  [root@server01 keepalived-1.2.2]# ip a
  1: lo:  mtu 16436 qdisc noqueue
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
  link/ether 00:0c:29:95:bf:9e brd ff:ff:ff:ff:ff:ff
  inet 192.168.100.5/24 brd 192.168.100.255 scope global eth0
  inet 192.168.100.7/32 scope global eth0
  4、测试结果
  down掉server01.com上网卡,vip会切换到server02.com上。
  Server01.com恢复正常,vip自动切换到server01.com上(因为server01.com优先级要高;如果不想这样,可以在server01.com加上nopreempt)
  四、drbd与keepalived 结合
  ! Configuration File for keepalived
  global_defs {
  router_id LVS_DEVEL
  }
  vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 52
  priority 250
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.100.7
  }
  notify_master "/usr/local/sbin/to-master"
  notify_backup "/usr/local/sbin/to-backup"
  notify_fault "/usr/local/sbin/to-backup"
  }
  To-master脚本如下
  #!/bin/bash
  while :
  do
  drbd_status=`service drbd status|grep Inconsistent | gawk '{print $4}'`
  if [ -n "$drbd_status" ]; then
  echo "drbd's status is inconsisten,waiting..."
  sleep 1
  else
  echo "drbd's status is ok,namenode will be changing"
  break
  fi
  done
  while :
  do
  if [ -d /data/mysql ]; then
  #service mysqld stop
  service mysqld start
  break
  else
  drbdadm primary r0
  mount /dev/drbd0 /data
  sleep 1
  service mysqld start
  fi
  done
  drbd_status=`service drbd status|grep StandAlone | gawk '{print $2}'`
  if [ -n "$drbd_status" ]; then
  vip_status=`ip addr |grep eth0|grep "192.168.100.7"`
  if [[ ! -z ${vip_status} ]];then
  for i in $(seq 3)
  do
  drbdadm connect all
  sleep 2
  done
  fi
  fi
  To-backup脚步如下
  #!/bin/bash
  if [ -d /data/mysql ];then
  service mysqld stop
  pkill -9 mysql
  sleep 1
  fuser -ck /data/
  umount -l /dev/drbd0
  drbdadm secondary all
  else
  drbd_status=`service drbd status|grep StandAlone | gawk '{print $2}'`
  if [ -n "$drbd_status" ]; then
  drbdadm secondary all
  fi
  fi


运维网声明 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-607146-1-1.html 上篇帖子: mysql重新生成慢查询日志 下篇帖子: mysql主从同步配置(超详细)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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