Mr.zhang's Blog

学习笔记,技术博客


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

Redis主从部署

发表于 2018-12-14 | 分类于 technology

Redis主从部署

  • 配置

    • redis目录下创建master、slave1、slave2三个目录,每个目录下分别创建一个redis.conf

    • 修改slave的redis配置文件

      1
      2
      slaveof ip port(映射到主服务器上)
      masterauth pwd
    • 分表启动master、slave1、slave2三个服务

      在三个服务下分别执行info命令

      master显示如下

      slave显示如下

    ​ 则三个服务启动成功

  • 哨兵监控–可以自动切换故障主从

    • redis目录下创建sentinel1.conf、sentinel2.conf、sentinel3.conf、sentinel1.log、sentinel2.log、sentinel3.log

    • sentinel.conf配置如下

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      #端口
      port **
      #后端启动
      daemonize yes
      #日志文件路径
      logfile "/install/redis/redis-3.2.1/sentinel.log”
      #唯一id,选举时用到
      sentinel myid a36dd6517a54a4fb8f0e1024c3acaa16417652d0 id
      #监控redis主库
      sentinel monitor mymaster 127.0.0.1 6384 2
      #多久不回复心跳反应,则默认服务不可用
      redis sentinel down-after-milliseconds mymaster 5000
      #认证密码配置
      sentinel auth-pass mymaster 123456
      #保护模式关闭
      protected-mode no
    • 分表启动三个哨兵sentinel.conf

# DevOps
ES部署
RabbitMQ 详解

ES部署

发表于 2018-12-02 | 分类于 technology

ES部署

  • 下载安装包

    https://www.elastic.co/downloads/elasticsearch

  • 解压运行

    • cd 到安装目录
    • sudo bin/elasticsearch
  • 验证

    浏览器中访问http://localhost:9200/看到一个json结果集,表明安装成功

  • 切换root身份

    ES不能以 root身份启动,需要添加用户组
    chown -R es:es es/ es:es把目录权限给es:es

    es需要调整参数。/etc/sysctl.conf

    最后添加vm.max_map_count=655360

    执行sysctl

  • 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cluster.name
    node.name
    node.master: true/false
    path.data
    path.logs
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false
    http.port
    transport.tcp.port
    discovery.zen.ping.unicast.hosts
    node.max_local_storage_nodes
# DevOps
Docker 常用命令
Redis主从部署

Docker 常用命令

发表于 2018-11-20 | 分类于 technology

Docker 常用命令

  • 查看正在运行的容器

    1
    docker ps

    查询项目

    1
    sudo docker ps -a |grep 项目
  • 进入容器

    1
    sudo docker exec -it 项目名 bash
  • 查看本地镜像

    1
    docker images
  • 查看指定容器的某个确定端口映射到宿主机的端口号

    1
    docker port ID/NAMES
  • 查看web应用程序的日志

    1
    docker logs -f ID/NAMES
  • 查看web应用程序容器内部运行的进程

    1
    docker top ID/NAMES
  • 已经停止的容器,可以使用命令 docker start 来启动

    1
    docker start ID/NAMES
  • 停止web应用程序容器

    1
    docker stop ID/NAMES
  • 查询最后一次创建的容器

    1
    docker ps -l
  • 删除不需要的容器

    删除容器时,容器必须是停止状态,否则报错

    1
    docker rm ID/NAMES
  • 获取新镜像

    1
    docker pull 名:版本(ubuntu:13.10)
  • 查找镜像

    1
    docker search 名
  • 启动容器并进入容器

    1
    docker run -t -i 名 /bin/bash
# DevOps
Jar debug 启动
ES部署

Jar debug 启动

发表于 2018-10-16 | 分类于 technology

debug启动脚本

1
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 ***.jar debug
# Java
Jenkins 安装
Docker 常用命令

Jenkins 安装

发表于 2018-09-19 | 分类于 technology

Jenkins 安装步骤

安装步骤

1.Install JDK

2.安装 Jenkins 仓库

1
2
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

3.安装 Jenkins

1
2
yum install jenkins -y
配置文件地址 /etc/sysconfig/jenkins

