keepalive

关于Keepalive的那些事

匿名 (未验证) 提交于 2019-12-02 23:48:02
服务端很多同学包括自己对keepalive理解不清晰,经常搞不清楚,TCP也有keepalive,HTTP也有keepalive,高可用也叫keepalive,经常混淆这几个概念。做下这几个概念的简述,尽管名字基本上是一样的,但是所表示意义和范畴却大相径庭。 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障。它的作用是检测服务器的状态,如果有一台服务器宕机,或出现故障,Keepalived将检测到,使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中。 Keepalived一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。 一个简单的使用例子,将域名解析到一台负载均衡机器上,然后负载均衡反向代理到WEB机器上。中间的负载均衡只有一台,没法做到高可用,至少需要做到两台,那配置成两台机器之后,Keepalived就可以保证服务只有一个对外的虚拟IP,如果MASTER的负载均衡出现故障的时候,自动切换到BACKUP负载均衡上,服务不受任何影响。Keepalived来保证这些。 我们以前有过一套稍显复杂的服务配置,Keepalived给HAProxy提供高可用,然后HAProxy给Twemproxy提供高可用和负载均衡

bad argument #2 to 'set_keepalive' (number expected, got nil)的解决办法

匿名 (未验证) 提交于 2019-12-02 23:38:02
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/miachen520/article/details/91353525 分发层架构中,我们会在nginx里去写lua脚本,因为我们需要自定义一些特殊的业务逻辑 比如说,流量分发,自己用lua去写分发的逻辑,在分发层nginx里去写的 再比如说,要用l缓存架构中的的控制逻辑,在应用层nginx里去写的 nginx+lua 用最流行的开源方案,就是用OpenResty 这次我下了一个最新的OpenResty,自己用lua去写分发的逻辑,在分发层nginx里去写的,发现OpenResty最新的 http.new() new出来的对象request_uri方法老是报错,原来一直都是这样就可以的 local resp, err = httpc:request_uri(hostUrl, { method = “GET”, path = requestBody }) 结果居然报错了,提示 lua entry thread aborted: runtime error: /usr/hello/lualib/resty/http.lua:909: bad argument #2 to ‘set_keepalive’ (number expected, got nil) 以前做类似的分发代码的时候

Vue项目中使用keep-Alive步骤

