美文网首页数据库一些收藏Mysql
MyCat 1.6.7(二)高可用及权限

MyCat 1.6.7(二)高可用及权限

作者: _大叔_ | 来源:发表于2022-05-30 19:28 被阅读0次

    高可用

    官方建议是采用基于硬件的负载均衡器或者软件方式的HAproxy,HAProxy相比LVS的使用要简单很多,功能方面也很丰富,免费开源,稳定性也是非常好,可以与LVS相媲美,根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的,下图是HAproxy+Mycat集群+MySQL主从所组成的高可用性方案

    如果还担心HAproxy的稳定性和单点问题,则可以用keepalived的VIP的浮动功能,加以强化

    安装

    1. keepalived和haproxy必须装在同一台机器上(如172.17.210.210.83机器上,keepalived和haproxy都要安装),keepalived负责为该服务器抢占vip(虚拟ip),抢占到vip后,对该主机的访问可以通过原来的ip(172.17.210.210.83)访问,也可以直接通过vip(172.17.210.210.103)访问。
    2. 172.17.210.64上的keepalived也会去抢占vip,抢占vip时有优先级,配置keepalived.conf中的(priority 150 #数值愈大,优先级越高,172.17.210.64上改为120,master和slave上该值配置不同)决 定。但是一般哪台主机上的keepalived服务先启动就会抢占到vip,即使是slave,只要先启动也能抢到。
    3. haproxy负责将对vip的请求分发到mycat上。起到负载均衡的作用,同时haproxy也能检测到mycat是否存活,haproxy只会将请求转发到存活的mycat上。
    4. 如果一台服务器(keepalived+haproxy服务器)宕机,另外一台上的keepalived会立刻抢占vip并接管服务。
      如果一台mycat服务器宕机,haporxy转发时不会转发到宕机的mycat上,所以mycat依然可用。
    haproxy安装
    # 下载解压并安装
    wget http://haproxy.1wt.eu/download/1.5/src/haproxy-1.5.18.tar.gz
    tar zxvf haproxy-1.5.18.tar.gz
    cd haproxy-1.5.18
    # 查看READ,里面有描述 TARGET版本,安装参数等
    less README
    # linux26=linux 2.6(内核),linux 2628=linux2.6.28,ARCH 代表架构
    make TARGET=linux310 PREFIX=/usr/local/haproxy ARCH=x86_64
    make install PREFIX=/usr/local/haproxy    
    
    # pid文件存放目录
    mkdir -p /usr/data/haproxy/
    vim /usr/local/haproxy/haproxy.conf
    

    haproxy.conf

    global
             log 127.0.0.1 local3        #定义haproxy日志输出设置
             log 127.0.0.1   local1 notice        
             #log loghost    local0 info # 定义haproxy 日志级别
             ulimit-n 82000              # 设置每个进程的可用的最大文件描述符
             maxconn 20480               # 默认最大连接数
             chroot /usr/local/haproxy   # chroot运行路径
             uid 99                      # 运行haproxy 用户 UID
             gid 99                      # 运行haproxy 用户组gid
             daemon                      # 以后台形式运行harpoxy
             nbproc 1                    # 设置进程数量
             pidfile /usr/local/haproxy/haproxy.pid  # haproxy 进程PID文件
             #debug                      # haproxy调试级别,建议只在开启单进程的时候调试
             #quiet
    
    defaults
             log    global         #引入global定义的日志格式
             mode    tcp           #所处理的类别(7层代理http,4层代理tcp)
             maxconn 50000         #最大连接数
             option abortonclose   # 当haproxy负载很高时,自动结束掉当前队列处理比较久的链接
             option redispatch      #当与上游服务器的会话失败(服务器故障或其他原因)时,
                                    # 把会话重新分发到其他健康的服务器上,当原来故障的服务器恢复时,
                                    # 会话又被定向到已恢复的服务器上。还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数。
             retries 3             #3次连接失败就认为服务器不可用,也可以通过后面设置
             timeout connect         10s  #默认连接超时时间
             timeout client          1m   #默认客户端超时时间
             timeout server          1m   #默认服务器超时时间
             balance roundrobin           # 设置负载算法为:轮询算法rr
    
    listen   mycat_status           # Frontend和Backend的组合体,监控组的名称,按需自定义名称 
             bind 0.0.0.0:48066              #监听端口 
             mode tcp                      # http的7层模式 tcp4层
             balance roundrobin           # 设置负载算法为:轮询算法rr
             server mycat_1 IP1:8066 check inter 10s
             server mycat_2 IP2:8066 check inter 10s
    
    frontend admin_stats
             bind 0.0.0.0:7777    #设置监听端口,即haproxy提供的web服务端口,和lvs的vip 类似
             mode http          #http 的7层模式
             log 127.0.0.1 local3 err       #错误日志记录 
             stats refresh 5s               #每隔5秒自动刷新监控页面 
             stats uri /admin?stats         #监控页面的url访问路径 
             stats realm itnihao\ welcome   #监控页面的提示信息 
             stats auth admin:admin         #监控页面的用户和密码admin,可以设置多个用户名 
             stats auth admin1:admin1       #监控页面的用户和密码admin1 
             stats hide-version             #隐藏统计页面上的HAproxy版本信息  
             stats admin if TRUE            #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)
    

    启动

    /usr/data/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
    

    验证负载均衡

    mysql 0umycat -p123456 -h IP -P 48066
    

    除了以上 haproxy 做 Mysql 的负载均衡,其实 Nginx 也可以做,Nginx1.9 以上支持 TCP 协议,需要装一个插件,具体的 Nginx 安装可以看 nginx-1.18.0 安装,至于 keepalived 大家可以参考 keepalived(一) 安装教程。对于 haproxy 和 Nginx 性能对比,大家可以看这篇博客 https://zhuanlan.zhihu.com/p/41354937

    keepalived 的配置

    # 全局配置
    global_defs {
        # 同一组的广播地址
       vrrp_mcast_group4 224.0.0.18
       router_id LVS_DEVEL
    }
    
    #vrrp 实例部分定义,VI_1自定义名称
    vrrp_instance VI_1 {
        # 指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
        state MASTER
        # 网卡设置,lvs需要绑定在网卡上,RealServer 绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
        interface eth0
        # 虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
        virtual_router_id 51
        # 定义优先级,数字越大,优先级越高。
        priority 100
        # 设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
        advert_int 1
        # 设置验证类型和密码,两个节点必须一致
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        # 设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        virtual_ipaddress {
            192.168.200.16
        }
    }
    
    # 定义RealServer 对应的VIP及服务端口,IP和端口之间用空格隔开
    virtual_server 192.168.200.16 48066 {
        # 健康检查时间间隔
        delay_loop 6
        # lvs调度算法rr wrr lc wlc lblc sh dh
        lb_algo rr
        # 负载均衡转发规则 NAT DR RUN
        lb_kind NAT
        # 同一IP的连接50秒内被分配到同一台realserver
        persistence_timeout 50
        # 使用的协议
        protocol TCP
        # 备用机,所有realserver失效后启用
        sorry_server 192.168.200.200 48066
    
        real_server 192.168.200.2 48066 {
            # 权重,最大越高,lvs就越优先访问
            weight 1
            # keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            TCP_CHECK {
                # 3秒无响应超时
                connect_timeout 3
                # 重连次数3次
                retry 3
                # 重连间隔时间
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.3 48066 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                retry 3
                delay_before_retry 3
            }
        }
    }
    

    权限

    user标签权限控制

    目前Mycat对于中间件的连续控制并没有做太复杂的控制,目前只做了中间件逻辑库级别的读写权限控制。是通过 server.xml 的 user 标签进行配置

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <!-- 只读权限,默认false,可读可写 -->
        <property name="readOnly">true</property>
    </user>
    

    privileges 标签权限控制

    在 user 标签下的 privileges 标签可以对逻辑库(schema)、表(table)进行精细化的DML权限控制。

    privileges 标签下的 check 属性,如为 true 开启权限检查,为 false 不开启,默认为 false。

    由于 Mycat 一个用户的 schemas 属性可配置多个逻辑库(schema),所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制。

    <user name="mycat" defaultAccount="true">
        <!-- 密码 -->
        <property name="password">123456</property>
        <!-- 逻辑库名称 -->
        <property name="schemas">TESTDB</property>
        <!-- 默认逻辑库  -->
        <property name="defaultSchema">TESTDB</property>
        <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
    
        <!-- 表级 DML 权限设置 -->
        <privileges check="true">
            
            <schema name="TESTDB" dml="0110" >
                    <table name="tb01" dml="0000"></table>
                    <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>
    
    </user>
    
    CML权限 增加(insert) 修改(update) 查询(select) 删除(delete)
    0000 禁止 禁止 禁止 禁止
    0010 禁止 禁止 可以 禁止
    1110 可以 可以 可以 禁止
    1111 可以 可以 可以 可以

    SQL拦截

    firewall 标签用来定义防火墙;firewall 下 whitehost 标签用来定义 IP 白名单,blacklist 用来定义 SQL 黑名单。

    白名单

    可以通过设置白名单,实现某主机某用户可以访问Mycat,而其他主机用户禁止访问

    <!-- 全局SQL防火墙设置 -->
    <!--白名单可以使用通配符%或着*-->
    <!--例如<host host="127.0.0.*" user="root"/>-->
    <!--例如<host host="127.0.*" user="root"/>-->
    <!--例如<host host="127.*" user="root"/>-->
    <!--例如<host host="1*7.*" user="root"/>-->
    <!--这些配置情况下对于127.0.0.1都能以root账户登录-->
    <firewall>
       <whitehost>
          <host host="1*7.0.0.*" user="mycat"/>
       </whitehost>
    </firewall>
    
    黑名单

    可以设置黑名单,实现Mycat对具体SQL操作的拦截,如增删改查等操作的拦截

    <firewall>
       <whitehost>
          <host host="1*7.0.0.*" user="mycat"/>
       </whitehost>
        <!-- 黑名单开启 -->
        <blacklist check="true">
          <!-- 不允许使用删除操作 -->
          <property name="deleteAllow">false</property>
        </blacklist>
    </firewall>
    
    配置项 缺省值 描述
    selectAllow true 是否允许执行SELECT语句
    deleteAllow true 是否允许执行DELETE语句
    updateAllow true 是否允许执行UPDATE语句
    insertAllow true 是否允许执行INSERT语句
    createTableAllow true 是否允许创建表
    setAllow true 是否允许使用SET语句
    alterTableAllow true 是否允许执行Alter Table语句
    dropTableAllow true 是否允许删除表
    commitAllow true 是否允许执行commit操作
    rollbackAllow true 是否允许执行rollback操作

    相关文章

      网友评论

        本文标题:MyCat 1.6.7(二)高可用及权限

        本文链接:https://www.haomeiwen.com/subject/bksffrtx.html