CentOS8 MySQL 主主模式+keepalived高可用环境搭建非docker版

2023-11-14

概述

采用了MySQL+KeepAlived实现MySQL高可用,旨在当主机发生宕机等异常情况时,使用备机的MySQL服务,以此保证系统服务的高可用。这套环境的搭建过程中,需要注意的事项如下:

1、MySQL是否数据同步(在大批量数据写入的情况下,数据没有同步将导致MySQL主从备份失效)

2、Keepalived产生的虚拟IP是否生效,是否可以正常切换。

环境说明

操作系统:CentOS8

MySQL:5.7.24

Keepalived: keepalived-2.0.18

准备两台以上的服务器或者虚拟机,保证它们相互之间能够正常通信

我准备了两台分别是:192.168.20.200 192.168.20.201

MySQL安装

1、下载MySQL的安装包

网络正常的情况下:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

网络不通的情况可采用ftp上传 tar包

2、安装部署

#解压
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
#重命名
mv mysql-5.7.24-linux-glibc2.12-x86_64  mysql5.7.24
#移动到/usr/local/,这里一般为软件安装的目录
mv mysql5.7.24/ /usr/local/
#进入mysql5.7.24的安装目录新建data目录
cd /usr/local/mysql5.7.24
#创建data目录
mkdir data
#更改mysql目录下的所有目录的权限及用户组,如果用户组不存在,请使用useradd mysql命令
chown -R mysql:mysql /usr/local/mysql5.7.24 
chmod 765 /usr/local/mysql5.7.24
#编译安装并初始化mysql,务必记住初始化输出日志末尾的密码(数据库管理员临时密码)
cd /usr/local/mysql5.7.24/bin
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql5.7.24/data --basedir=/usr/local/mysql5.7.24
​

3、编译完成,注意保存临时密码

4、编辑配置文件

vim /etc/my.cnf
#添加如下配置
[mysqld]
basedir=/usr/local/mysql5.7.24 #mysql默认安装在/usr/local/mysql
datadir=/usr/local/mysql5.7.24/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
character_set_server=utf8
log-bin=mysql-bin
server-id=200 #作为主从集群的唯一标识,用ip地址的最后一组数据标识

参数说明:

lower_case_table_names:是否区分大小写,1表示存储时表名为小写,操作时不区分大小写;0表示区分大小写;不能动态设置,修改后,必须重启才能生效:
character_set_server:设置数据库默认字符集,如果不设置默认为latin1
innodb_file_per_table:是否将每个表的数据单独存储,1表示单独存储;0表示关闭独立表空间,可以通过查看数据目录,查看文件结构的区别;

5、启动MySQL Server服务器

/usr/local/mysql5.7.24/support-files/mysql.server start
#添加软链接,并重启mysql服务
ln -s /usr/local/mysql5.7.24/support-files/mysql.server /etc/init.d/mysql 
ln -s /usr/local/mysql5.7.24/bin/mysql /usr/bin/mysql
service mysql restart

如果出现了 ERROR! MySQL server PID file could not be found! 错误。解决方案操作如下

#把SELINUX=enforcing改为SELINUX=disabled 重启MySQL服务
vim /etc/selinux/config

6、登录MySQL修改密码、开放远程连接

注意:输入的密码是图1保存的临时密码

#修改密码
set password for root@localhost = password('yourpass');
#开放远程连接
mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;
​
#设置开机自启动
#将服务文件拷贝到init.d下,并重命名为mysql
 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#赋予可执行权限
 chmod +x /etc/init.d/mysqld
#添加服务
 chkconfig --add mysqld
#显示服务列表
 chkconfig --list

至此,MySQL5.7.24 安装完成,在其他的服务器或虚拟机上按照同样的方式进行安装部署。注意配置文件中server-id不能相同。

主从集群配置

环境说明:

两台虚拟机:虚拟机IP192.168.20.200,192.168.20.201

