今天,写写mysql兄弟公司maridb开发的一个读写分离,既然是兄弟,那也适用于mysql。

1、安装依赖包

yum -y install gcc gcc-c++ ncurses ncurses-devel cmake
 

2、下载软件

cd /usr/local
wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.14.tar.gz

3、添加mysql用户和用户组

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

4、解压安装mysql

 
# 创建数据目录
mkdir -p /data/mysql

# 解压boost
tar xzf boost_1_59_0.tar.gz # 解压mysql,编译安装
tar xzf mysql-5.7..tar.gz
cd mysql-5.7.
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DDOWNLOAD_BOOST= \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE= \
-DWITH_PARTITION_STORAGE_ENGINE= \
-DWITH_FEDERATED_STORAGE_ENGINE= \
-DWITH_BLACKHOLE_STORAGE_ENGINE= \
-DWITH_MYISAM_STORAGE_ENGINE= \
-DENABLED_LOCAL_INFILE= \
-DENABLE_DTRACE= \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1 make
make install

# 复制到启动项
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig mysql on

# 复制配置文件
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf # 安装
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

5、添加环境变量

cd ~

vi .profile_bash

PATH=/usr/local/mysql/bin:$PATH

export PATH

6、mysql主从复制(利用gtid特性)

# 关闭selinux和防火墙
systemctl stop firewalld.service
vi /etc/selinux/config
# 配置每个节点配置文件my.cnf
# 添加如下
log-bin=mysql-bin
server-id=
gtid_mode=ON
log_slave_updates
enforce_gtid_consistency
(注:除了server-id每个节点不一样,其它都一样,也必须加,以一般主从复制区别,多了下面的3个参数)
# 主节点添加复制账号
grant replication slave on *.* to 'backup'@'%'identified by'backup';

# 从节点执行
change master to master_host='192.168.10.140', master_user='backup', master_password='backup',master_port=,master_auto_position=;
start slave;

7、maxscale安装

安装依赖
yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y

MaxScale 的下载地址:

https://downloads.mariadb.com/files/MaxScale

rpm -ivh maxscale-beta-2.0.-.centos..x86_64.rpm
在开始配置之前,需要在 master和backup 中为 MaxScale 创建两个用户,用于监控模块和路由模块。

创建监控用户

mysql> create user scalemon@'%' identified by "123456";

mysql> grant replication slave, replication client on *.* to scalemon@'%';

创建路由用户 

mysql> create user scaleroute@'%' identified by "123456";

mysql> grant select on mysql.* to scaleroute@'%';

用户创建完成后,开始配置

vi /etc/maxscale.cnf
[root@maxscale1 ~]# cat /etc/maxscale.cnf
# MaxScale documentation on GitHub:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Documentation-Contents.md # Global parameters
#
# Complete list of configuration options:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Getting-Started/Configuration-Guide.md [maxscale]
threads=
log_info=
logdir=/tmp/ # Server definitions
#
# Set the address of the server to the network
# address of a MySQL server.
# [server1]
type=server
address=192.168.10.140
port=
protocol=MySQLBackend [server2]
type=server
address=192.168.10.141
port=
protocol=MySQLBackend [server3]
type=server
address=192.168.10.142
port=
protocol=MySQLBackend # Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MySQL Monitor documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Monitors/MySQL-Monitor.md [MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2,server3
user=scalemon
passwd=
monitor_interval= # Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
# # ReadConnRoute documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadConnRoute.md # [Read-Only Service]
# type=service
# router=readconnroute
# servers=server1
# user=myuser
# passwd=mypwd
# router_options=slave # ReadWriteSplit documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadWriteSplit.md [Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=scaleroute
passwd=
max_slave_connections=% # This service enables the use of the MaxAdmin interface
# MaxScale administration guide:
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Reference/MaxAdmin.md [MaxAdmin Service]
type=service
router=cli # Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
# # [Read-Only Listener]
# type=listener
# service=Read-Only Service
# protocol=MySQLClient
# port= [Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port= [MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default

启动

maxscale --config=/etc/maxscale.cnf
查看
注意:这里用的是最新的2.0版本,登录已经不像老版本maxadmin --user=admin --password=mariadb这样了,而是像下面一样:
[root@maxscale1 ~]# maxadmin -S /tmp/maxadmin.sock
MaxScale> list services
Services.
--------------------------+----------------------+--------+---------------
Service Name | Router Module | #Users | Total Sessions
--------------------------+----------------------+--------+---------------
Read-Write Service | readwritesplit | |
MaxAdmin Service | cli | |
--------------------------+----------------------+--------+---------------
命令也有变化,请自行翻墙到Google查看
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.10.140 | | | Master, Running
server2 | 192.168.10.141 | | | Slave, Running
server3 | 192.168.10.142 | | | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
测试
在其它远程客户端连接maxscale所在服务器的数据库
mysql -h 192.168.10.140 -P4006 -uscalemon -p
mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| maxscale1 |
+------------+
row in set (0.00 sec) 关了一个slave后
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.10.140 | | | Master, Running
server2 | 192.168.10.141 | | | Slave, Running
server3 | 192.168.10.142 | | | Down
-------------------+-----------------+-------+-------------+--------------------

