zoukankan      html  css  js  c++  java
  • centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离

    简介

    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。

    它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。而且安装方便。配置的注释写的蛮详细的,都是中文。

    主要功能

    • 读写分离
    • 从库负载均衡
    • IP过滤
    • 自动分表
    • DBA可平滑上下线DB
    • 自动摘除宕机的DB

    相关链接

    环境准备

    本次环境主要依赖于 MySQL 高可用架构 之 MHA 这篇文章。

    各位可根据自己的环境进行配置修改即可。

    Atlas 环境

    操作系统 内核版本 主机名 ip地址 角色
    centos 7.5 5.1.3-1.el7 master.atlas 10.0.20.196 Manager
    centos 7.5 5.1.3-1.el7 slave.atlas 10.0.20.197 node01 mysql-master

    VIP 地址: 10.0.20.198


    MySQL 集群环境

    操作系统 内核版本 主机名 MySQL 版本 ip地址 角色
    centos 7.5 5.1.3-1.el7 manager.mha MySQL 5.7.18 10.0.20.200 Manager
    centos 7.5 5.1.3-1.el7 node01.mha MySQL 5.7.18 10.0.20.201 node01 mysql-master
    centos 7.5 5.1.3-1.el7 node02.mha MySQL 5.7.18 10.0.20.202 node02 mysql-slave
    centos 7.5 5.1.3-1.el7 node03.mha MySQL 5.7.18 10.0.20.203 node03 mysql-slave
    centos 7.5 5.1.3-1.el7 node04.mha MySQL 5.7.18 10.0.20.204 node04 mysql-slave

    主库VIP 地址: 10.0.20.199

    Atlas 安装 和 配置

    安装和配置atlasmasterslave的配置要完全相同,一下操作在masterslave上均要操作

    [root@master ~]# cd /opt/soft/
    [root@master soft]# wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
    [root@master soft]# ls
    Atlas-2.2.1.el6.x86_64.rpm
    [root@master soft]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm 
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:Atlas-2.2.1-1                    ################################# [100%]
    [root@master soft]# rpm -qa | grep Atlas
    Atlas-2.2.1-1.x86_64
    

    安装完成后,会在/usr/local/mysql-proxy/下生成四个目录

    [root@master soft]# ll /usr/local/mysql-proxy/
    total 0
    drwxr-xr-x 2 root root  75 Jun 18 09:50 bin
    drwxr-xr-x 2 root root  22 Jun 18 09:50 conf
    drwxr-xr-x 3 root root 331 Jun 18 09:50 lib
    drwxr-xr-x 2 root root   6 Dec 17  2014 log
    

    bin下有三个可执行文件

    [root@master soft]# ll /usr/local/mysql-proxy/bin/
    total 44
    -rwxr-xr-x 1 root root  9696 Dec 17  2014 encrypt
    -rwxr-xr-x 1 root root 23564 Dec 17  2014 mysql-proxy
    -rwxr-xr-x 1 root root  1552 Dec 17  2014 mysql-proxyd
    -rw-r--r-- 1 root root     6 Dec 17  2014 VERSION
    

    bin目录下放的都是可执行文件

    1. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
    2. “mysql-proxy”是MySQL自己的读写分离代理
    3. “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重

    剩下三个目录分别是:

    • conf目录下放的是配置文件 “test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑
    • lib目录下放的是一些包,以及Atlas的依赖
    • log目录下放的是日志,如报错等错误信息的记录

    为数据库的密码加密

    在配置文件中,填写的数据库的密码不是明文的,而是可以通过自带的加密工具加密后得到的内容填写进去,这里使用的最简单的123456密码测试

    [root@master soft]# /usr/local/mysql-proxy/bin/encrypt 123456
    /iZxz+0GRoA=
    

    修改配置文件

    [root@master conf]# cat test.cnf 
    
    [mysql-proxy]
    #带#号的为非必需的配置项目
    
    #管理接口的用户名
    admin-username = user
    
    #管理接口的密码
    admin-password = pwd
    
    #Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
    proxy-backend-addresses = 10.0.20.199:3306
    
    #Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
    proxy-read-only-backend-addresses = 10.0.20.202:3306@1,10.0.20.203:3306@1,10.0.20.204:3306@1
    
    #用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
    pwds = java:Q6gAt5tl+GUa8s/oWZlMvQ==, root:/iZxz+0GRoA=
    
    #设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
    daemon = true
    
    #设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
    keepalive = true
    
    #工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
    event-threads = 16
    
    #日志级别,分为message、warning、critical、error、debug五个级别
    log-level = message
    
    #日志存放的路径
    log-path = /usr/local/mysql-proxy/log
    
    #SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
    #sql-log = OFF
    
    #慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
    sql-log-slow = 10
    
    #实例名称,用于同一台机器上多个Atlas实例间的区分
    instance = dev
    
    #Atlas监听的工作接口IP和端口
    proxy-address = 0.0.0.0:3306
    
    #Atlas监听的管理接口IP和端口
    admin-address = 0.0.0.0:2345
    
    #分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
    #tables = person.mt.id.3
    
    #默认字符集,设置该项后客户端不再需要执行SET NAMES语句
    #charset = utf8
    
    #允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
    #client-ips = 127.0.0.1, 192.168.1
    
    #Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
    #lvs-ips = 192.168.1.1
    
    

    启动

    [root@master conf]# /usr/local/mysql-proxy/bin/mysql-proxyd dev start
    OK: MySQL-Proxy of dev is started
    [root@master conf]# ps aux|grep mysql
    root      9173  0.0  0.3  65844  7080 ?        S    10:45   0:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/dev.cnf
    root      9174  0.0  1.2 235972 26032 ?        Sl   10:45   0:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/dev.cnf
    [root@master conf]# netstat -lntup | grep mysql
    tcp        0      0 0.0.0.0:2345            0.0.0.0:*               LISTEN      9174/mysql-proxy    
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      9174/mysql-proxy
    

    加入开机启动项

    [root@master conf]# echo '/usr/local/mysql-proxy/bin/mysql-proxyd dev start' >> /etc/rc.local
    

    注意: 这里master配置完成了,slave需要相同一模一样的配置。

    Keepalived 安装配置

    安装

    master 和 slave 节点都需要安装

    yum install keepalived -y
    

    master 配置

    配置文件

    [root@master keepalived]# vim keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       router_id mysql_proxy_196
    }
    
    vrrp_script chk_atlas_proxy
    {
        script "/etc/keepalived/che_atlas.sh"
        interval 2
        weight -2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface bond0
        virtual_router_id 151
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.20.198/24 dev bond0 label bond0:1
        }
        track_script {
            chk_atlas_proxy
        }
    }
    

    che_atlas.sh 脚本

    [root@master keepalived]# cat /etc/keepalived/che_atlas.sh 
    #!/bin/bash
    if [ `ps aux|grep mysql | grep -v grep | wc -l`  -ne  2 ];then
        systemctl stop keepalived
    fi
    

    启动master上的keepalived服务

    # 启动服务
    [root@master keepalived]# systemctl start keepalived
    # 开机启动服务
    [root@master keepalived]# systemctl enable keepalived
    # 关闭服务
    [root@master keepalived]# systemctl stop keepalived
    # 查看服务状态
    [root@master keepalived]# systemctl status keepalived
    

    查看状态:

    [root@master keepalived]# ps aux | grep keep
    root      8983  0.0  0.0 118700  1956 ?        Ss   09:37   0:00 /usr/sbin/keepalived -D
    root      8984  0.0  0.2 118700  5580 ?        S    09:37   0:00 /usr/sbin/keepalived -D
    root      8985  0.0  0.1 118700  3752 ?        S    09:37   0:01 /usr/sbin/keepalived -D
    root      9449  0.0  0.1 112712  2276 pts/0    S+   13:35   0:00 grep --color=auto keep
    [root@master keepalived]# ip a | grep 20
        inet 10.0.20.196/24 brd 10.0.20.255 scope global bond0
        inet 10.0.20.198/24 scope global secondary bond0:1
    

    Keepalive 脚本不执行的坑

    请查看文章 CentOS 7 Keepalive 脚本不执行解决

    slave 配置

    [root@slave ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       router_id mysql_proxy_197
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface bond0
        virtual_router_id 151
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.20.198/24 dev bond0 label bond0:1
        }
    }
    

    启动slave上的keepalived服务

    # 启动服务
    [root@slave keepalived]# systemctl start keepalived
    # 开机启动服务
    [root@master keepalived]# systemctl enable keepalived
    

    查看状态

    [root@slave ~]# ps aux | grep keep
    root      9082  0.0  0.0 118700  2012 ?        Ss   09:36   0:00 /usr/sbin/keepalived -D
    root      9083  0.0  0.2 118700  5476 ?        S    09:36   0:00 /usr/sbin/keepalived -D
    root      9084  0.0  0.1 118700  3656 ?        S    09:36   0:00 /usr/sbin/keepalived -D
    root      9484  0.0  0.1 112712  2188 pts/0    S+   13:36   0:00 grep --color=auto keep
    

    测试宕机

    手动停止master上的 atlas服务,查看keepalive的服务状态以及vip飘移是否正常

    停止Atlas服务

    [root@master keepalived]# /usr/local/mysql-proxy/bin/mysql-proxyd dev stop
    OK: MySQL-Proxy of dev is stopped
    

    查看Master日志:

    Jun 18 15:17:30 master systemd: Stopping LVS and VRRP High Availability Monitor...
    Jun 18 15:17:30 master Keepalived[10367]: Stopping
    Jun 18 15:17:30 master Keepalived_vrrp[10369]: VRRP_Instance(VI_1) sent 0 priority
    Jun 18 15:17:30 master Keepalived_vrrp[10369]: VRRP_Instance(VI_1) removing protocol VIPs.
    Jun 18 15:17:30 master Keepalived_healthcheckers[10368]: Stopped
    Jun 18 15:17:31 master Keepalived_vrrp[10369]: Stopped
    Jun 18 15:17:31 master Keepalived[10367]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
    Jun 18 15:17:31 master systemd: Stopped LVS and VRRP High Availability Monitor.
    

    查看slave状态

    [root@slave keepalived]# ip a | grep 20
        inet 10.0.20.197/24 brd 10.0.20.255 scope global bond0
        inet 10.0.20.198/24 scope global secondary bond0:1
    

    VIP已经被Slave接管

  • 相关阅读:
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言|博客作业01
    学期总结
  • 原文地址:https://www.cnblogs.com/winstom/p/11045281.html
Copyright © 2011-2022 走看看