xxqyzsc 发表于 2018-12-31 10:45:30

Keepalived+LVS+Mysql-Cluster(7.1.10)架构方案

  Keepalived+Mysql-Cluster 架构概述
  Mysql-cluster本身实现了高可用,但是其sql节点并没有实现负载均衡,单独使用会出现单点故障,因此用Keepalived为mysqld节点提供负载均衡与高可用性,防止单点故障,此外性能也能得到很大的提升!
  Mysql-Cluster简介
  简单的说,MySQLCluster 实际上是在无共享存储设备的情况下实现的一种完全分布式
  数据库系统,其主要通过NDB Cluster(简称NDB)存储引擎来实现。MySQL Cluster 刚刚
  诞生的时候可以说是一个可以对数据进行持久化的内存数据库,所有数据和索引都必须装载
  在内存中才能够正常运行,但是最新的MySQL Cluster 版本已经可以做到仅仅将所有索引和索引数据装载在内存中即可,实际的数据可以不用全部装载到内存中,架构如下图所示:
http://blog.chinaunix.net/attachment/201104/1/20639775_1301628031iBxx.jpg
  由上图可知MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster 的数据节点,管理服务器,三个节点的功能如下:
  1、管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,    应在启动其他节点之前首先启 动这类节点。MGM节 点是用命令“ndb_mgmd”启动的。
  2、数据节点:这类节点用于保存 Cluster的数据。数据节点的数目与 副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令“ndbd”启动的。
  3、SQL节点:这是用来访问 Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点是使用命令“mysqld –ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动
  Mysql-cluster的优缺点
  优点:

[*]  a)      99.999 %的高可用性
[*]  b)      快速的自动失效切换
[*]  c)      灵活的分布式体系结构,没有单点故障
[*]  d)      高吞吐量和低延迟
[*]  e)       可扩展性强,支持在线扩容
  缺点:

[*]  a)      存在很多限制,比如:不支持外键,数据行不能超过8K(不包括BLOB和text中的数据)
[*]  b)      部署、管理、配置很复杂
[*]  c)      占用磁盘空间大,内存大
[*]  d)      备份和恢复不方便
[*]  e)      重启的时候,数据节点将数据load到内存需要很长时间
  Keepalived+LVS+Mysql-Cluster(7.1.10)的安装配置
  NDB Cluster的硬件需求:
  管理节点:对硬件没什么要求,差一点的机器完全能够胜任
  数据节点:可以选择大内存,cpu也相对来讲不错的,尤其是以后ndbmtd对多核Cpu的支持
  Mysql节点:对cpu要求较高,选择多核,高频CPU较好
  
  
  环境:
  Role                IP                OS                  Cpu               Mem
  管理节点(LVS)    192.168.100.223    CentOS 5.5 64bit    E5405@ 2.00GHz    3G
  Ndb节点1         192.168.100.231    CentOS 5.5 64bit    E5506@ 2.13GHz    16G
  Ndb节点2         192.168.100.232    CentOS 5.5 64bit    E5506@ 2.13GHz    16G
  Mysql节点1         192.168.100.225    CentOS 5.5 64bit    E5506@ 2.13GHz    16G
  Mysql节点2         192.168.100.226    CentOS 5.5 64bit    E5506@ 2.13GHz    16G
  Mysql版本:mysql-5.1.51
  NDB版本:ndb-7.1.10
  架构图:
