十二、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
 
  起来之后,登录数据库可以查看  是否均衡

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁华依在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值