4.启动 jenkins

1
systemctl start jenkins

5.查看初始化密码

1
cat /var/lib/jenkins/secrets/initialAdminPassword

6.访问地址

1
http://10.0.96.102:8080/

7.配置Jdk、Maven

​ 配置JDK、Maven地址

​ 安装maven Integration 插件

8.安装Git

1
yum install git

​ 配置Git地址以及安装Git-Client插件

9.安装GitLab、GitLab Hook插件

10.配置全局凭据(拉取代码私钥)

11.shell启动springboot jar脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
# jenkins工作目录
project_path=/var/lib/jenkins/workspace/eureka
cd ${project_path}
# 打包
mvn clean package -Dmaven.test.skip=true

jar_path=/var/lib/jenkins/workspace/eureka/target/

jar_name=eureka-server-0.0.1-SNAPSHOT.jar

cd ${jar_path}
# 杀死进程
ps -ef|grep eureka |grep -v grep |awk '{print $2}'|xargs kill -9

# 启动服务
BUILD_ID=dontKillMe nohup java -jar ${jar_name} &

War部署

1.下载jenkins.war文件,官网地址:http://jenkins-ci.org/ 注意选择最新版本Long-Term Support Release

2.访问地址http://IP:8080/jenkins/

3.查看初始密码

1
cat /root/.jenkins/secrets/initialAdminPassword

4.配置Jdk、Maven

​ 配置JDK、Maven地址

​ 安装maven Integration 插件

5.安装Git

1
yum install git

​ 配置Git地址以及安装Git-Client插件

6.安装GitLab、GitLab Hook插件

7.配置全局凭据(拉取代码私钥)

8.shell启动springboot jar脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
# jenkins工作目录
project_path=/root/.jenkins/workspace/eureka
cd ${project_path}
# 打包
mvn clean package -Dmaven.test.skip=true

jar_path=/root/.jenkins/workspace/eureka/target/

jar_name=eureka-server-0.0.1-SNAPSHOT.jar

cd ${jar_path}
# 杀死进程
ps -ef|grep eureka |grep -v grep |awk '{print $2}'|xargs kill -9

# 启动服务
BUILD_ID=dontKillMe nohup java -jar ${jar_name} &
# 注意 BUILD_ID=dontKillMe 不加的话 会启动完成直接关闭服务
# DevOps
Mysql-emoji表情
Jar debug 启动

Mysql-emoji表情

发表于 2018-09-03 | 分类于 technology

Mysql-emoji表情支持版本

大于5.5.3的Mysql版本才开始支持emoji表情

Mysql-emoji表情失败原因

  • 普通的字符串或者表情都是占位3个字节,使用utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集。Mysql 5.5.3之前的版本,仅支持的utf8为3字节的,Mysql 5.5.3之后的版本支持utf8mb4为4字节的。

Mysql配置修改

  • 修改mysql配置文件my.cnf(windows为my.ini)

    找到后请在以下三部分里添加如下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [client] 
    default-character-set = utf8mb4
    [mysql]
    default-character-set = utf8mb4
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
  • 检查变量

    1
    SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
  • 将数据库和已经建好的表也转换成utf8mb4

    1.更改数据库编码

    1
    ALTER DATABASE caitu99 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

    2.更改表编码

    1
    ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# Mysql
JVM常用调试命令
Jenkins 安装

JVM常用调试命令

发表于 2018-08-06 | 分类于 technology

JVM常用调试命令

  • jps

    虚拟机进程状况工具

    1
    jps -v

    输出虚拟机进程启动时jvm参数 包括 进程占用的端口号

  • jstat

    虚拟机统计信息监视工具

    1
    jstat -gcutil pid 1000 10

    查询GC情况(1秒一次,统计10次)

  • jmap

    java内存影像工具

    1
    jmap -histo pid |grep xxx

    根据端口号pid查询类实例信息

  • jstack

    java堆跟踪工具

    1
    jstack -l pid

    查看线程堆栈

# JVM
JVM内存参数设置
Mysql-emoji表情

