istio k8s1.24安装istio1.14 istio版本 根据istio与k8s版本关系我们需要在k8s1.24版本上安装1.14的istio。本篇以1.14.3为例 k8s1.24安装文档参考 下载 https://github.com/istio/istio/releases 1.14.3版本 安装 安装istioctl 解压缩istio-1.14.3-linux-amd64.tar.gz cp bin/istioctl /usr/bin/ istioctl version
linux virtaulbox虚拟机扩容 初始创建virtaulbox虚拟机时,设置存储容量过小,如果重新创建,那么上面已经构建的功能全部需要重新搞,故可考虑直接扩容虚拟机 创建磁盘 检查 启动虚拟机。 输入命令:lsblk 看到我们刚刚创建的物理磁盘sdb . NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 10G 0 disk sr0 11:0 1 1024M 0 rom
linux virtualbox 网络 静态ip 在通过virtaulbox搭建虚拟机时,网络配置是绕不开的功能,我们可选择NAT,即配置一个全局的NAT网络,在虚拟节node上选择NAT并配置全局的NAT网络配置,有时当启动node后,节点上无ip,这时可手动修改网络配置 # vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 BOOTPROTO 的值修改为 static (设置静态 IP 模式) ONBOOT 的值修改为 yes (开机自启动) 添加 IP,GATEWAY,NETMASK,DNS 等信息 IP gateway等信息需要与全局的Nat网络对应 然后执行service
k8s istio 1.4版本安装 版本 1.4版本对应k8s 1.15 helm 2.14.3 k8s与istion版本关系见https://istio.io/latest/docs/releases/supported-releases/#support-status-of-istio-releases 下载 https://github.com/istio/istio/releases [1.4版本](wget https://github.com/istio/istio/releases/
linux linux 之后台执行checkstatus #! /bin/bash function checktcpcode() { listen_num=$(ss -lnpt|grep "$1"|wc -l) #$1获取参数中的检查端口 # echo $listen_num if [ $listen_num -eq 0 ];then # 如果不存在监听则返回0 否则返回1 return 0 fi return 1 } function check(
java jackson value deserialize int to boolean 问题 在开发过程中,发现某个api在请求时传的是Integer,在另一个服务接收时,通过Boolean接收的,并且能正常转换为Boolean,故复现一下该问题,并探究下问题根本 依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.
java java – 为什么JVM CMS(并发标记和清除)需要两次暂停GC? cms过程 这在HotSpot内存管理白皮书中得到了很好的解释: A collection cycle for the CMS collector starts with a short pause, called the initial mark, that identifies the initial set of live objects directly reachable from the application code. Then,
mysql mysql Communications link failure 原因 mysql连接错误 复现 启动服务 请求接口,调用mysql获取数据 stop mysql 请求接口报错 启动mysql 请求接口,未自动恢复,仍报错Communications link failure 解决方案 使用DruidDataSource使用com.mysql.jdbc.Driver 当创建失败时,会通过com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread循环创建连接,间隔时间为timeBetweenConnectErrorMillis直到获取到正常的连接 使用DruidDataSource使用com.p6spy.engine.spy.P6SpyDriver
redis redis库存方案 场景说明 设计秒杀活动时,因需要保证在高并发场景下库存不会超卖,或 抢券不会超量抢券的情况,可使用redis的decr功能 ,但是如果仅仅简单的使用decr,针对以下场景会有问题 剩余数量为1 线程1 decr 数量剩余0 线程2 decr 数量剩余-1 响应失败 线程1 因后续功能异常通过incr 归还数量 线程3 decr 数量剩余-1 响应失败 上述场景中,最后一个库存未使用便已不可用,在高并发场景下浪费的库存会较多,针对以上问题有以下两个方案 方案 方案1 当decr 结果小于0时,通过incr归还数量后返回失败 此方案的弊端是需要调用两次redis
技术问题总结 记录一次sim环境消费不到消息的问题 问题 在sim环境中,生产的消息已发送至中间件服务,但是无消费者进行消费 而sim环境是有对应的节点的 DD trace染色 在DD中所有的请求及mq均通过trace染色&sidecar方式实现的,该方案可解决多服务并行测试的问题 即,存在一套基准环境sim13,当某个服务上sim时,拉取一个新的环境如sim110,针对该环境的请求及mq消息trace均会染色为s110xxxx,当该服务请求其它服务时,请求该服务的基准环境,同样会染色trace,而其它服务基准环境sidecar收到请求后会判断是否存在sim110环境,如果存在,则转发;如果不存在,则转发给sim13基准环境处理请求 mq消息大概原理同上 生产段流量染色:在生产消息的时候统一通过设置消息的属性properties(map类型)值,来标记当前消息所属客户端环境 消费端环境标示:mq proxy会根据消息的客户端标识,
java 容器及java oom 容器oom 原因 当容器设置 memory limit 过小时,并且容器进程需要的memory大于 容器limit内存时,会报出容器oom,即进程可申请的内存小于系统分配给该进程的内存时oom 结果 linux内核会kill掉该进程,即容器会因为oom重启 解决方案 调大memory limit或限制进程使用内存大小 java.lang.OutOfMemoryError: Java heap space 原因 在启动java程序时,可设置堆内存大小xmx,如果该值设置的过小,导致jvm gc回收空间过小,并且堆无空间分配新的对象,即会报出java.lang.OutOfMemoryError: Java
docker docker之管理私有仓库 创建私有仓库 docker run -d -p 5000:5000 registry 默认情况下,会将仓库创建在容器的/tmp/registry目录下,可通过-v参数来将镜像文件存放在本地的指定路径上 比如启动该容器的节点ip为10.0.2.2则可通过以下命令将镜像推送至私有仓库 docker push 10.0.2.2:5000/test
other hbase简单命令 客户端登陆hbase # 执行/usr/local/hbase/bin目录下的hbase命令 ./hbase shell 查看有哪些表 > list > describe 'AgentInfo' 查询数据 # 扫描 scan 'AgentInfo',{LIMIT =>1} ROW COLUMN+CELL \x00-9012\x00\x00\x00\x00\x00\x00\x00\x00\
k8s k8s之metrics etcd metrics curl http://localhost:2379/metrics k8s metrics kubectl get --raw /metrics clone prometheus-operator git clone https://github.com/coreos/prometheus-operator.git Prometheus Operator引入的自定义资源 Prometheus ServiceMonitor Alertmanager 除了k8s原生Resource资源以外(如 pod service deployment等)
mysql mysql查看当前运行的程序 命令 show processlist:根据不同的账号权限可以看到所有用户的,当前用户的对应的连接。只有100条 show full processlist:展示所有的连接数据 sql select id, db, user, host, command, time, state, info from information_schema.processlist where command != 'Sleep' and db='lts' order by time
java tomcat网络模型 Tomcat启动流程 tomcat中基本所有的组件均通过LifecycleMBeanBase管理,在启动时,依次调用该LifecycleMBeanBase实现类所管理的其它组件的start方法,实际调用为startInternal()方法 其中tomcat中的容器实现的是LifecycleMBeanBase的子类ContainerBase,在ContainerBase.startInternal()方法中会依次启动 Cluster,Realm,子容器,Pipleline等 selector.select(1000)。当 Poller 启动后因为 selector 中并没有已注册的 Channel,所以当执行到该方法时只能阻塞。所有的 Poller 共用一个 Selector,其实现类是 sun.nio.ch.EPollSelectorImpl
mysql mysql数据结构之b+树 b树 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。 所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。 b树特征 一个M阶的b树具有如下几个特征: 定义任意非叶子结点最多只有M个儿子,且M>2; 根结点的儿子数为[
java apollo使用及实现 apollo功能 配置功能 namespace config key 灰度 自定义字段,如uid 配置灰度百分比 在执行方法时传入该uid 端 服务端 agent监听zk,将该服务订阅的配置下载到本地,保存为文件 sdk监听文件,修改内存中的配置 app 将配置按服务端过程下载至服务器本地 app通过http接口,在返回前台时调用 小程序 同app 配置链路 修改或新增配置后,发布给distributor distributor分发给各机房独立的zk notifier服务通知agent监听指定的zk节点,agent为容器内部的apollo agent 业务服务集成sdk,初始访问时sdk在本地文件找不到开关配置,发请求给agent,
linux linux之内存 问题 RAM为什么不能持久化? 内存管理的最小单位是什么? pagecache是什么? pagecache与buffercache的区别? 线程的内存大小? tmpfs是做什么的? 内存对齐的作用? 内存 概述 内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。 内存的大小 内存有一个最小的存储单位,大多数都是一个字节。内存用内存地址(memory address)来为每个字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存地址从0开始,每次增加1。这种线性增加的存储器地址称为线性地址(linear address)。为了方便,我们用十六进制数来表示内存地址,比如0x00000003、0x1A010CB0。这里的“0x”
java 记录一次由jmap导致的gc 问题 服务gc频繁,故需要通过jmap查看jvm内存使用情况,写了一个定时1s执行jmap的工具,结果gc更加频繁,gc原因是Heap Inspection Initiated GC,该问题是由jmap -histo:live导致的 解决方案 由于在执行时添加了live参数,所以在执行该命令前均会执行一次full gc ;故应避免使用jmap -histo:live因为会频繁的full gc,故在执行jmap时,去掉live
other 数据结构堆介绍及应用 什么是堆? 堆是一种特殊的树,只要满足以下两个条件,就可以称这棵树为堆 堆是一颗完全二叉树(完全二叉树要求,除了最后一层,其他节点个数都是满的,最后一层的节点都靠左排列) 堆中的每一个节点都必须大于等于(或者小于等于)其子树中每个节点的值。 每个节点的值都大于等于其子树每个节点的值的堆,我们称之为大顶堆,每个节点的值都小于等于其子树每个节点的值的堆,我们称之为小顶堆。如下图: 从上图可以看出,对于同一组数据,我们可以构建多种不同形态的堆。 如何存储堆? 堆是一颗完全二叉树,比较适合用数组存放,因为用数组存放不需要存储左右子节点的指针,非常节省空间,通过下标就可以找到一个节点的左右子节点和父节点。下图就是一个数组存放堆的例子: 从图中可以看出,下标i的节点的左子节点的下标是i2,右子节点的下标为i2+1,父节点的下标为i/2,
docker docker 容器指定内存 创建容器 docker run -m 4g --memory-swap -1 已存在容器 docker stop fe0eb27f487b docker update fe0eb27f487b -m 128m --memory-swap -1 docker start fe0eb27f487b
kafka kafka队列小贴士 kafka如何实现延时消息 rabbitmq可以通过死信队列实现延时消费 import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.kafka.clients.consumer.*; import org.apache.kafka.clients.producer.KafkaProducer;
mysql mysql 获取全部表名 获取库db1的全部表名 select table_name from information_schema.TABLES where TABLE_SCHEMA='db1' and TABLE_TYPE = 'base table'; 获取path_names_png字段,截去最后一个‘-’及以后的部分 SELECT path_names_png, LEFT(path_names_png, char_length(