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

[经验分享] 如何使用Heartbeat,组建一个高可用性的mysql集群

[复制链接]

尚未签到

发表于 2015-11-21 11:23:21 | 显示全部楼层 |阅读模式
  转了好多次帖子,其实就是为了使用heartbeat来搭建mysql集群,网上很多都是用make来生成RPM来安装,我也找了很多资料,mysql 自带的cluster用户不满意,只能再次vmware虚拟机尝试下,这里要感谢博客:http://kerry.blog.iyunv.com/172631/110206/ ,很多是根据里面的经验来实现的,只是部分还是解决不出需要其他方法。
  
一、背景当前大多网站采用Linux MYSQLAPACHE+PHP这种经典配置,如何防止单点失败造成的整个网站的不可用是网站管理者必须要考虑的问题,其中数据库的高可用性(Databaseserver’s high availability)是重中之重。对于数据库的高可用性,各商业软件的厂商都有各自的解决方案,比如Oracle OPS serverIBM DB2(share-nothing architecture)。最近MYSQL AB也发布了MYSQL cluster 软件,使用与IBMDB2类似的技术。MySQL cluster可能会是日后最理想的方案,但是从资源、可集成度方面考虑,给出一个简单实用的方案借鉴。本文介绍的是性价比比较高的一种: 使用Heartbeat2.0配置Linux高可用性集群,同时使用Heartbeat也可以实现简单的web集群。 二、实现原理通过Linux HA 软件 heartbeat 实现IP的自动漂移,即当一台服务器宕机后,浮动IP(整个cluster的对外IP )自动漂移到另外一台服务器。 DSC0000.jpg 通过Mysql自身的replication 实现不同机器上多个数据库的同步整体性能此方案将会降低MYSQL1%左右的性能,可用性及数据安全性将大有提高,同时服务器的切换对终端使用者是透明的,终端应用不需要进行更改。所需硬件:安装有双网卡的配置大致相同的服务器或工作机两台 一条交叉网线(用于双机对连的心跳线)  我这里是根据http://distfiles.macports.org/mysql5/找的mysql-5.5.29.tar.gz来搭建mysql
所需软件:Linux HA 软件 heartbeat (只支持两个节点),安装盘里集成的有这个软件的rpm软件主页:http://www.linux-ha.org/
我这里是通过yum 安装还有epel来安装heartbeat的,具体请看下面步骤:1、安装MYSQL#cd /opt#useradd mysql -d /usr/local/mysql -s /sbin/nologin#tar -zxvf mysql-5.1.29-rc.tar.gz#cd mysql-5.1.29-rc# ./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=gbk --with-collation=gbk_chinese_ci--with-extra-charsets=all --with-pthread --enable-thread-safe-client --enable-assembler --without-isam --without-innodb --without-ndb-debug --with-mysqli
这个如果没有装gcc编译器,需要执行yumgroupinstall "Development Tools"接下如果缺少ncurses[size=1em]安装包
解决办法:
下载安装相应软件包
一、如果你的系统是RedHat系列:
yum list|grep ncurses
yum -y install ncurses-devel
yum install ncurses-devel



