一:准备环境,yum搭建mysql数据库
二:设置主主同步
三:设置主从同步
四:安装mmm(五台虚拟机都要装)
五:故障测试
一:准备环境
1、准备5台虚拟机
(m1)master01 192.168.80.10
(m2)master02 192.168.80.20
(从数据库)slave01 192.168.80.30
(从数据库)slave02 192.168.80.40
(monitor服务器)监控器 192.168.80.50
2、先让虚拟机联网,我这里用的是桥接模式
3、配置ALI云源,然后安装epel-release源。(5台虚拟机都配置ALI云源)
yum install wget -y
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
//注意自己yum仓库配置文件的路径和名字别写错了
yum -y install epel-release
yum clean all && yum makecache
yum -y install mariadb-server mariadb
service firewalld stop
setenforce 0
systemctl restart mariadb
systemctl start mariadb
4、修改m1主配置文件
vi /etc/my.cnf //在[mysqld]下面添加以下内容,原有的内容不要动
[mysqld]
log_error=/var/lib/mysql/mysql.err //错误日志的路径
log=/var/lib/mysql/mysql_log.log //普通错误日志
log_slow_queries=/var/lib/mysql_slow_queris.log //慢查询日志
binlog-ignore-db=mysql,information_schema //不生成二进制日志的库
character_set_server=utf8 //字符集
log_bin=mysql_bin //二进制日志
server_id=1 //本机的id,跟其他服务器不能重复
log_slave_updates //允许从服务器来校正时间
sync_binlog=1 //
auto_increment_increment=2 //自增长一次递增多少
auto_increment_offset=1 //自增长的起始值
systemctl restart mariadb
netstat -anpt | grep 3306 //可以看到3306端口被检测
5、没有问题后,在m1操作把配置文件复制到其它3台数据库服务器上并启动服务器
scp /etc/my.cnf root@192.168.80.20:/etc/
//把80.10的/etc/my.cnf用root身份传输到80.20的/etc/。记得去改server_id
根据提示输入yes,然后输入192.168.80.20的登录密码
依次类推,传给80.30和80.40
6、注意:配置文件中的server_id 要修改,手动去修改每台数据库的server_id,每台不一样
二:配置主主同步(m1和m2互相为主)
1、在m1上为m2授予从的权限,在m2上也要为m1授予从的权限
先在m1登录数据库
mysql //我是yum安装的数据库,一开始没有设置用户和密码,所以直接登录了
grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456';
//注意:我准备的5台虚拟机都是80网段的,所以这里写的是允许所有80网段的。用户名为replication。密码为123456。
flush privileges; //刷新权限
上面两步没有问题后,在m2登录数据库,使用这条命令
show master status; //记录日志文件名称和位置值
再回到m1
change master to master_host='192.168.80.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000006',master_log_pos=1984;
//注意ip地址,用户名,密码,二进制日志序号,数值。不要写错了。
如果报下面的错误
先stop slave; 再用change命令。
start slave;
show slave status \G //看到这两处显示Yes就可以了
2、在m2上操作,(同理)
在m2登录数据库
mysql //登录数据库
grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456';
flush privileges;
去m1的数据库查看
show master status;
再回到m2
change master to master_host='192.168.80.10',master_user='replication',master_password='123456',master_log_file='mysql_bin.000008',master_log_pos=2474;
start slave;
show slave status \G
3、建库测试主主同步
create database dba; //在m1上建个库,m2上可以看到
drop database dba; //在m2上删除,m1也显示删除成功,同步成功。
三:设置主从同步
1、在两台从(192.168.80.30和192.168.80.40)上做,注意日志文件和位置参数的改变。
让这两个从认m1(192.168.80.10)为主。
在m1的数据库
show master status;
在两个从数据库输入下面命令
change master to master_host='192.168.80.10',master_user='replication',master_password='123456',master_log_file='mysql_bin.000008',master_log_pos=2474;
start slave;
show slave status \G
2、测试主从、主主、同步 情况
建立数据库,然后测试同步情况
……
四:安装MMM
1、在所有服务器上安装-----注意,epel源要配置好
yum -y install mysql-mmm*
//安装了mysql-mmm-agent(代理端,所有人都要有)跟mysql-mmm-monitor(在监视器上)
2、安装结束后,对mmm进行配置
cd /etc/mysql-mmm/
vi mmm_common.conf //所有主机上都要配置,直接复制多份
active_master_role writer (从数据库为reader,两个主数据库和监控器是writer)
……
<host default>
cluster_interface ens33
……
replication_user replication
replication_password 123456
agent_user mmm_agent
agent_password 123456
<host db1>
ip 192.168.80.10
mode master
peer db2
</host>
<host db2>
ip 192.168.80.20
mode master
peer db1
</host>
<host db3>
ip 192.168.80.30
mode slave
</host>
<host db4>
ip 192.168.80.40
mode slave
</host>
<role writer>
hosts db1, db2
ips 192.168.80.110 //自己编写的地址,跟数据库在同一个网段就可以
mode exclusive
</role>
<role reader>
hosts db3, db4
ips 192.168.80.130, 192.168.80.140 自己编写的地址,跟数据库在同一个网段就可以
mode balanced
</role>
:wq保存退出
3、把common.conf配置文件传给另外四台,注意我当前的位置
scp mmm_common.conf root@192.168.80.20:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.30:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.40:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.80.50:/etc/mysql-mmm/
4、在monitor(监控器192.168.80.50)服务器上配置
cd /etc/mysql-mmm/ //改密码
vi mmm_mon.conf
<host default>
monitor_user mmm_monitor
monitor_password 123456
</host>
5、在所有数据库上为mmm_agent授权
grant super, replication client, process on *.* to 'mmm_agent'@'192.168.80.%' identified by '123456';
6、在所有数据库上为mmm_moniter授权
grant replication client on *.* to 'mmm_monitor'@'192.168.80.%' identified by '123456';
flush privileges;
7、修改所有数据库的mmm_agent.conf
vi /etc/mysql-mmm/mmm_agent.conf
this db1 //根据规划进行逐一调整(192.168.80.10是db1,192.168.80.20是db2,192.168.80.30是db3,192.168.80.40是db4,跟之前的 mmm_common.conf配置文件对应上)
8、在所有数据库服务器上启动mysql-mmm-agent
systemctl start mysql-mmm-agent
systemctl enable mysql-mmm-agent
9、在monitor服务器上配置
vi mmm_mon.conf
……
ping_ips 192.168.80.10,192.168.80.20,192.168.80.30,192.168.80.40 //数据库服务器地址
auto_set_online 10 //间隔设置成10秒
……
systemctl start mysql-mmm-monitor //启动mysql-mmm-monitor
mmm_control show //查看各节点的情况
db1(192.168.80.10) master/ONLINE. Roles: writer(192.168.80.110)
db2(192.168.80.20) master/ONLINE. Roles:
db3(192.168.80.30) slave/ONLINE. Roles: reader(192.168.80.140)
db4(192.168.80.40) slave/ONLINE. Roles: reader(192.168.80.130)
mmm_control checks all //显示很多OK
手动切换vip绑定:mmm_control move_role writer db1 (实验期间不要手动切换)
五:故障测试
1、停止m1 systemctl stop mariadb
确认 虚拟地址 110 是否移动到 m2 上。注意:主不会抢占
mmm_control show
db1(192.168.80.10) master/HARD_OFFLINE. Roles:
db2(192.168.80.20) master/ONLINE. Roles: writer(192.168.80.110)
在m1服务器上为监控机地址授权登录
grant all on *.* to 'testdba'@'192.168.80.%' identified by '123456';
flush privileges;
2、在监控服务器上登录
监控器上要安装mariadb,不然会报错没有mysql命令
yum install mariadb
mysql -utestdba -p -h 192.168.80.110 //虚拟地址
创建数据,测试同步情况。
3、验证将从服务器停止一台,另一台将接管两个虚拟IP,以保证业务不停止