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版 的相关文章

  • 在 Windows 上使用 docker compose 进行卷绑定

    我最近在 Windows 10 上升级了 Docker Toolbox 现在我的卷挂载不再起作用 我已经尝试了一切 这是当前的挂载路径 volumes C Users Joey Desktop backend var www html 我收
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • Navicat utf8 不适用于 mysql 数据库

    我目前正在尝试合并两个不同步的表达式引擎数据库之间的数据更改 为此我选择使用 navicat 该网站在模板中大量使用希腊字符集 当我在 phpmyadmin 中查看希腊语表字段数据时 我按预期看到了希腊语字符 当我将它们加载到 Navica
  • 如何将值从 android 传递到 php Web 服务并检索它?

    我正在尝试将一个值传递给我的 php web 服务 我已经使用此代码来传递 名称 值 private class MyAsyncTask extends AsyncTask
  • 捕获动态表中 HTML 元素的值

    我有从数据库生成的以下动态表
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 将程序存储在 phpMyAdmin 中

    我必须将存储过程添加到 MySQL 数据库 问题是托管提供php我的管理员来管理数据库 我在网上搜索了一下 想法是运行创建程序的MySQL本机语句 但由于程序的代码通常可能有 我们必须更改 MySQL 中的分隔符 php我的管理员没有这个选
  • MySql JOINS 的优点/缺点

    当我从多个表中选择数据时 我经常使用 JOINS 最近我开始使用另一种方式 但我不确定从长远来看会产生什么影响 例子 SELECT FROM table 1 LEFT JOIN table 2 ON table 1 column table
  • php echo 不工作

    我的代码似乎不起作用 单选按钮出现 但旁边什么也没有 似乎 mysql fetch array 由于某种原因无法工作 因为我已经玩过代码并反复测试它以查找代码似乎遇到的位置出现问题并停止工作 有人可以告诉我出了什么问题吗 欢呼声我是新手 最
  • MySQL:查询中周数的周日期范围

    我有一个看起来像这样的数据库表 id clock info 1 1262556754 some info 2 1262556230 some other info 3 1262556988 and another 4 1262555678
  • 如何从主机连接到 Docker Postgres 容器

    我按照以下说明搭建了一个 Rails 开发环境https docs docker com compose rails https docs docker com compose rails 它可以工作 但我无法从主机连接到 Postgres
  • 尝试通过比较不同的表从 SQL 查询输出正确的值

    我对 SQL 非常陌生 需要有关如何使用正确的查询完成此任务的帮助 我有 2 张桌子需要使用 表 TB1 有 id Name 1 bob 2 blow 3 joe 表 TB2 有 compid property 1 bob 2 blow 我
  • 为什么涉及用户变量的表达式的求值顺序未定义?

    From MySQL手册 http dev mysql com doc refman 5 7 en user variables html以下查询的输出不保证始终相同 SET a 0 SELECT a AS first a a 1 AS s
  • 如何在php中正确显示另一种语言的mysql表数据

    我有一个 mySQL 表 其中一列中的数据采用英语以外的语言 波斯语 当我在表中输入数据时 它会正确显示 但是当我想在 php 文件中显示数据时 它会显示如下 好吧 我应该怎么做才能以正确的形式显示数据 由于我经常使用 非英语 字符 因此要
  • PHP实现的机票预订系统

    如何防止预订系统中的座位被重复预订 我正在用 PHP 和 MYSQL 制作一个航空旅行预订系统模型作为一个项目 我有一个小问题 仅在付款后 门票和座位详细信息才会永久存储在此处 座位号在付款前分配 假设人 1 预订了飞机上的座位 x 并支付
  • 如果一列没有值,MySQL 返回最大值或 null

    我尝试获取 mysql select 的最大值 但如果有一行不包含时间戳 则希望将其设置为 null empty 0 表统计数据 简化 ID CLIENT ORDER DATE CANCEL DATE 1 5 1213567200 2 5
  • 无法在 Google Cloud Run 上部署 Ubuntu 20.04 Docker 容器

    我正在尝试通过 Google Cloud Run 部署一个基于 Ubuntu 20 04 的简单的基于 Python 的 Docker 容器 我已经成功构建了映像 但是当我尝试部署 Cloud Run 服务时 出现以下错误 省略了项目详细信
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • 如何禁用docker容器的root访问权限?

    我们有离岸开发人员 他们希望在本地运行我们的服务器 但出于安全原因 我们不想向他们提供服务器代码 所以一个解决方案是他们运行一个 Docker 容器 这是我们服务器的独立版本 所以他们这边没有复杂的设置 问题在于 始终可以以 root 身份
  • WHERE 条件基于 PK 的查询是否建议使用“LIMIT 1”?

    我正在查询 mySQL 数据库以检索 1 个特定行的数据 我使用表主键作为 WHERE 约束参数 E g SELECT name FROM users WHERE userid 4 userid 列是表的主键 在 mySQL 语句末尾使用

随机推荐

  • 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是否数据同步 在大批量数据写入的情