摘要

在生产环境中mysql的高可用的对于整个项目而言有着至关重要的作用。因此需要将mysql设计成为高可用的架构。本博文将详细介绍的mysql+keepalived构建的mysql互为主从的架构实战。

一、环境准备

操作系统 centos7.0
数据库 mysql5.7
master 安装mysql 和keeplived 192.168.128
slave  安装mysql 和keeplived 192.168.140
docker 安装 docker 最新版本
虚拟IP地址 192.168.150

要实现互为主从,就必须 mster1-->master2设置主从同步 同时 master2--->master1 也设置主从同步。

二、Mysql主主同步环境部署

2.1 master-mysql 配置

vi /etc/my.cnf

vi /etc/my.cnf
[mysqld]#全局唯一,每台都不能一样
server-id = 1#log-bin表示开启二进制日志记录,mysql-bin表示日志文件的命名格式,会生成mysql-bin.0001 等等
log-bin = mysql-bin#指定中继日志格式(拉取主mysql日志后,在从库上生成的日志)
relay-log = mysql-relay-bin#指定那些库或则表不进行同步,mysql是库名,.%表示下面所有的表,mysql.user  表示不同不mysql库下的user表
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%#replicate-wild-do-table=boke.%       #表示同步那个库
#注意:不要在主库上使用binlog-do-db 或 binlog-ignore-db选项
#也不要在从库上使用 replicate-do-db 或 replicate-ignore-db 选项,因为这有可能产生跨库更新失败的问题.推荐从库上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 这两个选项来解决复制过滤问题
datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8[mysql]
socket=/data/mysql/mysql.sock
default-character-set=utf8[client]
socket=/data/mysql/mysql.sock
default-character-set=utf8
user=root
password=root
#若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到

2.2 slave-mysql配置

vi /etc/my.cnf

vi /etc/my.cnf
[mysqld]server-id = 2log-bin = mysql-binrelay-log = mysql-relay-binreplicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8[mysql]
socket=/data/mysql/mysql.sock
default-character-set=utf8[client]
socket=/data/mysql/mysql.sock
default-character-set=utf8user=root
password=root

2.3 测试Mysql主主同步环境

#mysql5.7.7以后的初始化方法
mysqld --initialize --user=mysql --datadir=/data/mysql#mysql5.7.7以前的初始化方法
mysql_install_db --user=mysql --datadir=/data/mysql#分别启动主从数据库
#在centos7里面,必须先关闭selinux,否在无法启动mysqld
systemctl start mysqld# 分别为主从mysql做安全加固
#查到上一步,首次启动mysql,系统自动生成的密码( cat /var/log/mysqld.log |grep pass )mysql_secure_installation  #使用该命令更改随机root密码(修改为 NCYD-tianyu@0791 )手动同步数据(假如现在的环境,主上已经有数据了,从是新的)
1:在主上数据库中创建用于复制的用户,并授权
mysql> GRANT REPLICATION SLAVE ON *.* to 'tongbu'@'192.168.1.43' identified by '123456789';2:在主mysql上先锁表(使其所有表变成只读状态)
mysql> flush tables with read lock;      #不要退出终端,否在这个锁就失效了3:再开启另一个命令行终端,使用myqldump等工具将数据导出(或则直接打包存储mysql数据的目录,并发送到从机上)4:将导出数据复制到从机上,并创建新库并导入数据互相置从,互相置主(以达到双主模式)

mysqlMaster上将mysqlSlave设置为自己的主角色服务器

mysql> show master status;    #查看mysqlSlave的状态(记录File名字,和Position)
change master to
master_host = '192.168.25.140',
master_user = 'root',
master_password = 'root',
master_log_file = 'mysql-bin.000002',
master_log_pos = 1006;mysql> start slave;      #启动slave端的复制进程(某些版本是:slave start; )
mysql> show slave status\G  #查看slaves端的I/O进程,与SQL进程

在从上将mysqlMaster设置为自己的主角色服务器

mysql> show master status;    #查看mysqlMaster的状态(记录File名字,和Position)
change master to
master_host = '192.168.25.128',
master_user = 'root',
master_password = 'root',
master_log_file = 'mysql-bin.000002',
master_log_pos = 1006;mysql> start slave;      #启动slave端的复制进程
mysql> show slave status\G  #查看slaves端的I/O进程,与SQL进程

1:第一验证在myssqlMaster上创建库,mysqlSlave上是否存在。

2:第二验证在mysqlSlave上创建库,mysqlMaster上是否存在。

三、Keepalived+Mysql高可用环境

3.1 配置maste keepalive节点

### 配置主节点 ###找到140注解keepalived的配置文件keepalived.confglobal_defs {router_id 192.168.25.140script_user rootenable_script_security
}vrrp_script chk_nginx {script "/etc/keepalived/check_mysql.sh"interval 2weight -20
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 140mcast_src_ip 192.168.25.140priority 100nopreemptadvert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.25.150}
}

3.2 配置slave keepalive节点

### 配置从节点 ###找到128注解keepalived的配置文件keepalived.confglobal_defs {router_id 192.168.25.128script_user rootenable_script_security
}vrrp_script chk_nginx {script "/etc/keepalived/check_mysql.sh"interval 2weight -20
}vrrp_instance VI_1 {state BACKUPinterface eth2virtual_router_id 128priority 90mcast_src_ip 192.168.25.128advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.25.150}
}

3.3 在master和salve中配置check_mysql.sh

mysql5.7

#!/bin/bashcounter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then/etc/init.d/keepalived stop
fi

mysql5.8

