写点什么

微服务架构实战:可扩展分布式数据库集群的搭建

  • 2021 年 11 月 12 日
  • 本文字数:3696 字

    阅读完需:约 12 分钟

service mysqld restart


然后用 root 用户登录服务器,使用如下命令创建一个同步用户并授权:


mysql> grant replication slave, replication client on . to


'user36


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


'@'10.10.10.36' identified by 'user123456';


其中,user36 为用户名,user123456 为密码。


使用如下命令更新权限,让前面的设置立即生效:


mysq1> flush privileges;


使用如下命令查看主机状态:


mysql> show master status;


结果如下所示:


IFile


PositionI Binlog Do_ DB


Binlog_ Ignore_ DBI


Executed Gtid_ Set


demo-mysql-bin.000001 |


mysql


1 row in set (0.00 sec)


其中,File 为二进制日志文件名称,Position 为日志保存位置的偏移量。在后面的从机设置中将用到这两个参数。


2.从机设置


下面以“10.10.10.36"这台服务器的从机设置为例进行说明。


使用如下命令,修改服务器名称:


vi /etc/hostname


将内容修改为“mysql-36" 。


使用如下命令,修改数据库配置:


vi /etc/my.cnf


在[mysqld]下面增加以下配置项: .


[mysq1d]


server_ id=36


binlog- ignore-db=mysq1


log-bin=demo-mysql-bin


保存配置,重启数据库服务器。然后,用 root 用户登录数据库,使用如下所示的同步配置:


mysql>change master to master_ host='10.10.10.35',master user='user36',


master password=' user123456', master_ port=3306,


master log file='demo-mysql-bin. 000001', master_ log_ _pos=123,


master_ connect_ retry=30;


其中,通过 master_ log_ file 设置了主机的日志文件,通过 master_ log. pos 设置了主机的日志存储位置偏移量。这两个参数必须根据当前主机的状态进行配置。


使用如下命令启动从机,即可开始进行数据同步:


mysql>start slave;


使用如下命令查看从机的同步状态:


mysql>show slave status\G;


结果如下所示:


  1. row


Slave_ IO_ State: Waiting for master to send event


Master_ Host: 10.10.10.35


Master User: user36


Master Port: 3306


Connect Retry: 30


Master_ Log_ File: demo-mysql -bin.000001


Read Master_ Log_ Pos: 123


Relay_ Log_ File: demo-mysq1 - relay-bin.000002


Relay_ Log_ Pos: 287


Relay Master_ Log_ File: demo-mysql-bin. 000001


Slave IO Running: Yes


Slave_ SQL Running: Yes


在上面的结果中,如果 Slave_ IO_ Running 和 Slave_ SQL_ _Running 都显示为“Yes" ,则表示同步成功。


服务器“10.10.10.37”的从机设置可以参照上面的方法实现。


主主同步设置


======


将两个集群分组的主机互相进行主从同步设置,就可以实现主主同步。


参照 13.2 节的方法,在集群分组 2 中实现主从同步设置。


其中,集群分组 2 的主机“10.10.10.25”的数据库配置与集群分组 1 的数据库配置相似,只是主键的配置为了避免冲突略有不同,即使用双数作为主键,代码如下所示:


[mysqld]


server id=25


binlog- ignore-db=mysql


log-bin=demo-mysql -bin


binlog_ cache_ size=1M


binlog_ format=mixed


expire_ logs_ days=7


slave_ skip errors=1032


relay_ log=demo-mysql-relay-bin


1og slave_ updates=1


auto increment increment=2


#自增偏移(从 2 开始),双数


auto increment offset=2


当集群分组 2 的主从设置完成之后,即可对两个分组的主机实现主主同步设置。首先实现集群分组 1 的主机“10.10.10.35”与集群分组 2 的主机“10.10.10.25”的主从设置。


1.集群分组 1 的主机配置


在“10.10.10.35”主机上创建同步用户并授权:


mysql> grant replication slave, replication client on . to


'user25'@'10. 10.10.25' identified by 'user123456';


更新权限:


mysql> flush privileges;


查看主机状态:


mysql> show master status;


记下查看结果中的日志文件名称和存储位置偏移量。


2.集群分组 2 的从机配置


使用如下所示的同步配置:


mysql>change master to master_ host=' 10.10.10.35 ,master user='user25',


master_ password= ' user123456',master_ port=3306,


master log_ file=' demo-mysql-bin.000001', master_ 1og_ pos=123,


master_ connect_ retry=30;


其中,日志文件名称和存储位置偏移量按上面主机查询的结果填写。


启动从机并进行同步:


mysql>start slave;


查看同步状态:


mysql>show slave status\G;


如果查询结果中包含如下所示的两行信息则表示同步设置成功:


Slave_ I0 Running: Yes


Slave_ SQL Running: Yes


上面配置完成之后,再反过来以“10.10.10.25”为主机,以“10.10.10.35”为从机,进行主从同步设置。具体可参照上面的方法实现。互为主从设置完成之后,就实现了主主同步设置。


为了对上面的同步设置进行验证,可以在各个主机上创建数据库,再执行一些插入或删除数据的操作,然后在各个从机中查看结果。如果各种操作都能同步,则说明主主同步和主从同步均设置成功。


