欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【分布式】Mysql主备,主从,高可用

程序员文章站 2022-04-15 20:00:44
环境准备CentOS:7.7(10.20.178.4,10.20.178.5)mysql:5.5.8keepalived:2.1.51 主备配置/etc/my.cnf主:10.20.178.4[mysqld]#启动二进制日志log-bin=mysql-bin#同步数据库binlog-do-db=edrserver#服务IDserver-id=1#不同步的数据库,如mysqlbinlog-ignore-db=mysql,information_schema#1次事...

环境准备

CentOS:7.7(10.20.178.4,10.20.178.5)

mysql:5.5.8

keepalived:2.1.5

1 主备

  • 配置/etc/my.cnf

主:10.20.178.4

[mysqld]
#启动二进制日志
log-bin=mysql-bin
#同步数据库
binlog-do-db=edrserver
#服务ID
server-id=1
#不同步的数据库,如mysql
binlog-ignore-db=mysql,information_schema
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大
sync_binlog = 1

备:10.20.178.5

[mysqld]
#服务ID
server-id=2
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大
sync_binlog = 1
#同步数据库
replicate-do-db = edrserver
#忽略数据库
replicate-ignore-db = mysql,information_schema
  • 配置主服务--》备服务

主:10.20.178.4

设置同步账号,授予REPLIATION SLAVE权限

grant replication slave,reload,super on *.* to test@'10.20.178.5' identified by 'test';
flush privileges;

查看当前主服务状态:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      361 | edrserver    | mysql            |
+------------------+----------+--------------+------------------+

备:10.20.178.5

配置主服务地址,指定同步账号密码,同步log-file文件,以及同步位置

stop slave;
change master to master_host='10.20.178.4',master_user='test',master_password='test',master_log_file='mysql-bin.000001',master_log_pos=361;
start slave;

2 主主

  • 配置/etc/my.cnf

主1:10.20.178.4

[mysqld]
#启动二进制日志
log-bin=mysql-bin
#同步数据库
binlog-do-db=edrserver
#服务ID
server-id=1
#不同步的数据库,如mysql
binlog-ignore-db=mysql,information_schema
#从库作为其他从库的主库
log-slave-updates
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大,默认为0,自主刷磁盘
sync_binlog = 1
#自增起始值
auto_increment_offset = 1
#自增增量
auto_increment_increment = 2
#同步数据库
replicate-do-db = edrserver
#忽略数据库
replicate-ignore-db = mysql,information_schema

主2:10.20.178.5

[mysqld]
#启动二进制日志
log-bin=mysql-bin
#同步数据库
binlog-do-db=edrserver
#服务ID
server-id=2
#不同步的数据库,如mysql
binlog-ignore-db=mysql
#从库作为其他从库的主库
log-slave-updates
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大,默认为0,自主刷磁盘
sync_binlog = 1
#自增起始值,双数,避免主主同步场景主键重复
auto_increment_offset = 2
#自增增量
auto_increment_increment = 2
#同步数据库
replicate-do-db = edrserver
#忽略数据库
replicate-ignore-db = mysql,information_schema
  • 配置主1服务(10.20.178.4)--》主2服务(10.20.178.5

和主备服务配置一模一样。

  • 配置主2服务(10.20.178.5)--》主1服务(10.20.178.4

总体过程合并过程:

1、主服务设置同步账号

10.20.178.4:
grant replication slave,reload,super on *.* to test@'10.20.178.5' identified by 'test';
flush privileges;
10.20.178.5:
grant replication slave,reload,super on *.* to test@'10.20.178.4' identified by 'test';
flush privileges;

2、备服务配置

10.20.178.4:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      361 | edrserver    | mysql            |
+------------------+----------+--------------+------------------+
stop slave;
change master to master_host='10.20.178.5',master_user='test',master_password='test',master_log_file='mysql-bin.000001',master_log_pos=107;
start slave;

10.20.178.5:
stop slave;
change master to master_host='10.20.178.4',master_user='test',master_password='test',master_log_file='mysql-bin.000001',master_log_pos=361;
start slave;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 | edrserver    | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

3 高可用

1、安装keepalived

先解压到root目录

cd /root/keepalived-2.1.5 &&./configure --prefix=/usr/local/keepalived && make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d/ && mkdir /etc/keepalived && cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ && cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/ && cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

2、配置/etc/keepalived/keepalived.conf

虚拟IP:10.20.178.228

真实IP:10.20.178.4,10.20.178.5

global_defs {
}

#验证mysql是否停止,如果停止则停止keepalive
vrrp_script check_mysql {
    script "/etc/keepalived/checkMysql.sh"  #具体脚本路径
    interval 1  #脚本循环运行间隔
}

#VRRP虚拟路由冗余协议配置
vrrp_instance MYSQL_VIP {   #自定义名称MYSQL_VIP;
    state BACKUP   #MASTER表示是一台主设备,BACKUP表示为备用设备(避免master恢复后抢占VIP,使用不抢占模式,通过优先级来控制)
    nopreempt	#开启不抢占,master恢复后不会抢占备机的VIP,避免了IP切换
    interface eth0   #指定VIP需要绑定的物理网卡
    virtual_router_id 55   #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
    priority 88   #定义这台设备的优先级 1-254;master节点该值需设置为最大
    advert_int 1   #生存检测时的组播信息发送间隔,组内一致
    authentication {    #设置验证信息,组内一致
        auth_type PASS   #有PASS 和 AH 两种,常用 PASS
        auth_pass 1314    #密码
    }
    track_script {    #使用在这个域中使用预先定义的脚本,上面定义的
        check_mysql
    }
    virtual_ipaddress {
        10.20.178.228    #指定VIP地址,组内一致,可以设置多个IP
    }
}


virtual_server 10.20.178.228 3306 {
    delay_loop 6	#健康检查时间间隔,不一定准
    lvs_sched rr	#lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
    lvs_method DR	#负载均衡转发规则NAT|DR|TUN
    persistence_timeout 50 #会话保持时间
    protocol TCP	#使用的协议
    #配置自己的
    real_server 10.20.178.4 3306 {
        weight 1 #默认为1,0为失效
        TCP_CHECK {
            connect_timeout 3 #连接超时时间
            retry 3 #重连次数
            delay_before_retry 3 #重连间隔时间
        }
    }
    real_server 10.20.178.5 3306 {
        weight 1 #默认为1,0为失效
        TCP_CHECK {
            connect_timeout 3 #连接超时时间
            retry 3 #重连次数
            delay_before_retry 3 #重连间隔时间
        }
    }
}

mysql状态监测脚本:/etc/keepalived/checkMysql.sh

发现mysql停止运行,则停止本机虚拟IP,这样虚拟IP则切换到其他生效地址

#! /bin/bash
if [ $(ps -C mysqld --no-header | wc -l) -eq 0 ]; then
    /etc/init.d/keepalived stop
fi

keepalived运行日志默认地址(可修改):/var/log/messages

遇到问题:

发现脚本checkMysql.sh不执行:确少sh头部;shell脚本包含M字符

 


爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!

本文地址:https://blog.csdn.net/qqchaozai/article/details/107512546