关系型数据库-MySQL进阶(二)读写分离与多实例

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44985068/article/details/97099534

Mysql 读写分离:装包 配置/etc/maxscale.conf 授权 启服务 查看 测试
Mysql 多实例 :装包(maxscale)配置(/etc/my.cnf) 启服务 测试

********************************

什么是读写分离?
Maxscale 最强大的一项功能是实现“读写分离(Read/Write Splitting)”。
基本的原理是
让主数据库处理事务性查询,而从数据库处理 SELECT 查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是缓解服务器压力。

读写分离的好处?
1.增加冗余   数据库表规范化后由于表很多,而连接多个表会降低查询速度,一般可以增加冗余列来减少频繁连接。但是怎么增加冗余列?
冗余,指重复配置系统的一些部件,当系统发生故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间。
冗余技术:冗余技术又称储备技术,它是利用系统的并联模型来提高系统可靠性的一种手段

2.增加了机器的处理能力
3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,
而读又可以接受点时间上的延迟

读写分离提高性能之原因?

1.物理服务器增加,负荷增加
2.主从只负责各自的写和读,极大程度的缓解 X 锁和 S 锁争用
3.从库可配置 myisam 引擎,提升查询性能以及节约系统开销
4.从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的 binlog 恢复数据,
是,最重要区别在于主库向从库发送 binlog 是异步的,从库恢复数据也是异步的
5.读写分离适用与读远大于写的场景,如果只有一台服务器,当 select 很多时,update 和
delete 会被这些 select 访问中的数据堵塞,等待 select 结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制

********************************

1主从复制局限:
2 分离mysql 读写 分离流量:
客户端select insert
服务端mysql 代理服务器

Mysql 代理
收到sql 写请求交给master服务器处理 -insert
收到sql 读请求交给slave 服务器处理

解决问题:单点故障\读写分离

中间件:软件
Mysql cat
Mysql proxy
Maxscale

单词
scale
(尤指与其他事物相比较时的)规模,范围,程度;等级;级别;等级体系
v.
攀登;到达…顶点;去鳞;刮除牙石
***************************

************************************

构建读写分离
1一主一从
2mysql代理服务器
3测试
********************************

配置读写分离
1安装包maxscale
rpm -qa | grep -i maxscale
Yum -y install

2配置主配置文件
57
Vim /etc/maxscale.cnf

(1)[maxscale]         -服务线程数
Threads=auto
((2)[server1]          -定义数据库服务器
type=server
address=192.168.4.51
port=3306
Protocol=mysqlbackend
(3)[server2]
Address=192.168.4.52
(4)[mysql monitor]       -定义要监控数据库节点
servers=server1,server2 --监视主从
user=maxscalemon    -监控用户
passwd=123456 -密码
注释[read- only service]
(5)[read-write service]    --读写分离数据库节点
Servers=server1, server2
User=maxscaleroute   -(路由用户) 在数据库验证用户存在?Yaya88(mysql 代理服务器)
Passwwd=123456

(6)注释#[Read-Only Listener]

(7)[MaxAdmin Listener] -加端口号4.016
Port=4016

(8)sed -i ‘/#/d’ /etc/maxscale.cnf
非交互式编辑

3 主服务器添加用户授权

(51服务器)
grant replication slave on . to maxscalemon@"%" identified by “123456”
Grant replication client  on . to maxscalermon@”%” identified by “123456”
grant select on . to maxscaleroute@"%" identified by “123456”;
验证查看:
(52从服务器)select user from mysql.user where user like “maxscale%”;

4启动服务

maxscale -f  /etc/maxscale.cnf
Ps -C maxscale
Ss -ntulp | grep :4016
Ss -ntulp | grep :4006
关闭
Killall -9 maxscale

5 代理服务器本机查看监控信息
代理服务器57访问自己
Maxscaleadmin -uadmin -pmariadb -P断口4016
-}list
list servers
Exit
]# yum -y install mariadb //安装提供mysql命令的软件包
]# mysql -h 192.168.4.51 -umaxscalemon -p123qqq…A
]# mysql -h 192.168.4.52 -umaxscalemon -p123qqq…A
]# mysql -h 192.168.4.51 -umaxscalerouter -p123qqq…A
]# mysql -h 192.168.4.52 -umaxscalerouter -p123qqq…A

