Mr.栋

简单


  • 首页

  • 关于

  • 归档

  • 标签

网络协议

发表于 2016-12-05 | 阅读次数

网络协议

TCP/IP是传输层协议,主要解决数据在网络中的传输.Http是应用层的协议,用于如何封装数据.传输数据的时候,只使用TCP/IP协议(传输层).如果没有应用层来识别数据内容,传输后的协议都是无用的.
应用层协议很多,FTP,HTTP,TELNET等,可以自己定义应用层协议.WEB使用HTTP作传输层协议.以封装HTTP文本信息,然后使用TCP/IP做传输层协议,将数据发送到网络上.

Socket是对TCP/IP协议的封装,Socket只是个接口,不是协议,通过Socket,我们才能使用TCP/IP协议.
当然,除了TCP,也可以使用UDP协议来传递数据.

三 HTTP和Socket连接区别

1 TCP连接
要想明白Socket,必须要理解TCP连接.
建立TCP连接的”三次握手”:
第一次:客户端向服务器发送SYN包(syn=j),同时自己处于SYN_SEND状态.
第二次:服务器端收到SYN包后,必须确认客户的SYN(syn=j+1),同时也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态.
第三次:客户端收到服务器发来的SYN+ACK包,就向服务器发送SYN(syn=k+1),发送完毕后,服务器和客户端都进入ESTABLISHED状态.完成三次握手.
握手过程中,并不传输数据.在握手后,服务器与客户端才开始传输数据,理想状态下,TCP连接一旦建立,在通讯双方中的任何一方主动断开连接之前,TCP连接会一直保持下去.

2 HTTP连接
HTTP最显著的特点:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接.HTTP是一种短连接.通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送”保持连接”的请求.这样可以保证客户端在服务器端是”上线”状态.

阅读全文 »

swarm集群运行springboot服务

发表于 2016-08-11 | 阅读次数

docker1.12 Swarm 模式简介

1.Docker Engine 1.12 集成了Swarm集群工具.

2.主要使用三个新的命令行工具创建一个swarm集群:

docker swarm 开启swarm模式; 加入Swarm集群; 配置集群参数

docker node 查询集群节点信息; 提升/移除一个管理节点; 管理swarm节点主机

docker service 创建管理 service

创建swarm集群

准备

两台centOS7(manager:10.10.135.154、worker:10.10.56.134)

安装docker1.12版本,具体操作参照官网:https://docs.docker.com/engine/installation/linux/centos/

创建swarm

manager节点初始化,为了高可用初始化后可以join多个manager节点

1
2
3
4
5
6
7
8
9
10
11
12
[root@10-10-135-154 ~]# docker swarm init
Swarm initialized: current node (258hygzd1lq4f4wup8vfbbx3k) is now a manager.

To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-28fiiskwvdaufiyx7tew8xo6fdqrvmd6ywmj3ylruxkwbhp2xn-98apqmndaixzr29gyc7y308ro \
10.10.135.154:2377

To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-28fiiskwvdaufiyx7tew8xo6fdqrvmd6ywmj3ylruxkwbhp2xn-awpm6ih1usvni2ul9nbbj7pnu \
10.10.135.154:2377

worker节点:加入到swarm

1
2
3
4
[root@10-10-56-134 ~]# docker swarm join \
> --token SWMTKN-1-28fiiskwvdaufiyx7tew8xo6fdqrvmd6ywmj3ylruxkwbhp2xn-98apqmndaixzr29gyc7y308ro \
> 10.10.135.154:2377
This node joined a swarm as a worker.

manager节点查看集群各个节点状态:

