数据库_读写分离-多实例应用

Posted liusingbon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库_读写分离-多实例应用相关的知识,希望对你有一定的参考价值。

1.数据读写分离介绍及搭建案例; 2.多实例服务.

,数据读写分离介绍

1.概念:把客户端访问的查询请求和写请求,分别给不同的数据库服务器处理.

2.优点减轻主服务器的工作压力提高从服务器的硬件利用率

3.实现方式,有客户端指定和服务端指定两种.

  客户端指定:程序写代码实现.例,插入数据的时候,连接主库;查询数据的时候,连接从库.

  服务端指定:在服务器上部署数据读写分离的服务.

4.数据分离的软件:maxscal,mysql-proxy,mycat.这些软件也叫中间件.

5.原理mysql代理服务器面向客户端提供服务,收到读请求时,分配给slave服务器处理;收到写请求时,分配给master服务器处理.

,构建读写分离架构

思路:

->部署一主一从数据库结构(192.168.4.51为主库,192.168.4.52为从库)

->部署mysql代理服务器(即安装maxscale数据库代理软件,配置,启服务)

->测试配置(即客户端连接代理服务器,访问数据)

拓扑图:

技术图片

步骤:

1.部署一主一从数据库结构(192.168.4.51为主库,192.168.4.52为从库)

1.1配置主库192.168.4.51

#vim /etc/my.cnf

[mysqld]

log-bin=db51  //启动日志

server_id=51   //指定服务器id

:wq 

Systemctl restart mysqld

mysql> grant replication slave on *.* to [email protected]"%" identified by "123qqq...A";     //授权用户repluser

mysql> show master status;     //查看日志信息

1.2配置从库192.168.4.52

#vim /etc/my.cnf

 [mysqld]

 server_id=52   //指定服务器id

 :wq 

#systemctl restart mysqld

1.2.1指定从库信息

Show slave status;  显示当前从库的信息

mysql> change master to

->master_host="192.168.4.51",     //指定主库IP

->master_user="repluser",           //指定授权用户

->master_password="123qqq...A",   //指定授权用户的密码

-> master_log_file="db51.000001",   //vim db2.sql查询得到主库的日志文件

->master_log_pos=441;          //vim db2.sql查询得到主库的日志偏移量

Mysql>start slave;       //启动slave进程

mysql> show slave status \\G;   查看slave状态信息

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.51

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: db51.000001

          Read_Master_Log_Pos: 441

               Relay_Log_File: db52-relay-bin.000002

                Relay_Log_Pos: 315

        Relay_Master_Log_File: db51.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

2. 配置mysql代理服务器192.168.4.57

2.1 安装代理软件包:# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

2.2 修改主配置文件:#vim /etc/maxscale.cnf

 [maxscale]

 threads=auto   //更改线程为auto

 [server1]   //定义第1台数据库服务器

 type=server

 address=192.168.4.51   //更改为主数据库ip

 port=3306

 protocol=MySQLBackend

[server2]     //server2默认没有,需要赋值serve1后做修改

type=server

address=192.168.4.52   //更改为从数据库ip 

port=3306

protocol=MySQLBackend

[MySQL Monitor]   //定义要监视的数据库节点:1.是否启用;2.查询主从情况

type=monitor

module=mysqlmon

servers=server1,server2  //监控server1server2

user=maxscalemon

passwd=123qqq...A

monitor_interval=10000

 #[Read-Only Service]    //使用#注释掉,禁用

 #type=service    //使用#注释掉,禁用

 #router=readconnroute    //使用#注释掉,禁用

 #servers=server1   //使用#注释掉,禁用

 #user=myuser    //使用#注释掉,禁用

 #passwd=mypwd    //使用#注释掉,禁用

 #router_options=slave   //使用#注释掉,禁用

[Read-Write Service]  //定义服务及路由用户

type=service

router=readwritesplit

servers=server1,server2   

user=maxscalerouter    //路由用户名,代理服务器用这个账户及密码去验证用户输入的用户及密码是否存在于主库4.51或从库4.52.

passwd=123qqq...A

max_slave_connections=100%

#[Read-Only Listener]    //使用#注释掉,禁用

#type=listener    //使用#注释掉,禁用

#service=Read-Only Service    //使用#注释掉,禁用

#protocol=MySQLClient    //使用#注释掉,禁用

#port=4008   //使用#注释掉,禁用

[Read-Write Listener]    //定义数据读写分离服务的端口

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006     //读写服务的端口

[MaxAdmin Listener]   //定义监听及管理服务的端口

type=listener

service=MaxAdmin Service

protocol=maxscaled

socket=default

port=4016     //监听管理服务的端口,手动增加

2.3 配置数据库服务器(在主从数据库服务器上创建授权用户)

