在企业中,数据库高可用一直是企业的重中之重,中小企业不少都是使用mysql主主方案,一主多从,读写分离等,可是单主存在单点故障,从库切换成主库须要做改动。所以,若是是双主或者多主,就会增长mysql入口,增长高可用。不过多主须要考虑自增加ID问题,这个须要特别设置配置文件,好比双主,可使用奇偶,总之,主之间设置自增加ID相互不冲突就能完美解决自增加ID冲突问题mysql
主主方案实现思路sql
一、 两台mysql均可读写,互为主备。默认只使用一台masterA负责数据的写入,另外一台masterB备用处于备用状态;数据库
二、 masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;vim
三、 两台主库之间作高可用,能够采用keepalived等方案,使用VIP对外提供服务;bash
4、全部提供服务的从服务器与masterB进行主从同步(双主多从);服务器
5、建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);ide
这样作能够在必定程度上保证主库的高可用,在一台主库down掉以后,能够在极短的时间内切换到另外一台主库上,尽量减小主库宕机对业务形成的影响,减小了主从同步给生产主库带来的压力;测试
实验步骤:spa
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 status\G
#确保两个线程处于开启状态
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 status\G
#确保两个线程处于开启状态
进行测试:
测试环境,能够保证没数据写入。步骤是:先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实现高可用