当前位置: 移动技术网 > IT编程>数据库>Mysql > 【分布式】Mysql主备,主主,高可用

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

2020年07月23日  | 移动技术网IT编程  | 我要评论

环境准备

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网