使用数据库友好界面工具Navicat 连接两台MySQL服务器,进行主从配置。

192.168.20.200节点为201节点创建用户并授权

#创建用户
CREATE USER 'slave'@'192.168.20.201' IDENTIFIED BY '123456';
#为用户授权
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.20.201';
#刷新权限
flush privileges;  

结果如下: 记住File和Position两个参数

接下来在192.168.20.201节点进行配置:

配置步骤如下:

1、连接MySQL数据库

2、执行如下图所示的SQL脚本,注意需要修改Position和File

#配置201节点的master为200,master_user为我们授权的用户
CHANGE MASTER TO MASTER_HOST='192.168.20.200', MASTER_USER='slave',MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=488
#201开启slave工作模式
START SLAVE;

参数说明:

MASTER_HOST: MASTER节点的IP地址

MASTER_USER:    MASTER上MySQL创建的用户

MASTER_PASSWORD:  该用户所对应的密码

MASTER_LOG_FILE : MYSQL开启的日志类型

192.168.20.201节点进行同样的配置

执行show slave status;如果Slave_IO_Running 和 Slave_SQL_Running 均为yes,则主从备份搭建成功。

常用指令:

#查看master状态
show master status;
#开启slave模式
start slave;
#停止slave模式
stop slave;
​

MySQL主从备份测试

192.168.20.200 192.168.20.201 预期结果 测试结果
添加数据库 不做操作 201同步添加 与预期结果一致
不做操作 添加数据库 200同步添加 与预期结果一致
创建表 不做操作 201同步创建 与预期结果一致
不做操作 创建表 200同步创建 与预期结果一致
插入数据 不做操作 201同步插入 与预期结果一致
不做操作 插入数据 200同步插入 与预期结果一致

高可用双主热备宕机自动切换演练

通常说的「双机热备」是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。

VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。

安装Keepalived

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

cd keepalived-2.0.18 && ./configure --prefix=/usr/local/keepalived-2.0.18 

make && make install

cd /etc/ && mkdir keepalived

cp /home/install/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/keepalived

cp /home/install/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

vim /home/keepalived/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf 


cp /home/keepalived/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf


cp /home/install/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf


ln -s /home/install/keepalived-2.0.18/sbin/keepalived /usr/bin/


修改配置文件

global_defs {
        router_id hyq_master #唯一
}

vrrp_script chk_mysql {
        script "/etc/keepalived/mysql_check.sh"
        interval 2
        timeout 2
        fall 3
}

vrrp_instance VI_1 {
        state  BACKUP   # 必填,可以是MASTER或BACKUP

        interface ens33
        virtual_router_id 100
        priority 80 #启动的优先级,数字越大表示先启动。从机上的keepalived服务该值应小于80
        nopreempt
        advert_int 1

        unicast_src_ip 192.168.20.201
        unicast_peer {
                192.168.20.200
        }
        nopreempt
        authentication {
                auth_type PASS
                auth_pass 1111
        }

        track_script {
                chk_mysql #检查脚本
        }

        virtual_ipaddress {
                192.168.20.100 #对外提供的统一IP
        }

}

对应的Mysql脚本

#!/bin/bash
A=`ps -C mysqld --no-header |wc -l`
if [ $A -eq 0 ]; then
  killall keepalived
fi

启动Keepalived

service keepalived start

systemctl daemon-reload

查看Keepalived状态

当我们看到active(running) 表示Keepalived已经启动成功了,我们可以通过192.168.20.100来连接192.168.20.200上的MSYQL数据库。

MYSQL高可用服务测试

