0%

创建和销毁对象

§ 考虑使用静态工厂方法代替构造函数

优点:

  • 有名字,可以更确切描述返回对象的名称。
  • 不用每次调用都创建一个新的对象,可以重复调用返回 相同实例
  • 可以返回原返回类型的任何子类型对象。
  • 返回对象的类可以根据输入参数的不同而不同
  • 便携包含该方法的类时,返回的对象的类不需要存在。
  • 可以在创建参数化类型实例的时候,使代码更简洁。
阅读全文 »

ElasticSearch 从 6.8.0 和 7.1.0 开始,X-PACK 安全功能免费提供,首先确认版本是否支持。

SSL 证书

开启 X-PACK 首先要生成 SSL 证书。

以 CentOS7 为例,如果采用 RPM 包安装,安装路径在 /usr/share/elasticsearch,配置目录在 etc/elasticsearch

在其中一个节点上,执行:

1
2
3
cd /etc/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch-certutil ca
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

以上命令,会在 /etc/elasticsearch 生成两个文件:

elastic-certificates.p12elasticsearch.keystore

将两个文件同步到 ElasticSearch 所有节点,同时注意下 /etc/elasticsearch 目录的文件权限。

阅读全文 »

ElasticSearch X-PACK 自 6.3 之后默认安装的,之前是作为插件。

ElasticSearch 自 6.8.0 和 7.1.0 开始,X-PACK安全功能 免费提供。借助 Kibana 可实现可视化用户、角色权限控制。而之前的版本,可以使用第三方插件 SearchGuard 来实现(很麻烦,并且可视化也是收费的),因此强烈建议升级。

ElasticSearch 7 开始,官方提供的下载包有 JDK 版本和 No JDK 版本,根据需要选择。

首先总结一下几个概念:Buffered IO、UnBuffered IO、DirectIO 分别是什么意思。

Buffeedr IO,主要是应用与文件系统之间的缓存。

UnBuffered IO,主要是应用与文件系统之间没有缓存,但是文件系统和操作系统是有 Page Cache 缓存的。

Direct IO,会绕过操作系统 Page Cache 页缓存(但还是会文件系统这一层)。这里有点复杂,借用下网上的图。

linux-io-test

Linux IO 测试主要有:hdparam、dd、fio 几个工具。

阅读全文 »

Maven 中央仓库是由 Sonatype 维护的,提交流程比较尴尬,我们需要使用他的 JIRA 系统,通过提交 Issue 来进行发布流程。

Sonatype 地址是:https://issues.sonatype.org/secure/Dashboard.jspa

注册 Sonatype 账户

需要先注册一个账户,这个账户需要牢记,因为需要在接下来 Maven 的 setting.xml 中的配置,以及登陆 oss.sonatype 都要用到。

阅读全文 »

网上参考了很多资料,总结了大家推荐的一些中性笔选购指南:

三菱 UM-100, 5+块,经典,学生专用,会积墨。0.5mm,可换芯。假货重灾区
三菱 UM-151,8+块,不耐操,假货重灾区
三菱 UB-150,7+块,直液,颜值高,UB-155,更商务
三菱 UB-200,10块,超级可靠,秘书领导专用签字笔,可作为书法 0.8mm 稍微偏粗。

百乐 BX-V5,7+块,直液,明星笔,颜值高,
百乐 BXC-V5,10+块,升级版,可换芯

做运维的朋友,应该会经常做服务器硬盘的 RAID,常规的 RAID 卡有一些通用的参数配置,这里简单总结一下。

采购建议

好的 RAID 卡会比较影响服务器硬盘的 IO 性能,目前主流应该是带有大容量缓存,以及配戴电池(BBU)的 RAID卡。

如:戴尔 DELL PERC H730P 是 2G 缓存带电池的卡。

server-raid

阅读全文 »

本文主要介绍 CentOS8 服务器部署规范和一些初始化配置,整体套路延续 CentOS7 规范。

主要变化

内核版本

内核版本升级到 4.18+,使用 Docker 不需要再手动升级内核了。

1
uname -a

软件源管理

CentOS8 使用 DNF 作为软件源管理器,使用方法和 YUM 差不多,它来源于 Fedora。

目前仍可以同时使用 YUM。

网络服务

network.service 已经不存在,使用 NetworkManager 或 nmcli 进行网络服务重启

1
2
3
4
systemctl restart NetworkManager

nmcli networking off
nmcli networking on
阅读全文 »

Kafka 最佳实践

Apache Kafka 是一款开源的分布式 消息引擎系统, 消息引擎系统是一组规范, 利用这组规范在不同系统之间传递语义准确的消息,实现 松耦合的异步式 数据传递。

Kafka 同时支持 点对点模型发布订阅模型,使用的是纯二进制的字节序列,消息是结构化的。

Kafka 所有通信都是基于 TCP 的。

阅读全文 »

Kafka 的服务端由称为 Broker 的服务进程构成, 一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。

推荐使用 Linux 部署 Kafka,得益于 epoll 的 IO 模型以及稳定的零拷贝技术。

