为什么选择 spring-cloud-alibaba

在 spring-cloud 部分组件宣布闭源后,急需一套可以代替的开源框架,而 spring-cloud-alibaba 是对 Spring Cloud 的标准实现,以微服务为核心的整体解决方案

版本选择

各组件版本以官方公布的版本说明为准.

Nacos

什么是 Nacos

官方解读

简单来说,Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 服务端配置

预备环境

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置。
  3. Maven 3.2.x+;下载 & 配置。

下载&安装

你可以通过源码和发行包两种方式来获取 Nacos。

从 Github 上下载源码方式

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

下载编译后压缩包方式

您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

  unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gzcd nacos/bin

nacos 配置数据库&更改默认账号密码

预备环境

mysql 5.7+(包含5.7)

创建 nacos 所需的表

nacos 解压后的文件夹中,conf 目录下 有一个文件叫做:nacos-mysql.sql,创建一个数据库,让后执行这个 sql 文件,结果如下图:

修改配置

修改 nacos 安装文件夹下 conf目录中的::application.properties,改动如下:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/你的数据库名称?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=你的数据库用户名
db.password.0=你的数据库密码

修改默认密码

下面开始改默认密码,创建一个 java 工程,为求方便最好是 springboot 工程,原因在于 nacos 的密码生成使用的是 spring-security 包下的 BCryptPasswordEncoder 类。

添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

写一个 main 方法

public static void main(String[] args) {String passWord = new BCryptPasswordEncoder().encode("123456");System.out.println(passWord);
}

或者使用在线生成的 如:Bcrypt生成(未试验),让后直接修改数据库,或者等服务启动成功后,再去页面修改密码即可.

单机启动&停止

  • 启动

    Linux/Unix/Mac

    启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone
    

    如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

    bash startup.sh -m standalone
    

    Windows

    启动命令(standalone代表着单机模式运行,非集群模式):

    startup.cmd -m standalone
    
  • 停止

    Linux/Unix/Mac

    sh shutdown.sh
    

    Windows

    shutdown.cmd
    

    或者双击shutdown.cmd运行文件。

集群配置 & 启动、停止

预备环境,已经源码下载安装过程与单机一致,单机可以不配置数据库,但是集群一定要配置。

集群配置

端口详情

一个 nacos 服务启动 会用到三个端口号,在集群配置初期要做好端口规划,避免端口冲突,三个端口号详情以服务本身配置端口号为 8848为例:

端口号 与主端口号的偏移量 描述
8848 0 nacos 服务本身端口号
9848 1000 客户端 grpc 请求服务端端口,用于客户端向服务端发送连接和请求
9849 1001 服务端 grpc 请求服务端端口,用于服务间同步等

由于我只有一台服务器,以下过程均是在一台服务器中配置,但过程类似

端口规划
主端口号 客户端请求端口号 服务端请求端口号 描述
8848 9848 9849 服务一
8858 9858 9859 服务二
8868 9868 9869 服务三
配置修改

首先将安装文件复制,或者解压三份,名称推荐以nacos+主端口号组合,如下图:

  • nacos 服务配置修改

    修改 conf 目录下的 application.properties,三个服务都需要改成对应的端口号,如下图:

  • 集群文件配置修改

    复制 conf 目录下的 cluster.conf.example 文件,重命名为:cluster.conf,让后将每行配置成 ip:端口的格式,如下:

    官方示例

    [root@VM-4-7-centos conf]# cat cluster.conf.example
    #
    # Copyright 1999-2021 Alibaba Group Holding Ltd.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ##it is ip
    #example
    192.168.16.101:8847
    192.168.16.102
    192.168.16.103
    

    我的配置:

    [root@VM-4-7-centos conf]# cat cluster.conf
    #2022-01-27T17:23:54.963
    192.168.122.1:8848
    192.168.122.1:8858
    192.168.122.1:8868
    

    因为这个配置是所有的服务一致的,所以可以在 windows配置好,在上传到 Linux 上,每个服务都要有。

  • 启动脚本修改

    修改 nacos 安装目录下的 bin 目录下的 startup.sh 文件,若默认配置的内存过大,根据实际情况进行调整,下图为我修改之后的配置.

启动

分别执行三个文件夹,bin 目录下的 startup.sh 文件进行启动即可

sh startup.sh

停止

三个文件夹内,bin 目录下 执行 shutdown.sh 文件

sh shutdown.sh

