Mysql 高可用解决方案

1.环境说明

操作系统:centos7.7
主服务器:node2(192.168.1.102)
从服务器:node3(192.168.1.103)
keepalived中虚拟ip(VIP):192.168.1.100

2.准备事项

  • 主库和从库数据库的版本一致
  • 把主库的数据同步给从库一份

3.主库配置

3.1 编辑MySQL配置文件,开启二进制日志

Mysql:

[root@node2 /]# vim /etc/my.cnf

Mariadb:

[root@node2 /]# vim /etc/my.cnf.d/server.cnf

在下面添加如下配置

binlog-do-db=testdb
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,与从数据库不重复即可
server-id=2

说明:binlog-do-db 需要同步的数据库 binlog-ignore-db 忽略同步的数据库

如果需要同步两个库的话,需要在添加一行

binlog-do-db=testdb2

3.2 重启mysql服务

Mysql:

[root@node2 /]# systemctl restart mysqld

Mariadb:

[root@node2 /]# systemctl restart mariadb

3.3 建立帐户并授权slave

[root@node2 /]# mysql -u root -proot

查看mysql的binlog是否开启

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

赋予用户FILE 权限,FILE 权限允许用户执行文件操作,如导入和导出数据。

mysql> GRANT FILE ON *.* TO 'root'@'%' IDENTIFIED BY 'root';

REPLICATION SLAVE 权限允许用户作为复制从服务器连接到主服务器并读取二进制日志,REPLICATION CLIENT 权限允许用户监控和管理复制过程

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'root'@'%' identified by 'root';

刷新权限

mysql> FLUSH PRIVILEGES;

3.4 查询master的状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      863 | testdb       | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

注意:File 与Position参数需要记录下来,从数据库配置需要使用

4.从数据库配置

4.1 添加mysql配置

[root@node3 mysql]# vim /etc/my.cnf

在下面添加如下配置

server-id=3

说明:从数据库只需要配置server-id 即可,从库的server-id和主库的server-id必须不一致

4.2 重启mysql服务

[root@node3 mysql]# systemctl restart mysqld

4.3 配置从库

[root@node3 mysql]# mysql -u root -proot 
mysql>change master to master_host='192.168.1.102',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=863;

说明:
master_port: mysql服务器端口号
master_user: 执行同步操作的数据库账户
master_password: 同步账号的密码
master_log_pos: 863 就是上面3.4中主数据库中 show master status 中的position对应的值
master_log_file: mysql-bin.000001 就是上面3.4中主数据库中 show master status中的file对应的值

4.4 启动从库复制功能

mysql> start slave;

4.5 检查从库复制功能状态

mysql> show slave status \G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.102Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 863Relay_Log_File: node3-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 863Relay_Log_Space: 527Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 2Master_UUID: 393a9867-cc77-11ed-b111-000c29991e40Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 
1 row in set (0.00 sec)

注意:Slave_IO_Running和Slave_SQL_Running这两个服务必须保证正常

至此,Mysql主从复制的配置已完成,可进行测试

5.高可用配置

  引入了keepalived,keepalived通过VIP虚拟IP的漂移实现高可用,在相同集群内发送组播包,master主通过VRRP协议发送组播包,告诉从主的状态。
  当我们通过keepalived虚拟出一个ip服务192.168.1.100,应用服务只需要将mysql配置信息更改为192.168.1.100的配置信息,192.168.1.100实际代理的实体服务器为192.168.1.102192.168.1.103
  当192.168.1.100实际代理192.168.1.102时,192.168.1.102服务出现故障后,keepalived通过自身机制,自动将192.168.1.103作为实际代理主服务器,不需要人工干预去修改mysql配置信息,从而实现了高可用

5.1 keepalived部署安装(主从操作一样)

[root@node2 software]$ wget -q http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
[root@node2 software]$ tar xf keepalived-1.2.13.tar.gz
[root@node2 software]$ yum install -y gcc openssl-devel popt-devel
[root@node2 software]$ cd keepalived-1.2.13
[root@node2 keepalived-1.2.13]# ./configure && make && make install
[root@node2 keepalived-1.2.13]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
[root@node2 keepalived-1.2.13]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@node2 keepalived-1.2.13]# mkdir /etc/keepalived
[root@node2 keepalived-1.2.13]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[root@node2 keepalived-1.2.13]# cp /usr/local/sbin/keepalived /usr/sbin/
[root@node2 keepalived-1.2.13]# chkconfig --add keepalived
[root@node2 keepalived-1.2.13]# chkconfig --level 345 keepalived on