如果出现同步失败的情况,则可以先停止失败的从机,视情况更改日志文件名称和偏移量,然后再启动从机继续进行同步。


停止从机可以使用如下命令:


mysql>stop slave;


需要说明的是,在生产环境中,推荐使用 UUID 作为数据库的主键,这样可避免主键冲突的情况发生,而且也便于在集群中创建更多的分组。


数据库代理中间件选择


===========


在实现了数据库集群之后,就已经解决了数据库的单机服务器的性能瓶颈问题,并且也建立了高可用的分布式架构,对于应用程序和数据库客户端,应该如何使用数据库才能更好地使用这种高可用、高性能的分布式集群系统呢?这就要借助于数据库代理中间件来实现了。


MySQL 的数据库代理中间件有很多,而且大多数是开源的,如 MyCat、Proxy、 Amoeba、OneProxy 等,其中比较优秀的是 MyCat 和 OneProxy。


MyCat 在大流量访问中有极佳的性能表现,它是用 Java 语言开发的,配置文件使用 XML 的形式,稍显复杂,特别是它的分区表的配置有点累赘。另外,一些用户对它的稳定性也颇有微词,所以这里推荐使用 OneProxy。


OneProxy 是一款基 于 MySQL 官方的 Proxy 中间件的设计思想开发的,运行稳定性好,配置也较为简单,分区表的概念与 MySQL 分区表的设置在根本.上是一致的。 虽然是一个收费的商业软件,但也提供了免费的社区版可供使用。


使用 OneProxy 实现读写分离设计


==================


OneProxy 可以非常方便地使用 MySQL 的集群体系架构,既可以按数据库的集群分组实现高可用设计,也可以按主从同步实现读写分离设计。使用两个集群分组的 OneProxy 调用设置的网络结构如图 13-2 所示。



安装 OneProxy


下面以安装“6.0.0”的版本为例进行说明,我们将 OneProxy 安装在 IP 地址为“10.10.10.24”的机器上。


下载安装包后,解压缩:


tar xf oneproxy-rhel5-linux64-v6.0.0-ga. tar.gz


将程序文件移到/usr/local/目录中:


mv oneproxy /usr/ local/oneproxy


切换到 oneproxy 目录:


cd /usr/ local/oneproxy


创建启动程序:


CP oneproxy .service /etc/ init.d/oneproxy


修改启动程序配置:


vi /etc/ init.d/oneproxy


将其中的工作目录修改成如下所示:


ONEPROXY_ HOME=/usr/loca1/ oneproxy


保存修改后,设置启动程序的执行权限:


chmod a+x /etc/init. d/oneproxy


使用如下命令启动 OneProxy:


service oneproxy start


使用如下命令设置开机启动 OneProxy:


chkconfig --add oneproxy


chkconfig oneproxy on


高可用读写分离配置


在使用 OneProxy 时,必须为每个数据库都创建--个具有完全权限的独立用户。在创建用户时,必须在数据库集群的主机中进行。


例如,对于订单服务数据库“orderdb”,可以使用如下命令创建用户并授权:


mysql> grant all privileges on orderdb.* to 'orderuser'@'8' identified by


'12345678' with grant option;


即创建一个具 有完全权限的用户,其用户名为 orderuser,密码为 12345678, 并设置在任何地方都可以访问,这里指在安全的局域网中。


需要注意的是,上面授权的用户 将保存在数据库 mysql 的 user 表中,虽然我们已经在主从设置中忽略了数据库 mysql 的同步,但是在创建用户时,并没有使用 use 指令切换过数据库,所以上面创建的用户还会在各个从机上进行同步。如果要禁止这种同步,则可以在主从设置中对主机的数据库配置增加一个忽略对 user 表进行同步的配置。这样操作之后,给数据库授权的命令就必须在每个服务器上都执行一遍。


在 OneProxy 服务器中,假设还在目录“ust/local/oneproxy”中,使用如下命令为密码生成加密字符串:


. /bin/mysqlpwd 12345678


执行后将生成如下所示的已经加密的密码字符串:


40739ED24B5DC118DC16397AB1 4E64C680637C0D


使用如下命令编辑 OneProxy 配置:


vi . / conf/porxy .conf


如下所示是使用两个集群分组的读写分离配置:


[oneproxy]


keepalive


event-threads = 4


log-file = 1og/oneproxy.1og


pid-file = log/oneproxy.pid


lck-file = log/oneproxy.lck


mysql-version = 5.7.19


proxy-address = :3306


proxy-master-addresses.1 = 10. 10.10.35: 3306@group1


proxy-master-addresses.2 = 10.10. 10.25:3306@group2


proxy-slave-addresses.1 = 10.10.10. 36: 3306@group1


proxy-slave-addresses.2 = 10.10.10.37:3306@group1


proxy-slave-addresses.3 = 10.10.10.26:3306@group2


proxy-slave-addresses.4 = 10.10. 10.27:3306@group2


proxy-user-list.1 =


orderuser/40739ED24B5DC118DC1 6397AB14E64C680637C0D@orderdb


proxy-user-list.2 =

评论

发布
暂无评论
微服务架构实战:可扩展分布式数据库集群的搭建