先配置成主从同步

先在各节点安装服务

[root@inotify ~]# yum install mariadb-server -y

编辑主节点的配置文件,并启动

[root@centos7 ~]# vim /etc/my.cnf

[mysqld]
server_id=28
log-bin=master-bin
innodb_file_per_table=ON
skip_name_resolve=ON
[root@centos7 ~]# systemctl restart mariadb

配置各从节点的配置文件并启动

[root@inotify ~]# vim /etc/my.cnf
[mysqld]
server_id=26
log-bin=master-bin
relay-log=relay-bin
read_only=1
relay_log_purge=0 #不清除中继日志文件
skip_name_resolve=on
innodb_file_per_table=On

[root@slave-master ~]# vim /etc/my.cnf
[mysqld]
server_id=33
log-bin=master-bin
relay_log_purge=0
relay_log=relay-bin
read_only=1
skip_name_resolve=On
innodb_file_per_table=on

在主节点授权一个可复制的账号

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 | 245 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec) MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.37.%' identified by 'centos';
Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec) #先查看日志位置,否则创建的复制账号在各节点不会同步,导致主节点宕机,从节点没有复制账号

在各从节点加入并开启复制

MariaDB [(none)]> change master to master_host='192.168.37.28',master_user='repluser',master_password='centos',master_log_file='master-bin.000003',master_log_pos=245;
MariaDB [(none)]> start slave;

在将这个主从复制架构配置成半同步复制,防止数据丢失

在主节点安装插件

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout = 1000; MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 1000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
4 rows in set (0.00 sec)

在各从服务器安装插件

MariaDB [(none)]> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> set global rpl_semi_sync_slave_enabled=1;

实现MHA

准备mha的管理包和node包,在管理节点安装管理包和node包(管理包依赖epel源)

[root@nfs ~]# ls
anaconda-ks.cfg lrzsz mha4mysql-node-0.56-0.el6.noarch.rpm pcre-devel
bc mha4mysql-manager-0.56-0.el6.noarch.rpm original-ks.cfg [root@nfs ~]# yum install mha*

在各mariadb节点安装node包

