架构展示

操作系统 centos6.5

数据库 mysql5.7

master1 10.0.254.148

master2 10.0.254.147

VIP 10.0.254.88 (keepalived)  最好在自己的内网VIP

一、创建操作系统 centos6.5   关闭selinux  关闭防火墙 iptables

二、每台机器都安装数据库 编译安装 不作介绍需要配置/etc/my.cnf 文件

master1的my.cnf 文件配置

启动mysql   /etc/init.d/mysqld start

master2的my.cnf文件配置

启动mysql /etc/init.d/mysqld start

完成以上操作之后,需要对两台机器做权限分配以及主主配置 需要同时进行配置两台机器

grant replication slave,replication client on *.* to guoshang@'%' identified by '1qaz!QAZ1qaz';

flush privileges;

flush tables with read lock; 锁表
show master status; 查看master情况
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 150 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

分别开启同步对方

---------------master1服务器做同步操作--------------- 
mysql> unlock tables;
mysql> stop salve;
mysql> change  master to master_host='master2IP',master_user='root/guoshang',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=150; 
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave; 
Query OK, 0 rows affected (0.01 sec)
 
查看两个线程状态是否为YES 
mysql> show slave status \G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

-------------master2服务器做同步操作--------------- 
mysql> unlock tables;
mysql> slave stop;
mysql> change  master to master_host='master1IP',master_user='root/guoshang',master_password='密码',master_log_file='mysql-bin.000006',master_log_pos=996; 
Query OK, 0 rows affected, 2 warnings (0.06 sec) 
mysql> start slave; Query OK, 0 rows affected (0.01 sec) 
mysql> show slave status \G;

Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 996
Relay_Log_File: master2-relay-bin.000002
Relay_Log_Pos: 312
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

以上表明双方已经实现了mysql主主同步。

测试创建库 创建表 插入数据  测试即可

配置keepalived

1)安装keepalived并将其配置成系统服务。master1和master2两台机器上同样进行如下操作:
[root@master1 ~]# yum install -y openssl-devel
[root@master1 ~]# cd /usr/local/src/
[root@master1 src]# wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
[root@master1 src]# tar -zvxf keepalived-1.3.5.tar.gz
[root@master1 src]# cd keepalived-1.3.5
[root@master1 keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived
[root@master1 keepalived-1.3.5]# make && make install
[root@master1 keepalived-1.3.5]# cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
[root@master1 keepalived-1.3.5]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@master1 keepalived-1.3.5]# mkdir /etc/keepalived/
[root@master1 keepalived-1.3.5]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@master1 keepalived-1.3.5]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
[root@master1 keepalived-1.3.5]# echo "/etc/init.d/keepalived start" >> /etc/rc.local

master1和master2操作如下
vim /etc/keepalived/keepalived.conf master1

vim /etc/keepalived/keepalived.conf    master2

配置完成

查看 ip addr

重启mysqld   keepalived   iptables

编写切换脚本。KeepAlived做心跳检测,如果Master的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。Slave的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管
[root@master1 ~]# vim /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived stop
fi
[root@master1 ~]# chmod 755 /opt/chk_mysql.sh
启动keepalived服务
[root@master1 ~]# /etc/init.d/keepalived start
正在启动 keepalived: [确定]

master1和master2两台服务器都要授权允许root用户远程登录,用于在客户端登陆测试!

mysql> grant all on *.* to root@'%' identified by "密码"; 
Query OK, 0 rows affected (0.00 sec) 
mysql> flush privileges; 
Query OK, 0 rows affected (0.01 sec)

keepalived报错提示

环境
VMware虚拟机1: 192.168.1.39

VMware虚拟机2: 192.168.1.40

想配置的VIP地址:192.168.111.88

现象
keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,vip也能漂移。能在master上ping通,但是无法在其他机器上ping通(比如master在 192.168.1.39上,39是能ping通111.88,但是我在 192.168.1.40上就ping不通),并且防火墙都已关闭,SELinux已关闭。

排查
journalctl -ex 查看两台机器日志,没发现任何问题
开启了百度谷歌之旅
搜索来的解决方案
原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通

结果发现我的配置文件中根本没这个vrrp_strict,肯定不是这个原因。排除
后来看到这篇文章
- 可能是对lvs手册不太熟悉,我只试了添加virtual_server和real_server

virtual_server 192.168.111.88 8080 {
delay_loop 6
lb_algo rr
lb_kind NAT
protocol TCP
real_server 192.168.1.39 8080
{
weight 1
}
}

两台机器的配置都加了,还是原来的问题。再仔细看了下原文"NAT模式和路由器NAT模式类似,用于访问client和real_server在不同网段实现通信。如果你在一个局域网内做负载均衡选用NAT,那恭喜你,你肯定是无法访问",我就把vip改成10.0.0.164(回头写笔记的时候,这里很惭愧啊。没懂这里,懂的话,其实已经能解决了)

virtual_server 10.0.0.164 8080 {
delay_loop 6
lb_algo rr
lb_kind NAT
protocol TCP
real_server 192.168.1.39 8080
{
weight 1
}
}

发现还是原来的问题。不行。

后来看到说arp绑定问题,需要清楚arp绑定
这个不懂,我就查看了下怎么看arp绑定

arp -n
发现两台机器一样,以为没有问题,就跳过了。(回头看下应该是有问题的,最后解决了再说)

