块儿设备操作

centos中有rpm包util-linux,包含 blockdev命令(其实很多常用的命令都在这里),常见功能如下:

查看预读大小:(单位为扇区)

设置预读大小:

查询是否为只读:( 1 为只读 )

设置设备为只读:

设置设备为读写:

查看扇区大小: (一般都是512)

查看设备容量: (单位为 扇区 )

查看块儿大小: (单位为字节)

查看块儿设备综合信息:

其中:
RO: 是否只读
RA(read ahead):预读扇区数
SSZ(sector size): 扇区大小
BSZ(block size): 块儿大小

 

注意: 这里关于设备的设置在设备重新挂载后会失效,需要重新设置

 

参看: http://www.cnblogs.com/kerrycode/p/4743015.html

java core 调试

根据java core文件打印java堆栈信息:

 

java 之遗失的libjli.so

java 都用了N长时间了,突然,意外地发现有一个依赖的so文件从来没找见过

其实这个so文件在java的安装包中是有的,只是没有添加了ld_path 里面,解决办法:

然后,将/usr/java/jdk1.8.0_45/jre/lib/amd64/jli/  或 /usr/java/jdk1.8.0_45/lib/amd64/jli/ 添加到文件: /etc/ld.so.conf 中,然后执行ldconfig 即可

 

最后,libjli.so 是个啥玩意儿,为啥从来没找见过,却也从来没报错过?

制作openvswitch rpm包

openvswitch已经提供了rpm包的spec文件,所以制作openvswitch rpm包非常容易:

  1. 下载需要的源文件tar包
    http://openvswitch.org/releases/openvswitch-2.7.0.tar.gz
  2. 安装rpm-build
  3. 构建build环境(这里只创建了源码目录)
  4. 将源码包放入源码目录
  5. 从tar包中提取spec文件 (理论上rpmbuild -tb  openvswitch-2.7.0.tar.gz  可以自动搜索spec文件的,但是,该tar包中有多个spec文件,搜索到的未必是我们想使用的)
  6. 制作rpm包 (注意: 提示需要安装啥就先安装啥)

    make其实还是比较快的,主要是test过程长的要命

openvswitch 入门

openvswitch 安装,参考: https://phpor.net/blog/post/5102

启动相关进程:

创建数据库:

语法说明: ovsdb-tool [options] create [db [schema]]

默认数据库位置: /etc/openvswitch/conf.db

默认的表结构: /usr/share/openvswitch/vswitch.ovsschema   (schema 是一个很大的json)

 

启动ovsdb-server:

语法说明: ovsdb-server [database]…  [–remote=remote]…  [–run=command] –log-file[=/var/log/openvswitch/ovsdb-server.log]

默认数据库文件: /etc/openvswitch/conf.db

监听socket文件: 通过 –remote指定,可以是ip:port ,没有默认值

日志文件: 通过–log-file 开启日志,通过 –log-file=/var/log/ovsdb-server.log 来指定文件位置,默认位置: /var/log/openvswitch/ovsdb-server.log

 

通过ovsdb-client 操作数据库

ovsdb-client – command-line interface to ovsdb-server

默认的server socket文件: unix:/var/run/openvswitch/db.sock

 

加载openvswitch 内核模块:

如果不加载该模块,则ovs-vswitchd启动时会报错

该模块内核中已经有了,加载即可:

 

启动ovs-vswitchd:   ovs-vswitchd – Open vSwitch daemon

语法说明: ovs-vswitchd [database]

database 就是ovsdb-server listen的unix socket或ip:port ,这里默认位置为:  unix:/var/run/openvswitch/db.sock

日志通过 –log-file 打开,默认位置: /var/log/openvswitch/ovs-vswitchd.log

 

查看网络配置:

ovs-vsctl 通过

 

各组件之间的关系:

数据库文件是静态文件,如同sqlitedb,需要通过工具(ovsdb-tool)创建;对于mysql数据库,本身就可以直接提供网络服务,但是这里的数据库文件却仅仅是个文件,需要 ovsdb-server 来提供网络服务,ovsdb-server 只知道如何操作数据库(表),对网络却一无所知,但是ovs-vswitchd却是懂网络的,ovs-vswitchd 通过ovsdb-server数据库的变更,执行网络配置,提供一个配置网络的服务;ovs-vsctl 通过ovsdb-server (/var/run/openvswitch/db.sock)操作数据库

 

iptables 之 表、链

iptables中,target/jump决定了符合条件的包到何处去,语法是–jump target-j target

通过-N参数创建自定义链:

之后将BLOCK链作为jump的目标:

如下:

这样从INPUT链中匹配规则6的包都会跳入BLOCK链中,若到达了BLOCK链的结尾(即未被链中的规则匹配),则会回到INPUT链的下一条规则。如果在子链中被ACCEPT了,则就相当于在父链中被ACCEPT了,那么它不会再经过父链中的其他规则。但要注意这个包能被其他表的链匹配;

我们也发现了Chain BLOCK的引用数量为1,就是说有一个规则跳转到了这个链; -j 不仅仅可以是accept和reject,还可以是chain,正是这个才让自定义的chain生效的

为BLOCK链增加规则:

查看如下:

 

 

参考:

http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html    good

http://blog.csdn.net/yu_xiang/article/details/9218589    good

http://arster.blog.51cto.com/714732/908486     good

 

openvswitch 编译安装

参考: http://docs.openvswitch.org/en/latest/intro/install/general/

切记: 文档虽然稍微有点儿长,也最好先仔细(不要跳读)地看一遍,避免走一些不必要的弯路

命令:

  1. 检出源码
  2. 检出指定版本(这个是release的版本)
  3. 或者检出v2.7.x版本(这个是在release版本上修改了一些bug,但是没有release的版本
  4. 安装编译需要的软件

    其中:
    gcc >=4.6   autoconf >= 2.63   automake >= 1.10  libtool >= 2.4
  5. 安装python 2.7
  6. 安装 python six 模块
  7.  执行boot.sh (如果是下载的release的tar包,则不用执行boot.sh)
  8.  编译

centos7 安装python-pip

python-pip是在epel源里面的,默认没有安装该源,所以需要先安装该yum源:

然后,就可以直接安装python-pip 了:

yum源里面的东西一般都不够新,pip提供了更新机制,不放先更新一下:

docker 版本号定义

参考: https://github.com/moby/moby/blob/master/CHANGELOG.md

2017年2月8号发布了docker-1.13.1, 下一个版本便是2017年3月1号发布的17.03.0-ce,其中: ce代表社区版,17.03 代表2017年3月,以后docker的版本就按照YY.MM来命名了:

17.03.0-ce (2017-03-01)

IMPORTANT: Starting with this release, Docker is on a monthly release cycle and uses a new YY.MM versioning scheme to reflect this. Two channels are available: monthly and quarterly. Any given monthly release will only receive security and bugfixes until the next monthly release is available. Quarterly releases receive security and bugfixes for 4 months after initial release. This release includes bugfixes for 1.13.1 but there are no major feature additions and the API version stays the same. Upgrading from Docker 1.13.1 to 17.03.0 is expected to be simple and low-risk.

虽然此次命名方式发生了变化,和上个版本相比,变更的内容并不多,都是小修小改