[root@inotify ~]# ls
anaconda-ks.cfg mha4mysql-node-0.56-0.el6.noarch.rpm original-ks.cfg
[root@inotify ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm

在管理节点将密钥拷贝到各节点(实现ssh互通)

[root@nfs ~]# ssh-keygen
[root@nfs ~]# ssh-copy-id 192.168.37.23 #先拷贝给自己
[root@nfs ~]# scp -r .ssh/ 192.168.37.28:/root/ #拷贝到各mariadb节点

在管理节点配置文件

[root@nfs ~]# mkdir /etc/mha
[root@nfs ~]# vim /etc/mha/app1.cnf
[server default]
user=mhauser
password=centos
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=centos
ping_interval=1
[server1]
hostname=192.168.37.28
candidate_master=1
[server2]
hostname=192.168.37.26
candidate_master=1
[server3]
hostname=192.168.37.33

在主节点授权一个可以监控用户

MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.37.%' identified by 'centos';
Query OK, 0 rows affected (1.00 sec) MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

在管理节点做测试

[root@nfs ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
[root@nfs ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

在管理节点启动

[root@nfs ~]# masterha_manager --conf=/etc/mha/app1.cnf

宕到主几点测试

注意: 记得将新提升的主节点的配置文件中的read_only值注释或删除,否则重启后会有问题

配置PorxySQL服务器的Yum源安装proxysql

[root@msyql-proxy ~]# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
> [proxysql_repo]
> name= ProxySQL YUM repository
> baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
> gpgcheck=1
> gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
> EOF

[root@msyql-proxy ~]# yum install proxysql -y
[root@msyql-proxy ~]# systemctl start proxysql

[root@msyql-proxy ~]# mysql -uadmin -padmin -P 6032 -h127.0.0.1
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.37.28',3306);
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.37.26',3306);
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.37.33',3306);
Query OK, 1 row affected (0.00 sec)       #:将主从加入到proxysql
MySQL [(none)]> load mysql servers to runtime;  # 加载到内存
Query OK, 0 rows affected (0.00 sec)        
MySQL [(none)]> save mysql servers to disk;     #保存到磁盘
Query OK, 0 rows affected (0.01 sec)
 

在master节点添加一个监控后端服务器的用户

 MariaDB [(none)]> grant replication client on *.* to monitor@'192.168.37.%' identified by 'magedu';
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

在proxysql服务器添加监控后端服务器的用户

MySQL [(none)]> set mysql-monitor_username='monitor';
Query OK, 1 row affected (0.00 sec) MySQL [(none)]> set mysql-monitor_password='magedu';
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> load mysql variables to runtime;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> save mysql variables to disk;
Query OK, 97 rows affected (0.00 sec)
MySQL [(none)]> insert into mysql_replication_hostgroups values(10,20,"test");
Query OK, 1 row affected (0.00 sec)  #设置分组
MySQL [(none)]> load mysql servers to runtime;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> save mysql servers to disk;
Query OK, 0 rows affected (0.01 sec)

在主节点创建一个用户可以让该用户操作主从节点的数据库

MariaDB [(none)]> grant all on *.* to sqluser@'192.168.8.%' identified by 'magedu';
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

在proxysql上配置路由规则

MySQL [(none)]> insert into mysql_query_rules
-> (rule_id,active,match_digest,destination_hostgroup,apply)VALUES
-> (1,1,'^SELECT.*FOR UPDATE$',10,1),(2,1,'^SELECT',20,1);
Query OK, 2 rows affected (0.01 sec) MySQL [(none)]> load mysql query rules to runtime;
Query OK, 0 rows affected (0.00 sec) MySQL [(none)]> save mysql query rules to disk;
Query OK, 0 rows affected (0.00 sec)

proxysql+MHA+半同步复制的更多相关文章

  1. Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)

    之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...

  2. mysql数据库备份,主从复制及半同步复制

    1.使用mysqldump备份数据库并通过备份及二进制日志还原数据(备份完后再写入数据,然后再删库) mysqldump -A --single-transaction -F --master-dat ...

  3. Mysql 半同步复制配置

    以下是配置和监控半同步复制: 1. 半同步复制功能以plugin的方式接入MySQL,需要在主库与从库两端同时开启半同步的支持,具体配置如下: On the master mysql> INST ...

  4. mysql 半同步复制~ 整体概述与改进

    一 简介:今天来聊聊增强半同步复制这一强悍的特性 二 原理解析 1 AFTER_COMMIT(5.6默认值) master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log ...

  5. mysql配置为半同步复制

    mysql 半同步插件是由谷歌提供,具体位置/usr/local/mysql/lib/plugin/下,一个是 master用的 semisync_master.so,一个是 slave 用的 sem ...

  6. MySQL半同步复制的搭建和配置原理

    半同步复制: 什么是半同步复制?我们知道在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的.异步复制可以提供最佳的性能,因为主服务器在将更新的数据写入它的二进制日志(Binl ...

  7. MySQL半同步复制搭建

    默认情况下,MySQL 5.5/5.6/5.7和MariaDB 10.0/10.1的复制是异步的,异步复制可以提供最佳性能,主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完 ...

  8. MHA-结合MySQL半同步复制高可用集群(Centos7)

    目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...

  9. Mariadb之半同步复制集群配置

    首先我们来了解下在mariadb/mysql数据库主从复制集群中什么是同步,什么是异步,什么是半同步:所谓同步就是指主节点发生写操作事件,它不会立刻返回,而是等到从节点接收到主节点发送过来的写操作事件 ...

随机推荐

  1. 关于 better-scroll 设置了以后无法滚动或不生效的问题

    首先在mounted里面注册组件  例:let scroll = new BScroll("#commondityLeftList")   然后打印实例化对象,例:console. ...

  2. install virtualenv without sudo

    用普通用户安装virtualenv Perhaps this was valid for older versions of virtualenv. For now, if you want to r ...

  3. django improperly configured

    ImproperlyConfigured: You must either define the environment variable DJANGO_SETTINGS_MODULE or call ...

  4. 第12组 Alpha冲刺 (1/6)

    过去两天完成了哪些任务 文字描述 静态页面代码编写以及一些点击事件 展示GitHub当日代码/文档签入记录 接下来的计划 1.继续学习echarts 2.编写所需要的图表代码 还剩下哪些任务 1.图表 ...

  5. postman调试工具介绍及常用的快捷键收集

    关于Postman postman基础功能介绍 使用postman进行接口自动化测试 快捷键大全 简单操作 请求 工具栏 接口 窗口 数据编辑 关于Postman Postman是一款功能强大的网页调 ...

  6. mysql注入绕过information_schema过滤

    1.利用mysql5.7新增的sys.schema_auto_increment_columns 这是sys数据库下的一个视图,基础数据来自与information_schema,他的作用是对表的自增 ...

  7. lilypond进阶——用scheme修改乐谱细节

    lilypond对乐谱内容的修改非常自由,用户可以自由根据需要做调整 调整一般都是用\override的命令,但是会比较冗长,码代码的时候比较麻烦 重新设置一个函数来概括命令,调用的时候使用的代码更短 ...

  8. nginx得请求转发代码-将请求转发到网关

    首先:本地主机host更改成 192.168.111.1 gulimail.com 这样一访问网址就能映射到本地. 然后修改nginx得conf worker_processes 1; events ...

  9. linux新增定时脚本

    crontab -e 然后新增: 0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh 控制台回显"crontab:inst ...

  10. 洛谷 P4900 - 食堂(推式子)

    洛谷题面传送门 首先推式子: \[\begin{aligned} ans&=\sum\limits_{i=A}^B\sum\limits_{j=1}^i\{\dfrac{i}{j}\} \en ...