6客户端链接57测试访问数据

客户端
grant all on  db7.* to yaya66@"%" identified by “123456”;
创建db7 create database db7;
52select user from mysql.user where user like “yaya%”;

50验证会看到db7库

Mysql -h192.168.4.57 -P4016 -uyaya66 -p123456

52(从)system -uroot -p123456 -e “insert into db7.a values(52)”

Select  * from db7.a;
52

51(主)select 无数据 因为是在52从服务器写的
50
Select * from 会在52查寻到
Insert into 会在50查到

50 主机连接代理服务器57可以看到数据
mysql -h192.168.4.57 -P4006 -uyaya66 -p123qqq…A
Select * from db7.a

52

****************************************

Mysql 多实例
一台服务器运行多个数据库

1节约成本
2提高硬件利用率

********************
配置mysql 多实例
.多实例配置步骤?
– 安装支持多实例服务的软件包
– 修改主配置文件
– 根据配置文件做相应设置
– 初始化授权库
– 启动服务
– 客户端访问

1装包-(57)
Killall maxscale
Stop mysqld
真机 scp /linux-soft/03/mysql/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz root @192.168.4.57:/root/ 
Tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.20-linux-glibc2.12-x86_64  /usr/local/mysql
Cd /usr/local/mysql/
Ls
2 配置文件
Vim /etc/my.cnf
[mysqld_multi] -启用多实例

Mysqld=/usr/local/mysql/bin/mysqld_safe  -指定进程文件路径
Mysqladmin=/usr/local/mysql/bin/mysqladmin  -制定管理命令路径
User=root --指定进程用户
[mysqld1]
Datadir=dir1(需要创建)
Port=3307
Log-error=/di1r/mysql1.log
Pid-file=/dir1/mysql1.pid
Socket=/dir1/mysql1.sock 数据传递需要通过sock文件  自己访问自己

[mysqld2]
同上
Datadir=dir2
Port=3308
Log-error=/dir2/mysql2.log
Pid-file=/dir2/mysql2.pid
Socket=/dir2/mysql2.sock

创建目录:
Mkdir /dir1
Mkdir /dir2

Echo PATH=/usr/local/mysql/bin:PATH PATH=/usr/local/mysql/bin:PATH
Echo $PATH
配置环境变量:Vim /etc/profile -环境变量永久生效

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

Bash\source /etc/profile
Echo $PATH

Ps -C mysqld
Cat /dir1/mysql1.pid
Ls /dir1

3启动服务
/usr/local/mysql/bin/mysqld_multi start 1

4客户端访问:
本机连接57 57
修改初始密码
修改本机登录密码
连接实例1\2\3
/usr/local/mysql/bin/mysql -uroot -p初始密码  -S sock文件
/usr/local/mysql/bin/mysql -uroot -p”” -S /dir1/mysql1.sock
Alter user root@”localhost” identified by “123456”

授权 grant all on db6.* to yaya66@”%” identified by “123456”
50上
mysql -h192.168.4.57 -uyaya66 -p123456 -P3008
客户端建库建表写数据
Mysql>craete table gamedb.haha(name);
Insert into game.db(name) values(“haha”);

停止服务
Mysqld_multi --user=root --password=123456 stop
Ss -ntulp | grep mysql
Ls /dir1


客户端50测试访问数据库

1 启用多实例的binlog日志
[mysqld2]
Server_id=2
Log-bin=mysqld2

