Jinva's Blog

记录与分享

Civic fk8 跑山

📹 视频待接入 controls=””>

赞赏


丰田 GT86 爆改

![](/images/blog/Untitled 1-20261027143317-qbmj9u0.png)

![](/images/blog/Untitled 2-20261027143317-j8afb0d.png)

![](/images/blog/Untitled 3-20261027143317-6lh7pq2.png)

![](/images/blog/Untitled 4-20261027143317-m7kfqws.png)

![](/images/blog/Untitled 5-20261027143317-murim0u.png)

赞赏


游泳是一项值得长期坚持的运动

自由泳

😜我自小就在河边玩水长大的,所以水性还是有一点的。自由泳是我在大学的时候刻意去学的,出来工作之后就没多少时间去泳了,最近几年开始重拾起来。

这段视频是朋友帮我录的,我这是休闲游,适合长距离锻炼。从动作来看还有很大的进步空间,希望各位高人指点一二。

蛙泳

蛙泳算是我正式学习游泳的入门姿态吧,说不上标准,但是胜在可以长距离游,一口气游2-3千米不是问题,平蛙养生游。

游泳时间对比表

最后附上时间表,由于我不太喜欢短冲,因为短冲很累,游不远。一般都是休闲游,游1000米或者30分钟左右就上岸。

http://mms1.baidu.com/it/u=1188460896,3309939297&fm=253&app=138&f=JPEG&fmt=auto&q=75?w=500&h=637

赞赏


📹 视频待接入 controls=””>

(自由泳)

📹 视频待接入 controls=””>

(蛙泳)

负载均衡的分类及算法总结

一、负载均衡分类

1. DNS 负载均衡

思路是 DNS 解析同一个域名时可以返回不同的IP地址。

用来实现地理级别的均衡,例如,北方用户访问北京机房、南方用户访问深圳机房。

优点:

  • 简单,成本低,直接交给DNS服务器处理即可,无需自己维护。
  • 就近访问,提升访问速度。

缺点:

  • DNS缓存时间较长,更新不及时。
  • DNS控制权在域名商那里,无法根据业务特点定制扩展。

2. 硬件负载均衡

通过单独的硬件设备实现负载均衡,典型设备例如 F5、A10。

优点:

  • 功能强大,支持各级负载均衡,支持各种负载均衡算法,支持全局负载均衡。
  • 性能强大,可以支持100万以上的并发。
  • 稳定性高。
  • 支持安全防护,除了负载均衡的功能,还有防火墙、防DDoS攻击等安全功能。

缺点:

  • 昂贵,价格几万甚至数十万。
  • 扩展能力差。

3. 软件负载均衡

通过软件实现,例如我们熟悉的 Nginx(7层负载均衡) 和 LVS(4层负载均衡)。

和硬件负载均衡相比,性能差了很多,Nginx 能支持5万/秒,而F5是百万级,但价格也便宜了很多。

优点:

  • 简单
  • 便宜
  • 灵活

缺点:

  • 性能一般
  • 没有防火墙等安全功能

负载均衡的典型架构

DNS、硬件、软件这3中方式可以组合使用,基本原则:

  • DNS方式用于实现地理级别的负载均衡。
  • 硬件方式用于实现集群级别的负载均衡。
  • 软件方式用于实现机器级别的负载均衡。

二、负载均衡算法

1. 轮询

负载均衡系统接收到请求后,按照顺序轮流分配给服务器。

这种方式非常简单,只管按顺序分配,至于服务器当前负载情况、硬件能力等都不关心,只要服务器还能工作,就可以分配,除非服务器挂了。

2. 加权轮询

是轮询方式的一种改进,轮询方式是无差别分配,但实际服务器的处理能力是有差异的,所以需要区别对待。

为服务器设置权值,权值高的就多分配点。

3. 负载最低优先

将任务分配给当前负载最低的服务器。

例如 LVS 可以根据“连接数”判断服务器状态,NGINX 可以根据“HTTP请求数”来判断。

