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

[经验分享] mysql+keepalive 高可用

[复制链接]

尚未签到

发表于 2018-9-28 11:42:20 | 显示全部楼层 |阅读模式
  说明:蓝色=命令名称
  浅绿=命令参数
  浅蓝=选项
  紫色=目录
  系统环境:CentOS  5.7  x86_64
  一、所需准备
  
mysql-master :192.168.1.71
  
mysql-slave  :192.168.1.70
  
mysql版本均为:5.5.21
  
keepalive 版本:1.2.2
  
vip:192.168.1.60
  注;mysql安装可参考http://linux521.blog.51cto.com/4099846/803600
  二、方案介绍
  两台mysql互为主从,但只有master写,slave只负责读。主从通过keepalive做成高可用,当master出问题,由slave接替master工作,即读写都在slave操作。当master恢复正常,master自动同步故障时间段数据,接替slave的写工作。
  三、双主配置
  1、配置文件
  
master my.cnf 主要参数
  log_slave_updates
  
log-bin = mysql-bin
  
server-id = 1
  
binlog-ignore-db=mysql
  
#auto_increment_increment = 2
  
#auto_increment_offset = 2
  slave my.cnf 主要参数
  log_slave_updates
  
log-bin = mysql-bin
  
server-id = 2
  
binlog-ignore-db=mysql
  
#auto_increment_increment = 2
  
#auto_increment_offset = 1
  注:
  
log_slave_updates  同步数据时也写入日志,二进制记录id号,互为主从时时不会引起循环。建议开启方便实施日志恢复。 可选
  
slave-skip-errors  跳过错误,可以通过=指定特定的错误,如:slave-skip-errors=1062  可选
  
log-bin = mysql-bin 开启二进制日志,必须开启,主从同步主要是通过二进制日志。 必须
  
sync_binlog=n  设置二进制日志在写入多少此后与硬盘同步,1 为最安全的也是效率最低的,根据实际情况设定 可选
  
server-id  设置mysql的id号,主从不能相同。 必须
  
binlog-ignore-db 设置不写入日志的库,建议设置不需要的库,节省流量。如需设置多个库可加多个此参数  可选
  
binlog-do-db 设置写入二进制日志的库,如设置则只有设置的库才能写入二进制日志。如需设置多个库可加多个此参数。 可选
  
replicate-ignore-db 设置slave不同步的库,如需设置多个库可加多个此参数。 可选
  
replicate-do-db 设置slave同步的库,如需设置多个库可加多个此参数。 可选
  
auto_increment_increment  自增增长值,如:id 设置为 auto_increment,则每次插入数据自增值为2,以1,3,5...或2,4,6...方式增长。 可选
  
auto_increment_offset 自增初始化便宜值,如果前一个id 为2 则 下一个为3 然后在这个基础上按auto_increment_increment 设置的值进行自增。 可选
  
master-host = 192.168.1.2 设置master 服务器地址,也可以启动时通过change master to 设置 。 可选
  
master-user = repl 设置更新用的帐号,也可以启动时通过change master to 设置 。 可选
  
master-password = 123 设置跟新用的密码,也可以启动时通过change master to 设置 。 可选
  
master-port = 3306 设置master端口,也可以启动时通过change master to 设置 。 可选
  binlog-do-db、binlog-ignore-db、replicate_do_db、replicate_ignore_db 在使用时应注意,若加了以上参数,则在操作数据库是要避免跨库操作(例:update test.table1 set...)
  
如设置 binlog-do-db=test
  
use mysql;
  
update test.table1 set ......
  
第二句会执行但不会写入二进制日志,即从库不能同步,主从数据库出现差异
  如设置 binlog_ignore_db=mysql
  
use mysql;
  
update test.table1 set ......
  
第二句会执行但不会写入二进制日志,即从库不能同步,主从数据库出现差异
  如设置 replicate_do_db=test
  
use mysql;
  
update test.table1 set ......
  
第二句将不会被执行,即从库不能同步,主从数据库出现差异
  如设置 replicate_ignore_db=mysql
  
use mysql;
  
update test.table1 set ......
  
第二句会被忽略执行,即从库不能同步,主从数据库出现差异
  原因是设置binlog-do-db、binlog-ignore-db、replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是当前默认数据库,所以跨库更新语句被忽略。
  2、安装准备
  写好配置文件重启数据库
  
service mysqld restart
  同步数据库
  
可通过 tcpdump 也可以直接打包拷贝,因本次mysql都是新装设置一样,无需同步,不会同步者建议google一下。
  
分别在master、slave上添加同步帐号

  
mysql>grant replication slave on *.* to zsz@'%'>  3、设置主从
  查看master二进制日志状态:show master status;
DSC0000.png

  在slave 执行:
  mysql>change master to master_host='192.168.1.71',master_user='zsz', master_password='zzzzzzz',master_log_file='mysql-bin.000007',master_log_pos=107;
  注:master_log_file='mysql-bin.000007',master_log_pos=107 为master status中对应的内容。
  mysql> slave start
  
mysql> show slave status\G;
DSC0001.png

  其中 Slave_IO_Running: Yes,Slave_SQL_Running: Yes 表示设置成功。
  测试:
  
在slave执行:
  
mysql> show databases;
DSC0002.png

  在master建立测试库,并插入数据:
  
mysql>create database zsz;
  
mysql>use zsz;
  
mysql>create table zsz
  
(id int(5) not null auto_increment primary key,
  
name char(10) not null,
  
qqgroup int(10)
  
)type=innodb;
  mysql>show databases;
  
