通过keepalived实现高可用

news2024/11/16 3:34:49

192.168.184.128  主/heartbeat1

192.168.184.129  从/heartbeat2

192.168.184.131  漂移地址

 主备基础:需要在128和129服务器上,搭建mysql主从复制

  1. 环境基础配置

128、129操作关闭防火墙

# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# systemctl stop firewalld

128上操作

# hostnamectl set-hostname db1 修改主机名

# vim /etc/hosts 

192.168.184.128 db1

192.168.184.129 db2

129上操作

#hostnamectl set-hostname db2

# vim /etc/hosts 

192.168.184.128 db1

192.168.184.129 db2

(1)主从上都按照keepalived(两台均操作以下安装步骤)

A:MySQL Master    192.168.184.128
     B:MySQL Slave      192.168.184.129
       VIP               192.168.184.131

# wget  http://www.keepalived.org/software/keepalived-1.2.13.tar.gz

# yum -y install gcc gcc-c++ autoconf automake openssl openssl-devel

# tar -zxvf keepalived-1.2.13.tar.gz

# cd keepalived-1.2.13

# ./configure && make && make install

# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

# mkdir /etc/keepalived

# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

# cp /usr/local/sbin/keepalived /usr/sbin/

# chkconfig --add keepalived

# chkconfig --level 345 keepalived on

(2)修改主的keepalived的配置文件

注意的是:

nopreempt这个参数只能用于state为BACKUP的情况,所以在配置的时候要把master和backup的state都设置成BACKUP,这样才会实现keepalived的非抢占模式!

也就是说:

* 当state状态一个为MASTER,一个为BACKUP的时候,加不加nopreempt这个参数都是一样的效果。即都是根据priority优先级来决定谁抢占vip资源的,是抢占模式!

* 当state状态都设置成BACKUP,如果不配置nopreempt参数,那么也是看priority优先级决定谁抢占vip资源,即也是抢占模式。

* 当state状态都设置成BACKUP,如果配置nopreempt参数,那么就不会去考虑priority优先级了,是非抢占模式!即只有vip当前所在机器发生故障,另一台机器才能接管vip。

  即使优先级高的那一台机器恢复正常后也不会主动抢回vip,只能等到对方发生故障,才会将vip切回来。

Keepalived+mysql双主一般来说,中小型规模的时候,采用这种架构是最省事的。 在master节点发生故障后,利用keepalived的高可用机制实现快速切换到备用节点。

在这个方案里,有几个需要注意的地方:

1、采用 keepalived 作为高可用方案时,两个节点最好都设置成 BACKUP模式,避免因为意外情况下(比如 脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;

2、把两个节点的 auto_increment_increment(自增步长)和 auto_increment_offset(自增起始值)设成不同值。其目的是为了避免master 节点意外宕机时,可能会有部分 binlog 未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原先master上冲突了,因此一开始就使其错开;当然了,如果有合适的容错机制能解决主从自增ID 冲突的话,也可以不这么做;

3、slave 节点服务器配置不要太差,否则更容易导致复制延迟。作为热备节点的 slave服务器,硬件配置不能低于 master 节点;

4、如果对延迟问题很敏感的话,可考虑使用 MariaDB 分支版本,或者直接上线 MySQL 5.7 最新版本,利用多线程复制的方式可以很大程度降低复制延迟。

# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   router_id Master          #路由名称

}

vrrp_script check_run_mysql
{

    script "/etc/keepalived/bin/mysql.sh"     #检查mysql状态脚本

interval 2     #每两秒检测一下

}

vrrp_instance VI_1 {

state BACKUP     #都设置为BACKUP,设置非抢占模式,防止主库故障重起之后数据不同步,就进行VIP飘移

nopreempt    

    interface ens33         #网卡名称

    virtual_router_id 51  

    priority 100                  #优先级,从库要比主库低

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}
track_script {

    check_run_mysql     #执行mysql监控服务脚本

}

    virtual_ipaddress {  

        192.168.184.131/24         #vip地址

    }

}

virtual_server 192.168.184.131 3306 {

    delay_loop 5         #每5秒检查一次

    #lb_algo rr

    #Lb_kind DR

    persistence_timeout 50

    protocol TCP

    

    real_server 192.168.184.128 3306 {         #P为当前主机IP,3306为数据库端口

        weight 1

        notify_down  /etc/keepalived/bin/mysql.sh

        TCP_CHECK {

        connect_timeout 3           #连接超时时间

        nb_get_retry 3                 #重连次数

        delay_before_retry 3         #重连间隔时间

        connect_port 3306         #检查端口

        }

    }

}