JVM内存参数设置

发表于 2018-07-25 | 分类于 technology

JVM内存常用参数设置

  • 堆内存

    最大堆内存(新生代和老年代之和的最大值) -Xmx

    最小堆内存(初始大小) -Xms

    • 新生代大小

      一般设置为整个堆内存的 1/3或者1/4

      -Xmn等效于设置了-XX:NewSize与-XX:MaxNewSize相同大小

      -XX:NewSize 设置新生代的初始大小

      -XX:MaxNewSize设置新生代的最大值

      ​ 设置不同的-XX:NewSize与-XX:MaxNewSize可能会导致内存震荡,以减少运行期间系统在内存申请上所花的开销

      -XX:SurvivorRadio用来设置新生代eden空间与s0空间的比例关系

      ​ s0与s1空间又分别称为from空间和to空间),并在Minor GC后会互换角色

      ​ 常用比例eden:s0:s1 = 8:1:1

    • 老年代大小

      -XX:NewRadio用来设置老年代与新生代的比例(2:1/3:1)

    -Xss 用来设置线程栈的大小

    • 方法区(持久代)

      HotSpot 虚拟机 -XX:MaxPermSize设置方法区的最大值;-XX:PermSize设置方法区的初始大小

      ​ 一般设置为64MB已经可以满足绝大部分的应用程序工作,如果依然出现方法区溢出,可以将值设置为128MB若依然不能满足,则应该考虑优化程序设计

# JVM
JVM内存模型
JVM常用调试命令

JVM内存模型

发表于 2018-07-12 | 分类于 technology

JVM内存模型

  • 栈

    ​ 栈分虚拟机栈和本地方法栈

    ​ 栈用来存储Java的基本数据类型. Java指令代码(包括方法). 常量 Stack的内存管理是顺序分配的,而且定长,不存在内存回收的问题

  • 堆

    ​ 堆用来存储Java对象实例 实际上也是保存对象实例的属性值,属性的类型和对象本身的类型标记等Heap 则是随机分配内存,不定长度,存在内存分配和回收的问题

    ​ 注意:对象实例在Heap 中分配好以后,需要在Stack中保存一个4字节的Heap 内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例

  • 方法区

    ​    所有**线程共享**的内存区域
    

    ​ 存储已被虚拟机加载的类信息.常量.静态变量,运行时的常量池也存于方法区中

  • 程序计数器

    ​ 当前线程所执行的字节码的行号指示器

    ​ 执行的是java方法时,计数器记录的是正在执行的虚拟机字节码指令的地址.

    ​ 执行的是Native方法,计数器值为空

    其中方法区和堆是线程共享的数据区;其他区域是线程隔离的数据区

# JVM
JVM类加载机制
JVM内存参数设置

JVM类加载机制

发表于 2018-06-21 | 分类于 technology

上级委托加载机制

1.整个JVM平台提供三层ClassLoader

  • Bootstrap ClassLoader

    主要加载JVM自身工作需要的类 ,完全由JVM控制,一个类加载工具,没有高一级的父类加载器,也没用子加载器 没有遵守ClassLoader加载规则

  • ExtClassLoader

    标准扩展类加载器 没父

  • AppClassLoader

    父类是ExtClassLoader classpath目录下的类都可以被这个加载器加载

注意:

​ 1.如果要实现自己的类加载器,不管你是直接实现抽象类ClassLoader,还是继承URLClassLoader类,或者其他子类,它的父加载器都是AppClassLoader.

​ 2.在应用中能提取到的顶层父类是ExtClassLoader

2.JVM加载.class文件的过程

  • 找到 .class文件,并把该文件包含的字节码加载到内存中.
  • 字节码验证,Class类数据结构分析及相应的内存分配和最后的符号表的链接
  • 类中静态属性和初始化赋值,以及静态块的执行
# JVM
JVM垃圾回收机制
JVM内存模型
123
Mr.zhang

Mr.zhang

那天遇见,便是缘分

23 日志
3 分类
7 标签
E-Mail
© 2020 Mr.zhang
Today is another Good Day
鲁ICP备19015290号