嗯架构的来源
-
<李>众所周知,MySQL自身提供了主从复制,然后可以很轻松实现-主双向复制,同时再为其中一个主节点搭建一个奴隶库。这样就实现了MySQL-MMM架构的基础:master1和master2之间双向复制,同时master1和Slave1之间是主从复制。李>
<李>这样整个体系中存在两个主人,正常情况下只有一个主人对外提供写服务。如果对外提供服务的主人意外宕机了,这是MySQL本身并不具备故障转移切换的能力,尽管集群中仍然有一个正常的主节点,但应用仍不可用.mysql-mmm就是为了解决这个问题诞生的。李>
嗯架构的原理
-
<李> MySQL-MMM是MySQL -主复制经理(MySQL主主复制管理器)的简称,是谷歌的开源项目(Perl脚本),主要用来监控MySQL主主复制并做失败转移李>
<李>其原理是将真实数据库节点的IP (RIP)映射为虚拟IP (VIP)集,在这个虚拟的IP集中,有一个专用于写的IP,多个用于阅读的IP,这个用于写的VIP映射着数据库集群中的两台主的真实IP (RIP),以此来实现故障转移的切换,其他读的贵宾可以用来均衡读(平衡)。李>
嗯机构优缺点
优点
-
<李>使用Perl脚本语言开发及完全开源李>
<李>提供了读写VIP(虚拟IP),使服务器角色的变更对前端应用透明李>
<李>嗯提供了从服务器的延迟监控李>
<李>嗯提供了主数据库故障转移后从服务器对新主的重新同步功能李>
<李>很容易对发生故障的主数据库重新上线李>
缺点
-
<李>发布时间比较早不支持MySQL新的复制功能(基于GTID的复制)李>
<李>没有读负载均衡的功能李>
<李>在进行主从切换时,容易造成数据丢失李>
<李>嗯监控服务存在单点故障李>
嗯架构原理图
实验部署
环境部署
<代码> master1IP地址:192.168.144.167 master2IP地址:192.168.144.151 slave1IP地址:192.168.144.168 slave2IP地址:192.168.144.145 monitorIP地址:192.168.144.164 代码>
在master1 \ master2 \ slave1 \ slave2服务器中安装MYSQL数据库
<代码> [root@master1 ~] # wget - o/etc/yum.repos.d/CentOS-Base。回购http://mirrors.aliyun.com/repo/centos - 7.回购//获取源地址 (root@master1 ~) # yum - y安装epel-release//安装epel源 (root@master1 ~) #百胜清洗所有的,,百胜makecache//百胜缓存清空 (root@master1 ~) # yum - y安装mariadb-server mariadb//安装mariadb数据库 (root@master1 ~) # systemctl firewalld停止。服务//关闭防火墙 (root@master1 ~) # setenforce 0 (root@master1 ~) # systemctl mariadb开始。服务//开启数据库代码>
修改master1数据库配置文件
<代码> [root@master1 ~] # vim/etc/my.cnf//进入编辑配置文件 (mysqld) log_error=/var/lib/mysql/mysql。犯错//错误日志文件 日志=/var/lib/mysql/mysql_log。日志//主从日志存放位置 log_slow_queries=/var/lib/mysql_slow_queris。日志//男人日志 binlog-ignore-db=mysql, information_schema//二进制文件 character_set_server=utf8//字符集 log_bin=mysql_bin//二进制日志文件 server_id=11//服务id(不能相同) log_slave_updates=true//允许从服务器更新 sync_binlog=1//同步日志 auto_increment_increment=2//自增列 auto_increment_offset=1//起始点 (root@master1 ~) # systemctl mariadb重启。服务//重启数据库代码>
使用scp复制数据库配置文件到其他MySQL服务,并在其他MySQL服务器中修改server_id
<代码> [root@master1 ~] # scp/etc/my.cnf root@192.168.144.151:/etc/(服务器id=22) (root@master1 ~) # scp/etc/my.cnf root@192.168.144.168:/etc/(服务器id=33) (root@master1 ~) # scp/etc/my.cnf root@192.168.144.145:/etc/(服务器id=44) (root@master1 ~) # netstat -anpt | grep 3306//查看端口3306 tcp 0 0 0.0.0.0:3306 0.0.0.0: * 4235/mysqld听代码>
配置主主复制
master1
<代码> mysql (root@master1 ~) # # #进入数据库 MariaDB[(一)]比;显示主状态;# #查看主服务器的状态信息 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | |文件位置| Binlog_Do_DB | Binlog_Ignore_DB | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | mysql_bin。000001 | 245 | | mysql, information_schema | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1行集(0.00秒) MariaDB[(一)]比;格兰特复制奴隶*。*“复制”@“192.168.144。%”被“123456”;//授权给144段的网段复制的权限用户名复制密码123456 查询好,0行影响(0.00秒)MySQL架构,嗯部署实例