Nacos 快速开始

创建项目

版本选择

当前 Spring Cloud Alibaba 的最新版本为 2.2.7.RELEASE ,因此 Spring Cloud 的版本选择为:Spring Cloud Hoxton.SR12,Spring Boot 的版本选择为:2.3.12.RELEASE

项目结构

  • 父 POM

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><modules><module>learn-cloud-alibaba-nacos</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version></parent><groupId>com.dran.cloud.learn</groupId><artifactId>learn-cloud-alibaba</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><spring.cloud.version>Hoxton.SR12</spring.cloud.version><spring.cloud.alibaba.version>2.2.7.RELEASE</spring.cloud.alibaba.version></properties><!--SpringCloud和SpringCloudAlibaba由于依赖过多,所以使用 dependencyManagement 来进行管理* 统一版本号* 只做声明,子模块不会自动引入全部依赖* 子模块声明了依赖,但未指定版本号和scope时,则会继承父项目的版本号和scope,否则覆盖.--><dependencyManagement><dependencies><!--SpringCloud版本声明--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--SpringCloudAlibaba版本声明--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
    </project>
    
  • 子POM

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>learn-cloud-alibaba</artifactId><groupId>com.dran.cloud.learn</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.dran.cloud.learn.nacos</groupId><artifactId>learn-cloud-alibaba-nacos</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin></plugins></build>
    </project>
    

服务发现

  1. 添加依赖

            <!--服务注册/发现依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--健康检查--><dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
    

    注: spring-boot-starter-actuator 这个依赖是用来监测服务是否正常

  2. application.yml

    server:port: 8081
    spring:application:#服务名称,服务注册到nacos上时默认也是使用这个名称name: cloud-nacos-serviceccloud:nacos:discovery:#nacos 地址server-addr: https://nacos.drancode.com#nacos开启权限验证后,配置用户名称username: nacos#nacos开启权限验证后,配置用户密码password: Longtao199606.#配置 命名空间namespace: public#自定义groupgroup:
    management:endpoints:web:exposure:include: '*'endpoint:health:show-details: always
    

    服务启动后,nacos截图:

  3. 关于 @EnableDiscoveryClient

    该注解在当前版本下不配置服务也能正常进行服务注册和服务发现

配置管理

properties 类型的配置文件
  1. 添加依赖

            <!--nacos配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
    
  2. 配置修改

    nacos-config 使用 bootstrap.properties 或者 bootstrap.yml 来进行配置,与 application.properties 或者 application.yml 类似,具体区别可以自行考证

    DataId 默认使用 spring.application.name 配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。因此该配置文件对应的 Nacos Config 配置的 DataId 为 cloud-nacos-service.properties, GROUP 为 DEFAULT_GROUP

    #服务名称
    spring.application.name=cloud-nacos-service
    #nacos服务地址
    spring.cloud.nacos.config.server-addr=
    #nacos用户名称
    spring.cloud.nacos.config.username=
    #nacos用户密码
    spring.cloud.nacos.config.password=
  3. 通过代码读取配置文件

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CloudNacosApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(CloudNacosApplication.class, args);String userName = applicationContext.getEnvironment().getProperty("user.name");String userAge = applicationContext.getEnvironment().getProperty("user.age");System.err.println("user name :"+userName+"; age: "+userAge);}
    }
    
  4. 创建配置文件

    Data Id 不带文件扩展名也可以,nacos也会匹配上,但是推荐还是带上文件扩展名

  5. 运行结果

配置 yml 类型的配置文件
  1. 添加依赖

            <!--nacos配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
    
  2. 配置修改

    上面使用 bootstrap.properties 来进行配置,这次就用 yml 来进行配置

    spring:application:#服务名称name: cloud-nacos-servicecloud:nacos:config:#nacos服务地址server-addr: #nacos用户名称password: #nacos用户密码username: #指定配置文件的扩展名file-extension: yml
    
  3. 通过代码读取配置文件

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CloudNacosApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(CloudNacosApplication.class, args);String userName = applicationContext.getEnvironment().getProperty("user.name");String userAge = applicationContext.getEnvironment().getProperty("user.age");System.err.println("user name :"+userName+"; age: "+userAge);}
    }
    
  4. 创建配置文件

    Data Id 不带文件扩展名也可以,nacos也会匹配上

  5. 运行结果

动态更新

