系统环境及架构

#主机名		   系统版本	       mysql版本	 ip地址
mysqlMaster	   <a href="https://www.linuxprobe.com/" title="centos" target="_blank">centos</a>7.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=NCYD-tianyu@0791
#若是不写上这个字段,在本机用<a href="https://www.linuxcool.com/" title="命令" target="_blank">命令</a>进入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=NCYD-tianyu@0791

#若是不写上这个字段,在本机用 命令 进入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里面,必须先关闭se<a href="https://www.linuxprobe.com/" title="linux" target="_blank">linux</a>,否在无法启动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.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进程

验证是否同步

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

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

安装keepalived实现VIP切换,达到高可用

yum install keepalived -y

#在mysqlMaster和mysqlSlave上都创建检查mysql的检查<a href="https://www.linuxcool.com/" title="脚本" target="_blank">脚本</a>,并赋予执行权限
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 -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"]
	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高可用架构:mysql+keepalived实现的更多相关文章

  1. MySQL高可用架构之Keepalived+主从架构部署

    针对目前公司的数据库架构要做统计规划和调整,所以针对不同的业务环境要选择合适的架构就比较重要,同时作为运维人员又要考虑到维护的便捷性(不能做过多架构维护),最终停留在mha+vip/主从+vip/my ...

  2. mysql高可用架构之MHA,haproxy实现读写分离详解

    MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理    权限的管理] 3.容灾       保证数据不丢失. 二.工作中MySQ ...

  3. (转)MySQL高可用架构之MHA

    MySQL高可用架构之MHA  原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...

  4. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  5. 032:基于Consul和MGR的MySQL高可用架构

    目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...

  6. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  7. 从mysql高可用架构看高可用架构设计

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  8. MySQL高可用架构应该考虑什么? 你认为应该如何设计?

    一.MySQL高可用架构应该考虑什么? 对业务的了解,需要考虑业务对数据库一致性要求的敏感程度,切换过程中是否有事务会丢失 对于基础设施的了解,需要了解基础设施的高可用的架构.例如 单网线,单电源等情 ...

  9. MySQL高可用架构之MySQL5.7组复制MGR

    MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...

  10. MySQL高可用解决方案(MySQL HA Solution)

    http://blog.sina.com.cn/s/blog_7e89c3f501012vtr.html 什么是高可用性?很多公司的服务都是24小时*365天不间断的.比如Call Center.这就 ...

随机推荐

  1. MyBatis从入门到精通:使用XML方式(映射文件之类的)

    2.3节笔记部分: package tk.mybatis.simple; public class Temp { } /* 2.2 使用XML方式 MyBatis使用了Java的动态代理可以直接通过接 ...

  2. Spring_AOP基于AspectJ的注解开发&JDBC的模板使用&事务管理(学习笔记3)

    一:AOP基于AspectJ的注解开发 1,简单的实例: 1)引入相应的jar包 ​ 2)在配置文件里引入相关约束 <beans xmlns="http://www.springfra ...

  3. python-if条件判断与while/for循环

    条件判断if 让计算机像人一样,能判断是非对错,根据条件做一些事情. if ''' ------ if代码结构:------- if 条件: 代码体 tips:同一缩进范围内的代码被视作同一代码体,p ...

  4. Makefile简单的配置

    一.文件配置目录 1)原目录 demo ├── Makefile ├── demo.cpp ├── demo.hpp └── main.cpp 2)make之后的目录 demo ├── Makefil ...

  5. echarts在react项目中的使用

    数据可视化在前端开发中经常会遇到,万恶的图表,有时候总是就差一点,可是怎么也搞不定. 别慌,咱们一起来研究. 引入我就不多说了 npm install echarts 对于基础的可视化组件,我一般采用 ...

  6. 【Java高级】(一)JVM

    5.2.1.在Java中如何判断对象已死? 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能被使用的 ...

  7. List集合源码解读

    一:总述: 主要讲解3个集合 1.ArrayList: 底层是数组,线程不安全: 2.LinkedList: 底层是链表,线程不安全: 3.Vector    底层数据结构是数组.线程安全: 二:Ar ...

  8. .net持续集成sonarqube篇之 sonarqube集成单元测试

    系列目录 通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0% 这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告. 这里需要借助O ...

  9. Linux 下实践 VxLAN

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫. 来源:ht ...

  10. 100天搞定机器学习|Day8 逻辑回归的数学原理

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...