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

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

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 =

merchantuser/ 40739ED24B5DC118DC16397AB14E64C680637C0D@merchantdb

proxy-part-tables.1 = /usr/ local/oneproxy/conf/part1. txt

proxy-charset = utf8_ bin

proxy-group-policy.1 = groupl:read balance

proxy-group-policy.2 = group2: read balance

proxy-group-security.1 = group1:0

proxy-group-security.2 = group2:0

proxy-security-level = 0

proxy-sequence.1 = default

#监控端口

proxy-httpserver = :8080

#自动剔除节点

proxy-repl ication-check=1

proxy-httptitle = OneProxy Monitor

其中,只配置了订单服务的数据库“orderdb” 的访问用户orderuser, 和商家服务的数据库‘merchantdb" 的访问用户merchantuser, 其他数据库中的访问用户可以参照上面的方法增加进来。

在保存配置后,必须使用如下命令设定配置文件的读取权限:

chmod 660 conf/proxy. conf

然后,重启OneProxy,让前面的配置生效。

前面各项配置参数的含义如表13-3所示。

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

OneProxy还有一个管理后台,在OneProxy启动之后,可以通过MySQL客户端进行登录。管理后台的默认端口是4041,用户名为admin,密码为OneProxy。

例如,可以在安装了MySQL的机器上使用如下命令登录:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
QL面试专题**

[外链图片转存中…(img-2DHTIyjL-1713682895142)]

Netty面试专题

[外链图片转存中…(img-0cuDQSnN-1713682895143)]

RabbitMQ面试专题

[外链图片转存中…(img-vODbN3YD-1713682895143)]

Redis面试专题

[外链图片转存中…(img-axtUDoVo-1713682895143)]

Spring Cloud面试专题

[外链图片转存中…(img-Cs3BDXmg-1713682895144)]

SpringBoot面试专题

[外链图片转存中…(img-gQBcLcZh-1713682895144)]

zookeeper面试专题

[外链图片转存中…(img-VFHc22AW-1713682895144)]

常见面试算法题汇总专题

[外链图片转存中…(img-KOpwWHf6-1713682895144)]

计算机网络基础专题

[外链图片转存中…(img-Ubh0GCPk-1713682895144)]

设计模式专题

[外链图片转存中…(img-oODd8Qyw-1713682895144)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值