#make && make install#/usr/local/mysql/bin/mysql_install_db        //初始化数据库#chown -R mysql.mysql /usr/local/mysql/     //设置目录宿主#cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf   //复制配置文件#cp support-files/mysql.server /etc/rc.d/init.d/mysqld    //设置启动文件 #chmod 700 /etc/rc.d/init.d/mysqld                         #/usr/local/mysql/bin/mysqld_safe --user=mysql &         #/etc/rc.d/init.d/mysqld start在启动mysql时报错 DSC0001.jpg 查看日志发现以下错误: DSC0002.jpg /etc/my.cnf文件中的skip-federated注释掉,然后执行[color=#006FE0!important]/[color=#002D7A!important]usr[color=#006FE0!important]/[color=#002D7A!important]local[color=#006FE0!important]/[color=#002D7A!important]mysql[color=#006FE0!important]/[color=#002D7A!important]bin[color=#006FE0!important]/[color=#002D7A!important]mysql_install_db[color=#006FE0!important][color=#006FE0!important]--[color=#002D7A!important]user[color=#006FE0!important]=[color=#002D7A!important]mysql就可以了如果上面的版本还不行,可以看看my.cnf是否有问题,可以通过查看日志来得到问题原因:http://zhidao.baidu.com/link?url=nXPsnqxsE2OTnMhTEbUX9NlE1LSiqcmJ09pEm2hKsLwrOCnvII4aEFelqGnoiLYbi2iU6tRBQFsSjzK2b6JMa_
[color=#002D7A!important]#chkconfig --add mysqld#chkconfig --level 2345 mysqld on设置软连接,如果要删除直接ln -C#ln -s /usr/local/mysql/bin/mysql /sbin/mysql#ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin#mysqladmin –u root password Password01!//设置root 密码#配置库文件搜索路径#echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf#ldconfig#添加/usr/local/mysql/bin到环境变量PATH#export PATH=$PATH:/usr/local/mysql/binmysqlB也按以上的方式进行安装2mysqlA设置设置同步数据库:   在这里我就用test数据库来做测试,在test数据库里新建一个data表,并添加一些数据,具体操作如下:#mysql –u root –pPassword01! DSC0003.jpg mysql> create table data(name VARCHAR(20), address VARCHAR(50), phone VARCHAR(20));mysql>insert into data(name,address,phone) values('jhone','beijing','138000000');mysql>select * from data;设置数据库同步帐户:mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'backup'@'10.10.10.205' IDENTIFIED BY 'qawsed';(授与从10.0.0.2主机上登录用户backup数据复制权限,4.02版本以前用:GRANTFILE ON *.* TO backup@10.0.0.2 IDENTIFIED BY 'qawsed';)mysql>flush privileges; DSC0004.jpg
修改配置文件:停止mysql服务[iyunv@mysqlA opt]#service mysqld stop建立用于更新日志的目录,并给于mysql的权限[iyunv@mysqlA opt]# mkdir /var/log/mysql[iyunv@mysqlA opt]# chown mysql.mysql /var/log/mysql/更改Mysql配置文件/etc/my.cnf[iyunv@mysqlA opt]# vi /etc/my.cnfserver-id=1                 //服务器IDlog-bin=mysql-binlog-bin=/var/log/mysql/updatelog   //启用更新日志binlog-do-db=test       //表示需要备份的数据库是test这个数据库replicate-same-server-idmaster-host=10.0.0.2      //指定主服务器IPmaster-user=backup       //指定在主服务器上可以同步的帐号master-password=qawsed //指定帐号对应的密码master-connect-retry=60  //断点重试间隔为60replicate-do-db=test      //表示同步test数据库binlog-ignore-db=mysql   //不同步mysql数据库test进行备份[iyunv@mysqlA opt]# service mysqld start    //先启动mysql[iyunv@mysqlA opt]# /usr/local/mysql/bin/mysqldump -h localhost -u root -p1q2w3e test >test.sql[iyunv@mysqlA opt]#scp test.sql root@10.0.0.2:/opt     //(将test.sql复制到mysqlB/opt目录下)至此mysqlA服务器上有关mysql的设置已完成,下一步开始配置mysqlB设置mysqlB设置数据库同步帐户:mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'backup'@'10.0.0.1' IDENTIFIED BY 'qawsed';(授与从10.0.0.1主机上登录用户backup数据复制权限,4.02版本以前用:GRANTFILE ON *.* TO backup@10.0.0.1 IDENTIFIED BY 'qawsed';)mysql>flush privileges;修改配置文件:停止mysql服务[iyunv@mysqlA opt]#service mysqld stop建立用于更新日志的目录,并给于mysql的权限[iyunv@mysqlA opt]# mkdir /var/log/mysql[iyunv@mysqlA opt]# chown mysql.mysql /var/log/mysql/更改Mysql配置文件/etc/my.cnf[iyunv@mysqlA opt]# vi /etc/my.cnfserver-id=2                 //服务器IDlog-bin=mysql-binlog-bin=/var/log/mysql/updatelog   //启用更新日志binlog-do-db=test       //表示需要备份的数据库是test这个数据库replicate-same-server-idmaster-host=10.0.0.1      //指定主服务器IPmaster-user=backup       //指定在主服务器上可以同步的帐号master-password=qawsed //指定帐号对应的密码master-connect-retry=60  //断点重试间隔为60replicate-do-db=test      //表示同步test数据库binlog-ignore-db=mysql   //不同步mysql数据库 还原从mysqlA备份过的test.sql#service mysqld start# mysql -u root -p1q2w3e test <test.sql重启两边的mysql服务查询配置Show Slave status:此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.Mysql中可通过以下命令来查看主从状态show master status 查看master状态show slave status 查看slave状态show processlist G 查看当前进程stop slave 暂时停止slave进程start slave 开始slave进程primary服务器上 MySQL命令符下输入:mysql>show master status; DSC0005.jpg mysql>show slave status\G; DSC0006.jpg 如果出现以错误: DSC0007.jpg 解决办法:在/etc/my.cnf [mysqld]下面加上replicate-same-server-id参数 DSC0008.jpg 这里如果是Slave_IO_Running:No Slave_SQL_Running:YES还有可能是IPTABLES没有设置对,可以用下面命令:在vmvare里面配了两台mysql,发现用mysql连不上mysql服务器,用telnet登录mysql的3306端口,发现居然是no route to host;
[zhoulei@localhost ~]$ telnet 192.168.2.48 3306
Trying 192.168.2.48...
telnet: connect to address 192.168.2.48: No route to host
telnet: Unable to connect to remote host: No route to host

觉得甚是差异,估计是虚拟机装了有问题,就把虚拟机中的防火墙给清了一下,发现可行。
[zhoulei@localhost ~]$ sudo iptables -F
因为如果安装telnet命令,telnet对方的3362会报No route to host这里如果是Slave_IO_Running:YESSlave_SQL_Running:NO可以用下面命令:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
具体参考http://blog.iyunv.com/orichisonic/article/details/47311391到此mysql的双机互备已基本完成,在两台服务器的mysql数据库中任意添加数据,都可以同步到对端服务器上
安装配置heartbeat:Heartbeat下载地址如下:这里是用:

  • yum install PyXML cluster-glue cluster-glue-libs resource-agents
然后

  • wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-3.0.4-2.el6.x86_64.rpm  
  • wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-libs-3.0.4-2.el6.x86_64.rpm  
  • rpm -ivh heartbeat-*
因为原来的教程是centos 5.3下的heartbeat2以上的版本
配置 HA的各配置文件:复制配置文件[iyunv@mysqlA opt]# cp /usr/share/doc/packages/heartbeat/authkeys /etc/ha.d/[iyunv@mysqlA opt]# cp /usr/share/doc/packages/heartbeat/haresources /etc/ha.d/[iyunv@mysqlA opt]# cp /usr/share/doc/packages/heartbeat/ha.cf /etc/ha.d/配置心跳的加密方式:authkeys[iyunv@mysqlA opt]#vi /etc/ha.d/authkeys#如果使用双机对联线(双绞线),可以配置如下:auth 11 crc#存盘退出,然后[iyunv@mysqlA opt]#chmod 600 authkeys 配置心跳的监控:haresources[iyunv@mysqlA opt]#vi /etc/ha.d/haresources#各主机这部分应完全相同。mysqlA IPaddr::192.168.8.155 ipvsadm mysqld[iyunv@mysqlA opt]# mkdir -p /var/log/ha_log[iyunv@mysqlA opt]#chmod 777 /var/log/ha_log/ 配置心跳的配置文件:ha.cf[iyunv@mysqlA opt]#vi /etc/ha.d/ha.cflogfile /var/log/ha_log/ha-log.log   ## ha的日志文件记录位置。如没有该目录,则需要手动添加bcast eth1     ##使用eht1做心跳监测keepalive 2    ##设定心跳(监测)时间时间为2warntime 10deadtime 30initdead 120hopfudge 1udpport 694    ##使用udp端口694 进行心跳监测auto_failback onnode mysqlA  ##节点1,必须要与 uname-n 指令得到的结果一致。node mysqlB  ##节点2ping 192.168.8.100   ##通过ping 网关来监测心跳是否正常。
设置ipvsadm的巡回监测[iyunv@mysqlA opt]#ipvsadm -A -t 192.168.8.155:3306 -s rr[iyunv@mysqlA opt]#ipvsadm -a -t 192.168.8.155:3306 -r 192.168.8.151:3306 -m[iyunv@mysqlA opt]#ipvsadm -a -t 192.168.8.155:3306 -r 192.168.8.152:3306 –m 执行后进行监测:[iyunv@mysqlA opt]#ipvsadm –list DSC0009.jpg DSC00010.jpg HA服务的启动、关闭以及测试启动HA: service heartbeat start关闭HA; service heartbeat stop进行监控: service heartbeat status DSC00011.jpg 防火墙设置heartbeat 默认使用udp 694端口进行心跳监测。 如果系统有使用iptables 做防火墙,应记住把这个端口打开。iptables -I INPUT -p udp --dport 694 -j ACCEPT 到此mysql双机互备已基本完成,不管哪一台服务器菪机都不会影响mysql的正常运行

运维网声明 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-141783-1-1.html 上篇帖子: 前端httpd+heepalived加后端heartbeat+nfs+drbd实现httpd服务的高效应用及资源统一管理 下篇帖子: Heartbeat中Watchdog和Softdog的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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