现在还是生产部门部署mysql+keepalived高可用的吗 用的多吗

现在还是生产部门部署mysql+keepalived高可用的吗 用的多吗

是的,MySQL+Keepalived高可用方案在生产环境中仍然是一种常用的方案。它可以提高MySQL数据库系统的可用性和稳定性,避免因为单点故障而导致的系统宕机和数据丢失问题。

虽然目前有其他高可用方案如MySQL Replication、MySQL Cluster等,但是MySQL+Keepalived方案仍然具有以下优点:

实现简单:相比于其他高可用方案,MySQL+Keepalived方案配置相对简单,且能够实现较好的高可用性。

负载均衡:Keepalived可以实现MySQL的负载均衡,将请求分发到不同的MySQL节点上。

故障转移:在主节点出现故障时,Keepalived可以自动将请求转移到备节点上,避免数据丢失和服务中断。

当然,对于不同的业务需求,选择不同的高可用方案是有必要的。需要综合考虑业务需求、数据规模、技术实现成本等因素。

  • 请看👉 :使用Keepalived实现mysql高可用
  • 除此之外, 这篇博客: Mysql集群配置(回顾)中的 5、MySQL双主复制+keepalived高可用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 【环境】:

    mysql-vip: 192.168…45.2
    mysql-1:192.168.45.3
    mysql-2:192.168.45.4

    1、mysql1配置: vim /etc/my.cnf

    [client]
    port            = 3306
    socket          = /tmp/mysql.sock
    
    [mysqld]
    port            = 3306
    socket          = /tmp/mysql.sock
    datadir         =/usr/local/mysql/var/
    skip-locking
    skip-name-resolve
    key_buffer = 64M
    max_allowed_packet = 64M
    table_cache = 2048
    sort_buffer_size = 4M
    net_buffer_length = 256K
    read_buffer_size = 10M
    read_rnd_buffer_size = 10M
    myisam_sort_buffer_size = 16M
    interactive_timeout = 240
    wait_timeout = 240
    max_connections = 800
    connect_timeout=30
    open_files_limit=8192
    query_cache_size = 1024M
    thread_cache_size=16
    thread_concurrency = 8
    long_query_time = 1
    log-slow-queries = slow.log
    
    innodb_additional_mem_pool_size = 8M
    innodb_buffer_pool_size = 32M
    innodb_log_buffer_size=8M
    innodb_log_file_size = 256M
    innodb_log_files_in_group = 3
    innodb_file_io_threads = 8
    innodb_lock_wait_timeout= 50
    innodb_thread_concurrency = 16
    innodb_file_per_table
    
    log_slave_updates
    expire_logs_days=7
    auto_increment_increment=2
    auto_increment_offset=2
    binlog_format=mixed
    log-bin=mysql-bin
    server-id       = 8   ###为服务器制定唯一ID
    
    [mysqldump]
    quick
    max_allowed_packet = 16M
    
    [mysql]
    no-auto-rehash
    
    [isamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
    
    [myisamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
    
    [mysqlhotcopy]    ###双主复制
    interactive-timeout
    

    设置mysql复制账号:

    mysql>GRANT REPLICATION SLAVE ON . TO ‘repl’@‘192.168.45.3’ IDENTIFIED BY ‘repl_123’;
    mysql>GRANT REPLICATION SLAVE ON . TO ‘repl’@‘192.168.45.4’ IDENTIFIED BY ‘repl_123’;

    导出数据库:

    #mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 --all-databases > all.sql

    2、MySQL2配置: vim /etc/my.cnf

    [client]
    port            = 3306
    socket          = /tmp/mysql.sock
    
    [mysqld]
    port            = 3306
    socket          = /tmp/mysql.sock
    datadir			=/usr/local/mysql/var/ ##与主1一致
    skip-locking
    skip-name-resolve
    key_buffer = 64M
    max_allowed_packet = 64M
    table_cache = 128
    sort_buffer_size = 4M
    net_buffer_length = 256K
    read_buffer_size = 10M
    read_rnd_buffer_size = 10M
    myisam_sort_buffer_size = 64M
    interactive_timeout = 240
    wait_timeout = 240
    max_connections = 800
    connect_timeout=30
    open_files_limit=8192
    query_cache_size = 1024M
    thread_cache_size=16
    thread_concurrency = 8
    long_query_time = 1
    log-slow-queries = slow.log
    
    innodb_additional_mem_pool_size = 8M
    innodb_buffer_pool_size = 64M
    innodb_log_buffer_size=8M
    innodb_log_file_size = 256M
    innodb_log_files_in_group = 3
    innodb_file_io_threads = 8
    innodb_lock_wait_timeout= 50
    innodb_thread_concurrency = 16
    innodb_file_per_table
    
    
    log_slave_updates
    expire_logs_days=7
    auto_increment_increment=2
    auto_increment_offset=1
    binlog_format=mixed
    log-bin=mysql-bin
    server-id       = 9  ###为服务器制定唯一ID
    
    [mysqldump]
    quick
    max_allowed_packet = 16M
    
    [mysql]
    no-auto-rehash
    
    [isamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
    
    [myisamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
    
    [mysqlhotcopy]  ##双主复制
    interactive-timeout
    

    导入主库数据

    #mysql -uroot -p < all.sql

    设置同步

    mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.45.238’,MASTER_PORT=‘3306’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘repl_123’,MASTER_LOG_FILE=‘mysql-bin.000007’,MASTER_LOG_POS=106;
    mysql> start slave; ##启动slaver复制

    在MySQL1上执行相同的同步操作指令:

    mysql>CHANGE MASTER TOMASTER_HOST=‘192.168.45.239’,MASTER_PORT=‘3306’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘repl_123’,MASTER_LOG_FILE=‘mysql-bin.000008’,MASTER_LOG_POS=105020214;
    mysql>start slave;

    实际就是上文主从数据库的变种,彼此互为主,彼此互为从。

    3、配置keepalived

    安装keepalived: 在2台mysql上分别安装并配置

    wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz

    在这里插入图片描述
    依据你的环境下载需要的版本,上图为比较新的版本。

    编译安装:

    tar zxvf keepalived-1.2.2.tar.gz
    cd keepalived-1.2.2
    ./configure --prefix=/
    make
    make install

    mysql1上keepalive的配置: vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
        router_id blue.com
    }
    vrrp_script check_run {
        script "/root/keepalived_check_mysql.sh"
        interval 5
    }
    vrrp_sync_group VG1 {
         group {
            VI_1
         }
    }
    vrrp_instance VI_1 {
         state MASTER
         interface eth0
         virtual_router_id 88
         priority 100
         advert_int 1
         nopreempt
         authentication {
             auth_type PASS
             auth_pass yuangang.net
         }
         track_script {
             check_run
         }
         virtual_ipaddress {                     ##虚拟ip配置,即VIP
             192.168.45.2
         }
    }
    

    编写mysql脚本用于检测验证mysql高可用:

    vim test_keepalived

    #!/bin/bash
    MYSQL=/usr/local/mysql/bin/mysql
    MYSQL_HOST=localhost
    MYSQL_USER=root
    MYSQL_PASSWORD=
    CHECK_TIME=3
    #mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
    MYSQL_OK=1
    function check_mysql_helth (){
    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" >/dev/null 2>&1
    if [ $? = 0 ] ;then
         MYSQL_OK=1
    else
         MYSQL_OK=0
    fi
         return $MYSQL_OK
    }
    while [ $CHECK_TIME -ne 0 ]
    do
         let "CHECK_TIME -= 1"
         check_mysql_helth
    if [ $MYSQL_OK = 1 ] ; then
         CHECK_TIME=0
         exit 0
    fi
    
    if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]
    then
         /etc/init.d/keepalived stop
    exit 1
    fi
    sleep 1
    done
    #!/bin/bash
    MYSQL=/usr/local/mysql/bin/mysql
    MYSQL_HOST=localhost
    MYSQL_USER=root
    MYSQL_PASSWORD=
    CHECK_TIME=3
    #mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
    MYSQL_OK=1
    function check_mysql_helth (){
    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" >/dev/null 2>&1
    if [ $? = 0 ] ;then
         MYSQL_OK=1
    else
         MYSQL_OK=0
    fi
         return $MYSQL_OK
    }
    while [ $CHECK_TIME -ne 0 ]
    do
         let "CHECK_TIME -= 1"
         check_mysql_helth
    if [ $MYSQL_OK = 1 ] ; then
         CHECK_TIME=0
         exit 0
    fi
    
    if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]
    then
         /etc/init.d/keepalived stop
    exit 1
    fi
    sleep 1
    done
    chmod 755  /root/keepalived_check_mysql.sh
    

    mysql2上keepalive的配置: vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
        router_id blue.com
    }
    vrrp_script check_run {
        script "/root/keepalived_check_mysql.sh"
        interval 5
    }
    vrrp_sync_group VG1 {
         group {
           VI_1
         }
    }
    vrrp_instance VI_1 {
         state BACKUP
         interface eth0
         virtual_router_id 88
         priority 80
         advert_int 1
         authentication {
             auth_type PASS
             auth_pass blue.com
         }
         track_script {
             check_run
         }
         virtual_ipaddress {   ##虚拟ip配置一致
             192.168.45.2
         }
    }
    

    4、启动mysql和keepalived

    启动 mysql-1上的keepalived mysql:

    /etc/init.d/keepalived start
    /etc/init.d/mysqld start

    启动mysql-2上的keepalived mysql

    /etc/init.d/keepalived start
    /etc/init.d/mysqld start

    5、验证:

    关闭2台中其中1台上的mysql在另外一台机器上用vip连接mysql,连接正常同样的方法测试另一台机器。

    -----待整理