5.2 keepalived.conf配置

[root@node2 keepalived-1.2.13]# vim /etc/keepalived/keepalived.conf
5.2.1 主库配置
global_defs {router_id Nginx_HA_1
}vrrp_script check_run {script "/home/mysql/mysql_check.sh"interval 2
}vrrp_sync_group VG1 {group {VI_1}
}vrrp_instance VI_1 {state MASTERinterface ens32virtual_router_id 12priority 100advert_int 1nopreempt#本机ip
unicast_src_ip 192.168.1.102
unicast_peer {#对象IP  发送vrrp包给备服务器192.168.1.103
}authentication {auth_type PASSauth_pass nginxha}track_script {check_run}virtual_ipaddress {192.168.1.100}
}
5.2.2 从库配置
global_defs {router_id Nginx_HA_1
}vrrp_script check_run {script "/home/mysql/mysql_check.sh"interval 2
}vrrp_sync_group VG1 {group {VI_1}
}vrrp_instance VI_1 {state BACKUPinterface ens32virtual_router_id 12priority 50advert_int 1nopreempt#本机ip
unicast_src_ip 192.168.1.103
unicast_peer {#对象IP  发送vrrp包给备服务器192.168.1.102
}authentication {auth_type PASSauth_pass nginxha}track_script {check_run}virtual_ipaddress {192.168.1.100}
}

说明:
1.interface ens32 ->ens32是linux网卡名称
2.主服务 priority 参数必须大于 从服务
3.script “/home/mysql/mysql_check.sh” mysql_check.sh是检测mysql是否正常的脚本 如果不正常就关闭keepalived;

5.3 编写检查Mysql脚本(mysql_check.sh)

[root@node2 keepalived-1.2.13]# vim /home/mysql/mysql_check.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; thenservice keepalived stop
fi

主服务器和从服务器节点都要一份

#授权与格式转换
[root@node2 ~]# chmod -R 777  /home/mysql/mysql_check.sh    
[root@node2 ~]# sed -i "s/\r//" /home/mysql/mysql_check.sh

5.4 启动并测试

主从都启动

[root@node2 ~]# systemctl start keepalived

启动后可以进行状态查看

[root@node2 ~]# service keepalived status
● keepalived.service - SYSV: Start and stop KeepalivedLoaded: loaded (/etc/rc.d/init.d/keepalived; bad; vendor preset: disabled)Active: active (running) since 一 2024-02-26 22:18:06 CST; 14s agoDocs: man:systemd-sysv-generator(8)Process: 2901 ExecStart=/etc/rc.d/init.d/keepalived start (code=exited, status=0/SUCCESS)Main PID: 2908 (keepalived)CGroup: /system.slice/keepalived.service├─2908 keepalived -D├─2910 keepalived -D└─2911 keepalived -D

查看vip绑定到哪台机器上

