mysql高可用方案 (如何提高mysql可用性)

实验拓扑:192.168.80.181 mariadb主服务器

192.168.80.182 mariadb 主服务器

192.168.80.185 mmm监视器monitor

192.168.80.189 mariadb从服务器

192.168.80.190 mariadb从服务器

1.基础环境搭建

所有主机都需要联网,并配置阿里云源,然后安装epel-release源

yum install -y wget

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo //修改yum仓库源为阿里云源

yum -y install epel-release //加载epel源

yum clean all && yum makecache //清理缓存并加载元数据缓存

yum -y install mariadb-server mariadb //安装mariadb

service firewalld stop

setenforce 0

systemctl start mariadb //启动mariadb

vi /etc/my.cnf //配置m1的配置文件,然后复制到其他服务器上,注意服务器Id

[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 //自增字段的起始值:1.3.5.7等奇数id

service mariadb restart

netstat -anpt | grep 3306 //检查是否启动

2. 配置主主同步

mysql //登录

MariaDB [(none)]> show master status; //在两台主服务器上查看bin日志起始位置和position起始位置

MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456'; //两台主都执行,为对方的同步用户授权

MariaDB [(none)]> change master to master_host='192.168.80.182',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=410;

//填写自己同步账号的参数,注意bin日志编号和pos的值,不能填错。这句在m1上执行

MariaDB [(none)]> change master to master_host='192.168.80.181',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=245; //这句在m2上执行

MariaDB [(none)]> start slave; //打开同步

MariaDB [(none)]> show slave status \G //查看同步状态,以下两个值为yes则成功,两台都要检查

mysqlmmm,mysql高可用位置

下面建库进行测试,m1上新建数据库dba

mysqlmmm,mysql高可用位置

m2上查看数据库,发现也有dba

mysqlmmm,mysql高可用位置

在m1上将dba删除

mysqlmmm,mysql高可用位置

m2上查看dba也消失了

mysqlmmm,mysql高可用位置

主主同步配置成功。

主从同步配置

MariaDB [(none)]> change master to master_host='192.168.80.181',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=1432;

MariaDB [(none)]> start slave;

MariaDB [(none)]> show slave status \G

以上在两台从服务器上操作即可

3. 配置MMM

yum -y install mysql-mmm* //5台主机上都要安装

[root@ab ~]# cd /etc/mysql-mmm/

[root@ab mysql-mmm]# vi mmm_common.conf //修改mmm配置文件,配置一台,其他的直接复制,修改如下。

<host default>

cluster_interface ens33

pid_path /run/mysql-mmm-agent.pid

bin_path /usr/libexec/mysql-mmm/

replication_user replication

replication_password 123456

agent_user mmm_agent //用户代理端

agent_password 123456

</host>

<host db1>

ip 192.168.80.181

mode master

peer db2

</host>

<host db2>

ip 192.168.80.182

mode master

peer db1

</host>

<host db3>

ip 192.168.80.189

mode slave

</host>

<host db4>

ip 192.168.80.190

mode slave

</host>

<role writer>

hosts db1, db2

ips 192.168.80.199

mode exclusive

</role>

<role reader>

hosts db3, db4

ips 192.168.80.200, 192.168.80.201

mode balanced

</role>

将配置文件拷贝给其他主机

scp mmm_common.conf root@192.168.80.182:/etc/mysql-mmm/

scp mmm_common.conf root@192.168.80.185:/etc/mysql-mmm/

scp mmm_common.conf root@192.168.80.189:/etc/mysql-mmm/

scp mmm_common.conf root@192.168.80.190:/etc/mysql-mmm/

下面要在所有的数据库里为监视器用户授权,并且为代理用户mmm_agent授权

MariaDB [(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'192.168.80.%' identified by '123456'; //代理用户授权

MariaDB [(none)]> grant replication client on *.* to 'mmm_monitor'@'192.168.80.%' identified by '123456'; //监视器用户授权

MariaDB [(none)]> flush privileges;

下面按照mmm_common.conf 配置文件中的数据库角色划分配置mmm_agent.conf文件

[root@ab mysql-mmm]# vi /etc/mysql-mmm/mmm_agent.conf

this db1 //根据规划进行逐一调整,181为db1,182为db2,189为db3,190为db4

systemctl start mysql-mmm-agent

systemctl enable mysql-mmm-agent //在所有数据库服务器上启动mysql-mmm-agent

MMM的架构身份配置结束,下面对架构的监视器monitor进行配置80.185

[root@www.mysql.com ~]#cd /etc/mysql-mmm/

[root@www.mysql.com mysql-mmm]#ls

mmm_agent.conf mmm_common.conf mmm_mon.conf mmm_mon_log.conf mmm_tools.conf

[root@www.mysql.com mysql-mmm]#vi mmm_mon.conf //修改监视器的监视用户密码

ping_ips 192.168.80.181,192.168.80.182,192.168.80.189,192.168.80.190 //数据库服务器地址

auto_set_online 5 //使被监视的服务器转为online的时间

<host default>

monitor_user mmm_monitor

monitor_password 123456

</host>

[root@www.mysql.com mysql-mmm]#systemctl start mysql-mmm-monitor //启动监视端

[root@www.mysql.com mysql-mmm]#mmm_control show //查看各节点的情况

mysqlmmm,mysql高可用位置

[root@www.mysql.com mysql-mmm]#mmm_control checks all //校对mmm,需要都为OK

mysqlmmm,mysql高可用位置

故障测试

将m1数据库停止,查看漂移地址情况

[root@ab mysql-mmm]# service mariadb stop //将m1数据库停止

[root@www.mysql.com mysql-mmm]#mmm_control show

mysqlmmm,mysql高可用位置

主服务器地址漂移了,注意:再次启动m1不会抢占

将m3从服务器停止,查看漂移地址情况

mysqlmmm,mysql高可用位置

漂移地址都到了m4身上

在这个架构中要注意的是主从同步,从服务器只能跟m1进行主从同步,m2只是跟m1进行主主同步做备份用的,假如m1挂了,两台从服务器不能从m2上同步内容,必须将m1重启才行。

在m1服务器上为监控机地址授权登录

grant all on *.* to 'testdba'@'192.168.80.%' identified by '123456';

flush privileges; //授权testdba用户在80.0网段可以登录管理数据库所有内容,密码123456

下面在监控服务器上安装mariadb,并且登录主服务器漂移地址

[root@www.mysql.com ~]#yum install mariadb -y

[root@www.mysql.com ~]#mysql -utestdba -p -h 192.168.80.199

mysqlmmm,mysql高可用位置

下面创建一个数据库测试

mysqlmmm,mysql高可用位置

在m2上查看

mysqlmmm,mysql高可用位置

在从服务器上查看

mysqlmmm,mysql高可用位置

同步成功