Java最全微服务架构实战:可扩展分布式数据库集群的搭建,2024最新Java算法相关面试大

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

image

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

主从同步设置

======

MySQL的主从同步设置是将主机设定为可读写服务器,将从机设定为只读服务器,从机的

数据是从主机中同步过来的。

下面以设置“10.10.10.35” (master) 与“10.10.10.36”(slave) 的主从同步为例进行说明。

1.主机设置

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

vi /etc/hostname

将文件内容修改为“mysq1-35” 。

使用如下命令修改数据库服务器的配置:

vi /etc/my. cnf

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

[mysqld]

#服务器的ID,必须唯一

server id=35

井复制过滤:不需要备份的数据库

binlog- ignore-db=mysql

#二进制日志名称

log-bin=demo-mysql-bin

#为每个session分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_ cache_ size=1M

#主从复制格式(mixed, statement,row, 默认格式是statement)

binlog_ format=mixed

#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除

expire_ logs_ days=7

##跳过主从复制中遇到的所有错误或指定类型的错误,避免从机复制中断

##如1062错误是指一些主键重复,1032错误是指主从数据库数据不一致

slave_ skip_ errors=1032

#作为从机时的中继日志

relay_ 1og=demo-mysq1-relay-bin

log_ slave updates=1表示作为从机时也将复制事件写进自己的二进制日志中

log_ slave_ updates=1

#主键自增规则,避免主主同步导致ID重复

牛自增因子(每次加2 )

auto increment_ increment=2

#自增偏移(从1开始),单数

auto_ increment offset=1

设置完成后,保存配置,使用如下命令重启数据库服务器:

service mysqld restart

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

mysql> grant replication slave, replication client on . to

‘user36’@‘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

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

[外链图片转存中…(img-HGdcPJm1-1715347078232)]

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值