因为 Kafka 实现机制多是顺序读写操作,普通机械硬盘可以胜任生产环境,虽然 Kafka 的分布式机制可以不用进行 RAID,但可以考虑使用 RAID,一方面提供磁盘级别的冗余(双保险),另一方面整体的读写吞吐量也会提升。另外尽量选用1T以内的机械硬盘组建 RAID5(大容量单盘恢复成功率低)。

Kafka 部署需要依赖 Zookeeper。 负责协调管理并保存 Kafka 集群的所有元数据信息,比如集群都有哪些Broker在运行、创建了哪些 Topic,每个Topic都有多少分区等等。

生产环境建议部署独立的 Zookeeper 集群 以及 Kafka 集群,至少需要 6 个节点。

阅读全文 »

OkHttpClient 最早用于安卓客户端请求服务端场景,优势是请求稳定,低延迟,甚至可以多数据中心负载均衡。

特性:

  • 支持 HTTP/2,对于相同的 host 会共享一个 socket 连接
  • 在不支持HTTP/2,情况下,实现连接池,从而有效降低建立连接的请求延迟
  • 响应缓存,避免重复请求
  • 支持同步或异步请求
阅读全文 »

首先确保正确安装 Docker CE,并且留意 Rancher 支持对应的 Docker CE 版本。

单节点 Rancher 默认使用内嵌的 etcd 来保存集群信息,为了避免容器删除后集群信息丢失,建议挂载 数据目录

首先创建持久化目录,与日志目录

1
2
mkdir /data/rancher
mkdir /var/log/rancher

Docker 启动 Rancher

启动 Rancher v2.2.8 版本

1
2
3
4
5
6
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /data/rancher:/var/lib/rancher \
-v /var/log/rancher:/var/log/auditlog \
-e AUDIT_LEVEL=1 \
rancher/rancher:v2.2.8

访问 Rancher

启动完成后,可以使用浏览器直接访问 Rancher 的界面。

常见问题

清理集群节点并重新加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 停止所有容器  
docker stop $(docker ps -aq)

# 删除所有容器
docker rm $(docker ps -aq)

# 删除所有镜像
docker rmi -f $(docker images -q)

# 删除所有挂载
docker volume rm $(docker volume ls -q)

# 删除 kubelet 挂载
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done

# 删除网卡接口
ip link delete docker0
ip link delete flannel.1

# Rancher 清理路径
rm -rf /etc/ceph \
/etc/cni \
/etc/kubernetes \
/opt/cni \
/opt/rke \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/etcd \
/var/lib/cni \
/var/lib/kubelet \
/var/lib/rancher/rke/log \
/var/log/containers \
/var/log/pods \
/var/run/calico

Rancher 证书过期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker stop <RANCHER_CONTAINER_NAME>

docker create --volumes-from <RANCHER_CONTAINER_NAME> --name rancher-data rancher/rancher:<RANCHER_CONTAINER_TAG>

docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz /var/lib/rancher
ls

docker pull rancher/rancher:<RANCHER_VERSION_TAG>

docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /data/rancher:/var/lib/rancher \
-v /var/log/rancher:/var/log/auditlog \
-e AUDIT_LEVEL=1 \
rancher/rancher:v2.3.8

CentOS7 默认使用 3.1x 内核,而 overlay2 要求 3.12 内核以上,为了更好的体验,需要升级内核版本。

当前内核版本可使用 uname -a 查看。

CentOS7 内核升级

安装内核的 repo:

1
2
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

查看可用的内核版本:

1
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

从显示列表中,查看当前稳定的 LTS 的版本为 4.x 的包

安装 4.X 的内核 LTS 版本:

1
yum -y --enablerepo=elrepo-kernel install kernel-lt.x86_64 kernel-lt-devel.x86_64

修改 CentOS 默认启动顺序

安装完毕后,使用下面的命令查看系统启动顺序:

1
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

输出结果类似:

1
2
3
CentOS Linux (4.4.196-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-36d400a719074b4bbb3718b742b3b6e4) 7 (Core)

修改系统默认启动顺序,选择我们新安装的 4.x 版本的内核

1
vi /etc/default/grub

修改内容:GRUB_DEFAULT=0,其中 0 代表刚才查看后的顺序。

加载内核配置,重启生效

1
2
grub2-mkconfig -o /boot/grub2/grub.cfg
init 6

安装 Docker CE 18.09

安装必要的一些系统工具:

1
yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:

1
2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

安装当前一个稳定版本:

1
yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io

启动 Docker 服务

1
2
systemctl start docker
systemctl enable docker

检查:

1
docker version

修改数据路径路径以及源修改:

1
/etc/docker/daemon.json

加入:

1
2
3
4
{
"graph": "/data/docker",
"registry-mirrors": ["https://5bxpj4b7.mirror.aliyuncs.com"]
}

重启后生效:

1
2
3
systemctl daemon-reload
systemctl restart docker
docker info

docker-compose

1
2
3
4
5
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version