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

[经验分享] Linux构建MySQL集群

[复制链接]

尚未签到

发表于 2018-10-3 11:57:00 | 显示全部楼层 |阅读模式
  MySQL集群作用:解决MySQL代理服务器的缺点单点故障数据备份
  
  结构图如下:
   DSC0000.png
  使用6台RHEL6.4虚拟机,如图所示sqlA和sqlB作为SQL节点,ndbA和ndbB作为数据节点,mgmd作为管理节点,这5个节点构成MySQLCluster体系;而另一台虚拟机192.168.4.120作为MySQL测试客户机。
  
  角色说明:
  客户端(client)    :访问集群主机
  管理集群的主机(mgmd):管理集群中所有主机,加载自己的主配置文件,设置集群中所有主机的角色
  SQL结点(sql)      :供用户访问和执行SQL语句,存储表结构(2台以上)
  数据结点(ndbd节点)  :存储表中的记录(2台以上)
  MySQL集群提供三进程:
  mgmd    管理进程      运行在管理机上    config.ini
  mysqld   数据库服务     运行在sql节点上  /etc/my.cnf
  ndbd   数据存储服务   运行在ndbd节点   /etc/my.cnf
  1、公共配置(要保留RHEL自带的mysql-libs包)
  A、关闭防火墙、停止自带的mysql服务,移走配置文件/etc/my.cnf
  # service iptables stop;chkconfig iptables off
  # service mysql stop;chkconfig mysql off
  B、卸载冲突的软件包(所有节点)
  # rpm -qa | grep -i mysql       //查看原有的mysql包
  # yum -y remove .....
  C、关闭selinux并重启系统
  # setenforce 0;sed -ri 's/SELINUX=[a-z]+/SELINUX=disabled/' /etc/sysconfig/selinux
  # reboot
  C、安装集群软件(所有节点)
  # tar -xf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar
  # rpm -Uvh MySQL-Cluster-*.rpm   //默认路径/var/lib/mysql
  # rpm -qa | grep MySQL-Cluster
  2、配置管理主机mgm
  启动管理进程时,调用配置文件cluster.ini,知道集群中主机的角色(配置文件要自己编辑,不允许有空行)
  # mkdir -p /var/lib/mysql-cluster  //创建工作文件夹
  # chown -R mysql: /var/lib/mysql-cluster
  # vi /var/lib/mysql-cluster/cluster.ini
  [ndbd default]     //定义数据结点的公共配置
  NoOfReplicas=2     //指定一份数据备份几份(数据结点数或能被数据节点数整除)
  DataMemory=80M      //数据内存(保存用户执行过的SQL语句和查询结果,通常是物理内存的1/3)
  IndexMemory=18M     //保存索引的内存
  [ndb_mgmd]                 //指定管理主机
  nodeid=1                   //指定编号(管理标识),值不允许重复
  hostname=192.168.4.100         //管理主机的IP
  datadir=/var/lib/mysql-cluster  //路径在mgm上,用于存放集群中主机的信息,路径需自己创建
  [ndbd]                   //指定数据结点1
  nodeid =30
  hostname=192.168.4.30            //数据结点的IP
  Datadir=/var/lib/mysql/data  //路径在数据结点上要存在,该目录用于存放表中的记录
  [ndbd]                      //指定数据结点2
  nodeid =40
  hostname=192.168.4.40
  Datadir=/var/lib/mysql/data
  [mysqld]                        //指定sql结点1
  nodeid =10
  hostname=192.168.4.10               //sql结点的IP
  [mysqld]                        //指定sql结点2
  nodeid =20
  hostname=192.168.4.20
  3、配置数据结点ndb(在 .30 .40上操作)
  1)创建存储表中记录的目录
  # mkdir -p /var/lib/mysql/data
  2)编辑配置文件/etc/my.cnf(与mysqld的主配置文件同名)
  若原来已存在my.cnf文件,则先做改名
  # mv /etc/my.cnf /etc/my.cnf.bak
  # vi /etc/my.cnf
  [mysqld]                   //设置数据结点                         datadir=/var/lib/mysql/data     //将记录存储在本机的哪个目录下,与管理主机上的设置一致
  ndb-connectstring=192.168.4.100   //管理主机的IP
  ndbcluster                  //指定运行的存储引擎
  [mysql_cluster]              //设置管理集群的主机
  ndb-connectstring=192.168.4.100   //管理主机的IP
  4、配置SQL结点sql (在.10  .20上操作)
  1)编辑配置文件/etc/my.cnf
  # mv /etc/my.cnf /etc/my.cnf.bak
  # vi /etc/my.cnf                                                   [mysqld]                      //设置sql结点
  ndbcluster                    //指定表的存储引擎
  default-storage-engine=ndbcluster
  [mysql_cluster]                //设置管理集群的主机
  ndb-connectstring=192.168.4.100     //管理主机的IP
  5、启动(注意启动顺序)
  *正确的启动顺序:管理节点 --> 数据节点 --> SQL节点。
  *关闭顺序:    SQL节点 --> 数据节点 --> 管理节点。
  1)启动管理进程
  # ndb_mgmd -f /var/lib/mysql-cluster/cluster.ini --nodaemon    //启动管理进程脚本
  # pgrep mgmd          //查看进程是否开启,可用pkill -9 mgmd 结束管理进程
  # ndb_mgm            //执行登录管理界面的脚本                        ndb_mgm>show        //查看集群信息
  # ndb_mgm -e shutdown    //关闭管理节点和数据节点
  # netstat -atunp | grep ndb
  tcp   0  0 0.0.0.0:1186    0.0.0.0:*  LISTEN   4965/ndb_mgmd
  设置为开机自启动
  #vim /etc/rc.local
  ndb_mgmd -f /var/lib/mysql-cluster/cluster.ini  --nodaemon
  关于管理节点的启动,有以下几个需要注意的地方:
  ndb_mgmd 默认以后台模式运行(--daemon),调试过程中可添加选项--nodaemon来禁用后台模式;
  ndb_mgmd 初次启动成功以后,会自动保存集群配置,以后再启动时会忽略-f指定的配置文件,除非添加--inital选项(比如向集群中添加新的节点时,就应该重新初始化)。
  2)启动数据结点进程
  MySQL Cluster数据节点的对应服务程序为ndbd(单线程的)、ndbmtd(多线程的),首次启动或重新初始化时加 --initial选项,以后不用加。
  # ndbd --initial-start      //启动数据结点进程
  # pgrep ndbd             //查看进程,可用pkill -9 ndbd 结束管理进程
  # vim /etc/rc.local        //设置为开机自启动
  ndbd
  3)启动sql结点的数据库服务进程
  # pgrep mysqld
  # pkill -9 mysql
  # service mysql start
  # chkconfig mysql on
  修改密码
  # cat /root/.mysql_secret
  # the root user at Tue Dec24 15:24:50 2013 (local time): Z3Qw2OWJ
  # mysql -u root -p Z3Qw2OWJ
  mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('123');
  检查sql节点默认存储引擎,确保已支持ndbcluster且作为默认存储引擎:
  # mysql -u root -p123456  //本机帐号登录
  mysql> show engines\G;
  Engine: ndbcluster
  Support: DEFAULT
  管理节点查看集群状态
  #ndb_mgm          //进入群集管理环境
  ndb_mgm> show         //若能看到如下信息就说明集群创建成功
  Cluster Configuration
  ---------------------
  [ndbd(NDB)]  2node(s)
  id=30 @192.168.4.30  (mysql-5.6.14 ndb-7.3.3, starting, Nodegroup:0)
  id=40 @192.168.4.40  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)
  [ndb_mgmd(MGM)] 1 node(s)
  id=1  @192.168.4.100  (mysql-5.6.14 ndb-7.3.3)
  [mysqld(API)]   2node(s)
  id=10 @192.168.4.10  (mysql-5.6.14 ndb-7.3.3)
  id=20 @192.168.4.20  (mysql-5.6.14 ndb-7.3.3)
  
  6、sql结点授权客户端用户(两点节点都要)

  mysql>grant all on *.* to root@'192.168.4.%'>  7、MySQL集群的高可用性测试(验证集群)
  **如果默认引擎未设为ndbcluster,则建表操作末尾需手工指定存储引擎**
  **不能自动切换两个节点→mysql-mmm 解决**
  1)数据同步(自动备份)测试
  客户端登录 mysql节点.10 和.20 ( .10和.20的数据会同步)
  # mysql -h192.168.4.10 -uroot -p123
  mysql> create database ndb;
  mysql> use ndb;
  mysql> create table ndb01(idint);
  mysql> insert into ndb01values(100);
  mysql> select * from ndb01;
  +------+

  |>  +------+
  | 100 |
  | 100 |
  从客户机访问20,确认结果(能看到从10上所建的库、表、表记录)
  # mysql -h192.168.4.20 -uroot-p123
  2)高可用性测试(单点故障)(关闭一台数据节点)
  **只要还有一台数据节点可用,MYSQL数据库整体就仍然可用**
  关闭数据节点.30上的ndbd进程:
  # pkill -9 ndbd
  # netstat -antup | grep ndbd  //确认
  ndb_mgm> show   //此时从管理节点上查看集群状态,会发现ndbA已断开连接
  id=30 (not connected, acceptingconnect from 192.168.4.30)
  然后从客户机访问sqlA或sqlB,仍然可读、写数据库。
  验证故障恢复过程
  重新启动.30上的ndbd服务进程,稍待片刻后强制关闭.40上的ndbd服务进程。然后再次访问.30或.40节点,查询ndb01表的记录,发现与前面添加的结果一致:
  以上测试成立说明:因故障中断的数据节点(.30)恢复后,会立即从正常的数据节点(.40)同步数据,确保数据一致性。
  
  3)高可用性测试(关闭一台SQL节点)
  这个比较好理解:当MySQL集群内有多个SQL节点时,只要有一台SQL节点可用,就可以通过它来访问MySQL数据库中保存的表数据。
  比如说,关闭sqlA、sqlB中的任何一台以后,还可以通过另外一台来访问mydb库
  完毕!


运维网声明 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-609336-1-1.html 上篇帖子: mysql倒排的优化 下篇帖子: MySQL之备份与恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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