关闭192.168.20.200 上面的MySQL服务 ,200所在机器上的keepalived服务也应该停止,并且192.168.20.201上的keepalived服务开始工作,通过keepalived,当200所在的MySQL发生故障了就会切换并使用201上MySQL服务。这样就实现了简单的高可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CentOS8 MySQL 主主模式+keepalived高可用环境搭建非docker版 的相关文章

  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 单行的总和值?

    我有一个 MySQL 查询 它返回由一系列 1 和 0 组成的单行 它用于进度条指示器 我现在在代码中对它进行求和 但我尝试对查询中的值求和 并意识到我无法使用 SUM 因为它们有很多列 但只有一行 有没有办法可以在查询中自动求和 就像这样
  • 无法将 docker 映像推送到本地 OpenShift Origin 注册表

    目标是能够在我的笔记本电脑上获取 Docker 映像并将其推送到 OpenShift Origin 映像注册表 由oc cluster up 进行本地开发 目前尚不清楚我是否做错了什么 或者 Docker 或 OpenShift Origi
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • 应用程序移至 Docker 生产环境时 Flask-WTF CSRF 验证失败

    我刚刚为我一直在开发的 Flask 应用程序设置了生产环境 这个堆栈是 Windows Server 2012 R2 Hyper V VM Running Ubuntu 14 04 Docker 1 5 Running Containers
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c

