mysql keepalived主从_mysql高可用架构之(一)基于自身主从复制&keepalived实现
系统环境及架构
#主机名 系统版本 mysql版本 ip地址
mysqlMaster centos7.4 mysql5.7 192.168.1.42
mysqlSlave centos7.4 mysql5.7 192.168.1.43
#vip:192.168.1.41
在master和slave上分别进行数据库的安装
yum install epel* -y && yum clean all && yum makecache
rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7.rpm
yum clean all && yum makecache
yum install gcc gcc-c++ openssl-devel mysql mysql-server mysql-devel -y
创建数据库文件存放路径
mkdir /data/mysql -p
chown -R mysql:mysql /data/mysql
配置mysql配置文件
#在mysqlMaster上配置mysql配置文件
vi /etc/my.cnf
[mysqld]
server-id = 1 #全局唯一,每台都不能一样
log-bin = mysql-bin #log-bin表示开启二进制日志记录,mysql-bin表示日志文件的命名格式,会生成mysql-bin.0001 等等
relay-log = mysql-relay-bin #指定中继日志格式(拉取主mysql日志后,在从库上生成的日志)
replicate-wild-ignore-table=mysql.% #指定那些库或则表不进行同步,mysql是库名,.%表示下面所有的表,mysql.user 表示不同不mysql库下的user表
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=123-ti21u2131
#若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到
#在mysqlSlave上配置mysql配置文件
vi /etc/my.cnf
[mysqld]
server-id = 2
log-bin = mysql-bin
relay-log = mysql-relay-bin
replicate-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=utf8
user=root
password=123-ti21u2131
#若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到
先初始化数据库(需要进行初始化在/data/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密码(修改为 1234567 )
手动同步数据(假如现在的环境,主上已经有数据了,从是新的)
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.1.43',
master_user = 'tongbu',
master_password = '123456789',
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.1.42',
master_user = 'tongbu',
master_password = '123456789',
master_log_file = 'mysql-bin.000002',
master_log_pos = 1006;
mysql> start slave; #启动slave端的复制进程
mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程
验证是否同步(ok的)
1:第一验证在myssqlMaster上创建库,mysqlSlave上是否存在
2:第二验证在mysqlSlave上创建库,mysqlMaster上是否存在
第二步:安装keepalived实现VIP切换,达到高可用
yum install keepalived -y
#在mysqlMaster和mysqlSlave上都创建检查mysql的检查脚本,并赋予执行权限
touch /etc/keepalived/mysql_check.sh
chmod +x /etc/keepalived/mysql_check.sh
vi /etc/keepalived/mysql_check.sh
#!/bin/bash
#slave_is=( $(mysql -uroot -p1234567 -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"]
then
exit 0
else
exit 1
fi
#注意,keepalived检查脚本vrrp_script,只认两个返回值,0表示正常,非0表示不正常(这在写脚本是要注意),不正常就要做相关的切换
配置keepalived,以实现高可用
vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict #注意:当你发现无法ping通虚拟VIP时,建议将此行注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script mysql_check {
script "/etc/keepalived/mysql_check.sh"
#这个脚本,若是发现不执行,可以检查他的权限,777是不可以的,日志提示不安全,可以直接chmod +x /etc/keepalived/mysql_check.sh 就行
#script "shutdown -r now" #或者,直接用命令进行调试
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER #mysqlMaster上是MASTER;mysqlSlave上是BACKUP
interface ens192
virtual_router_id 52
priority 100 #mysqlMaster上是100;mysqlSlave上是90
advert_int 1
nopreempt #配置VIP(注意:故障切换抢占模式,尽量关闭,默认是开启的,这个参数只需要在高优先级上设置即可)
authentication {
auth_type PASS
auth_pass 1111
}
track_script { #调用上面定义检查mfsmaster的脚本
mysql_check
}
virtual_ipaddress {
192.168.1.41/24 dev ens192
}
}
#启动keepalived
systemctl start keepalived
赏 微信打赏
如果文章对你有帮助,欢迎点击上方按钮打赏作者
mysql keepalived主从_mysql高可用架构之(一)基于自身主从复制&keepalived实现相关推荐
- lvs加MySQL读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ...
- 《MySQL性能优化和高可用架构实践》阅读总结
文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...
- 《MySQL性能优化和高可用架构实践》简介与推荐序
#好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...
- MySQL 5.6通过Keepalived+互为主从实现高可用架构
本文将介绍两台Mysql如何实现高可用架构.通常我们会配置主从同步,但这样若主的Mysql挂掉,还需要手动干预,例如把指向主库的IP地址修改为指向从库的IP,为了实现自动切换到从数据库,我们可以使用K ...
- mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现
系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster centos7.4 mysql5.7 192.168.1.42 mysqlSlave centos7.4 mysq ...
- mysql lvs 读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 目录 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方案 ...
- MySQL(11)数据库实现高可用架构之MMM
文章目录 一.MySQL MMM介绍 1.1 什么是 MMM? 1.2 MMM的组成 2.1 MySQL M搭建的步骤(理论) 2.1.1 搭建步骤 2.1.2故障测试 2.2 MySQL M搭建具体 ...
- Mysql数据库MMM实现高可用架构
文章目录 一,MMM介绍 二.MMM搭建 一,MMM介绍 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障 ...
- MySQL 数据库之 MMM 高可用架构构建
文章目录 一.MMM 概述 1. 什么是 MMM 2. 应用场景 3. MMM 特点 4. 关于 MMM 高可用架构的说明 5. 用户及授权 二.案例环境 1. 服务器配置 2. 服务器环境 3. 修 ...
最新文章
- 基于Tkinter利用python实现颜色空间转换程序
- 《小程序个人信息保护研究报告》解读
- 『中级篇』k8s基础网络Cluster Network(66)
- 网站优化关键词如何分类看好这四种!
- xml与java代码相互装换的工具类
- JTAG之IO口作为普通IO口使用时注意事项
- ubuntu修改启动为文本模式
- C#制作WinForm控件
- 从趋势到必选项,探讨企业数字化转型方式方法
- 大圆距离matlab代码,python – cartopy:大圆距离线的更高分辨率
- Learning Shape Priors for Single-View 3D Completion and Reconstruction
- ASP.NET中定制自己的委托和事件参数类
- 问题的分析与解决(培训总结)
- php爬虫大数据抓取_爬虫软件介绍?大数据抓取软件?
- Linux面试题,经典Linux面试题,常见Linux面试题带答案
- Silverlight4 多页打印实现
- movielens数据集简述
- LAMP兄弟连ThinkPHP笔记
- 【Word】正则替换
- Microsoft Visual SourceSafe 6.0 关联VS
热门文章
- ubuntu 16卸载mysql_ubuntu16.04 彻底卸载MySQL
- idea2019打卡没多久就闪退_IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)...
- Oracle-索引分裂研究
- 强势回归丨2021数据库大咖讲坛(第1期):数据库高可用容灾方案的实践与探索
- 一招教你数据仓库如何高效批量导入与更新数据
- Python进阶丨如何创建你的第一个Python元类?
- SpringBoot写后端接口,看这一篇就够了!
- Presto性能调优的五大技巧
- 力算未来丨一张图看懂华为“鲲鹏+昇腾”双引擎
- activate-power-mode,让你在Python编码中,感受炫酷的书写特效!