http://blog.chinaunix.net/attachment/201104/1/20639775_1301638732qZf3.jpg
  Mysql-Cluster 7.1.10的安装配置
  数据节点的安装:
  tar xzvf mysql-cluster-gpl-7.1.10-linux-i686-glibc23.tar.gz
  mv mysql-cluster-gpl-7.1.10-linux-i686-glibc23 /usr/local/mysql
  #编辑/etc/my.cnf,添加如下内容:
  
  ndb-connectstring="nodeid=21, 192.168.100.223"
  #修改环境变量,增加mysql命令路径
  vi /root/.bash_profile
  #修改如下
  PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
  然后执行source/root/.bash_profile命令使更改生效!
  另一个数据节点的安装类似。
  Mysql节点的安装
  /usr/sbin/groupadd mysql
  /usr/sbin/useradd -g mysql mysql
  tar xzvf mysql-cluster-gpl-7.1.10-linux-i686-glibc23.tar.gz
  mv mysql-cluster-gpl-7.1.10-linux-i686-glibc23 /usr/local/mysql
  chown -R root.mysql /usr/local/mysql
  chown -R mysql.mysql /usr/local/mysql/data
  cd /usr/local/mysql
  ./scripts/mysql_install_db--user=mysql
  cp /usr/local/mysql/support-files/my-huge.cnf/etc/my.cnf
  添加如下内容:
  
  ndb-connectstring="nodeid=12,192.168.100.223"
  在下添加如下内容
  ndbcluster
  ndb-connectstring="nodeid=12,192.168.100.223"
  ndb-force-send=1
  ndb-use-exact-count=0
  ndb-autoincrement-prefetch-sz=256
  engine-condition-pushdown=1
  ndb-cluster-connection-pool=4
  default-storage-engine = ndbcluster
  #编辑 /root/.bash_profile
  #修改如下
  PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
  然后执行source/root/.bash_profile命令使更改生效!
  cp support-files/mysql.server /etc/rc.d/init.d/mysqld
  #设置成服务启动
  chkconfig --add mysqld
  chkconfig --level 2345 mysqld on
  另一个mysql节点的安装类似。
  管理节点的安装
  tar xzvf mysql-cluster-gpl-7.1.10-linux-i686-glibc23.tar.gz
  cp mysql-cluster-gpl-7.1.10-linux-i686-glibc23/
  cp mysql-cluster-gpl-7.1.10-linux-i686-glibc23/bin/ndb_mgm* /usr/bin/
  chmod +x /usr/bin/ ndb_mgm*
  新建/etc/my.cnf,添加如下内容:
  
  ndbcluster
  ndb-connectstring=192.168.100.223
  
  ndb-connectstring=192.168.100.223
  #新建config.ini文件,添加如下内容:
  
  SendBufferMemory=2M
  ReceiveBufferMemory=2M
  
  HostName=192.168.100.223
  
  TotalSendBufferMemory = 256M
  NoOfReplicas=2
  DataMemory=10240M
  IndexMemory=1024M
  DataDir=/data/dbdata
  #DataDir=/usr/local/mysql/mysql-cluster
  #FileSystemPath=/data/dbdata
  FragmentLogFileSize=256M
  NoOfFragmentLogFiles=16
  LockPagesInMainMemory=1
  MaxNoOfTables=4096
  MaxNoOfOrderedIndexes=2048
  MaxNoOfUniqueHashIndexes=2048
  MaxNoOfAttributes=20480
  MaxNoOfTriggers=10240
  ODirect=1
  MaxNoOfConcurrentTransactions=50000
  MaxNoOfConcurrentOperations=100000
  TimeBetweenGlobalCheckpoints=1000
  TimeBetweenEpochs=200
  TransactionBufferMemory=10M
  DiskCheckpointSpeed=10M
  DiskCheckpointSpeedInRestart=100M
  RedoBuffer=64M
  SchedulerSpinTimer=400
  SchedulerExecutionTimer=100
  RealTimeScheduler=1
  BackupMaxWriteSize=1M
  BackupDataBufferSize=16M
  BackupLogBufferSize=4M
  BackupMemory=20M
  MaxNoOfExecutionThreads=4
  TransactionDeadLockDetectionTimeOut=10000
  BatchSizePerLocalScan=512
  #disk
  SharedGlobalMemory=256M
  DiskPageBufferMemory=512MB
  
  id=11
  HostName=192.168.100.231
  #LockExecuteThreadToCpu=1,2,3
  #LockMaintThreadsToCPU=0
  
  id=12
  HostName=192.168.100.232
  #LockExecuteThreadToCpu=1,2,3
  #LockMaintThreadsToCPU=0
  
  id=13
  HostName=192.168.100.225
  
  id=14
  HostName=192.168.100.226
  
  
  
  
  
  
  
  
  
  keepalived的安装配置
  Lvs的安装
  wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
  ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux
  tar zxvf ipvsadm-1.24.tar.gz
  cd ipvsadm-1.24
  make && make install
  Keepalived的安装
  wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
  tar zxvf keepalived-1.1.19.tar.gz
  cd keepalived-1.1.19
  ./configure --prefix=/usr/local/keepalived
  make
  make install
  cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  mkdir /etc/keepalived
  keepalived的配置
  server端的配置
  vi /etc/keepalived/keepalived.conf
  添加如下内容:
  global_defs {
  notification_email {
  zhangxy@zhang.com
  }
  notification_email_from zhangxy@zhang.com
  smtp_server192.168.1.250
  smtp_connect_timeout 30
  router_idLVS_DEV
  }
  vrrp_instance VI_9 {
  state MASTER
  interfaceeth0
  virtual_router_id 100
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 2209
  }
  virtual_ipaddress {
  192.168.100.229/24 dev eth0 label eth0:1
  }
  }
  virtual_server 192.168.100.229 3306 {
  delay_loop 2
  lb_algo wrr
  lb_kind DR
  nat_mask255.255.255.0
  #persistence_timeout 60
  protocol TCP
  real_server192.168.100.225 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  real_server192.168.100.226 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
  Client端的配置
  vi /etc/rc.d/init.d/realserver.sh 添加如下配置:
  #!/bin/bash
  # description: Config realserver lo and apply noarp
  SNS_VIP=192.168.100.229
  /etc/rc.d/init.d/functions
  case "$1" in
  start)
  ifconfiglo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
  /sbin/route add -host $SNS_VIP dev lo:0
  echo"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo"2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo"1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -p>/dev/null 2>&1
  echo "RealServerStart OK"
  ;;
  stop)
  ifconfiglo:0 down
  route del$SNS_VIP >/dev/null 2>&1
  echo"0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo"0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo"0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo"0" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo"RealServer Stoped"
  ;;
  *)
  echo"Usage: $0 {start|stop}"
  exit 1
  esac
  exit 0
  添加加可执行的权限
  chmod +x/etc/rc.d/init.d/realserver.sh
  keepalived的服务器端启动
  /etc/rc.d/init.d/keepalivedstart
  keepalived的客户端启动
  /etc/rc.d/init.d/realserver.shstart
  ndb各节点的关闭和启动
  节点的启动和关闭是有顺序的,启动的时候应该先启动管理节点,然后是数据节点,最后是mysql节点。关闭节点的时候应该先关闭mysql节点,然后再通过管理节点关闭所有的管理节点和数据节点。
  启动:
  /usr/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini(启动管理节点)
  /usr/bin/ndbd--initial(启动数据节点,只有第一次启动或者有的配置变更后才需要--initial参数)
  /etc/rc.d/init.d/mysqld start(启动mysql节点)
  停止:
  /etc/rc.d/init.d/mysqld stop
  ndb_mgm -e shutdown

页: [1]
查看完整版本: Keepalived+LVS+Mysql-Cluster(7.1.10)架构方案