你可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

  • 代码修改

    Nacos Config 默认支持配置的动态更新,启动 Spring Boot 应用测试的代码如下:

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CloudNacosApplication {public static void main(String[] args) throws InterruptedException {ConfigurableApplicationContext applicationContext = SpringApplication.run(CloudNacosApplication.class, args);while(true) {//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置String userName = applicationContext.getEnvironment().getProperty("user.name");String userAge = applicationContext.getEnvironment().getProperty("user.age");System.err.println("user name :" + userName + "; age: " + userAge);TimeUnit.SECONDS.sleep(1);}}
    }
    
  • 运行结果

配置多环境配置文件

Nacos Config 在加载配置的时候,不仅仅加载了以 DataId 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了DataId为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。 DataId 一定要带上文件扩展名.

${spring.profiles.active} 当通过配置文件来指定时必须放在 bootstrap.properties 文件中。
spring.profiles.active=dev
  • 新增Nacos配置文件

  • bootstrap.yml 修改

    spring:application:#服务名称name: cloud-nacos-servicecloud:nacos:config:#nacos服务地址server-addr: #nacos用户名称password: #nacos用户密码username: #指定配置文件的扩展名file-extension: ymlprofiles:# 不同环境的标识active: dev
    
  • dev环境运行结果

  • prod环境运行结果

    spring.profiles.active 改为 prod

灵活切换

此案例中我们通过 spring.profiles.active=<profilename> 的方式写死在配置文件中,而在真正的项目实施过程中这个变量的值是需要不同环境而有不同的值。这个时候通常的做法是通过 -Dspring.profiles.active=<profile> 参数指定其配置来达到环境间灵活的切换。

配置 namespace

Nacos 内部有 Namespace 的概念:

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
自定义 Group 配置

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。

自定义扩展 DataId

当出现配置文件名称与服务名称不一致,或者项目需要指定多个配置文件时,使用原先的默认服务名称+默认文件扩展名或者file-extension指定文件扩展名称方式无法满足,因此通过自定义 DataId 的方式来进行配置文件的指定.

自定义 DataId 的指定方式有两种, spring.cloud.nacos.config.extension-configsspring.cloud.nacos.config.shared-configs .

extension-configs
  • 配置

    spring.application.name=opensource-service-provider
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848# config external configuration
    # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
    spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties# 2、Data Id 不在默认的组,不支持动态刷新
    spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
    spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP# 3、Data Id 既不在默认的组,也支持动态刷新
    spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
    spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
    spring.cloud.nacos.config.extension-configs[2].refresh=true
    

    可以看到:

    • 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。
    • 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
    • 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
  • 注意事项

    多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。

    spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

shared-configs
  • 配置

    # 配置支持共享的 Data Id
    spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
    spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
    spring.cloud.nacos.config.shared-configs[0].refresh=true
    

    可以看到:

    • 通过 spring.cloud.nacos.config.shared-configs[n].data-id 来支持多个共享 Data Id 的配置。
    • 通过 spring.cloud.nacos.config.shared-configs[n].group 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
    • 通过 spring.cloud.nacos.config.shared-configs[n].refresh 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。
  • 注意事项

    extension-configs 的注意事项相同

配置的优先级

Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

  • A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
  • B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是:A < B < C , 优先级大的会覆盖优先级小的,并且会形成互补,互补的意思是优先级小的配置文件配置了其他种类配置文件不存在的配置,那么最终加载的配置中该配置会保留.

profile > 默认配置文件 > extension-configs(下标越大优先级越大) > shared-configs(下标越大优先级越大)

配置的写法

除了默认的 数组下标 的写法外,yml还支持 - 的写法,例如:

spring:application:name: nacos-configcloud:nacos:server-addr: username: password: config:file-extension: yml# 优先级比默认的低,如果重名不生效shared-configs:- dataId: order-service-shared-mysql.yml#默认是 DEFAULT_GROUP,可不写group: DEFAULT_GROUPrefresh: true- dataId: order-service-shared-mq.yml#默认是 DEFAULT_GROUP,可不写group: DEFAULT_GROUPrefresh: true# 优先级比默认的低,但是比 shared 高extension-configs[0]:dataId: order-service-extension-matedata.yml#默认是 DEFAULT_GROUP,可不写group: DEFAULT_GROUPrefresh: trueextension-configs[1]:dataId: order-service-extension-param.yml#默认是 DEFAULT_GROUP,可不写group: DEFAULT_GROUPrefresh: true
@RefreshScope 动态感知

当我们使用 如 @Value 或者 @ConfigurationProperties 等注解时,无法感知到参数值的变更,而通过 @RefreshScope 则能够进行动态刷新变量的值

示例代码

@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "mysql")
public class ParamConfig {private String name;@Value("${mq.name}")private String mqName;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMqName() {return mqName;}public void setMqName(String mqName) {this.mqName = mqName;}
}
@RestController
public class ParamController {@Autowiredprivate ParamConfig paramConfig;@GetMapping("/getParam")public String getParam() {return "mysqlName:" + paramConfig.getName() +"=======" + "mqName:" + paramConfig.getMqName();}
}

使用常见的两种注入参数的方式

第一次运行,mysql.name 设置为 mqsql , mq.name 设置为 mq

运行结果:

第二次运行,mysql.name 设置为 mqsql1 , mq.name 设置为 mq1

运行结果:

日志的变化:

Linux搭建Nacos及Nacos集群相关推荐

  1. 零基础带你一步步搭建Nacos高可用集群(史上最详细,赛过教科书!)为此我准备了三台云服务器+云数据库

    容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!{容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!}容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给! 如果你不懂jd ...

  2. 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务

    使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务 一.基于于NAT的LVS的安装与配置. 1. 硬件需求和网络拓扑                       ...

  3. Linux上搭建Hadoop2.6.3集群以及WIN7通过Eclipse开发MapReduce的demo

    随笔 - 70  文章 - 0  评论 - 88 Linux上搭建Hadoop2.6.3集群以及WIN7通过Eclipse开发MapReduce的demo 近期为了分析国内航空旅游业常见安全漏洞,想到 ...

  4. Nacos高可用集群解决方案-Docker版本

    Nacos高可用集群解决方案-Docker版本 参考文章: (1)Nacos高可用集群解决方案-Docker版本 (2)https://www.cnblogs.com/hellxz/p/nacos-c ...

  5. Linux环境快速搭建elasticsearch6.5.4集群和Head插件

    今天来一起实战Linux环境下搭建elasticsearch6.5.4集群和Head插件: 环境信息 操作系统:Ubuntu 16.04.5 LTS JDK:1.8.0_191 elasticsear ...

  6. Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群

    Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...

  7. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  8. 搭建高可用mongodb集群(二)—— 副本集

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能 ...

  9. Nginx配置——搭建 Nginx 高可用集群(双机热备)

    Nginx配置--搭建 Nginx 高可用集群(双机热备) https://blog.csdn.net/zxd1435513775/article/details/102508573?utm_medi ...

  10. 亿级Web系统搭建——单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

最新文章

  1. Java / Android String.format 的使用
  2. redispython源文件_Redis与Python在项目中的交互
  3. 图文详解南方CASS 7.1简体中文版
  4. Linux服务器编程之:utime()函数
  5. 【复习资料】单片机与嵌入式系统原理及应用
  6. java学习(106):字符串tocharArray,tolowercase,touppercase方法
  7. iqooneo系统要不要更新_IQOOZ1即将发布,和IQOOneo3、OPPORenoACE对比,谁更值得入手?...
  8. 报错, org.hibernate.PropertyAccessException
  9. Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
  10. 面试微软等公司必备的书
  11. python random模块中的指令_python中random模块的使用
  12. NUC1019 数素数【素数筛选法】
  13. Callable接口与runable和Thread类
  14. java 子串替换_Java中的多个同时子串替换
  15. 使用VLC搭建视频直播服务器
  16. mac如何使用命令行删除文件
  17. 好记性真的不如烂笔头
  18. Linux基础:破解root密码(rd.break)
  19. 行无疆靠谱讲述拼多多推广方法有哪些?
  20. 解决Linux MySQL报错ERROR 2002 (HY000)

热门文章

  1. OneNote for win10 出现0xE000078B错误
  2. BIOS int 10H中断介绍
  3. 在夜神模拟器内部安装App
  4. Android通过第三方软件打开Word、Excel、PPT、PDF等文档
  5. java4android网易云_仿照网易云音乐界面 android特效
  6. 教你设置无线wifi无缝漫游,实现无线wifi自动切换联网
  7. 主成分分析碎石图_主成分分析大全
  8. BES ANC降噪耳机在量产中发现的噪声
  9. 利用Python提取网络图片的像素尺寸、格式等相关信息
  10. git 解决合并冲突