[root@node2 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:99:1e:40 brd ff:ff:ff:ff:ff:ffinet 192.168.1.102/24 brd 192.168.1.255 scope global noprefixroute ens32valid_lft forever preferred_lft foreverinet 192.168.1.100/32 scope global ens32valid_lft forever preferred_lft foreverinet6 fe80::348f:8ac3:b2c:809d/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@node3 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:8e:59:08 brd ff:ff:ff:ff:ff:ffinet 192.168.1.103/24 brd 192.168.1.255 scope global noprefixroute ens32valid_lft forever preferred_lft foreverinet6 fe80::d26d:7d7a:6daa:f99b/64 scope link noprefixroute valid_lft forever preferred_lft forever

至此,MySQL高可用配置完成,现在访问虚拟IP(192.168.1.100)即可访问到MySQL主节点(192.168.1.102)

6.问题点

6.1 在配置mysql从服务器的时候如果出现以下问题

在这里插入图片描述
首先确定两台机器中my.cnf中server-id配置不一样

然后将其中一台机器auto.cnf文件备份
mv auto.cnf auto.cnf.bak
接着重启那台mysql,会自动创建auto.cnf

6.2 在启动keepalived的时候如果启动不起来

在这里插入图片描述
按照提示查看keepalived的状态
在这里插入图片描述
需要给缺失的动态库文件做软连接libssl.so.1.1(openssl组件)
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

6.3 在安装keepalived的时候需要安装openssl-devel这个包,安装的时候可能会出现如下错误

在这里插入图片描述
先按照上述提示执行

yum install -y openssl-devel --setopt=protected_multilib=false

然后再对keepalived进行编译安装
如果出现以下错误
在这里插入图片描述
需要把node2上的openssl-devel这个包以及所有的依赖全部下载下来

yumdownloader --resolve --destdir /root/chrome/  openssl-devel
Yumdownloader:只下载不安装
--resolve :下载需要的依赖
--destdir : 指定下载存放的目录
然后把所有的rpm包拷贝到另一台mysql所在节点
scp -r chrome/ root@node3:/app/module/

在这里插入图片描述
然后在node3上进行安装所有的包

rpm -ivh ./*.rpm --nodeps --force

这样所需要的openssl-devel就已经安装成功
在这里插入图片描述

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

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

相关文章

ETL是什么

一、ETL概念 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform&#xff09;、加载&#xff08;load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#xff…

Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)

Gemma-SFT Gemma-SFT(谷歌, Google), gemma-2b/gemma-7b微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/gemma-sft全部weights要用fp32/tf32, 使用fp16微调十几或几十的步数后大概率lossnan;(即便layer-norm是fp32也不行, LLaMA就没有这个问题, …

2024程序员容器化上云之旅-第2集-Ubuntu-WSL2-Windows11版:接近深洞

故事梗概 Java程序员马意浓在互联网公司维护老旧电商后台系统。 渴望学习新技术的他在工作中无缘Docker。 他开始自学Vue3并使用SpringBoot3完成了一个前后端分离的Web应用系统&#xff0c;并打算将其用Docker容器化后用K8s上云。 3 挑选工具 马意浓画好架构图后&#xff…

安防视频监控平台EasyNVR级联视频上云管理平台EasyNVS,出现报错“i/o deadline reached”该如何解决?

上云网关管理平台EasyNVS视频综合管理系统具备汇聚与管理EasyGBS、EasyNVR等平台的能力&#xff0c;系统可以将接入的视频资源实现视频能力统一输出&#xff0c;并能进行远程可视化运维等管理功能&#xff0c;还能解决设备现场没有固定公网IP却需要在公网直播的需求。 有用户反…

SwiftUI中Toggle与Slider的使用

在SwiftUI中&#xff0c;Toggle和Slider是两个常用的UI控件&#xff0c;可以用来添加开关和滑块功能。 Toggle() Toggle控件用于在打开和关闭之间切换。可以使用Toggle来创建一个简单的开关&#xff0c;代码如下&#xff1a; State private var isOn falsevar body: some V…

牛客前端八股文

1.说说HTML语义化&#xff1f; 得分点&#xff1a;语义化标签、利于页面内容结构化、利于无CSS页面可读、利于SEO、利于代码可读 1&#xff0c;标签语义化是指在开发时尽可能使用有语义的标签&#xff0c;比如header&#xff0c;footer&#xff0c;h&#xff0c;p&#xff0c…

深圳市萨科微半导体有限公司

深圳市萨科微&#xff08;www.slkoric.com&#xff09;半导体有限公司一直研究新材料新工艺&#xff0c;不断推出新产品&#xff0c;驱动公司不断发展。最近萨科微slkor推出SL40T120FL系列IGBT单管&#xff0c;和CMOS运算放大器SLA333等产品&#xff0c;为新能源汽车、太阳能光…

汽车资讯|汽车资讯网站|基于Springboot的汽车资讯网站设计与实现(源码+数据库+文档)

汽车资讯网站目录 目录 基于Springboot的汽车资讯网站设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 &#xff08;1&#xff09;用户信息管理 &#xff08;2&#xff09;汽车品牌管理 &#xff08;3&#xff09;经销商信息管理 &#xff08…

大语言模型推理加速技术:模型压缩篇

原文&#xff1a;大语言模型推理加速技术&#xff1a;模型压缩篇 - 知乎 目录 简介 量化(Quantization) LLM.int8() GPTQ SmoothQuant AWQ 精简Attention 共享Attention参数 Multi-Query Attention Grouped-Query Attention 稀疏Attention Sliding Window Attenti…

Win10的Office中没有Mathtype

最近将Win10的Office更新到2021版本后&#xff0c;打开word后发现工具栏的Mathtype没有了&#xff0c;但是其他选项卡还在&#xff0c;上网搜索之后&#xff0c;发现原因在于Office 2021的Mathtype选项卡打开路径文件没有更新……。 所以我们需要将mathtype对应文件复制到新的…

怎样用眼精星将护照识别成结构化数据,并批量导出为Excel?

随着科技的不断发展&#xff0c;我们的生活和工作变得越来越便利。其中&#xff0c;眼精星票证识别系统作为一种高效的信息提取工具&#xff0c;在许多领域都得到了广泛应用。将护照信息快速准确地提取并整理成excel格式&#xff0c;对于许多行业来说都是非常有用的。那么&…

回归预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测

回归预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测预测效果基本描述程序设计参考资料 预测效果…

2024年sCrypt编程马拉松即将开幕

BSV区块链的建设者们&#xff0c;你们在哪&#xff1f;2024年sCrypt编程马拉松即将拉开帷幕&#xff01; 2024年3月16日至17日&#xff0c;我们将在旧金山市举办一场以比特币智能合约&#xff08;即 sCrypt&#xff09;和比特币通证&#xff08;如Ordinals&#xff09;相结合为…

kali安装ARL灯塔(docker)

1、root身份进入容器 ┌──(root㉿Kali)-[~/桌面] └─# su root ┌──(root㉿Kali)-[~/桌面] └─# docker 2、先更新再克隆 ┌──(root㉿Kali)-[~/桌面] └─# apt-get update …

十一、计算机视觉-膨胀操作

文章目录 前言一、什么是膨胀二、膨胀操作的实现1.引入库 三、膨胀的原理 前言 上节我们学习了腐蚀操作&#xff0c;本节我们讲一下膨胀操作&#xff0c;膨胀和腐蚀实际上是相反的操作。上节我们把云峰这2个字周围没用的像素去掉了&#xff0c;但是云峰这2个字也变细了&#x…

【Flutter/Android】新建项目,打开android 目录,报错红色以及开启 MultiDex 配置

1 报错红色问题。 单独打开 Flutter 项目下的 android 项目即可。 也就是说&#xff0c;你要一部分原生代码开发&#xff0c;你就需要自己把 android 项目单独出去做&#xff08;其实就相当于android 项目引用 Flutter的dart部分&#xff09;。也就是说&#xff0c;在 Flutter…

WPF 附加属性+控件模板,完成自定义控件。建议观看HandyControl源码

文章目录 相关连接前言需要实现的效果附加属性添加附加属性&#xff0c;以Test修改FontSize为例依赖属性使用触发器使用直接操控 结论 控件模板&#xff0c;在HandyControl的基础上面进行修改参考HandyControl的源码控件模板原型控件模板 控件模板触发器完整样式简单使用 结论 …

PROTEL

PROTEL是什么 Protel软件是由Altium公司&#xff08;原为Protel Technology公司&#xff09;开发的一款电子设计自动化&#xff08;EDA&#xff09;软件&#xff0c;主要用于电子电路设计和印制电路板&#xff08;PCB&#xff09;制作。 学习Protel 99 SE的大致过程 原理图文…

将仓库A中的部分提交迁移到仓库B中

结论&#xff1a; 使用git format-patchgit am即可实现 使用场景&#xff1a; 例如仓库A这里有5个提交记录&#xff0c;commitid1, commitid2, commitid3, commitid4&#xff0c;commitid5 仓库B想用仓库A中提交的代码&#xff0c;手动改比较慢&#xff0c;当改动较多的时候…

【linux进程信号(一)】信号的概念以及产生信号的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程信号 1. 前言2. 信号的基…