编写监测脚本:监测到mysql挂掉了,将keepalived进程关掉

# mkdir /etc/keepalived/bin/

# vim  /etc/keepalived/bin/mysql.sh

#!/bin/bash

STATUS=`/usr/local/mysql/bin/mysql -uroot -p123456 -e "show databases" |grep -c Database`

if      [ $STATUS -eq 0 ];then

        systemctl stop keepalived

fi

# chmod +x /etc/keepalived/bin/mysql.sh

(3)修改从的keepalived的配置文件

# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   router_id Slave  

}

vrrp_script check_run_mysql
{

    script "/etc/keepalived/bin/mysql.sh"     

interval 2   

}

vrrp_instance VI_1 {

state BACKUP

nopreempt      

    interface ens33

    virtual_router_id 51  

    priority 90                  #要比主库的小

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

    check_run_mysql    

}

    virtual_ipaddress {  

        192.168.184.131/24

    }

}

virtual_server 192.168.184.131 3306 {

    delay_loop 6

    #lb_algo rr

    #lb_kind DR

    persistence_timeout 50

    protocol TCP

    

    real_server 192.168.184.129 3306 {         #从的地址

        weight 1

        notify_down /etc/keepalived/bin/mysql.sh

        TCP_CHECK {

        connect_timeout 3  

        nb_get_retry 3

        delay_before_retry 3

        connect_port 3306

        }

    }

}

编写监测脚本:监测到mysql挂掉了,将keepalived进程关掉

# mkdir /etc/keepalived/bin/

# vim  /etc/keepalived/bin/mysql.sh

#!/bin/bash

STATUS=`/usr/local/mysql/bin/mysql -uroot -p123456 -e "show databases" |grep -c Database`

if      [ $STATUS -eq 0 ];then

        systemctl stop keepalived

fi

# chmod +x /etc/keepalived/bin/mysql.sh

(4)主从上分别启动keepalived

# systemctl start keepalived

# ip a查看地址

只有主上会产生vrrp地址

(5)测试高可用

关掉主库mysql

# service mysqld  stop 停掉主mysql

#ip a 查看ip没有虚拟ip

从库上查看ip可以看到虚拟vip

 

再启动主库mysql、keepakived

# service mysqld start

# systemctl start keepalived

# ip a 主重新产生vip

当切换到从上面,需要限制从为只读,以免恢复主后,主从复制数据出现问题

Mysql>flush tables with read lock; 全表为只读,包括超级用户root

Mysql>unlock tables; 解除限制,为读写

Mysql>set global read_only=0;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内卷加速的手机市场,如何寻找新契机?

从此前争相入局的一亿像素摄像头,到不断加码的快充、屏幕刷新率,再到眼下不那么成熟却“硬要上阵”的屏下摄像头技术,原本应该通过技术创新提升用户体验的手机行业,变得越来越内卷,业内人士分析认为手机内卷造成消费者…

【阶段二】Python数据分析Pandas工具使用04篇:数据预处理:数据的汇总

本篇的思维导图: 数据预处理:数据的汇总 数据透视表pivot_table()函数 透视表功能该功能的主要目的就是实现数据的汇总统计。pandas模块中的pivot_table函数就是实现透视表功能的强大函数。 代码 import numpy as

linux解压

linux中主要有.zip,.gz,.bz2及.tar.gz和.tar.bz2等压缩格式 一、.zip,.gz,.bz2格式 .zip格式语法: zip 压缩文件名 源文件 #压缩文件 (也能压缩目录,但只会压缩第一个目录,目录中…

牛客网C++项目-Linux高并发服务器开发之第一章:Linux系统编程入门 学习笔记

1.1 Linux 开发环境搭建 由于仅是开发环境的搭建,所以只简单记述一下步骤 必备软件: Ubuntu 18.04 XShell-用于远程登录,使用SSH协议,TCP连接,端口号22 XFtp,本次实验中尚未用到 Visual studio code&a…

什么是蒙特卡洛学习,时序差分算法

在学习的过程中经常会看到蒙卡特洛和时序差分算法,到底这两个是指什么,今天稍微整理下,开始吧。蒙卡特洛1.1 蒙卡特洛方法蒙特卡罗方法又叫做统计模拟方法,它使用随机数(或伪随机数)来解决计算问题。比如上图,矩形的面…

Python全栈开发(二)——python基础语法(二)

我们昨天说了python的数据类型,今天说说python的缩进规则和函数、python的顺序语句结构,条件和分支语句以及循环语句。缩进不规范会报错(IndentationError: unexpected indent),python的函数使用,从定义到实…

操作系统——进程之处理机调度