再看了一篇说是云服务器的vip需要申请,跟服务商申请。反正就是云服务器跟虚拟机不一样,这里我就没继续研究了

抓包看问题

tcpdump -i ens33 arp -v

tcpdump -i ens33 vrrp -n

我也没看出啥。

最后看到下面这个,才知道问题所在

因为交换机上没配相关路由吧,跨网段的时候是会存在路由问题的,如果你把VIP也设置为192.168.2.*应该就没这个问题了。
因为其他机器放问192.168.100.100的时候会默认去192.168.100.*的网段去寻找主机,所以就找不到具体的物理地址了。
还有个办法就是在2.x的主机上都配置静态路由,add route , 把192.168.100.100的路由配置到192.168.2.254(貌似这个是网关?)
建议还是换成2.x的地址更合理。
我们一般做地址规划的时候,200以内都是物理ip,200以上都给VIP预留,就是为了避免这种问题

所有我改了vip地址

VMware虚拟机1: 192.168.1.39

VMware虚拟机2: 192.168.1.40

想配置的VIP地址:192.168.111.88

改成

VMware虚拟机1: 192.168.1.39

VMware虚拟机2: 192.168.1.40

想配置的VIP地址:192.168.1.222

重启keepalived。发现正常了(#.#)

再回头看下arp
master看arp

[root@vmware39 keepalived]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.40 ether 00:0c:29:e6:6b:d5 C ens33
192.168.1.1 ether 14:30:04:a3:fe:d5 C ens33
192.168.1.33 ether 00:e0:4c:36:05:bf C ens33

slave看arp

[root@vmware40 keepalived]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 14:30:04:a3:fe:d5 C ens33
192.168.1.39 ether 00:0c:29:5d:57:e5 C ens33
192.168.1.222 ether 00:0c:29:5d:57:e5 C ens33
192.168.1.33 ether 00:e0:4c:36:05:bf C ens33

参考链接

https://blog.csdn.net/wade1010/article/details/88863780

https://www.cnblogs.com/benjamin77/p/8682360.html


mysql双主+keepalived架构的更多相关文章

  1. mysql双主+keepalived【转】

    简单原理 1.在两台服务器上分别部署双主keepalived,主keepalived会在当前服务器配置虚拟IP用于mysql对外提供服务 2.在两台服务器上分别部署主主mysql,用于故障切换 3.当 ...

  2. mysql双主+keepalived

    环境 OS: centos7Mysql 版本: mysql 5.7Keepalived: keepalived-1.2.20Mysql-vip:192.168.41.100Mysql-master1: ...

  3. MySQL 双主+keepalived 详细文档 M-M+keepalived

    1. 操作系统,系统环境,目结结构,用户,权限,日志路径,脚本2. 配置规范化 1.1 操作系统准备 操作系统 Kylin Linux release 3.3.1707 (Core)数据库版本 mys ...

  4. MySQL双主一致性架构优化

    一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个MySQL数据库集群中可以设置两个主库,并设置双向 ...

  5. Mysql双主 keepalived+lvs实现mysql高可用性

    MySQL复制 能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现 ...

  6. 【转】MySQL双主一致性架构优化

    [原文]https://www.toutiao.com/i6594414914838725133/ 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能 ...

  7. 004.MySQL双主+Keepalived高可用

    一 基础环境 主机名 系统版本 MySQL版本 主机IP Master01 CentOS 6.8 MySQL 5.6 172.24.8.10 Master02 CentOS 6.8 MySQL 5.6 ...

  8. centos7下mysql双主+keepalived

    一.keepalived简介 keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测 ...

  9. MySQL双主+keepalived实现高可用实现(热备)

    环境:centos6.7 最小化安装 192.168.100.152 master 主192.168.100.153 slave 从192.168.100.132 v_ip 浮动IP 配置ssh密码登 ...

随机推荐

  1. windwos下nginx 配置https并http强制跳转https

    windwos下nginx  配置https并http强制跳转https 一.首先配置证书文件 申请证书文件,这里就不做详细过程了,直接看证书文件结果. 这是两个证书的关键文件 打开ngxin下con ...

  2. Java List 类型转换

    java的类型转换让人忍不住在开始编码前骂一声  FUCK! 1  子类转父类 up List<SubClass> subs = ...; List<? extends BaseCl ...

  3. php内置函数分析之ucwords()

    PHP_FUNCTION(ucwords) { zend_string *str; char *delims = " \t\r\n\f\v"; register char *r, ...

  4. jquery 模态对话框传值,删除,新增表格行

    个人的练习代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. Ajax工作原理及C/S与B/S的区别

    工作原理 Ajax 基本上就是把 JavaScript 技术和 XMLHttpRequest 对象放在 Web 表单和服务器之间.当用户填写表单时,数据发送给一些 JavaScript 代码而不是直接 ...

  6. orm中 如何模糊匹配某一年的用户和某一事时间段的用户

    导入Q查询

  7. USACO 2006 November Gold Corn Fields

    USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...

  8. 20180708-Java基本数据类型

    public class PrimitiveTypeTest{ public static void main(String[] args){ //byte System.out.println(&q ...

  9. String Problem

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  10. SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]

    SLF4J:你的SLF4J绑定请求的1.6版不兼容[1.5.5,1.5.6] 在lib中,此时slf4j的版本是1.5.6,而slf4j-log4j的版本是1.6.由于版本的不兼容性,导致了这个错误. ...