zoukankan      html  css  js  c++  java
  • MySQL主主+Keepalived实现高可用

     在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动。因此,如果是双主或者多主,就会增加mysql入口,增加高可用。不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题

    主主方案实现思路

    1、 两台mysql都可读写,互为主备默认只使用一台masterA负责数据的写入,另一台masterB备用处于备用状态

    2、 masterAmasterB的主库,masterB又是masterA的主库,它们互为主从;

    3、 两台主库之间做高可用,可以采用keepalived等方案使用VIP对外提供服务;

    4所有提供服务的从服务器与masterB进行主从同步(双主多从);

    5建议采用高可用策略的时候,masterAmasterB均不因宕机恢复后而抢占VIP(非抢占模式);

    这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上尽可能减少主库宕机对业务造成的影响,减少了主从同步给生产主库带来的压力;

    实验步骤:

    master:192.168.200.111

    slave:192.168.200.112

    配置master1服务器:

    1.修改配置文件

     vim /etc/my.cnf

    添加内容

    [mysqld]

    server-id=1

    log-bin=mysql-binlog#打开二进制功能

    log-slave-updates=true#将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启

    max_binlog_size=1024M#binlog单文件最大值

    auto_increment_offset = 1#自增长ID数

    auto_increment_increment = 2#奇数ID

    replicate-ignore-db = information_schema#忽略不同步主从的数据库

    replicate-ignore-db = performance_schema

    replicate-ignore-db = test

    replicate-ignore-db = mysql

    max_connections = 3000

    max_connect_errors = 30

    skip-character-set-client-handshake#忽略应用程序想要设置的其他字符集

    init-connect='SET NAMES utf8'#连接时执行的SQL

    character-set-server=utf8#服务端默认字符集

    wait_timeout=1800#请求的最大连接时间

    interactive_timeout=1800#和上一参数同时修改才会生效

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES#sql模式

    relay-log=relay-log-bin#开启中继日志

    relay-log-index=slave-relay-bin.index

     2.重启数据库

    systemctl restart mariadb

    3.登录数据库进行授权

    mysql -uroot -p'密码'

    3.给master2授权

    grant replication slave on *.* to 'repl'@'192.168.200.112' identified by '123456';

    4.刷新授权表

     flush privileges;

    5.查看信息表

    show master status;

      类似上表

    配置master2服务器:

    1.修改配置文件

    vim /etc/my.cnf

    添加内容:

    [mysqld]

    server-id       = 2

    log-bin=mysql-binlog

    log-slave-updates=true

    max_binlog_size=1024M

    auto_increment_offset = 2

    auto_increment_increment = 2#ID

    replicate-ignore-db = information_schema

    replicate-ignore-db = performance_schema

    replicate-ignore-db = test

    replicate-ignore-db = mysql

    max_connections = 3000

    max_connect_errors = 30

    skip-character-set-client-handshake

    init-connect='SET NAMES utf8'

    character-set-server=utf8

    wait_timeout=1800

    interactive_timeout=1800

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    relay-log=relay-log-bin

    relay-log-index=slave-relay-bin.index

    2.重启数据库

    systemctl restart mariadb

    3.登录数据库进行授权

    mysql -uroot -p'密码'

    4.给master1授权

     grant replication slave on *.* to 'repl'@'192.168.200.111' identified by '123123';

    5.刷新授权表

     flush privileges;

    6.查看信息表

    show master status;

     类似上表

    实现主主复制:

    配置master1数据库:

    1.登录到数据库

    mysql -uroot -p'密码'

    2.停掉从服务

    stop slave;

    3.指向master2

    change master to master_host='192.168.200.112',master_port=3306,master_user='repl',master_password='123123',master_log_file='mysql-binlog.000001',master_log_pos=889;

    #对应master2的IP地址、设置密码、binlog进程数和position号

    4.开启从服务

    start slave;

    5.查看从服务信息

     show slave statusG

    #确保两个线程处于开启状态

    master2数据库与master1数据库步骤相同

    唯一不同的是指向命令

    change master to master_host='192.168.200.111',master_port=3306,master_user='repl',master_password='123123',master_log_file='mysql-binlog.000004',master_log_pos=486;

     #对应master1的IP地址、设置密码、进程数和position号

    查看从服务信息

    show slave statusG

     
    #确保两个线程处于开启状态

    进行测试:
    测试环境,可以保证没数据写入。步骤是:先masterA锁表-->masterA备份数据-->masterA解锁表 -->masterB导入数据-->masterB设置主从-->查看主从

    1.在master1数据库中创建库

    create database hhh;

    2.在master2中查看数据库

    show databases;

     3.在master2中创建库jjj

    create database jjj;

    4.在master1中查看数据库

    show databases;

     实现主主复制

    配置keepalived实现主主复制高可用

    配置master1数据库:

    1.安装keepalived软件

    yum -y install keepalived

    2.修改keepalived配置文件

    vim /etc/keepalived/keepalived.conf

    修改内容:

    ! Configuration File for keepalived

     

    global_defs {

       router_id LVS_MASTER-A#指定LVS负载标识

    }

     

    vrrp_script mysql {

        script "/opt/mysql.sh"#准备触发脚本

        interval 2

        weight -5                 

        fall 2                 

        rise 1

    }

     

    vrrp_instance VI_1 {

        state BACKUP

        interface eno16777728#本机网卡名

        virtual_router_id 51

    priority 100#优先级

    nopreempt#采用不抢占模式

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        track_script {

            mysql#指定要触发的脚本

        }

        virtual_ipaddress {

            192.168.200.254#指定VIP地址

        }

    }

    3.编辑触发脚本

    vim /opt/mysql.sh

    编辑内容:

    #!/bin/bash

    counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

    if [ "${counter}" -eq 0 ]; then

        systemctl stop keepalived

    fi

    4.给与脚本执行权限

    chmod +x /opt/mysql.sh

    5.重启keepalived服务使其生效

    systemctl start keepalived

    6.查看IP信息

    ip a

     #VIP地址为254被篇master1所占用

    7.查看日志信息

     tail -f /var/log/messages

    master2数据库操作与master1相同

    唯一不同的地方是keepalived配置文件做调整

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived

     

    global_defs {

       router_id LVS_MASTER-B

    }

     

    vrrp_script mysql {

        script "/opt/mysql.sh"

        interval 2

        weight -5                 

        fall 2                 

        rise 1

    }

     

    vrrp_instance VI_1 {

        state BACKUP

        interface eno16777728

        virtual_router_id 51

        priority 99

        nopreempt

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        track_script {

            mysql

        }

        virtual_ipaddress {

            192.168.200.254

        }

    }

    实现双主复制并给予keepalived实现高可用

  • 相关阅读:
    linux 查看硬盘使用情况
    linux 用户操作命令
    Win10系列:C#应用控件进阶2
    Win10系列:C#应用控件进阶3
    Win10系列:C#应用控件进阶1
    Win10系列:C#应用控件基础23
    Win10系列:C#应用控件基础20
    Win10系列:C#应用控件基础21
    Win10系列:C#应用控件基础19
    Win10系列:C#应用控件基础17
  • 原文地址:https://www.cnblogs.com/990114-jhc/p/11690429.html
Copyright © 2011-2022 走看看