这种方式比轮询高级很多,可以感知服务器的状态了,但其复杂度也大大提高了,要收集统计服务器的负载信息。

4. 性能最优

优先将任务分配给处理速度最快的服务器,来达到最快响应客户端的目的。

此方式也是感知服务器的状态,标准是响应时间。

需要收集分析服务器的响应时间,这个工作本身消耗也不小,所以采用采样的方式,不统计所有任务的响应时间,统计一个周期(例如 10秒/1分钟/5分钟)内的状态。

优缺点与 负载最低优先 相同。

5. Hash

对请求中的关键信息(如IP)进行hash计算,hash值相同的请求分配到同一台服务器,例如业务中希望同一用户的请求都由同一台服务器来处理。

小结

![](/images/blog/Untitled 1-20261027142053-09ue7jt.png)

赞赏


Linux 终端中 Ctrl+c, Ctrl+z, Ctrl+d 的区别

在 Linux 中:

Ctrl+c: (kill foreground process) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行;

Ctrl+z: (suspend foreground process) 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程,而并非结束进程,用户可以使用使用 fg/bg 操作恢复执行前台或后台的进程。fg命令在前台恢复执行被挂起的进程,此时可以使用 Ctrl+z 再次挂起该进程,bg 命令在后台恢复执行被挂起的进程,而此时将无法使用 Ctrl+z 再次挂起该进程;

一个比较常用的功能:

正在使用 vi 编辑一个文件时,需要执行 shell 命令查询一些需要的信息,可以使用 ctrl-z 挂起 vi,等执行完 shell 命令后再使用 fg 恢复vi 继续编辑你的文件(当然,也可以在 vi 中使用 command 方式执行 shell 命令,但是没有该方法方便)。

Ctrl+d: (Terminate input, or exit shell) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入 exit 后回车;

还有以下几个:

Ctrl+/ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件

Ctrl+s 中断控制台输出

Ctrl+q 恢复控制台输出

Ctrl+l 清屏

其实,控制字符都是可以通过 stty 命令更改的,可在终端中输入命令 “stty -a”查看终端配置

参考链接:

赞赏


Ubuntu 16 04 LTS 安装 Postman

Chrome 版本的 Postman 已被废弃,建议到官网下载最新版本。

  1. 官网下载地址: https://www.getpostman.com/ 根据机器类型选择64位下载;
  2. 进入下载目录,解压该文件到 /opt 目录;
1
$ sudo tar -xzf postman.tar.gz -C /opt/
  1. 进入解压目录,执行./Postman,软件就运行了,到此软件就安装完成了,但是这样每次都要进入这个目录,且启动器没有该应用;
  2. 创建全局变量,也就是在任何地方都可以执行postman,不用去到安装目录,执行
1
$ sudo ln -s /opt/Postman/Postman /usr/bin/postman
  1. 添加启动器应用图标,也就是可以从启动器快速启动,执行
1
$ vim /usr/share/applications/postman.desktop
  1. 添加如下内容
1
2
3
4
5
6
7
8
[Desktop Entry]
Encoding=UTF-8
Name=Postman
Exec=postman
Icon=/opt/Postman/resources/app/assets/icon.png
Terminal=false
Type=Application
Categories=Development;

赞赏


Ubuntu 16 04安装JMeter测试工具

JMeter是Java的测试工具,由Apache开发。

同样,JMeter是跨平台的。

下载

http://jmeter.apache.org/download_jmeter.cgi

https://github.com/apache/jmeter

安装

1
2
3
4
5
$ 7z x apache-jmeter-3.2.zip

$ sudo mv apache-jmeter-3.2 /opt/apache-jmeter-3.2/

$ sudo ln -s /opt/apache-jmeter-3.2/ /opt/jmeter

启动

1
$ /opt/jmeter/bin/jmeter.sh

创建Dash图标:

