十二、MySQL 主从复制+高可用+读写分离

目录

一、mysql+keeplived实现高可用+LVS负载均衡

一、什么是高可用

二、为什么要用高可用

三、高可用的作用

四、keeplived 是什么?它用在哪里

五、安装mysql以及配置主从

六、keepalived安装

1、配置 单VIP 实现高可用 master上配置

2、backup上的配置

3、LVS配置 实现负载均衡:见下图

二、使用Mysqlrouter搭建MySQL的读写分离功能

1、简介:

2、配置


一、mysql+keeplived实现高可用+LVS负载均衡

一、什么是高可用

        就是指系统或功能提供者在经过设计后,该系统或功能能够长时间的保持正常状态运行的能力

二、为什么要用高可用

        为了防止单点故障,主要是因为现在IT系统对于稳定性具有较高的要求,一旦系统出现故障,将会影响到业务的正常运行,甚至会导致数据丢失,出现严重损失,所以确保系统能够稳定运行,保证了业务的连续与数据的可靠性。

三、高可用的作用

        1、提高系统的稳定性

        2、提高业务的可靠性

        3、改善用户体验

        4、降低维护成本

四、keeplived 是什么?它用在哪里

        官网:Keepalived for Linux

keeplived是开源软件,提供了一个简单而高效的方式来实现负载均衡和故障转移。

主要用户一下几个方面:

        1、实现负载均衡:它使用不通的算法,例如轮询、加权轮询、最少连接数等,将客户端请求平均分到多个后端服务器上,达到负载均衡

        2、提高系统的可用性:可以对堕胎服务器进行监视,并自动切换到另一个可用的节点来避免单点故障。

        3、构建高可用性架构:通过配合虚拟IP、虚拟路由(VRRP)等,可以构建高可用性架构,保证服务的连续性和稳定性。

五、安装mysql以及配置主从

        安装和配置信息详见:十、MySQL主从架构配置-CSDN博客

六、keepalived安装

        keepalived 的详细安装在这里不在详解,会单独写一篇文章详解其参数。

[root@mysqlrouter-1 mysqlrouter]# yum install keepalived -y
然后修改配置文件

1、配置 单VIP 实现高可用 master上配置

vim /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_DEVEL
#   vrrp_strict       # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
}

 
vrrp_instance VI_1 {    # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
    state MASTER        # 做master角色
    interface ens33     # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
    virtual_router_id 199  # 虚拟路由器ID 199表示的是编号,MASTER 和 BACKUP 必须是一致的。
    priority 160          # 优先级 数字越大就越容易成为master
    advert_int 1          # 宣告消息的时间间隔 为1s
    authentication {
        auth_type PASS    # 密码认证 password
        auth_pass 1111    # 具体密码 可以不用修改
    }
    virtual_ipaddress {   # vip 虚拟ip地址 可以配置多个
        192.168.134.199     # 配置的vip
    }

}

2、backup上的配置

cat keepalived.conf 

global_defs {  
   router_id LVS_DEVEL
  # vrrp_strict       # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
}
 
vrrp_instance VI_1 {    # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
    state BACKUP        # 做backup角色
    interface ens33     # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
    virtual_router_id 199  # 虚拟路由器ID 81表示的是编号,MASTER 和 BACKUP 必须是一致的。
    priority 100          # 优先级 数字越大就越容易成为master
    advert_int 1          # 宣告消息的时间间隔 为1s
    authentication {
        auth_type PASS    # 密码认证 password
        auth_pass 1111    # 具体密码 可以不用修改
    }
    virtual_ipaddress {   # vip 虚拟ip地址 可以配置多个
        192.168.134.199     # 配置的vip 必须与master配置的vip是一样的
    }
}

3、LVS配置 实现负载均衡:见下图

参数详解:


virtual_server 192.168.134.199 3306{:表示将我的请求发送到哪几台机器
    delay_loop:设置健康检查的时间间隔,单位是秒
    lb_algo:设置负载均衡的算法。可用的有rr、wrr、lc、wlc、等。此设置为wrr
    lb_kind:设置LVS实现负载均衡的机制。有NAT、TUN、DR三个模式可选
    nat_mask:255.255.255.0
    protocol:TCP 转发协议,有TCP和UDP两种
    
    real_server 192.168.134.132 3306{  //表示接受的节点,IP和端口用空格隔开,就是把199这个读的请求 发送到这个机器上
            weight 1  :用来配置real_server节点权值,数字越大 权值越高
            inhibit_on_failure:表示在检测到real server 节点失效后,把它的weight 值设置为 0,而不是从IPVS 中删除。
            
            TCP_CHECK {:健康检查,常见的 有 HTTP_GET、SSL_GET、TCP_CHECK
                connect_timeout 3 :表示无响应超时时间,单位是秒,这里是3秒超时
                nb_get_retry 3 :表示重试次数,这里是3次。
                delay_before_retry 3 :表示重试间隔,这里是间隔3秒。
                connect_port 3306 :健康检查的端口,如果无指定,默认是real_server 指定的端口。
            }
    }
    real_server 192.168.134.133 3306{  //表示接受的节点,IP和端口用空格隔开,就是把199这个读的请求 发送到这个机器上
            weight 1  :用来配置real_server节点权值,数字越大 权值越高
            inhibit_on_failure:表示在检测到real server 节点失效后,把它的weight 值设置为 0,而不是从IPVS 中删除。
            
            TCP_CHECK {:健康检查,常见的 有 HTTP_GET、SSL_GET、TCP_CHECK
                connect_timeout 3 :表示无响应超时时间,单位是秒,这里是3秒超时
                nb_get_retry 3 :表示重试次数,这里是3次。
                delay_before_retry 3 :表示重试间隔,这里是间隔3秒。
                connect_port 3306 :健康检查的端口,如果无指定,默认是real_server 指定的端口。
            }
    }
}    

            其他健康检查方式,我的环境是TCP,仅供参考
            HTTP_GET |SSL_GET {
                url { :
                    path /index.html 
                    digest e6c271eb5f017f280cf97ec2f51b02d3 
                    status_code 200 
                }
                connect_port 80 
                bindto 192.168.12.80 
                connect_timeout 3 
                nb_get_retry 3 
                delay_before_retry 2 
            }

启动

ip add 就可以查看虚拟IP

 

 

 

 

如果转发不成功,就需要在每台转发的 real_server 上边还要做一个配置

vim /etc/init.d/realserver.sh

#!/bin/bash
SNS_VIP=192.168.134.199
NET_MASK=255.255.255.255

case "$1" in
start)
  ifconfig lo:0 $SNS_VIP netmask $NET_MASK broadcast $SNS_VIP
  /sbin/route add -host $SNS_VIP dev lo:0      
  echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore     
  echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce  
  echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -p >/dev/null 2>&1        
  echo "RealServer Start OK"
  ;;
stop)
  ifconfig lo:0 down
  route del $SNS_VIP >/dev/null 2>&1
  echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore     
  echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce  
  echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
  echo "RealServer Stoped"
  ;; 
*)    
  echo "Usage: $0 {start|stop}"    
  exit 1
esac
exit 


改完之后 切记 需要start下
/etc/init.d/realserver.sh start

二、使用Mysqlrouter搭建MySQL的读写分离功能

1、简介:

        MySQL Router的前提是后端实现了MySQL的主从复制,它必须能够分析来自前面客户端的SQL请求是写请求还是读请求,以便决定这个SQL请求是发送给master还是slave,以及发送给哪个master、哪个slave。这样,MySQL Router就实现了MySQL的读写分离,对MySQL请求进行了负载均衡。

官网下载地址:https://downloads.mysql.com/archives/router/
             https://downloads.mysql.com/archives/router/
下载完 rpm 安装包 直接安装  rpm -ivh 
或者下载tar文件,解压、然后新建一个文件,放MySQL Router.
安装完成
将MySQL Router环境变量配置到/etc/profile文件中:
vim /etc/profile
export PATH=$PATH:/data/mysql/mysql-router-8.0.28/bin
[root@local110 ~]# source /etc/profile