操作系统——进程之处理机调度一、处理机调度的本概念和层次1、高级调度(作业调度)2、中级调度(内存调度)3、低级调度(进程调度)二、进程调度的时机、切换与过程、方式1、进程调度的时机2、进程调度的方式3…

ATAC-seq分析:比对(3)

1. 质控 在比对之前,我们建议花一些时间查看 FASTQ 文件。一些基本的 QC 检查可以帮助我们了解您的测序是否存在任何偏差,例如读取质量的意外下降或非随机 GC 内容。 2. Greenleaf 在本节中,我们将稍微处理一下 Greenleaf 数据集。 我们将处理…

新一代OPC UA解决方案,快速实现IT与OT融合

一、OPC数据采集难题 OPC技术在现今的工业自动化中应用越来越广泛,为现场工业控制设备与控制软件之间的数据交换提供了统一的数据存储规范。但随着工业的不断发展,OPC数据采集出现了一些难题。例如,在传统OPC在远程连接时候一定会面临的DCOM…

Qt扫盲-Qt Designer配置QSS交互使用

Qt Designer配置QSS交互记录一、概述二、用法1. 选择2. 修改1. 菜单区2. 编辑区3. 在底部功能区4. 查询一、概述 Qt Designer {Qt Designer }是一个很好的工具来预览样式表、设置样式的效果,而且是所见即所得,用界面这种开发更快些。 我一般是在Qt Des…

【编译基础】new delete详解及内存泄漏

内存的使用,一文不太够 文章目录C语言1.new关键字2.delete关键字C语言1.malloc关键字2.free关键字区别内存泄漏参考博客😊点此到文末惊喜↩︎ C语言 1.new关键字 作用:C通过new关键字动态分配内存三种用法 plain new:最朴素的n…

JdbcUtils工具类的优化升级——通过配置文件连接mysql8.0

我之前的博文JDBC重构——JdbcUtils工具类的封装写了一个JdbcUtils的工具类,但是这个类也会有一个问题:如下图所示:连接数据库的代码在java中是写死的,如果我们想要换一个数据库进行连接,就会很麻烦,这时我…

嵌入式HLS 案例开发手册——基于Zynq-7010/20工业开发板(2)

目 录 2 led_flash 案例 19 2.1 HLS 工程说明 19 2.2 编译与仿真 20 2.3 IP 核测试 23 3 key_led_demo 案例 23 3.1 HLS 工程说明 23 3.2 编译与仿真 25 3.3 IP 核测试 27 前 言 本文主要介绍 HLS 案例的使用说明,适用开发环境: Windows 7/10 64bit、Xilinx Vivado…

从零搭建的前后端完整的直播网页方案

前言:由于前段时间刚租了台服务器打算自己玩玩,随想首页或者哪哪个页面挂个我个人的直播间应该还挺有趣的。遂探索如何在我的网站上弄一个直播。三下五除二,清清爽爽,看完此文5分钟即可直播。 整体思路 最简单直观的图解。 由上图…

VB2019创建、使用静态库(同样的使用动态库dll)

库: 二进制可执行文件,操作系统载入内存执行,将不怎么更改的底层打包成库后可以使整体编译更改,并且实现对底层的保密(不对外或员工开放)。库有两种:静态库(.a、.lib)和动…

【国科大模式识别】第二次作业(阉割版)

【题目一】最大似然估计也可以用来估计先验概率。假设样本是连续独立地从自然状态 ωi\omega_iωi​ 中抽取的, 每一个自然状态的概率为 P(ωi)P\left(\omega_i\right)P(ωi​) 。如果第 kkk 个样本的自然状态为 ωi\omega_iωi​, 那么就记 zik1z_{i k}1zik​1, 否则 zik0z_{i…

【无标题】测试新发文章

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Spring之后处理器

目录 一:概述 二:案例演示 三:Bean的后处理器----BeanPostProcessor 案例:对Bean方法进行执行时间日志增强 四:Spring ioc整体流程总结 一:概述 Spring的后处理器是Spring对外开发的重要扩展点、允许我…

量子计算机是什么?量子计算机和传统计算机之间有什么区别?

1.突破1000量子比特大关! 2022年11月9日的IBM年度量子峰会上,IBM宣布了Osprey在量子硬件和软件方面取得的突破性进展,同时推出了“鱼鹰”(Osprey)芯片。“鱼鹰”是全球迄今为止量子比特最多的量子计算机,而…

软考初级信息处理

软考初级信息处理技术员还是比较简单的,只要多刷题,实操也很重要的!备考时间讲究高效哦! 1、考试安排: 2、关于信处的考点分析: 上午考试: 下午考试: 3、信处如何备考:…