MySQL高可用性之Keepalived+Mysql(双主热备)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介:

环境描述:

OS:CentOS6.5_X64

MASTER:192.168.0.202

BACKUP:192.168.0.203

VIP:192.168.0.204

1、配置两台Mysql主主同步

1
2
3
4
5
6
7
8
9
10
11
12
[root@master ~] # yum install mysql-server mysql -y
[root@master ~] # service mysqld start
[root@master ~] # mysqladmin -u root password 123.com
[root@master ~] # vi /etc/my.cnf  #开启二进制日志,设置id
[mysqld]
server- id  = 1                     #backup这台设置2
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema        #忽略写入binlog日志的库
auto-increment-increment = 2              #字段变化增量值
auto-increment-offset = 1               #初始字段ID为1
slave-skip-errors = all                        #忽略所有复制产生的错误     
[root@master ~] # service mysqld restart

#先查看下log bin日志和pos值位置

wKiom1MJYSngwysqAADkFn9zcK8686.jpg

master配置如下:

1
2
3
4
5
6
7
8
9
10
[root@ master ~] # mysql -u root -p123.com
mysql> GRANT  REPLICATION SLAVE ON *.* TO  'replication' @ '192.168.0.%'  IDENTIFIED  BY  'replication' ;
mysql> flush  privileges;
mysql> change  master to
     ->  master_host= '192.168.0.203' ,
     ->  master_user= 'replication' ,
     ->  master_password= 'replication' ,
     ->  master_log_file= 'mysql-bin.000002' ,
     ->  master_log_pos=106;   #对端状态显示的值
mysql> start  slave;          #启动同步

backup配置如下:

1
2
3
4
5
6
7
8
9
10
[root@backup ~] #  mysql -u root -p123.com
mysql> GRANT  REPLICATION SLAVE ON *.* TO  'replication' @ '192.168.0.%'  IDENTIFIED  BY  'replication' ;
mysql> flush  privileges;
mysql> change  master to
     ->  master_host= '192.168.0.202' ,
     ->  master_user= 'replication' ,
     ->  master_password= 'replication' ,
     ->  master_log_file= 'mysql-bin.000002' ,
     ->  master_log_pos=106;
mysql> start  slave;

#主主同步配置完毕,查看同步状态Slave_IO和Slave_SQL是YES说明主主同步成功。

wKioL1MJYQ7QfZfXAAGQt0H1o1c742.jpg

在master插入数据测试下:

wKiom1MJYUCC0nlQAAEk4ruZ3ys652.jpg

在backup查看是否同步成功:

wKioL1MJYXyyChXUAADPZraUk3Y684.jpg

可以看到已经成功同步过去,同样在backup插入到user表数据,一样同步过去,双主就做成功了。

2、配置keepalived实现热备

[root@backup ~]# yum install -y pcre-devel openssl-devel popt-devel #安装依赖包

1
2
3
4
5
[root@master ~] # wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
[root@master ~] # tar zxvf keepalived-1.2.7.tar.gz
[root@master ~] # cd keepalived-1.2.7
[root@master ~] #./configure --prefix=/usr/local/keepalived
make  &&  make  install

#将keepalived配置成系统服务

1
2
3
4
5
[root@master ~] # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@master ~] # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@master ~] # mkdir /etc/keepalived/
[root@master ~] # cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@master ~] # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@master ~] # vi /etc/keepalived/keepalived.conf
! Configuration File forkeepalived
global_defs {
notification_email {
test @sina.com
  }
notification_email_from  admin@ test .com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA       #标识,双主相同
  }
vrrp_instance VI_1 {
  state BACKUP            #两台都设置BACKUP
  interface eth0
  virtual_router_id 51        #主备相同
  priority 100            #优先级,backup设置90
  advert_int 1
  nopreempt              #不主动抢占资源,只在master这台优先级高的设置,backup不设置
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.0.204
  }
}
virtual_server 192.168.0.204 3306 {
  delay_loop 2
  #lb_algo rr              #LVS算法,用不到,我们就关闭了
  #lb_kind DR              #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL
  persistence_timeout 50   #同一IP的连接60秒内被分配到同一台真实服务器
  protocol TCP
  real_server 192.168.0.202 3306 {    #检测本地mysql,backup也要写检测本地mysql
  weight 3
  notify_down  /usr/local/keepalived/mysql .sh     #当mysq服down时,执行此脚本,杀死keepalived实现切换
  TCP_CHECK {
  connect_timeout 3     #连接超时
  nb_get_retry 3        #重试次数
  delay_before_retry 3  #重试间隔时间
   }
}
1
2
3
4
5
[root@master ~] # vi /usr/local/keepalived/mysql.sh
#!/bin/bash
pkill keepalived
[root@master ~] # chmod +x /usr/local/keepalived/mysql.sh
[root@master ~] # /etc/init.d/keepalived start


#backup服务器只修改priority为90、nopreempt不设置、real_server设置本地IP。


#授权两台Mysql服务器允许root远程登录,用于在其他服务器登陆测试!

mysql> grant all on *.* to'root'@'192.168.0.%' identified by '123.com';

mysql> flush privileges;

3、测试高可用性

1、通过Mysql客户端通过VIP连接,看是否连接成功。

2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。

wKiom1MJYbCBORSGAAHChWpI93k009.jpg

3、可通过查看/var/log/messges日志,看出主备切换过程

4、master服务器故障恢复后,是否主动抢占资源,成为活动服务器。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
关系型数据库 MySQL
MySQL高可用性之Keepalived+Mysql(双主热备)
MySQL高可用性之Keepalived+Mysql(双主热备)
|
SQL 关系型数据库 MySQL
MySQL + Keepalived 双主热备搭建
MySQL + Keepalived 双主热备搭建
1109 1
MySQL + Keepalived 双主热备搭建
|
SQL 关系型数据库 MySQL
Mysql + keepalived 实现双主热备读写分离
<p style="line-height:22.6667px; color:rgb(85,85,85); font-family:Verdana,'BitStream vera Sans',Tahoma,Helvetica,sans-serif; font-size:13.3333px; margin-top:0px; margin-bottom:10px; padding-top:0p
2876 0
|
网络协议 关系型数据库 MySQL
keepalived+mysql双主
keepalived+mysql双主原理: (1)主库1上的keepalived启动之后,会检查mysql服务是否活着,如果活着,keepalived进入master状态,获得VIP; (2)主库2上的keepalived启动之后,也会检查mysql是否活着,然后检查keep...
1148 0
|
关系型数据库 Shell
Keepalived+MySQL双主配置实践
整理了近期在项目上做的一些技术研究,希望与大家共同探讨交流。 一:环境介绍 master1:10.124.151.20 master2:10.124.151.22 VIP:10.124.
2127 0
|
关系型数据库 MySQL 测试技术
|
Oracle 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
|
监控 关系型数据库 MySQL
下一篇
无影云桌面