Git 入门学习
前言Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git安装配置下载 Git1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
最新文章Redis 高可用一览
对于一项技术的学习,我们要对这项技术有一个全局观,下面是一张 Redis 全景图,我觉得画得非常全面。
今天我们主要关注 Redis 的高可用主线。Redis 的高可用性,具体来说,有两方面含义:一是服务少中断,二是数据少丢失。
为了保证服务少中断,通常的做法就是冗余,增加服务的副本,但是当副本多了以后,如何保证副本的数据一致就成了问题。
一、主从库模式在这方面,Redis 提供了主从库模式,主从库之间采用的是读写分离的方式:对于读操作请求,主从库都可以接收;对于写操作,首先到主库执行,然后,主库将写操作同步给从库。
![图片](https://itboy-blog-image.oss-cn-hangzhou.aliyuncs.com/640 (1).png)
Redis 读写分离那么,主从库同步是如何完成的呢?主库数据是一次性传给从库,还是分批同步?要是主从库间的网络断连了,数据还能保持一致吗?
1.1 数据同步的实现细节当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系。
例如 ...
零拷贝策略
什么是零拷贝策略拷贝说的是计算机里的 I/O 操作,也就是数据的读写操作。计算机可是一个复杂的家伙,包括软件和硬件两大部分,软件主要指操作系统、驱动程序和应用程序。硬件那就多了,CPU、内存、硬盘等等一大堆东西。
这么复杂的设备要进行读写操作,其中繁琐和复杂程度可想而知。
传统 I/O 的读写过程如果要了解零拷贝,那就必须要知道一般情况下,计算机是如何读写数据的,我把这种情况称为传统 I/O。
数据读写的发起者是计算机中的应用程序,比如我们常用的浏览器、办公软件、音视频软件等。
而数据的来源呢,一般是硬盘、外部存储设备或者是网络套接字(也就是网络上的数据通过网口+网卡的处理)。
过程本来是很复杂的,所以大学课程里要通过《操作系统》、《计算机组成原理》来专门讲计算机的软硬件。
简化版读操作流程那么细的没办法讲来,所以,我们把这个读写过程简化一下,忽略大多数细节,只讲流程。
上图是应用程序进行一次读操作的过程。
应用程序先发起读操作,准备读取数据了;
内核将数据从硬盘或外部存储读取到内核缓冲区;
内核将数据从内核缓冲区拷贝到用户缓冲区;
应用程序读取用户缓 ...
Tomcat 获取基本路径
最近公司有个需求,要求读 tomcat 中某 properties 文件信息,由于项目是部署到 windows 上的,由于项目的特殊性,会经常移到项目所以这个需求的最大突破点就如何动态获取 tomcat 目录的基础路径,在网上有很多方法比如 1.通过配置 tomcat 环境变量,从而在系统环境变量中获取 2.使用 system.getProperty()方法来获取
本文主要介绍第二种方法 system.getProperty(),这种方法 结合 catalina.base 使用简单介绍一下 catalina.base
catalina.base是 Tomcat 服务器的一个系统属性,它表示 Tomcat 实例的基本目录路径。当 Tomcat 服务器启动时,它会设置这个系统属性,指示当前 Tomcat 实例的基本路径。
在 Java 代码中,你可以使用System.getProperty("catalina.base")来获取该系统属性的值。这个值是一个字符串,表示 Tomcat 实例的基本目录路径。
当catalina.base系统属性可用时,意味着 Tomcat ...
Nvm 安装配置
nvm 安装配置nvm 关系 vue 介绍nvm 全称为 node.js version management ,顾名思义是用于管理多个 nodejs 的版本控制工具。通过它可以安装和切换不同版本的 nodejs, 主要是为了解决 node.js 各种版本存在不兼容现象。Vue 是一个渐进式(声明式渲染——组件系统——客户端路由——-大数据状态管理——-构建工具)的 js 框架,与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计,并且有很好的生态系统。具有体积小,速度快,兼容性强等优点。
nvm 的安装下载下载直接在官网下载即可:nvm 下载地址
nvm-setup.zip:安装版,推荐使用
nvm-noinstall.zip: 绿色免安装版,但使用时需进行配置。
安装安装基本上就没有什么好说的了,傻瓜式无脑装 1.双击安装文件 nvm-setup.exe
2.设置 nvm 路径
3.设置 nodejs 路径,这步最好选择你之前安装过 nodejs 的目录
4.确认安装
5.这一步是因为你之前安装过 nodejs 并且之前的还在,问你是否要将之前的添加到 nvm ...
Docker 容器高级篇
Docker 复杂应用安装MySQL 主从复制主从搭建步骤:
新建主服务器容器实例 3307
1234567BASHdocker run -p 3307:3306 --name mysql-master \-v /mydata/mysql-master/log:/var/log/mysql \-v /mydata/mysql-master/data:/var/lib/mysql \-v /mydata/mysql-master/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7
进入/mydata/mysql-master/conf 目录下新建 my.cnf
12345678910111213141516171819BASH[root@88231 conf]# vim my.cnf[mysqld]## 设置server_id,同一局域网中需要唯一server_id=101## 指定不需要同步的数据库名称binlog-ignore-db=mysql## 开启二进制日志功能log-b ...
Docker 容器基础篇
Docker 概述Docker 为什么会出现?
环境切换/配置麻烦
一般一个产品的生命周期中,可能会存在多个环境:
开发环境
测试环境
生产环境
其实我们在编程的过程中,很大一部分时间都花在 环境 上:
比如重装系统之后,想要运行 Jar/War 包,就必须在系统里装上 JDK . Tomcat. MySQL 等环境 ,并配置好相应的环境变量
以前生产环境和测试环境完全是两套不同的环境,可能会出现:==代码在测试环境跑没问题,到生产环境就出各种错!==
在学习 分布式/集群 项目时,需要搭建多个环境,以前使用 Vmware 搭建费时费力,且对电脑的配置要求较高
应用之间需要隔离
假设,我只有一台服务器,我写了两个应用(网站),都部署在一台服务器里,倘若其中一个应用出现了问题,导致 CPU 跑满到 100%,那么另一个应用也会受影响!
同一个服务器下端口冲突. JRE 版本冲突…
Docker 的出现就为以上问题带来了解决方案:
Docerk 的思想就来自于集装箱!
Docker 是什么?Docker 基本介绍Dock ...
Docker 部署的微服务注册到 Nacos 的 IP 为私网无法访问
问题描述使用 docker 集群部署微服务时,注册到 nacos 上的 ip 会使用 docker 容器的虚拟内网 ip 作为注册地址,这会导致集群部署服务时,nacos 无法解析对应服务的 ip。
解决方案
参考:注册服务获取 IP 的问题 · Issue #310 · alibaba/nacos (github.com)
方法一:docker compose 配置文件中设置网络模式为 host
12YAMLnetwork_mode: host
host 网络模式是直接使用宿主机的 IP 地址与外界进行通信
方法二:nacos 配置指定注册 ip/host
application.yml 配置文件中添加如下配置即可:
1234567YAMLspring: cloud: nacos: discovery: # 配置host,避免docker部署nacos注册服务ip为内网地址 ip: xxx
Docker 安装 Nexus3 并搭建 Docker 私有镜像仓库
前言Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为“Maven 仓库管理器”。
Nexus Repository 提供多种包格式的仓库:
官方文档:https://help.sonatype.com/repomanager3
安装部署这里采用 Docker 进行安装
安装 nexus3123456789BASHdocker run -itd \--privileged=true --name=nexus3 \-p 8081:8081 \-p 8082:8082 \-p 8083:8083 \-p 8084:8084 \-v /u01/cicd/nexus3/data:/nexus-data \sonatype/nexus3:3.30.0
参数说明:
8081:可以通过 http 访问 nexus 应用
8082:docker(hosted)私有仓库,可以 pull 和 push
8083:docker(proxy)代理远程仓库,只能 pull
8084:docker(group) ...
MongoDB数据库
前言MongoDB 数据库的学习
MongoDB 的简介MongoDB 的概述
MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB 的安装安装1apt install mongodb
安装完成可以用mongo -version来查看版本检查是否安装成功
MongoDB 基本管理通过以下命令,可以对 mongoDB 数据库进行一些基本的操作:
查看服务状态service mongodb status
启动服务service mongodb start
停止服务service mongodb stop
重新载入资源service mongodb reload
卸载1apt --purge remove mongodb m ...