1
2
3
4
[root@10-10-135-154 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
08cymrzez1aqnb2t3n5wpkxai 10-10-56-134 Ready Active
258hygzd1lq4f4wup8vfbbx3k * 10-10-135-154 Ready Active Leader

创建service

创建管理service,相当于单机docker run

metebee/swarmdemo:0.0.1 是一个springboot搭建的rest服务

启动5个swarmdemo实例

1
2
[root@10-10-135-154 ~]# docker service create --name hello --publish 8080:8080 --replicas 5 metebee/swarmdemo:0.0.1 java -jar /usr/down/swarmtest-0.0.1-SNAPSHOT.jar
eul4ioby3d9ajmist4oiq8oe4

查看启动服务状态

1
2
3
[root@10-10-135-154 ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
eul4ioby3d9a hello 5/5 metebee/swarmdemo:0.0.1 java -jar /usr/down/swarmtest-0.0.1-SNAPSHOT.jar

查看各个实例状态

1
2
3
4
5
6
7
[root@10-10-135-154 ~]# docker service ps hello
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
bhmqg92wm28s6pima8q4z7nqb hello.1 metebee/swarmdemo:0.0.1 10-10-135-154 Running Running 7 minutes ago
dy5a3djz6wh8e1qn5wsrc0e1p hello.2 metebee/swarmdemo:0.0.1 10-10-56-134 Running Running 7 minutes ago
61001wv8sny3ge8xdcvzdpdqh hello.3 metebee/swarmdemo:0.0.1 10-10-56-134 Running Running 7 minutes ago
2kyr8n3hx0iicg4f0ytjfw5uy hello.4 metebee/swarmdemo:0.0.1 10-10-135-154 Running Running 7 minutes ago
25a70511y7g36wtr1bu4d7285 hello.5 metebee/swarmdemo:0.0.1 10-10-135-154 Running Running 7 minutes ago

可以看到worker(10-10-56-134)上启动了两个实例;manager(10-10-135-154)上启动了3个实例

实时查看各个实例状态:

1
watch docker service ps hello

注意DESIRED STATE列, 一个service副本的创建过程,会经历以下几个状态:

—accepted 任务已经被分配到某一个节点执行

—preparing 准备资源, 现在来说一般是从网络拉取image

—running 副本运行成功

—shutdown 呃, 报错,被停止了…

此时如果杀死一个实例,swarm会自动重启该实例

1
docker stop <ID>

测试

在master执行

1
curl http://127.0.0.1:8080/resttest/helloword

控制台响应:helloworld

此时请求会随机转发到这5个springboot实例上。

session问题

由于swarm这种转发不像nginx的ip_hash模式,所以可以选择使用redis集中管理session的方式解决session问题。

转:Java服务CPU飙到99%问题排查

发表于 2016-08-09 | 阅读次数

(转)Java服务CPU飙到99%问题排查

一大早刚来到公司工位上,电话响起来了,一看是运维老湿打过来到,紧张的接起电话,小心脏扑通扑通跳。“小路啊,你有个服务CPU飙到99%,现场给你保留了,赶紧看看吧!”挂了电话一看短信,果然有告警过来了!还好服务没有重启,现场保留了,赶紧上到服务器上看看。看到是一个用户评分的服务,六台机器的其中一台CPU飙升,下面介绍一下问题排查的过程和解决方法。

一、查看导致CPU飙升的线程

首先需要定位到是服务里的那些线程导致CPU飙升的。具体查找方法:

1、在服务器上通过jps -1可以查到服务的进程号。

阅读全文 »

redis-sentinel主从切换failover

发表于 2016-07-29 | 阅读次数

slave端,主从复制主要经历四个阶段:

第一阶段:与master建立连接

第二阶段:向master发起同步请求(SYNC)

第三阶段:接受master发来的RDB数据

第四阶段:载入RDB文件

阅读全文 »

springboot项目redis(master-slave模式)连接池自动切换

发表于 2016-07-29 | 阅读次数

由于云服务器存在闪断现象,项目线上会存在基于redis的功能在闪断时段内出现异常,所以redis需要做master-slave模式。直接上代码:

原单机redis,RedisConnectionFactory设置代码

阅读全文 »

ansible批量操作服务命令

发表于 2016-07-28 | 阅读次数

ansible用于批量执行服务器集群命令

前提准备:
无密登录,详细
请查看
,注(目录权限:.ssh 700权限
.ssh/authorized_keys 600权限)

步骤:

1.brew install ansible

2.创建/usr/local/etc/ansible/hosts文件,该文件中记录服务器地址,默认端口22,如果是特殊端口需要加:xx,例:

10.10.88.1

10.10.89.2:2222

3.本地执行服务器端命令:ansible all -m shell -a “sudo docker ls”

console即可看到服务器输出!

RedisTemplate连接池实现原理

发表于 2016-07-23 | 阅读次数

spring中的RedisTemplate连接池实现原理

连接池实现思路:callback

将每个redis相关操作(get ,put)等,封装成RedisCallback

阅读全文 »

golang包管理

发表于 2016-07-23 | 阅读次数

glide

1
2
3
4
5
6
7
8
$ glide create                            # Start a new workspaces
$
open glide.yaml # and edit away!
$ glide get github.com/Masterminds/cookoo # Get a package and add to glide.yaml
$ glide install # Install packages and dependencies
# work, work, work
$ go build # Go tools work normally
$ glide up # Update to newest versions of the package

注:这里每次通过glide get …后只会在vendor路径下生成第三方包,需要手动将该包同步到$GOPATH,然后运行go build

docker踩坑集

发表于 2016-07-11 | 阅读次数

Q:Java程序放在docker里,然后像在宿主机|虚拟机里面运行就好了吗?

A:no,no,no ,你会遇到日志时间不准确(时区错误)、中文乱码等异常。

解决办法:

启动时添加如下参数:-Dfile.encoding=utf-8 -Dsun.jnu.encoding=UTF8 -Duser.timezone=Asia/Shanghai
(备注:即便是docker容器的环境变量里设置了也不行,以上参数建议在Java程序中都加上)

Q:不同版本满天飞的情况下,如何互传镜像?

阅读全文 »

docker镜像的制作

发表于 2016-07-11 | 阅读次数

宿主机:CentOS6.4
容器:CentOS6.4

安装febootstrap
yum -y install febootstrap

制作镜像文件

阅读全文 »
1234
zhang dong

zhang dong

Make my life plan and use my life to perform.

34 日志
48 标签
© 2018 zhang dong
由 Hexo 强力驱动
主题 - NexT.Muse