匿名 (未验证) 提交于 2019-12-02 22:56:40
1 /router/index.js 配置路由元信息keepAlive: true { path: "user" , name: "用户管理" , component: User, meta: { requireAuth: true , keepAlive: true // 用户列表需要被缓存 } }, 2 /app.vue < keep -alive > < router -view v -if = "$route.meta.keepAlive" >< /router -view > < /keep -alive > < router -view v -if = "!$route.meta.keepAlive" >< /router -view > user路由的$route.meta.keepAlive为true,便达到了被缓存的效果。 文章来源: Vue项目中使用keep-Alive步骤

Linux系统内核参数优化

匿名 (未验证) 提交于 2019-12-02 21:59:42
Linux系统常用的内核参数及定义总结如下: 以下内核参数配置仅供参考,具体使用应当根据业务环境特性及服务器硬件配置来设置合理的值。 net.ipv4.ip_nonlocal_bind = 1 #允许非本地IP地址socket监听,当主机作为网关、反向代理或负载均衡器实现双机热备高可用时,主机需要绑定监听虚拟VIP地址时,必须开启此项。 net.ipv4.ip_forward = 1 #开启IPv4转发。当服务器作为路由网关、反向代理与负载均衡(开启客户端IP透传时)必须开启。 net.ipv4.tcp_timestamps = 1 #开启TCP时间戳,以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。默认为0不启用。 fs.file-max = 6553560 #系统所有进程一共可以打开的文件数量,即系统当前最大的文件句柄数,属于系统级别的限制,默认值大小通常与系统物理内存有关。注意:ulimit的open file值(默认1024)是单个进程可以打开的最大文件数,在高并发业务下,这个2个值都需要进行调整。 net.ipv4.tcp_tw_reuse = 1 #默认为0不启用,设置为1启用tcp复用,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于高并发的服务器来说意义重大

基于心跳的socket长连接

末鹿安然 提交于 2019-12-02 05:09:48
案例: 心跳: socket模拟网页的报文连接某个网站,创建tcp的socket后,当我socket.connect后,如果在5到7秒钟不socket.send,那么这个链接就失效了。 请问如何长时间的保持这个链接 这是在服务器端的设置的,客户端没法设置,可以发送心跳包。 socket.connect后,每3-4秒用socket.send发送一字节数据(内容随便),然后观查这个连接是否保持。 lientSocket=serverSocket.accept(); OutputStream os = clientSocket.getOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(os); oos.writeObject(al); oos.flush(); oos.close()//socket会关闭 实现: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的。 如果,长时间未发送维持连接包,服务端程序将断开连接。 客户端: 通过持有Client对象,可以随时(使用sendObject方法)发送Object给服务端。 如果keepAliveDelay毫秒(程序中是2秒)内未发送任何数据,则,自动发送一个KeepAlive对象给服务端, 用于维持连接。 由于,我们向服务端,可以发送很多不同的对象

NGINX学习(八)--nginx优化配置

99封情书 提交于 2019-12-02 02:32:05
nginx指令中的优化(配置文件) worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数。 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。 worker_rlimit_nofile 102400; 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。 use epoll; 使用epoll的I/O模型,这个不用说了吧。 worker_connections 102400; 每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。 keepalive_timeout 60; keepalive超时时间。 client_header_buffer_size 4k; 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k

2019.10.17 MySQL 主主复制+Keepalived

我与影子孤独终老i 提交于 2019-12-01 15:26:36
一、MySQL主主同步 需要两台虚拟机192.168.200.111、192.168.200.112 1、第1台机器: [root@localhost ~]# vim /etc/my.cnf server-id=1 log-bin=mysql-binlog log-slave-updates=true max_binlog_size=1024M auto_increment_offset = 1 auto_increment_increment = 2 replicate-ignore-db = information_schema replicate-ignore-db = performance_schema replicate-ignore-db = test replicate-ignore-db = mysql max_connections = 3000 max_connect_errors = 30 skip-character-set-client-handshake init-connect='SET NAMES utf8' character-set-server=utf8 wait_timeout=1800 interactive_timeout=1800 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

带你挑战年薪20W的广域网协议---BGP协议

人走茶凉 提交于 2019-12-01 00:11:49
BGP原理的概述 BGP协议是一种距离矢量(Distance vector)的路由协议,但是比起RIP等典型的距离矢量协议,又有很多增强的性能。BGP使用TCP作为传输协议,使用端口号179。在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度。另外,BGP使用增量的、触发性的路由更新,而不是一般的距离矢量协议的整个路由表的、周期性的更新,这样节省了更新所占用的带宽。BGP还使用“保留”信号(Keepalive)来监视TCP会话的连接。而且,BGP还有多种衡量路由路径的度量标准(称为路由属性),可以更加准确的判断出最优的路径。 BGP使用TCP作为其承载协议建立连接。因此与IGP逐跳路由器建立邻居不同,BGP可以跨越多跳路由器建立邻居关系。 BGP和IGP协议对比 协议的分类 IGP(Interior gateway protocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。IGP的功能是完成数据包在AS内部的路由选择,或者说,是讲述数据包如何穿过本地AS的。RIPv1&v2,OSPF,ISIS都是典型的IGP。 EGP(Exterior gateway protocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议

socket KeepAlive 使用笔记(转)

巧了我就是萌 提交于 2019-11-30 10:16:51
1.问题 最近碰到的一个问题,socket连接一台服务器后,如果无数据通讯,服务器会在几分钟后关闭socket。由此产生一个问题。与服务器进行连接后,拔掉网线,几分钟后,由于服务器已经关闭socket,但客户这边还认为已经连接的是正确的socket。因此产生一些操作上的延迟问题。 2.分析 由于服务器已经关闭的客户端的连接,所以客户端也得关闭超时的连接。因此我选用keepalive方法来定时的探测网络是否存在。如果服务器3分钟关闭socket,那客户端只要稍小于3分钟探测一次就可以了。 如果keepalive探测失败,那就可以用select语句捕获到socket需要read,调用一下recv如果返回错误就表示超时了,本socket已经无效,自己进行错误处理了。 还有值得注意的是服务器也必须支持keepalive.单方面那是没有用的。 3.具体代码 本人的客户端是linux2.4.x keepalive选项的设置是全系统有效的,设置如下 echo 170 > /proc/sys/net/ipv4/tcp_keepalive_time echo 2 > /proc/sys/net/ipv4/tcp_keepalive_intvl echo 1 > /proc/sys/net/ipv4/tcp_keepalive_probes 以上增加到系统启动脚本/etc/init.d/****中

web前端入门到实战:Tab切换以及缓存页面处理的几种方式

穿精又带淫゛_ 提交于 2019-11-30 08:26:40
相信tab切换对于大家来说都不算陌生,后台管理系统中多会用到。如果不知道的话,可以看一下浏览器上方的标签页切换,大概效果就是这样。 1.如何切换 使用动态组件,相信大家都能看懂(部分代码省略) //通过点击就可以实现两个组件来回切换 <button @click="changeView">切换view</button> <component :is="currentView"></component> import pageA from "@/views/pageA"; import pageB from "@/views/pageB"; computed: { currentView(){ return this.viewList[this.index]; } }, methods: { changeView() { this.index=(++this.index)%2 } } web前端开发学习Q-q-u-n: 784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法 (详细的前端项目实战教学视频,PDF) 注:这个多用于单页下的几个子模块使用,一般切换比较多使用下面的路由 使用路由(这个就是配置路由的问题了,不作赘述) 2.动态生成tab 一般UI框架给我们的tab切换都像是上面的那种,需要自己写入几个tab页之类的配置