随机推荐

  • CUDA安装详细教程

    一 CUDA下载 CUDA官网 二 CUDA具体安装步骤 1 检查电脑的NVIDIA版本 在cmd中输入nvidia smi 注意nvidia smi中的是驱动对应的cuda最高版本 只要此版本大于等于你安装的cuda即可 若命令nvidi
  • 机器学习笔试面试超详细总结(一)

    文章目录 1 判别模型和生成模型 2 最大概率分词 3 中文分词的基本方法 4 CRF 条件随机场 的特点 5 隐马尔可夫模型 HMM 时间复杂度及可以使用的数据集 6 在二分类问题中的评价方案 7 决策树特点 8 过拟合 9 异方差性 1
  • 关于gitlab的使用1——拉取代码

    1 快速上手 1 1注册 1 2登录 1 3选择 1 4选择所要拉取代码到idea的项目 1 5 选择索要拉取的模块 1 6选择clone按钮进行操作 1 7复制ssh或者http协议地址 1 8打开idea 1 9输入协议地址和保存路径
  • 关于Ajax跨域提交时session丢失的问题

    今天在工作中遇到了一个问题 就是当使用ajax和jsonp进行跨域时 每一服务器都会在cookie里set一个新的sessionId 会将原有的sessionId覆盖 也就是说客户端对于服务器来说始终处于未登录状态 我使用谷歌浏览器是没有问
  • R语言gg3D包绘制3D图形

    本次分享一个绘图还不错的包 gg3D 2018年1月公布 一 安装包 gg3D包目前 写该文章时 在R语言官方网站还不能找到并下载 但可以通过开源的托管平台gitHub下载 运行如下代码 install packages devtools
  • React Router中useRoutes()方法的使用

    运用场景 当我们需要路由权限控制点时候 对路由数组做一些权限的筛选过滤 这时需要把路由进行集中式管理 所谓的集中式路由配置就是用一个数组统一把所有的路由对应关系写好替换本来的Roues组件 便于管理路由 更加灵活 原来的路由写法 impor
  • STM32 基础系列教程 45 - FSMC_LCD_Touch

    前言 上一节我们完成了用 STM32F4的 FSMC接口来控制 TFTLCD的显示的操作 其实正点原子的探索者F4开发板带的屏幕支持触摸操作 笔者用的是4 3寸的电容触摸屏 本节我们继续实验 来完成基于STM32的触摸屏的实验 关于触摸屏的
  • Xshell的下载与安装

    引言 上一篇文章有介绍Windows子系统的安装与使用 安装Ubuntu桌面版确实可以直接使用Ubuntu子系统 但是Ubuntu桌面版的界面不是很好看 并且不能直接上传文件到服务器中 所以本篇章介绍SSH远程终端工具Xshell的下载与安
  • Springboot的application.properties或者application.yml环境的指定运行与配置

    Springboot的application properties或者application yml文件的配置 1 关于多个配置环境的指定运行 我们在主配置文件编写的时候 文件名可以是 application profile propert
  • 【k8s】ImagePullBackOff 错误处理

    文章目录 1 概述 2 问题复现 参考 1 概述 ImagePullBackOff错误比较简单 镜像下载失败 要么网络设置有问题 要么没有设置镜像源 另外一个比较隐蔽的问题是 当你在集群环境下 假设有3个节点 那么这三个节点都要设置镜像源
  • 物联网专业毕业设计题目大全

    文章目录 1 前言 2 选题分享 2 1 嵌入式方向 2 2 算法方向 2 3 移动通信方向 2 4 学长作品展示 3 选题技巧 3 1 如何避坑 重中之重 3 2 难度把控 3 3 题目名称 4 最后 1 前言 这是学长亲手整理的物联网相
  • k8s部署gitlab最新版并初始化和登录

    前提条件是已经部署了k8s环境 采用k8s部署gitlab作为devops的测试环境 更加简洁和方便 1 准备工作 1 1 创建nfs共享目录 在nfs服务器创建共享目录 部署的gitlib使用共享目录来进行持久化 这样不管在哪个节点运行g
  • 一个程序员的成长历程(持续更新)

    此处将是我学习编程的整个简单过程将持续记录只想在这里见证我一步步的成长 此时学习编程200天 2016 8 1 大一刚接触时的冲动和欣喜 认为语言种类积累学习越多我将走向成功 如今大一暑假 经过这一阶段对c语言与c 学习过后 喜欢上了算法
  • 使用windows自带的任务计划程序定时运行python程序(详细教程)

    最近写了一段微信定时发送消息的代码 但是这样需要一直将代码运行 现在运用windows自带的任务计划程序来实现代码自动运行 以达到定时发送消息的效果 将此记录下来方便下次使用时查找 1 打开搜索框搜索windows管理工具 并打开 2 在w
  • UML2面向对象分析与设计(第2版) 谭火彬 期末复习整理+部分答案【超实用】

    所用教材 谭火彬 编著 笔者纯手打整理 喜欢的话请点赞 关注我哦 UML相关的书就不能精简一点嘛 配套答案在公众号 书圈 内下载 也可以通过百度网盘链接 https pan baidu com s 1IPFlXBCVItuXrPZzY6qv
  • 程序员的自我修养--链接、装载与库笔记:目标文件里有什么

    编译器编译源代码后生成的文件叫做目标文件 目标文件从结构上讲 它是已经编译后的可执行文件格式 只是还没有经过链接的过程 其中可能有些符号或有些地址还没有被调整 其实它本身就是按照可执行文件格式存储的 只是跟真正的可执行文件在结构上稍有不同
  • 合并两数组(并排序)

    将两个数组num1和num2合并 升序排序 代码如下 import java util Arrays public class LangSuZu public int Hebing int num1 int num2 int num3 ne
  • 操作系统4小时速成:进程管理复习重点,进程,线程,处理机调度,进程同步,死锁

    操作系统4小时速成 进程管理复习重点 进程 线程 处理机调度 进程同步 死锁 2022找工作是学历 能力和运气的超强结合体 遇到寒冬 大厂不招人 可能很多算法学生都得去找开发 测开 测开的话 你就得学数据库 sql oracle 尤其sql
  • Altium Designer(五)光耦元件模型的创建

    软件 Altium Designer 16 往期博客 AD 一 AD的工程创建 AD 二 电阻 电容 模型的创建 AD 三 IC类元件模型创建 AD 四 排针类元件模型的创建 AD 五 光耦元件模型的创建 AD 六 已有元件库的调用 AD
  • CentOS8 MySQL 主主模式+keepalived高可用环境搭建非docker版

    概述 采用了MySQL KeepAlived实现MySQL高可用 旨在当主机发生宕机等异常情况时 使用备机的MySQL服务 以此保证系统服务的高可用 这套环境的搭建过程中 需要注意的事项如下 1 MySQL是否数据同步 在大批量数据写入的情