1
$ sudo gedit ~/.local/share/applications/apache_jmeter.desktop

内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Desktop Entry]

Encoding=UTF-8

Version=1.0

Type=Application

Name=Apache JMeter (3.2 r1790748)

Icon=apache_jmeter.png

Path=/opt/apache-jmeter-3.2

Exec=java -jar /opt/jmeter/bin/ApacheJMeter.jar

StartupNotify=false

StartupWMClass=Apache JMeter

OnlyShowIn=Unity;

X-UnityGenerated=true

参考链接

http://www.cnblogs.com/imyalost/p/5804359.html(使用方法)

https://www.ibm.com/developerworks/cn/webservices/1004_sunch_jmeter_soap/(使用方法)

http://jingyan.baidu.com/article/046a7b3eb72211f9c27fa929.html(使用方法)

Ubuntu Desktop禁用 开启笔记本触控板

设备 ID

输入一下命令查看设备 id

1
$ xinput list

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer             id=4 [slave pointer (2)]
⎜   ↳ E-Signal USB Gaming Mouse               id=10 [slave pointer (2)]
⎜   ↳ E-Signal USB Gaming Mouse               id=11 [slave pointer (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad             id=14 [slave pointer (2)]
⎣ Virtual core keyboard                   id=3 [master keyboard (2)]
  ↳ Virtual core XTEST keyboard             id=5 [slave keyboard (3)]
  ↳ Power Button                           id=6 [slave keyboard (3)]
  ↳ Video Bus                               id=7 [slave keyboard (3)]
  ↳ Video Bus                               id=8 [slave keyboard (3)]
  ↳ Power Button                           id=9 [slave keyboard (3)]
  ↳ HP Truevision HD: HP Truevision         id=12 [slave keyboard (3)]
  ↳ AT Translated Set 2 keyboard           id=13 [slave keyboard (3)]
  ↳ HP Wireless hotkeys                     id=15 [slave keyboard (3)]
  ↳ HP WMI hotkeys                         id=16 [slave keyboard (3)]

找到 TouchPad 那一行,设备 id 为 14;

脚本

新建 touchpad 脚本;

1
$ sudo vim /{自定义路径}/touchpad.sh

touchpad1.sh

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

var=$(xinput list-props 14 | grep "Device Enabled")

if   [ ${var:((${#var}-1))} == "1" ];then
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'Device Enabled' 0

elif [ ${var:((${#var}-1))} == "0" ];then
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'Device Enabled' 1

fi

保存退出;
最后,通过 添加系统快捷键 或者 直接运行脚本 来开关触控板,也可以借助开源软件 touchpad-indicator 更好地实现。但是,为了个人为了保持系统简洁,首选使用脚本。

更新:2018/07/21

由于最近系统 upgrade 了,脚本不能自动获取 TouchPad 的 id,google 了一下发现有人写了一个更自动化的脚本,接近 touchpad-indicator 的功能,在这里贴上。

touchpad2.sh

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
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

# 如果检测到有外接USB键盘鼠标则禁用笔记本键盘触摸板

SLEEP_TIME=5

# 自带的键盘触摸板名字 这里要用xinput list命令查看你的电脑自带键盘触摸板的名字
KEYBOARD_IN='AT Translated Set 2 keyboard'
MOUSE_IN='ETPS/2 Elantech Touchpad'

# 外接的键盘触摸板名字,同上插拔外接键鼠,并用xinput list命令确定你的外接键鼠的名字
USB_KEYBOARD_OUT='Logitech USB Keyboard'
USB_MOUSE_OUT='USB OPTICAL MOUSE'

while true
do
   # 处理键盘的逻辑
   HAVE_USB_KEYBOARD=`xinput list | grep "$USB_KEYBOARD_OUT"`
   if [ "" != "$HAVE_USB_KEYBOARD" ]; then
       if [ `xinput list-props "$KEYBOARD_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 1 ]; then
          xinput set-prop "$KEYBOARD_IN" 'Device Enabled' 0
           # echo Disable keyboard
       fi
   else
       if [ `xinput list-props "$KEYBOARD_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 0 ]; then
          xinput set-prop "$KEYBOARD_IN" 'Device Enabled' 1
           # echo Enable keyboard
       fi
   fi

   # 处理键鼠标的逻辑
   HAVE_USB_MOUSE=`xinput list | grep "$USB_MOUSE_OUT"`
   if [ "" != "$HAVE_USB_MOUSE" ]; then
       if [ `xinput list-props "$MOUSE_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 1 ]; then
          xinput set-prop "$MOUSE_IN" 'Device Enabled' 0
           # echo Disable Touchpad
       fi
   else
       if [ `xinput list-props "$MOUSE_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 0 ]; then
          xinput set-prop "$MOUSE_IN" 'Device Enabled' 1
           # echo Enable Touchpad
       fi
   fi

   sleep $SLEEP_TIME
done

该脚本唯一的缺点就是不能自动获取外置鼠标键盘的设备名称,由于个人有两套以上的鼠标键盘,所以根据自己的使用习惯,还是选择了快捷键控制的方式。

touchpad3.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

# 笔记本自带 TouchPad 名称,可用 xinput --list 获取
TOUCHPAD_NAME='SynPS/2 Synaptics TouchPad'

# 自定义快捷键触发 TouchPad 控制逻辑
if   [ `xinput list-props "$TOUCHPAD_NAME" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 1 ];then
xinput set-prop "$TOUCHPAD_NAME" 'Device Enabled' 0
# echo Disable Touchpad

elif [ `xinput list-props "$TOUCHPAD_NAME" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 0 ];then
xinput set-prop "$TOUCHPAD_NAME" 'Device Enabled' 1
# echo Enable Touchpad

fi

参考

赞赏


在Ubuntu 16 04中自定义您的通知气泡

Leolik的PPA中提供了通知OSD的补丁版本,该版本具有Ubuntu的屏幕显示通知的一些附加功能。

使用补丁和图形化的通知OSD配置工具,您可以通过以下方法轻松地调整通知气泡:

  • 点击后关闭通知提示框
  • 当鼠标指针悬停在其上时,请停止淡出。
  • 更改通知显示超时。
  • 更改通知提示框的位置
  • 编辑气泡大小,背景,径向等。
  • 编辑文字大小,颜色等。

安装

安装通知OSD的修补程序版本:

终端(Ctrl + Alt + T)并逐个运行以下命令以从PPA中获取它:

1
2
3
$ sudo add-apt-repository ppa:leolik/leolik
$ sudo apt update
$ sudo apt install notify-osd

通过在终端中运行以下命令来重新启动notify-osd守护程序:

1
$ pkill notify-osd

![](/images/blog/Untitled 1-20261027142052-fkhs0oi.png)

安装用于NotifyOSD的图形配置工具:

终端(Ctrl + Alt + T)并逐一运行以下命令,以从Webupd8 PPA中获取它:

1
2
3
$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt update
$ sudo apt install notifyosdconfig

最后启动配置工具,并享受自定义屏幕通知的乐趣:

![](/images/blog/Untitled 2-20261027142052-6wxbpse.png)

参考链接

赞赏


如何将 Ubuntu 升级到 18 04 (Bionic Beaver)

最新的 Ubuntu LTS 版本 Ubuntu 18.04 (Bionic Beaver) 于 2018 年 4 月 26 日发布,它会被支持 5 年,一直直到 2023 年 4 月。下面将向大家展示如何从 Ubuntu 16.04 或更高版本升级到 Ubuntu 18.04 (Bionic Beaver) 。

先决条件

在开始之前,请确保以具有 sudo 权限的用户身份登录。

备份您的数据

首先,也是最重要的一点,请一定在开始升级操作系统之前备份数据。如果您在虚拟机上运行 Ubuntu ,最好备份完整的系统快照,以便在更新失败的时候轻松恢复您的计算机。

更新当前安装的软件包

在开始版本升级之前,建议将所有当前安装的软件包更新到其最新版本。

1
2
sudo apt update
sudo apt upgrade

我们还将运行 ​dist-upgrade,它会执行已安装软件包的主要版本升级,并可能删除一些不必要的软件包:

1
sudo apt dist-upgrade

将 Ubuntu 16.04 升级到 Ubuntu 18.04

Ubuntu 提供了一个工具 ​do-release-upgrade ,它让升级过程非常简单。该工具应该已经安装在您的系统上,但如果由于某种原因没有安装它,您可以安装它:

1
sudo apt install do-release-upgrade

运行 ​do-release-upgrade, 开始升级:

1
sudo do-release-upgrade

如果您像我一样通过 SSH 升级系统,系统会询问您是否要继续。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Reading cache

Checking package manager

Continue running under SSH?

This session appears to be running under ssh. It is not recommended
to perform a upgrade over ssh currently because in case of failure it
is harder to recover.

If you continue, an additional ssh daemon will be started at port
'1022'.
Do you want to continue?

Continue [yN]
1
2
3
4
5
6
7
8
9
10
11
Starting additional sshd

To make recovery in case of failure easier, an additional sshd will
be started on port '1022'. If anything goes wrong with the running
ssh you can still connect to the additional one.
If you run a firewall, you may need to temporarily open this port. As
this is potentially dangerous it's not done automatically. You can
open the port with e.g.:
'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'

To continue please press [ENTER]

升级工具完成下载软件包列表和完成计算变更内容后,将询问您是否要继续

1
2
3
4
5
6
7
8
9
10
11
12
13
Do you want to start the upgrade?

4 installed packages are no longer supported by Canonical. You can
still get support from the community.

3 packages are going to be removed. 90 new packages are going to be
installed. 397 packages are going to be upgraded.

You have to download a total of 267 M. This download will take about
1 minute with your connection.

Installing the upgrade can take several hours. Once the download has
finished, the process cannot be canceled.

再次键入 ​y,正式开始升级。

在升级过程中,您将被问到各种问题,例如您是要保留现有配置文件还是安装软件包维护者的版本。如果您没有对文件进行任何自定义更改,则应键入Y;如果要保持当前配置则输入N。

1
2
3
4
5
6
7
8
9
10
Configuration file '/etc/sysctl.conf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
  What would you like to do about it ? Your options are:
  Y or I : install the package maintainer's version
  N or O : keep your currently-installed version
    D     : show the differences between the versions
    Z     : start a shell to examine the situation
The default action is to keep your current version.
*** sysctl.conf (Y/I/N/O/D/Z) [default=N] ?

升级过程可能需要一些时间,具体取决于更新次数和网络的下载速度。

安装新软件包后,更新工具会询问您是否要删除过时的软件,如果您不确定键入 ​d​ 查看过时软件包列表,在大多数情况下,输入 ​y 并删除所有过时的软件包是安全的:

1
2
3
4
5
6
7
8
9
Searching for obsolete software
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading state information... Done

Remove obsolete packages?

17 packages are going to be removed.

升级过程完成并假设一切顺利后,系统会要求您重新启动计算机。输入 ​y 以继续:

1
2
3
4
5
6
7
8
System upgrade is complete.

Restart required

To finish the upgrade, a restart is required.
If you select 'y' the system will be restarted.

Continue [yN] y

确认更新

等待服务器重启完成,然后重新连接。登录后,您将收到以下消息:

1
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

您还可以使用以下命令检查 Ubuntu 版本:

1
lsb_release -a
1
2
3
4
5
No LSB modules are available.
Distributor ID: Ubuntu
Description:   Ubuntu 18.04 LTS
Release:   18.04
Codename:   bionic

到现在为止,你现在可以享用新的 Ubuntu 18.04 LTS (Bionic Beaver) 了。

赞赏


0%