常青树 发表于 2018-10-1 09:01:45

Mysql的写高可用,读的负载均衡

  Mysql的写高可用,读的负载均衡
  DRBD+MYSQL+HEARTBEAT+PACEMAKER+LVS+KEEPALIVE
  说明:
  1. 是Mysql的高可用集群
  2. 通过Mysql的主从复制,实现mysql的读写分离。
  3. 集群资源管理是用的是pacemaker,对应的配置文件是cib.xml,而非旧版本的haresources。但haresources比cib.xml简单很多。
  4. 使用heartbeat实现Mysql主服务的高可用,keepalived实现从服务器的高可用。
  ###########架构简介############
  ##mysql主服务器+DRBD的主节点
  IP: 192.168.1.104——>drbd1
  ##mysql主服务器(备用)+DRBD的从节点
  IP: 192.168.1.105——>drbd2
  ##mysql从服务器(realserver)
  IP:192.168.1.106——>RS1
  192.168.1.107——>RS2
  192.168.1.107——>RS3
  ##LVS的DR+keepalived的主节点
  IP:192.168.1.109——>lvs1
  ##LVS的DR+keepalived的从节点
  IP:192.168.1.110——>lvs2
  ##heartbeat所使用的VIP:
  IP:192.168.1.111——>写数据库时,所使用的VIP
  ##lvs+keepalived所使用的VIP:
  IP:192.168.1.112——>读数据库时,所使用的VIP
  ###########所需软件#############
  1. drbd-8.4.3.tar.gz
  2. mysql-5.5.28-linux2.6-x86_64.tar.gz9(二进制)
  3. Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2
  4. ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
  5. pacemaker_1.1.7.orig.tar.gz
  6. keepalived-1.2.7-3.el6.x86_64.rpm
  注:yum源的配置如下:
  
  baseurl=file:///mnt
  gpgcheck=0
  
  baseurl=file:///mnt/HighAvailability
  gpgcheck=0
  
  baseurl=file:///mnt/LoadBalancer
  gpgcheck=0
  
  baseurl=file:///mnt/Server
  gpgcheck=0
  ############Drbd的安装与配置#############
  ##Drbd的安装
  1. tar xf drbd-8.4.3.tar.gz -C /usr/local/src
  2. cd /usr/loca/src/drbd-8.4.3
  3. ./configure \
  >--prefix=/usr/local/drbd \
  >--with-km \
  >--with-distro=redhat
  报错1:
  configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option.
  解决方法:
  yum -y install flex
  4. make && make install
  5. cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/drbd
  6. chkconfig --add drbd
  7. ln -sv /usr/local/drbd/etc/drbd.conf /etc/
  8. ln -sv /usr/local/drbd/etc/drbd.d /etc/
  9. modprobe drbd
  注:以上操作在主从DRBD服务器上都需要做
  ##Drbd的配置
  1. 用fdisk -c /dev/sdb 分出10G大小的/dev/sdb1
  2. 配置/etc/drbd.d/global_common.conf
  global {
  usage-count yes;
  }
  common {
  handlers {
  pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/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; /usr/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";
  }
  startup {
  wfc-timeout 120;
  degr-wfc-timeout 120;
  }
  disk {
  resync-rate   40M;
  on-io-error   detach;
  fencing         resource-only;
  }
  net {
  protocol C;
  cram-hmac-alg   sha1;
  shared-secret   "mysql-ha";
  csums-alg       sha1;
  verify-alg crc32c;
  }
  }
  3. 配置/etc/drbd.d/r0.res
  resource r0 {
  device/dev/drbd0;
  disk    /dev/sdb1;
  meta-disk       internal;
  on drbd1 {
  address 192.168.1.104:7789;
  }
  on drbd2 {
  address 192.168.1.105:7789;
  }
  }
  4. drbdadm create-mdr0
  5. service drbd start
  注:以上说有操作在主从节点都要进行
  6. drbdadm primary r0
  报错1:
  0: State change failed: (-2) Need access to UpToDate data
  Command 'drbdsetup primary 0' terminated with exit code 17
  解决方法:
  drbdadm -- --overwrite-data-of-peer primary all
  7. mkfs -t ext4 /dev/drbd0
  8. mkdir /data
  9. mount /dev/drbd0 /data
  #################MySQL的安装与配置#################
  ##MySQL的安装
  1. tar xf mysql-5.5.28-linux2.6-x86_64.tar.gz -C /usr/local
  2. ln -sv mysql-5.5.28-linux2.6-x86_64.tar.gz mysql
  3. cd mysql
  4. groupadd mysql
  5. useradd mysql -g mysql -s /sbin/nologin -M -r
  6. chown -R mysql.mysql .
  7. chown -R mysql.mysql /data
  8. scripts/mysql_install_db --user=mysql --datadir=/data
  9. chown -R root .
  10. cp support-files/mysql.server /etc/init.d/mysqld
  11. cp support-files/my-large.cnf /data/my.cnf
  12. ln -sv /data/my.cnf /etc/
  13. ./bin/mysqld_safe --user=mysql &
  14. 修改/etc/my.cnf
  
  datadir=/data
  15. echo "PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
  16. . /etc/profile
  17. 修改/etc/init.d/mysqld
  datadir=/data
  注:以上同样的操作也要在mysql的三个从节点上进行,另外,在备用主节点上,除了8、11、13步骤外,其余的需要做一遍。
  ##MySQL的配置
  主节点:
  1.修改my.cnf
  
  server-id=11
  log-bin=mysql-bin #默认是开启的
  sync-binlog=1
  innodb-file-per-table=1
  2. 创建从服务器拷贝账号

  grant replication client, replication slave on *.* to 'repl'@'192.168.1.106/107/108'>  从节点:
  1.修改my.cnf
  
  server-id=12 #另外两台分别是13,14
  read-only=1
  relay-log=relay-bin
  innodb-file-per-table=1
  2. 设置所要连接的主服务器以及拷贝的文件和所在位置
  mysql> change master to
  -> master_host='192.168.1.111',
  -> master_user='repl',
  -> master_password='123',
  -> master_port=3306,
  3. start slave;
  4. show slave status; #查看是否配置成功。
  ##################Heartbeat-HA的安装################
  >>>>>>>>>>>>定义环境变量>>>>>>>>heartbeat-3-0-7e3a82377fa8.tar.bz2的安装>/etc/profile.d/heartbeat.sh
  2. . /etc/profile.d/heartbeat.sh
  ########################Heartbeat的配置######################
  1. cd /usr/local/heartbeat/share/doc/heartbeat
  2. cp ha.cf haresources authkeys /usr/local/heartbeat/etc/ha.d
  3. cd /usr/local/heartbeat/etc/ha.d
  4. chmod 600 authkeys
  5. vim /etc/hosts
  192.168.1.104 drbd1
  192.168.1.105 drbd2
  6. vim ha.cf
  autojoin none
  bcast eth0
  warntime 15
  deadtime 60
  initdead 120
  keepalive 2
  compression bz2
  compression_threshold 2
  debug 0
  node drbd1
  node drbd2
  pacemaker respawn
  7. vim authkeys
  auth 1
  1 crc
  8.service heartbeat start
  报错1:
  /usr/local/heartbeat/etc/ha.d/shellfuncs: line 96: /usr/lib/ocf/lib//heartbeat/ocf-shellfuncs: No such file or directory
  解决方法:
  修改/usr/local/heartbeat/etc/ha.d/shellfuncs:
  . /usr/local/heartbeat/usr/lib/ocf/lib//heartbeat/ocf-shellfuncs
  报错2:
  Starting High-Availability services:Heartbeat failure . Failed.
  heartbeat: 2013/06/14_00:24:39 ERROR: Illegal directive in /usr/local/heartbeat/etc/ha.d//ha.cf
  heartbeat: 2013/06/14_00:24:39 ERROR: Compression module(bz2) not found
  heartbeat: 2013/06/14_00:24:39 info: Pacemaker support: respawn
  heartbeat: 2013/06/14_00:24:39 WARN: File /usr/local/heartbeat/etc/ha.d//haresources exists.
  heartbeat: 2013/06/14_00:24:39 WARN: This file is not used because pacemaker is enabled
  heartbeat: 2013/06/14_00:24:39 ERROR: Client child command is not executable
  heartbeat: 2013/06/14_00:24:39 ERROR: Directive respawnhacluster /usr/local/heartbeat/lib/heartbeat/ccm failed
  heartbeat: 2013/06/14_00:24:39 ERROR: Heartbeat not started: configuration error.
  heartbeat: 2013/06/14_00:24:39 ERROR: Configuration error, heartbeat not started.
  解决方法:
  1. ln -svf /usr/local/heartbeat/lib64/heartbeat/ccm /usr/local/heartbeat/lib/heartbeat/
  2. ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
  3. ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
  9. chkconfig heartbeat on ; checonfig logd on
  ######################配置pacemaker#############################
  1. 配置如下:
  使用如下命令:crm configure show 显示配置如下
  node $id="97ae394b-5f7c-472c-85a7-8e22de0c656b" drbd2 \
  attributes standby="off"
  node $id="e0c675cd-57aa-4975-b36c-8564c13c714a" drbd1 \
  attributes standby="off"
  primitive drbd_r0 ocf:heartbeat:drbd \
  params drbd_resource="r0" \
  op monitor interval="30s" role="Master" \
  op start interval="0" timeout="240s" \
  op stop interval="0" timeout="100s"
  primitive fs ocf:heartbeat:Filesystem \
  params device="/dev/drbd0" directory="/data" fstype="ext4" \
  op start interval="0" timeout="60s" \
  op stop interval="0" timeout="60s" \
  meta target-role="Started"
  primitive myip ocf:heartbeat:IPaddr \
  params ip="192.168.1.111"
  primitive mysql lsb:mysqld
  group mysqlservice fs myip mysql
  ms ms_drbd_mysql drbd_r0 \
  meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
  colocation fs_with_drbd_r0 inf: mysqlservice ms_drbd_mysql:Master
  colocation mysql_on_drbd_master inf: mysql ms_drbd_mysql:Master
  order fs_after_drbd inf: ms_drbd_mysql:promote fs:start
  order mysql_after_fs inf: fs:start mysql:start
  property $id="cib-bootstrap-options" \
  dc-version="1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff" \
  cluster-infrastructure="Heartbeat" \
  no-quorum-policy="ignore" \
  stonith-enabled="false" \
  last-lrm-refresh="1371372103" \
  expected-quorum-votes="2"
  ###################Keepalived+LVS的安装与配置###########################
  >>>>>>>>>>>>>>>>>>>>>安装配置
页: [1]
查看完整版本: Mysql的写高可用,读的负载均衡