MySQL配置Keepalived读写分离

1 背景

在数据库一主多从架构中,若所有查询的流量都切入主节点,会造成服务器拥塞,因此需要将业务一致性要求不是特别高的应用的查询流量分散到从库,以实现负载均衡

?keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的

LVS负载均衡

  • lvs 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之上
  • 传输层上有 TCP/UDP,lvs 支持 TCP/UDP 的负载均衡
  • 因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法, 比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效 率是非常高的
    • lvs 的转发可以通过修改 IP 地址实现(NAT 模式)
    • lvs 的转发还可以通过修改直接路由实现(DR 模式)

    因LVS缺乏后端状态检测,于是配合Keepalived使用会拥有不错的效果

    2 架构

    LVS+Keepalived架构

    DB ip 备注
    Master 10.243.95.3 keepalived Master
    Slave1 10.243.95.4 keepalived Backup
    Slave2 10.243.95.5 ?
    ? 10.243.95.101 读VIP

    3 搭建

    1)安装依赖包

  • yum -y install net-snmp
    unzip -u keepalived_pack.zip
    cd keepalived_pack/rhel6/;
    rpm -ivh ipvsadm-1.26-2.el6.x86_64.rpm
    rpm -ivh keepalived-1.2.7-3.el6.x86_64.rpm

    2)修改配置文件

    两个节点的配置大体相似,仅需修改优先级和角色

  • global_defs {
    ? ?notification_email {
    ? ? ? #user@example.com
    ? ?}
    ? ?notification_email_from mail@example.org
    ? ?#smtp_server 192.168.200.1
    ? ?smtp_connect_timeout 30
    ? ?router_id LVS_DEVEL
    }
    vrrp_script chk_mha {
    ? ?script "/root/mha/scripts/check_manager.sh /root/mha"
    ? ?interval 5
    ? ?weight -40
    ? ?fall ? 3
    ? ?rise ? 1
    ? ? ?}
    vrrp_instance VI_1 {
    ? ? #修改1.主节点MASTER
    ? ? state BACKUP
    ? ? interface eth0
    ? ? virtual_router_id 200
    ? ? #修改2.主节点优先级需大于从节点
    ? ? priority 90
    ? ? advert_int 1
    ? ? authentication {
    ? ? ? ? auth_type PASS
    ? ? ? ? auth_pass 1111
    ? ? }
    ? #VIP
    ? ? virtual_ipaddress {
    ? ? ? ?10.243.95.101
    ? ? }
    ? ? notify_master "/root/mha/scripts/write_keepalived_state.sh /root/mha/log MASTER"
    ? ? notify_backup "/root/mha/scripts/write_keepalived_state.sh /root/mha/log BACKUP"
    }

    virtual_server fwmark 2 {
    ? ? ? ? delay_loop 10
    ? ? ? ? lb_algo rr
    ? ? ? ? lb_kind DR
    # ? ?persistence_timeout 2
    ? ? ? ? protocol TCP
    ? ? ? ? real_server 10.243.95.5 3306 {
    ? ? ? ? ? ? ? ? weight 3
    ? ? ? ? ? ? ? ? TCP_CHECK {
    ? ? ? ? ? ? ? ? ? ? ? ? connect_timeout 10
    ? ? ? ? ? ? ? ? ? ? ? ? nb_get_retry 3
    ? ? ? ? ? ? ? ? ? ? delay_before_retry 3
    ? ? ? ? ? ? ? ? ? ? ? ? connect_port 3306
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? ? ? real_server 10.243.95.4 3306 {
    ? ? ? ? ? ? ? ? weight 3
    ? ? ? ? ? ? ? ? TCP_CHECK {
    ? ? ? ? ? ? ? ? ? ? ? ? connect_timeout 10
    ? ? ? ? ? ? ? ? ? ? ? ? nb_get_retry 3
    ? ? ? ? ? ? ? ? ? ? delay_before_retry 3
    ? ? ? ? ? ? ? ? ? ? ? ? connect_port 3306
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? ? ? real_server 10.243.95.3 3306 {
    ? ? ? ? ? ? ? ? weight 3
    ? ? ? ? ? ? ? ? TCP_CHECK {
    ? ? ? ? ? ? ? ? ? ? ? ? connect_timeout 10
    ? ? ? ? ? ? ? ? ? ? ? ? nb_get_retry 3
    ? ? ? ? ? ? ? ? ? ? delay_before_retry 3
    ? ? ? ? ? ? ? ? ? ? ? ? connect_port 3306
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? ?}

    3)绑定子接口VIP

    应用于三个数据库节点

  • ip addr add $VIP/32 dev lo

    4)设置iptables规则

    因LVS-keepalived需同时部署在RS服务器,存在一些问题

    现象分析:请求经过keepalived MASTER节点后,会根据负载均衡策略分发到配置文件中的RS服务器,此时会包含BACKUP节点,若分发至BACKUP节点会发生二次轮询分发给MASTER节点,造成循环

    解决方案:通过设置fwmark参数,当数据包发送给VIP且mac地址不属于任何LVS节点会通过iptables进行标记,带标记的包才会进入LVS进行负载均衡处理

  • #在master上执行,MAC地址为数据库SLave1的MAC
    iptables -t mangle -I PREROUTING -d 10.243.95.101 -p tcp -m tcp --dport 3306 -m mac ! --mac-source FA:16:3E:1C:EB:DC -j MARK --set-mark 0x2
    #在Slave1上执行,MAC地址为数据库Master的MAC
    iptables -t mangle -I PREROUTING -d 10.243.95.101 -p tcp -m tcp --dport 3306 -m mac ! --mac-source FA:16:3E:30:DF:12 -j MARK --set-mark 0x2

    5)添加服务器内核参数

  • net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.eth0.send_redirects = 0
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2

    修改后需重载配置 sysctl -p

    6)启动Keepalived服务

    MySQL配置Keepalived读写分离

文章链接: /9826.html

文章标题:MySQL配置Keepalived读写分离

文章版权:云服务器租用科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
建站教程投稿分享运维技术

MySQL之高可用组件MHA

2022-9-8 12:56:31

建站教程投稿分享

个人网站Nginx防盗链设置

2022-9-9 15:05:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧

云服务器租用科技 - 最新云主机促销服务器租用优惠

http://www.vxiaotou.com