0%

前沿

redis是最常用的缓存服务,下面我就使用docker来搭建一套redis的集群。

创建redis容器
  1. 首先我们需要新建一个redis配置模板,用于批量生成redis配置文件redis-cluster.tmpl

    1
    2
    3
    mkdir -p ~/docker/redis-cluster;
    cd ~/docker/redis-cluster;
    touch redis-cluster.tmpl;
  2. 将一下内容写入到redis-cluster.tmpl文件中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    port ${PORT}
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.3.60
    cluster-announce-port ${PORT}
    cluster-announce-bus-port 1${PORT}
    appendonly yes

    注意: cluster-announce-ip 是本机ip,而不是127.0.0.1

阅读全文 »

为什么要为docker配置国内镜像

在正常情况下,docker有一个默认连接的国外官方镜像,在国外的网友访问该官方镜像自然不成问题,但是国内毕竟不是国外,由于国情不同,中国的网络访问国外官方镜像网速一向很慢,而且往往还会遭遇断网的窘境,所以说我们要想正常使用docker的镜像,那么我们就不得不配置相应的国内镜像。

可以使用的国内镜像有哪些

Docker可以配置的国内镜像有很多可供选择,比如说:阿里云,网易蜂巢,DaoCloud,Docker中国区官方镜像等,这些都是可以提供给大家随意选择的不错的镜像仓库。

配置Docker中国区官方镜像

Docker中国区官方镜像简介

在国内,可以通过registry.docker-cn.com访问官方镜像库,目前该镜像库只包含流行的公有镜像,而私有镜像仍需要从美国镜像库中拉取。

配置Docker中国区官方镜像

使用vi修改 /etc/docker/daemon.json 文件并添加上”registry-mirrors”: [“https://registry.docker-cn.com“],如下:

1
2
3
4
5
[neusoft@172 ~]$ sudo vi /etc/docker/daemon.json 

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启Docker

配置完之后执行下面的命令,以使docker的配置文件生效

1
2
systemctl daemon-reload 
systemctl restart docker

Docker使用非root用户

通常我们使用Docker的时候都是使用的root,官方说法如下:

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it with sudo. For this reason, docker daemon always runs as the root user.
To avoid having to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

下面是使用非root用户操作的步骤

创建docker组

sudo groupadd docker

将当前用户加入docker组

sudo gpasswd -a ${USER} docker

重新启动docker服务(下面是CentOS7的命令)

sudo systemctl restart docker

当前用户退出系统重新登陆
运行docker命令

docker ps

Docker使用Portainer管理Swarm集群

在上一节中已经将了,如果将子节点加入到主节点中,本节将使用portainer来对swarm集群进行管理

安装portainer管理工具

下载portainer工具,并启用docker服务

1
2
3
4
5
6
7
8
9
[neusoft@localhost ~/docker]$ docker pull registry.cn-shenzhen.aliyuncs.com/zhouqi/portainer:1.20.0

[neusoft@localhost ~/docker]$ docker service create \
> --name portainer \
> --publish 9000:9000 \
> --constraint 'node.role == manager' \
> --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
> registry.cn-shenzhen.aliyuncs.com/zhouqi/portainer:1.20.0 \
> -H unix:///var/run/docker.sock
阅读全文 »

Docker使用Swarm搭建集群

selinux

查看selinux是否关闭

1
2
[root@localhost ~]# /usr/sbin/sestatus -v
SELinux status: disabled

如果没有关闭,可以直接修改/etc/selinux/config中的SELINUXdisabled

1
2
3
4
5
6
7
8
9
10
11
12
13
[neusoft@localhost ~/docker]$ vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

注意:修改xelinux后需重启服务器

打开docker.service中的2375端口

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
[neusoft@localhost ~]$ sudo vi /usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target rhel-push-plugin.socket registries.service
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=all
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES \
-H unix:///var/run/docker.sock -H 0.0.0.0:2375

重启docker

阅读全文 »

JVM运行原理详解

JVM简析

作为一名Java使用者,掌握JVM的体系结构也是很有必要的。
说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:

Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。

JVM在它的生存周期中有一个明确的任务,那就是运行Java程序,因此当Java程序启动的时候,就产生JVM的一个实例;当程序运行结束的时候,该实例也跟着消失了。 在Java平台的结构中, 可以看出,Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性。

下面我们从JVM的基本概念和运过程程这两个方面入手来对它进行深入的研究。

阅读全文 »

JAVA调优之JVM-GC

在分享之前需要给大家说一下,JVM的堆一般分为新生代,老年代永久代这三个区间,下面我们就来说明根据各种情况来进行排查,并对这三个区进行分配合理的区间。

服务器

  • 应用:dal-service-5.1.4.0-SNAPSHOT.jar
  • CPU:24核
  • 内存:125G
  • JDK:8.144
阅读全文 »

Mobaxterm Session Stopped

  1. 点击当前的Session
  2. 编辑Edit Session
  3. 点击Telnet设置Remote host地址为你的SSH地址
  4. Advanced Telnet settings选项卡的Telnet Client中选择Busybox telnet
  5. 尝试连接(肯定没效果)
  6. 切换到SSH,重新输入Remote host,点击连接,输入账号密码,ok连上了!

Spring 阅读源码笔记(原创)

什么是控制反转

所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。

  • 对象和对象关系怎么表示?
    可以用 xml , properties 文件等语义化配置文件表示。

  • 描述对象关系的文件存放在哪里?
    可能是 classpath , filesystem ,或者是 URL 网络资源, servletContext 等。

  • 有了配置文件,还需要对配置文件解析
    不同的配置文件对对象的描述不一样,如标准的,自定义声明式的,如何统一? 在内部需要有一个统一的关于对象的定义,所有外部的描述都必须转化成统一的描述定义。如何对不同的配置文件进行解析?需要对不同的配置文件语法,采用不同的解析器

阅读全文 »

IDEA在Windows上结合Docker

在网上找了很多文章,却没有一篇文章明确说明如何整合,如何使用Idea+Docker,下面来一一说下整合。

虚拟机(192.168.3.60)

在虚拟机上安装Docker,我这里安装的是Docker version 1.13.1, build 092cba3。编辑Docker运行文件

1
# vi /etc/systemd/system/docker.service

在ExecStart节点上增加unix:///var/run/docker.sock -H 0.0.0.0:2375,打开Docker外部访问,保存后重启Docker服务

1
2
# systemctl daemon-reload
# systemctl start docker

查看Docker中是否开启2375端口

1
# netstat -anp|grep 2375

在虚拟机上的配置就完毕了。

阅读全文 »