mysql> show databases;
DSC0003.png

  在从库执行:
  mysql > show databases;
DSC0004.png

  
第一个为master建立数据库前,第二个为建立后。从图可以看出一切ok。
  4、设置双主
  在slave执行:mysql> show master status;
DSC0005.png

  在master执行:
  
mysql>change master to master_host='192.168.1.70',master_user='zsz', master_password='zzzzzzz',master_log_file='mysql-bin.000005',master_log_pos=107;
  注:master_log_file='mysql-bin.000005',master_log_pos=107 为master status中对应的内容。
  mysql> slave start
  
mysql> show slave status\G; DSC0006.png
  其中 Slave_IO_Running: Yes,Slave_SQL_Running: Yes 表示设置成功。
  
测试:
  
在master执行;
  
mysql> use zsz;
  
Database changed
  
mysql> select * from zsz;
  
Empty set (0.00 sec)
  关闭master
  
service mysqld stop
  在slave执行:
  mysql> use zsz;
  
mysql> insert into zsz(name,qqgroup) values('秦汉唐宋元','31013074');
  
mysql> select * from zsz; DSC0007.png
  

  在master执行:
  service mysqld start
  mysql -uroot -p
  mysql> use zsz;
  
mysql> select * from zsz;
DSC0008.png

  ok,一切成功。
  三、keepalive高可用配置
  1、keepalive安装
  分别在master,slave上安装keepalive
  cd /usr/local/src
  
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
  
tar zxvf keepalived-1.2.2.tar.gz
  
cd keepalived-1.2.2
  
./configure --prefix=/
  
make
  
make install
  分别在master,slave上新建检查脚本
  vim /root/check_mysql.sh
  内容如下
  


  • #!/bin/bash
  • MYSQL=/usr/local/mysql-5.5.21/bin/mysql
  • MYSQL_HOST=localhost
  • MYSQL_USER=root
  • MYSQL_PASSWORD=
  • CHECK_TIME=3
  • #mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
  • MYSQL_OK=1
  • function check_mysql_helth (){
  • $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" >/dev/null 2>&1
  • if [ $? = 0 ] ;then
  •      MYSQL_OK=1
  • else
  •      MYSQL_OK=0
  • fi
  •      return $MYSQL_OK
  • }
  • while [ $CHECK_TIME -ne 0 ]
  • do
  •      let "CHECK_TIME -= 1"
  •      check_mysql_helth
  •      if [ $MYSQL_OK = 1 ] ; then
  •           CHECK_TIME=0
  •           exit 0
  •      fi

  •      if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]
  •      then
  •           /etc/init.d/keepalived stop
  •      exit 1
  •      fi
  •      sleep 1
  • done
  

  chmod +x /root/check_mysql.sh
  

  2、编写配置文件
  vim /usr/local/keepalived/etc/keepalived/keepalived.conf
  master配置内容:
  
###########################master##########################
  
! Configuration File for keepalived
  
global_defs {
  
    router_id zsz
  
}
  
vrrp_script check_run {
  
    script "/root/check_mysql.sh"
  
    interval 5
  
}
  
vrrp_sync_group VG1 {
  
     group {
  
        VI_1
  
     }
  
}
  
vrrp_instance VI_1 {
  
     state MASTER
  
     interface eth0
  
     virtual_router_id 11
  
     priority 100
  
     advert_int 1
  
     nopreempt
  
     authentication {
  
         auth_type PASS
  
         auth_pass zzzzzzz
  
     }
  
     track_script {
  
         check_run
  
     }
  
     virtual_ipaddress {
  
         192.168.1.60 dev eth0 label eth0:0
  
     }
  
}
  
##########################end##########################
  slave配置内容:
  
#########################backup##########################
  
! Configuration File for keepalived
  
global_defs {
  
    router_id zsz
  
}
  
vrrp_script check_run {
  
    script "/root/check_mysql.sh"
  
    interval 5
  
}
  
vrrp_sync_group VG1 {
  
     group {
  
       VI_1
  
     }
  
}
  
vrrp_instance VI_1 {
  
     state BACKUP
  
     interface eth0
  
     virtual_router_id 11
  
     priority 80
  
     advert_int 1
  
     authentication {
  
         auth_type PASS
  
         auth_pass zzzzzzz
  
     }
  
     track_script {
  
         check_run
  
     }
  
     virtual_ipaddress {
  
         192.168.1.60 dev eth0 label eth0:0
  
     }
  
}
  
################end####################################
  3、测试
  在master上建立测试帐号:

  
mysql> grant all privileges on *.* to 'master'@'%'>  
mysql> flush privileges;
  在slave上建立测试帐号:

  
mysql> grant all privileges on *.* to 'slave'@'%'>  
mysql> flush privileges;
  
分别启动master、slave的keepalived进程
  
service keepalived start
  在master上执行:ifconfig DSC0009.png
  

  在slave上执行:ifconfig
  

DSC00010.png

  用一台同网段的机器访问通过vip数据库:
DSC00011.png

  关闭master数据库:service mysqld stop
  在master上执行:ifconfig DSC00012.png
  在slave上执行:ifconfig
DSC00013.png

  用一台同网段的机器访问通过vip数据库:
DSC00014.png

  通过此图可以看出此时反问的是slave(上文中master、slave帐号设置不同)
  测试 成功。



运维网声明 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.iyunv.com/thread-603241-1-1.html 上篇帖子: MySQL v4.1.16 下篇帖子: MySQL Replication(Master与Slave基本原理及配置)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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