参考,我是开启翻墙的

 
 

maxscale读写分离的更多相关文章

  1. docker环境 mysql读写分离 mycat maxscale

    #mysql读写分离测试 环境centos 7.4 ,docker 17.12 ,docker-compose mysql 5.7 主从 mycat 1.6 读写分离 maxscale 2.2.4 读 ...

  2. MaxScale:实现MySQL读写分离与负载均衡的中间件利器

    1. MaxScale 是干什么的? 配置好了 MySQL 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡. 读写分离和负载均衡 是MySQL集群的 ...

  3. Maxscale安装-读写分离(1)

    前言 关于MySQL中间件的产品也很多,之前用过了360的Atlas.玩过MyCat.这边我选择 Maxscale的原因就是功能能满足需求,也看好他的未来发展. 其实有关于如何安装 Maxscale的 ...

  4. Mysql - 读写分离与读负载均衡之Maxscale

    一.概述 常见的高可用方案如MMM和MHA等都将重点放在主库上,一旦主库出现故障,通过这些方案能将主库故障进行转移. 本文将给大家介绍一款由mariadb公司出品的中间件Maxscale,该中间件能实 ...

  5. Centos7安装maxscale 实现mysql的读写分离

    安装依赖 yum install -y novacom-server.x86_64 libaio.x86_64 libaio-devel.x86_64 网站下载 https://downloads.m ...

  6. MHA + Maxscale 数据库的高可用和读写分离

    MySQL 常见发行版本 MySQL 标准化.自动化部署 深入浅出MySQL备份与恢复 深入理解MySQL主从复制 MySQL构架设计与容量规划 MHA Maxscale MySQL 常见发行版本 M ...

  7. 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡【转载】

      文章 原始出处 :http://sofar.blog.51cto.com/353572/1601552 ============================================== ...

  8. 基于Keepalived高可用集群的MariaDB读写分离机制实现

    一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...

  9. Atlas+Keepalived实现MySQL读写分离、读负载均衡

    一.基础介绍 ========================================================================================== 1. ...

随机推荐

  1. 将js进行到底:node学习笔记2

    node重要API之FS--CLI编程初体验 所谓的"fs"就是file system! 当下几乎任何一门编程语言都会提供对文件系统读写的API,比如c语言的open()函数. 而 ...

  2. SQLite学习手册(实例代码<一>)

    一.获取表的Schema信息:       1). 动态创建表.     2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型.     3). 删除该表.     ...

  3. <c:forEach 的常用整理

    <c:forEach items="${images}" var="img" varStatus="status"> <d ...

  4. IT术语的正确读法

    Linux /ˈlɪnəks/ /ˈlɪnʊks/(EU) Linux 是一类 Unix 计算机操作系统的统称.该操作系统的核心的名字也是“ Linux” .参考: < !-- m --> ...

  5. Angular 4+ Http

    HTTP: 使应用能够对远端服务器发起相应的Http调用: 你要知道: HttpModule并不是Angular的核心模块,它是Angualr用来进行Web访问的一种可选方式,并位于一个名叫@angu ...

  6. isinstance和issubclass、动态模块导入、异常处理

    一.isinstance和issubclass isinstance:判断某个对象是否是某个类的实例,返回True或Flase issubclass:判断某个类是否是某个类的子类. 例如: class ...

  7. 顺序一致性内存模型与JMM的“顺序一致性”

    顺序一致性内存模型是一个被计算机科学家理想化了的理论参考模型,它为程序员提供了极强的内存可见性保证.顺序一致性内存模型有两大特性.1)一个线程中的所有操作必须按照程序的顺序来执行.2)(不管程序是否同 ...

  8. python异步加协程获取比特币市场信息

    目标 选取几个比特币交易量大的几个交易平台,查看对应的API,获取该市场下货币对的ticker和depth信息.我们从网站上选取4个交易平台:bitfinex.okex.binance.gdax.对应 ...

  9. Win和Linux查看端口和杀死进程

    title: Win和Linux查看端口和杀死进程 date: 2017-7-30 tags: null categories: Linux --- 本文介绍Windows和Linux下查看端口和杀死 ...

  10. Tomcat+Servlet面试题都在这里

    下面是我整理下来的Servlet知识点:  图上的知识点都可以在我其他的文章内找到相应内容. Tomcat常见面试题 Tomcat的缺省端口是多少,怎么修改 Tomcat的缺省端口是多少,怎么修改 ...