到这一步的时候, 是主备部署已经处理好, 请关注:mysql主备部署[高可用]

这次使用的是keepalived-1.2.22.tar.gz版, 官网地址:keeplived官网

笼统知识请自行查询百度下面开始步骤

第一步:安装keepalived-1.2.22

解压
tar -zxvf keepalived-1.2.22.tar.gz 编译
cd keepalived-1.2.22
./configure --prefix=/usr/local/keepalived/(新建文件夹喔)
安装
make && make install 服务脚本
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
配置文件
cp /usr/local/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf
服务
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived 加入服务
chkconfig --add keepalived
chkconfig keepalived on service keepalived start #启动服务
service keepalived stop #停止服务
service keepalived restart #重启服务

上面的额操作主备机器都需要安装

第二步:配置文件

master:keepalived.conf

! Configuration File for keepalived

global_defs {
router_id HA_MySQL
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.88.88
}
} virtual_server 192.168.88.88 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.75.61 3306 {
weight 3
notify_down /etc/keepalived/down.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

slave:keepalived.conf

! Configuration File for keepalived

global_defs {
router_id HA_MySQL
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.88.88
}
} virtual_server 192.168.88.88 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.75.62 3306 {
weight 3
# echo"62....1"
notify_down /etc/keepalived/down.sh
# notify_up /etc/keepalived/up.sh
# echo"62....2"
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

down:down.sh

#!/bin/bash
pkill keepalived

第三步:测试

主:192.168.75.61
备:192.168.75.62 主:
[root@qwzs08 log]#service mysqld start
[root@qwzs08 log]#service keeplived start 保证已经启动成功!
[root@qwzs08 log]#ip addr 会显示出下面的vip(我上面配置文件把master放在61) 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
link/ether 00:50:56:89:a3:28 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.61/24 brd 192.168.75.255 scope global eth0
inet 192.168.88.88/32 scope global eth0
inet6 fe80::250:56ff:fe89:a328/64 scope link
valid_lft forever preferred_lft forever 表示vip正常 此时在备机
[root@qwzs07 log]#ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
link/ether 00:50:56:89:cb:a6 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.62/24 brd 192.168.75.255 scope global eth0
inet6 fe80::250:56ff:fe89:cba6/64 scope link
valid_lft forever preferred_lft forever 是没有vip的, 恭喜您!配置成功!

第四步:漂移

模拟主机宕机
ps aux | grep mysqld root 1176 0.0 0.0 11336 1408 ? S 15:38 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql3306.pid
mysql 1591 7.1 1.8 2736136 597708 ? Sl 15:38 3:19 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/mysql3306.err --pid-file=/usr/local/mysql/data/mysql3306.pid
root 1978 0.0 0.0 103248 844 pts/0 S+ 16:24 0:00 grep mysql kill -9 1176 1591 此时,主机的mysql挂掉了,您怎么确定是有没有漂移呢?
查一下vip
ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
link/ether 00:50:56:89:cb:a6 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.61/24 brd 192.168.75.255 scope global eth0
inet6 fe80::250:56ff:fe89:cba6/64 scope link
valid_lft forever preferred_lft forever 已经没有了
再去备机查一下vip
ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
link/ether 00:50:56:89:a3:28 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.62/24 brd 192.168.75.255 scope global eth0
inet 192.168.88.88/32 scope global eth0
inet6 fe80::250:56ff:fe89:a328/64 scope link
valid_lft forever preferred_lft forever look, 漂过来了 现在切换到主机把的mysql和keeplived开启 此时主机的服务已经开起来了, 但是vip并没有漂过去, 这就是nopreempt的作用, 防止脑裂 这时候加入备机slave挂掉, vip就会漂移到主机master, 实现高可用主从切换

此时如果能实现漂移就是成功了, 下面是我遇到的问题

1.keepalived执行后日志狂刷, 2.脚本并没有执行(down.sh),具体情况就是mysql挂掉后,keeplived并没有自杀,导致vip漂移失败, 但是手动关闭keeplived后会实现漂移, 原因就在于down脚本没有得到执行。

日志报错:

Nov 21 16:05:27 qwzs08 abrt[13378]: Not saving repeating crash in '/usr/sbin/keepalived'
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: IPVS: Can't initialize ipvs: Protocol not available
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.75.62 added
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.75.62 added
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: Registering Kernel netlink reflector
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: Registering Kernel netlink command channel
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
Nov 21 16:05:27 qwzs08 Keepalived_healthcheckers: Configuration is using : 9635 Bytes

很纠结,经过排查,原因是ip_vs模块系统默认没有自动加载

执行命令:

查看
lsmod | grep ip_vs
(如果没有任何输出则表示ip_vs模块并没有被内核加载) 手动加载
modprobe ip_vs modprobe ip_vs_wrr

然后再看日志已经恢复正常

此时再查看ip_vs

lsmod | grep ip_vs 
ip_vs_wrr               2179  1
ip_vs 115643 3 ip_vs_wrr
libcrc32c 1246 1 ip_vs
ipv6 321422 68 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6

ok!

mysql主备切换[高可用]的更多相关文章

  1. mysql主备部署[高可用]

    配置方案 master:192.168.99.61 service-id:61 slave:192.168.99.62 service-id:62同步账号:sync   同步密码:sync 主:192 ...

  2. mysql主备切换canal出现的问题解析

    通过配置VIP,在进行主备切换时,出现的报错信息: 1.当主备节点当前binlog文件名称相同时,原主节点的position小于主备切换后的position,出现如下报错: 2020-07-02 15 ...

  3. KeepAlived主备模型高可用LVS

    部署前准备: 1.至少4台主机:两个Director(HA1,HA2),两个Real Server(RS1,RS2) 2.Director之间时间必须同步,且关闭各主机的防火墙和Selinux 3.出 ...

  4. 25 | MySQL是怎么保证高可用的?

    在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能 ...

  5. Mysql双主互备+keeplived高可用架构介绍

    一.Mysql双主互备+keeplived高可用架构介绍 Mysql主从复制架构可以在很大程度保证Mysql的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力.但是在这种 ...

  6. Mysql双主互备+keeplived高可用架构(部分)

    一.Mysql双主互备+keeplived高可用架构介绍 Mysql主从复制架构可以在很大程度保证Mysql的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力.但是在这种 ...

  7. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  8. Mysql双主双从高可用集群的搭建且与MyCat进行整合

    1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...

  9. MySQL 复制 - 性能与扩展性的基石 4:主备切换

    一旦使用 MySQL 的复制功能,就很大可能会碰到主备切换的情况.也许是为了迭代升级服务器,或者是主库出现问题时,将一台备库转换成主库,或者只是希望重新分配容量.不过出于什么原因,都需要将新主库的信息 ...

随机推荐

  1. 为VS定制一个自己的代码生成器 - 自定义工具开发

    自定义工具开发 为VS定制一个自己的代码生成器 如何在Visual Studio中开发自己的代码生成器插件 你必须懂的 T4 模板:深入浅出 Regasm组件注册工具使用方法 Regasm 注册C# ...

  2. Kettle 4.2源码分析第一讲--Kettle 简介

    Pentaho Data Integration(PDI)简介 1. PDI结构简介 图 1‑1 PDI核心组件 Spoon是构建ETL Jobs和Transformations的工具.Spoon可以 ...

  3. ElasticSearch报 EsThreadPoolExecutor[search, queue capacity = 1000, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@c0efba

    ElasticSearch报以下错误的解决办法: "type": "es_rejected_execution_exception", "reason ...

  4. MySql操作语句集锦

    Windows服务 -- 启动MySQL    net start mysql-- 创建Windows服务    sc create mysql binPath= mysqld_bin_path(注意 ...

  5. this与$scope

    最近在Angular项目中遇到关于controller内使用$scope&this 暴露数据的问题,下面来分析一下: "controller as" 是Angular在1. ...

  6. Java-使用IO流对大文件进行分割和分割后的合并

    有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...

  7. win10 + cuda(v9.0) 安装TensorFlow-gpu版

    之前在实习公司的电脑上装过TensorFlow-gpu,那时候很快就装好了.但在自己的笔记本上装时,却搞了很久... 一部分原因是因为用校园网下载cuda toolkit 和cudnn ,总是在最后时 ...

  8. iOS 第三方框架-MBProgressHUD

    MBProgressHUD提示框官网地址:https://github.com/jdg/MBProgressHUD 官网里已经提供了足够多的例子供我们使用,但在实现开发中,我们用到的只是其中的一小部分 ...

  9. 实体框架 Code First

    原文:https://msdn.microsoft.com/zh-cn/en-zn/data/jj591621

  10. js实现网页tab选项卡切换效果

    <style> *{margin:0;padding:0;} body{font-size:14px;font-family:"Microsoft YaHei";} u ...