#!/bin/bash
#slave_is=( $(mysql -uroot -pNCYD-tianyu@0791 -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') ) 在新版本的myql中,直接将密码写在命令行,会进行安全提示,解决办法是将其写在mysql的配置文件里的 [client] 字段里,写法见上面mysql的配置文件
slave_is=( $(mysql -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') )
if [ "${slave_is[0]}" = "Yes" -a "$slave_is[1]" = "Yes"]thenexit 0
elseexit 1
fi

3.4 赋予权限和执行keepalive

# 赋予权限chmod +x /etc/keepalived/mysql_check.sh# 启动keeplivedsudo service keepalived start# 查看keeplivedsudo service keepalived status# 停止keeplivedsudo service keepalived stop

四、测试mysql+keepalived高可用架构

1 连接使用主192.168.25.150:3306 是否跳转连接master-mysql的192.168.25.140:3306

2 关闭主服务器

3.连接使用主192.168.25.150:3306 是否跳转连接slave-mysql的192.168.25.128:3306

博文参考

MySQL——Keepalived+Mysql高可用架构实战相关推荐

  1. Keepalived+Haproxy+Mysql(双主)高可用架构部署

    Keepalived+Haproxy+Mysql(双主)高可用架构部署 一.背景 公司原部署的Mysql架构为keepalived+Mysql双主,但是这个架构有个缺陷是所有的读写请求都在一台机器上( ...

  2. MySQL集群高可用架构

    MySQL集群高可用架构 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个 ...

  3. MySQL常见的高可用架构

    MySQL常见的高可用架构 概述: 1.基于共享存储的方案SAN 优点: 限制或缺点: 2.基于磁盘复制的方案 MySQL+DRDB架构 优点: 限制或缺点: 3.MySQL+MHA架构 优点: 缺点 ...

  4. mysql性能优化和高可用架构实践pdf_实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF...

    本篇的内容将会覆盖MySQL 5. 7数据库体系结构.InnoDB存储引擎.MySQL事务和锁.性能优化.服务器全面优化.性能监控.主从复制,以及PXC集群.MHA自动故障转移群集.MGR组复制.Ke ...

  5. 浅谈 MySQL 集群高可用架构

    作者:霸都民工哥,原名储成友 关注于Linux系统运维及各类运维架构技术,目前正研究学习大数据与自动化运维,热爱开源,拥抱开源. 一,前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库 ...

  6. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    [51CTO独家特稿]如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了,目前可行的方案有: 一.MySQL Cluster ...

  7. mysql galera cluster_MySQL高可用架构之Galera Cluster

    MySQL高可用架构之Galera Cluster 1.实验准备及拓扑 至少需要三个节点 node1 192.168.150.137 node2 192.168.150.138 node3 192.1 ...

  8. 01 MySQL生产环境高可用架构浅谈

    1.数据库主从架构与分库分表 ​ 随着现在互联网的应用越来越大,数据库会频繁的成为整个应用的性能瓶颈.而我们经常使用的MySQL数据库,也会不断面临数据量太大.数据访问太频繁.数据读写速度太快等一系列 ...

  9. 聚焦上海:千锤百炼出神器,高可用架构实战案例

    随着移动互联网.云计算和大数据的高速发展,科技创新企业的扩张速度也呈指数级增长,越来越多产品和服务从 idea 到落地,只需要几个月甚至几天的时间.但伴随服务化的深入,数据量急剧增加,高并发高扩展高性 ...

最新文章

  1. 人均奖金300万,2021年“科学探索奖”名单揭晓:高会军周昆上榜,女性获奖人8位创纪录...
  2. python周志_Python学习周志—第一周(入门知识)
  3. python configparse_python中ConfigParse模块的用法
  4. ASP.NET MVC3中的ViewBag动态性
  5. WebSite和Web Application\网站与Web项目的区别
  6. 第一课 Delphi7完全自学教程
  7. VM ware 12安装教程
  8. ASP.NET学生管理系统(.NET毕业设计)
  9. HTTP报文-请求报文和响应报文
  10. 2022美团实习生客户端一面
  11. java 内部类总结_java学习笔记9--内部类总结
  12. 显卡天梯图2021年9月新版
  13. openpyxl中遇到TypeError: ‘generator‘ object is not subscriptable的问题和解决方案
  14. 中国多媒体与网络教学学报杂志中国多媒体与网络教学学报杂志社中国多媒体与网络教学学报编辑部2022年第6期目录
  15. 2022CCPC网络预选赛c题Problem C. Guess
  16. 怎么查看笔记本内存条型号_内存条,详细教您怎么查看内存条的型号
  17. JMeter 进行压力测试
  18. 潘粤明、富而喜悦齐预测卡塔尔世界杯巴西必夺冠走红网络!
  19. mysql的WAL技术是什么_什么是WAL?
  20. 如何使用hub.docker.com

热门文章

  1. 基于springboot在线答疑系统
  2. 软件质量保证与测试作业2,2 软件质量保障与测试.ppt
  3. 最新!大象机器人myCobot机械臂应用于Unity人工智能机器人编程实战课
  4. 《采购与供应链管理》——读书笔记
  5. 如何用计算机计算e的平方,e为多少(计算器e为多少)
  6. 关于python画图:我是一个宠妻之人 哈哈哈
  7. 星际特攻队java_星际特攻队下载-星际特攻队游戏最新版v2.0.1-PChome下载中心
  8. 微机实验课-实验四扬声器程序设计
  9. 在线怎样将pdf转换成word格式
  10. C#数字转人民币大写