Killall -9 mysqld
Rm -rf /dir/*
Mysqld_multi start 2
2 mysqld_multi --user=root --password=123456 stop 2
3 ss -ntulp | grep mysq
4 mysqld_multi start 2
5 ls /dir2

mysql系列之多实例介绍
介绍:

mysql多实例,简单理解就是在一台服务器上,mysql服务开启多个不同的端口(如3306、3307),运行多个服务进程。这些 mysql 服务进程通过不同的 socket来监听不同的数据端口,进而互不干涉的提供各自的服务。
在同一台服务器上,mysql 多实例会去共用一套 mysql 应用程序,因此你在部署 mysql 的时候只需要部署一次 mysql程序即可,无需多次部署。但是,mysql多实例之间会各自使用不同的 my.cnf 配置文件、启动程序和数据文件。在提供服务方面,mysql多实例在逻辑上看起来是各自独立,互不干涉的,并且多个实例之间是根据配置文件的设定值,来获取相关服务器的硬件资源。
下面用一个比喻,来帮助大家理解 mysql 多实例的本质。
    mysql 多实例相当于合租房,合租房里面有多个租客,每个租客都租有一个卧室,这个卧室就相当于我们的 mysql 的一个实例。整个合租房就相当于一台服务器。合租房里面的洗衣机、卫生间、阳台就相当于我们服务器上的各种硬件资源,比如CPU、MEM、DISK等,这些东西都是公共资源,大家共用的。
    另外,多实例并不仅仅是 mysql才有,其实我们日常运维中碰到的很多服务都可以部署使用多实例,并且在生产环境中也非常热衷去使用,甚至在门户网站应用也很广泛,例如nginx多实例、apache多实例、redis多实例等等。
    既然大家都去用 mysql 多实例这种技术,那么mysql 多实例都能为企业带来什么或者说有什么优缺点呢?

优点如下:

1、有效利用服务器资源
    当单个服务器资源过剩时,可以充分利用剩余的资源来提供更多的服务
2、节约服务器资源
    当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从同步等技术,此时多实例就再好不过了
3、方便后期架构扩展
    当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以先用一组物理数据库服务器,在上面部署多个实例,方便后续架构扩展、迁移

缺点如下:

1、资源互相抢占问题
    当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU和IO资源,这将导致服务器上的其它实例提供服务的质量下降。这就比如说合租房的各个租客,每当早晨上班时,都会洗漱,此时卫生间的占用率就大,各个租客总会发生等待。

多实例的应用场景
下面在重复一下,mysql 多实例在生产环境下的应用场景!

1、当一个公司业务访问量不太大,又想节俭成本,并且还希望不同业务的数据库服务能够各自尽量独立,提供服务能够互相不受影响。另外还需要应用主从同步等技术来提供数据库备份或读写分离服务,以及方便后期业务量增大时,数据库架构的扩展和迁移。此时,Mysql 多实例就再好不过了。比如,我们可以通过在 3 台服务器部署 6-9 个实例,然后交叉做主从同步备份及读写分离,来实现 6-9 台服务器才能够达到的效果
2、公司业务访问量不是太大的时候,服务器的资源基本都是过剩状态。此时就很适合 mysql 多实例的应用。如果对 SQL语句 优化做的比较好,mysql 多实例 是一个很值得去使用的技术。即使后期业务并发很大,只要合理分配好系统资源,也不会有太大的问题
3、为了规避 mysql 对 SMP 架构不支持的缺陷,我们可以使用 mysql 多实例绑定处理器的办法(NUMA处理器必须支持,不过现在大部分处理器都支持的)将不同的数据库分配到不同的实例上提供数据服务;
4、传统游戏行业的 MMO/MMORPG以及Web Game,会将每个服都对应一个数据库,而且可能经常要做很多数据查询和数据订正工作。此时,为了减少维护而出错的概率,我们也可以采用多实例的部署方式,按区的概念来分配数据库。

说了这么多,mysql 多实例要如何去部署呢?部署方法有哪些哪些呢?

基于mysqld_multi

通过官方自带的 mysqld_multi 工具,使用单独配置文件来实现多实例

优点: 便于集中管理管理

缺点: 不方便针对每个实例配置进行定制

展开阅读全文

没有更多推荐了,返回首页