mysql> grant replication slave,replication client on *.* to [email protected]"%" identified by ‘123qqq...A‘;  //创建,授权给监控用户(在主服务器4.51上操作,自动同步到4.52)

mysql> grant select on mysql.* to [email protected]"%" identified by "123qqq...A";  //创建,授权给路由用户(在主服务器4.51上操作,自动同步到4.52)

mysql> select user,host from mysql.user where user like "maxscale%";      //查看授权状况(主库4.51,从库4.52都需要查看)

2.4 启动代理服务(4.57上操作)

[[email protected] ~]# maxscale -f /etc/maxscale.cnf

2.5 查看服务状态(4.57上操作)

[[email protected] ~]# netstat -apntul|grep maxscale

tcp6       0      0 :::4006                 :::*                    LISTEN      941/maxscale        

tcp6       0      0 :::4016                 :::*                    LISTEN      941/maxscale  

[[email protected] ~]# ls /var/log/maxscale/    //服务启动后,产生日志

maxscale.log

2.6在代理服务器本机上,访问管理服务,查看监控信息

[[email protected] ~]# maxadmin -uadmin -pmariadb -P4016  //注意这里的P是大写

MaxScale> list servers

Servers.

-------------------+-----------------+-------+-------------+--------------------

Server             | Address         | Port  | Connections | Status              

-------------------+-----------------+-------+-------------+--------------------

server1            | 192.168.4.51    |  3306 |           0 | Master, Running

server2            | 192.168.4.52    |  3306 |           0 | Slave, Running

-------------------+-----------------+-------+-------------+--------------------

2.7 验证数据读写分离

2.7.1 在主服务器上添加访问数据的连接用户(从服务器自动同步)

Mysql>create database gamedb;

Mysql>create table gamedb.a(id int,name char(10));

Mysql>grant select,insert on gamedb.* to [email protected]”%” identified by “123qqq...A”   //授权用户yaya66

2.7.2 客户端192.168.4.50连接到代理,访问数据

]# mysql -h192.168.4.57 -P4006 -uyaya66 -p123qqq...A  //连接到代理服务器

, mysql多实例

1.多实例的概念

在一台物理主机上运行多个数据库服务

2.目的节约成本提高硬件的利用率.

在主机192.168.4.56上实验.

思路装软件->配置文件->启动服务->查看服务状态->客户端访问.

1.装包

真机scp -r mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz [email protected]:/root/

56]# tar -xvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

56]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql  //改名为mysql

2.配置文件

#vim /etc/my.cnf   //该文件需要手动创建

[mysqld_multi]     //启用多实例

mysqld = /usr/local/mysql/bin/mysqld_safe        //指定进程文件路径

mysqladmin = /usr/local/myslq/bin/mysqladmin   //指定管理命令路径

user = root   //指定进程用户

[mysqld1]    //实例进程名称,实例1

datadir = /dir1    //数据库目录,需要手动创建

port=3307     //端口号

log-error = /dir1/mysqld1.err    //错误日志位置

pid-file = /dir1/mysqld1.pid     //进程pid号文件位置

socket = /dir1/mysqld1.socket   //指定socket文件的路径和名称

[mysqld2]   //实例进程名称,实例2

datadir = /dir2

port=3307

log-error = /dir2/mysqld2.err

pid-file = /dir2/mysqld2.pid

socket = /dir2/mysqld2.socket

# mkdir /dir1      //创建配置文件中指定的目录dir1

# mkdir /dir2      //创建配置文件中指定的目录dir2

3.启动服务

3.1第一次启动,会报错路径PATH没有定义需要定义变量路径及开机自启

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

#echo “export PATH=/usr/local/mysql/bin:$PATH” >> /etc/bashrc

3.2 第二次启动,会报错提示有一个依赖包libaio需要安装

# yum -y install libaio*

3.3 第三次启动,会报错提示没有mysql这个账号

#useradd mysql

3.4 第四次启动,成功而且会在命令执行的末行产生一个初始密码(用于客户端登录)

3.5 查看目录/dir1内是否有产生文件

[[email protected] ~]# ls /dir1    //查看目录下内容

4.客户端访问,使用初始密码连接

#/usr/local/mysql/bin/mysql -uroot -p初始密码 -S sock文件   //使用初始密码登录

Mysql>alter user [email protected]”localhost” identified by ‘新密码’   //修改密码

 

以上是关于数据库_读写分离-多实例应用的主要内容,如果未能解决你的问题,请参考以下文章

28_在项目中重新搭建一套读写分离+高可用+多master的redis cluster集群

SpringBoot+MyBatis+MySQL读写分离(实例)

Ameba读写分离_mycat分库分表_redis缓存

spring学习笔记(19)mysql读写分离后端AOP控制实例

7-MYSQL数据库读写分离实例

搭建基于MySQL的读写分离工具Amoeba