2、配置

[root@local110 ~]# cd /data/mysql/mysql-router-8.0.28

[root@local110 mysql-router-8.0.28]# ls
bin    lib    LICENSE.router    man        README.router    share

[root@local110 mysql-router-8.0.28]# mkdir  data  run  conf  log

[root@local110 mysql-router-8.0.28]# ls
bin        conf    data    lib    LICENSE.router    log    man        README.router    run    share
data:数据持久化目录
run:运行状态目录
conf:配置文件存放目录
log:日志目录
将安装目录下的示例配置文件拷贝到conf目录下:

[root@local110 mysql-router-8.0.28]# cp share/doc/mysqlrouter/sample_mysqlrouter.conf   conf/mysqlrouter.conf

更改整个安装包的属主和属组:
[root@local110 ~]# chown -R mysql:mysql  /data

[root@local110 ~]# cd /data/mysql/mysql-router-8.0.28/conf
[root@local110 conf]# vim mysqlrouter.conf
......
[DEFAULT]
user = mysql
logging_folder = /data/mysql/mysql-router-8.0.28/log
plugin_folder = /data/mysql/mysql-router-8.0.28/lib/mysqlrouter
runtime_folder = /data/mysql/mysql-router-8.0.28/run
data_folder = /data/mysql/mysql-router-8.0.28/data

[logger]
level = INFO
filename = mysqlrouter.log

[routing:failover]  //失败转移
bind_address = 0.0.0.0  //本地IP  
bind_port = 7001
max_connections = 1024  //最大连接数
connect_timeoit = 3 //连接超时时间
mode = read-write  // 模式:读还是写
destinations = 192.168.134.132:3306,192.168.134.133:3306  // 后端服务器地址

[routing:balancing]  //负载均衡
bind_address = 0.0.0.0
bind_port = 7002
max_connections = 1024
mode = read-only
destinations = 192.168.134.132:3306,192.168.134.133:330

 参数文件配置完成后,正式启动MySQL Router。
 mysqlrouter -c  /data/mysql/mysql-router-8.0.28/conf/mysqlrouter.conf
 查看日志
 tailf  /data/mysql/mysql-router-8.0.28/log/mysqlrouter.log
 
  起来之后,登录数据库可以查看  是否均衡

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯-礼物-二分查找

题目 思路 --刚开始想到暴力尝试的方法,但是N太大了,第一个测试点都超时。题目中说前k个石头的和还有后k个石头的和要小于s,在这里要能想到开一个数组来求前n个石头的总重,然后求前k个的直接将sum[i]-sum[i-k-1]就行了&#xff0…

@EnableConfigurationProperties注解使用

前言 当我们想把配置的内容,动态赋值到某个配置类上的时候,可以使用EnableConfigurationProperties ConfigurationProperties注解 代码准备 创建配置文件prop.properties nameada age18 email123qq.com 创建配置类 ComponentScan("com.test.pops") PropertySo…

天地一体化5G网络中LNA的辐射效应

Youssouf A S, Habaebi M H, Hasbullah N F. The radiation effect on low noise amplifier implemented in the space-aerial–terrestrial integrated 5G networks[J]. IEEE Access, 2021, 9: 46641-46651. 图2 面向卫星的5G综合网络架构方案 这篇论文《The Radiation Effect…

docker快速安装达梦数据库

docker快速安装达梦数据库 文章目录 docker快速安装达梦数据库前言环境准备下载镜像运行、配置容器 前言 因为公司需要将自己的底代码平台与客户的需求做适配,客户要求必须满足信创要求,使用达梦数据库。所以需要将原有的MySQL数据库与达梦数据库适配&a…

Android:adb命令

执行adb命令的窗口如下 Mac或Linux系统里的终端窗口; window系统运行输入cmd打开的指令窗口; Android Studio 里控制下面的Terminal窗口 1. 查看已链接的设备和模拟器 adb devices -l 2. 查看Android内核版本号 adb shell getprop ro.build.version.re…

面试笔记——Redis(集群方案:主从复制、哨兵模式和分片集群)

