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

[经验分享] Keepalived+LVS+Mysql-Cluster(7.1.10)架构方案

[复制链接]

尚未签到

发表于 2018-12-31 10:45:30 | 显示全部楼层 |阅读模式
  Keepalived+Mysql-Cluster 架构概述
  Mysql-cluster本身实现了高可用,但是其sql节点并没有实现负载均衡,单独使用会出现单点故障,因此用Keepalived为mysqld节点提供负载均衡与高可用性,防止单点故障,此外性能也能得到很大的提升!
  Mysql-Cluster简介
  简单的说,MySQLCluster 实际上是在无共享存储设备的情况下实现的一种完全分布式
  数据库系统,其主要通过NDB Cluster(简称NDB)存储引擎来实现。MySQL Cluster 刚刚
  诞生的时候可以说是一个可以对数据进行持久化的内存数据库,所有数据和索引都必须装载
  在内存中才能够正常运行,但是最新的MySQL Cluster 版本已经可以做到仅仅将所有索引和索引数据装载在内存中即可,实际的数据可以不用全部装载到内存中,架构如下图所示:

  由上图可知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
  架构图:

  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,添加如下内容:
  [mysql_cluster]
  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
  添加如下内容:
  [mysql_cluster]
  ndb-connectstring="nodeid=12,192.168.100.223"
  在[mysqld]下添加如下内容
  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,添加如下内容:
  [mysqld]
  ndbcluster
  ndb-connectstring=192.168.100.223
  [mysql_cluster]
  ndb-connectstring=192.168.100.223
  #新建config.ini文件,添加如下内容:
  [tcp default]
  SendBufferMemory=2M
  ReceiveBufferMemory=2M
  [NDB_MGMD]
  HostName=192.168.100.223
  [NDBD DEFAULT]
  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
  [NDBD]
  id=11
  HostName=192.168.100.231
  #LockExecuteThreadToCpu=1,2,3
  #LockMaintThreadsToCPU=0
  [NDBD]
  id=12
  HostName=192.168.100.232
  #LockExecuteThreadToCpu=1,2,3
  #LockMaintThreadsToCPU=0
  [MYSQLD]
  id=13
  HostName=192.168.100.225
  [MYSQLD]
  id=14
  HostName=192.168.100.226
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  [MYSQLD]
  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/keepalived  start
  keepalived的客户端启动
  /etc/rc.d/init.d/realserver.sh  start
  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、欢迎大家加入本站运维交流群:群②: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-657897-1-1.html 上篇帖子: 读写分离+HA(mysql proxy+keepalived+mysql mmm)续 下篇帖子: 轻量级web故障自动切换keepalived
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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