主从复制 在 Redis 主从集群中,一个主节点(Master)负责处理客户端的读写请求,而多个从节点(Slave)则负责复制主节点的数据,并对外提供读取服务——解决高并发问题。 主节点(Master&…

vue@2.7.16 使用less、less-loader

遇到问题,npm install less-loader7.3.0 --save安装好less-loader后,执行npm run serve 项目运行不起来,排查后发现在安装less-loader后就提示需要安装less,正确的安装应如下: npm install less less-loader7.3.0 --sa…

了解电子元器件商城价格变动的背后逻辑

电子元器件商城价格的变动背后存在着多种逻辑和因素,这些因素相互交织、相互作用,共同影响着价格的波动。以下是一些可能存在的背后逻辑: 供需关系: 供应量变化:电子元器件市场的供应量受到供应商生产能力、原材料供应…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

[隐私计算实训营学习笔记] 第1讲 数据要素流通

信任四基石 数据的分级分类 技术信任:全链路审计、闭环完成的数据可信流通体系 技术信任:开启数据密态时代 数据可流通的基础设施:密态天空计算

第3章 数据治理

思维导图 数据治理的定义:是在管理数据资产过程中行使权力和管控,包括计划、监控、和实施。 职能:指导所有其他数据管理领域的活动。目的:确保根据数据管理制度和最佳实践正确地管理数据。整体驱动力:确保组织可以从其…

sd卡数据不小心删除了如何恢复,sd卡中的数据不小心被删除了如何进行恢复

在现代科技快速发展的时代,SD卡已经成为我们存储和传输数据的重要工具之一。当您不小心删除了SD卡中的数据时,这种意外情况可能引起您的困惑和焦虑。那些重要的文件、无价的回忆似乎在转瞬间消失得无影无踪。面对这种突发的数据丢失问题,我深感理解。sd卡数据不小心删除了如…

Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南

1、去官网下载docker 安装:把图标拉到应用程序即可把图标拉到应用程序即可 https://docs.docker.com/desktop/install/mac-install/ 2、docker拉取redis镜像 拉取命令,后面填上版本号3.2.1,可以看到已经成功了。 docker pull redis:3.2.1…

Guitar Pro8吉他学习 、打谱 、 创作神器,让你的吉他之路更上一层楼!

Guitar Pro8吉他学习 、打谱 、 创作神器,让你的吉他之路更上一层楼!轻松学习吉他,实现音乐梦想,Guitar Pro8助你一臂之力! Guitar Pro 2024 win-安装包下载如下: https://wm.makeding.com/iclk/?zoneid5…

u盘数据删除或者移除了怎么办?冷静,恢复指南来帮你

在数字化时代,U盘已成为我们存储和传输数据的重要设备。然而,有时由于疏忽或误操作,我们可能会不小心删除或移除了U盘上的重要数据。面对这种情况,许多人可能会感到焦虑和困惑,不知道如何是好。本文将为您提供一些建议…

【Unity】宏定义Scripting Define Symbols

1.宏的用处 我们在使用Unity开发的时候,经常需要根据不同环境执行不同的代码 比如安卓手机和苹果手机获取路径代码 这个时候,宏就派上用场了。 代码示例: //获取路径public string GtePath(){//不同平台,取不同的存储路径string…

java 项目新建遇到的问题

IntelliJ IDEA创建Spring工程 报错1:Selected version of Java 17 is not supported by the project SDK ‘1.8’. Either choose a lower version of Java, or set a higher version of the SDK. 解决方法: 报错2:Cannot download ‘htt…

电脑照片分辨率怎么调?这款dpi修改工具好用

许多考试平台在上传证件照片的时候,大多都会对图片分辨率有具体要求,但是如果遇上手上的图片分辨率达不到要求,那么怎么改图片分辨率呢?可以利用专业的dpi修改工具来处理,比如今天分享的就是一个在线修改图片分辨率的方…

右键菜单事件

<div id"editor-container"></div> <div class"custom-context-menu" id"customContextMenu"> <ul> <li value"copy">创建副本</li> <li value"delete" class"ed-bottom-line&…