Rootop 服务器运维与web架构

2014-04-24
发表者 Venus
暂无评论

使用iftop监控linux网络流量

linux中可以使用top查看系统资源、进程、内存占用等信息。
查看网络状态可以使用netstat、nmap等工具。
若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop。
iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细的将会在后面的使用参数中说明。
官方网站:http://www.ex-parrot.com/pdw/iftop/

[root@AY ~]# yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel -y
[root@AY ~]# wget -c http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
[root@AY ~]# tar zxvf iftop-0.17.tar.gz
[root@AY ~]# cd iftop-0.17
[root@AY iftop-0.17]# ./configure && make && make install

安装完成后直接在终端执行 iftop 即可。
[root@AY ~]# iftop -i eth1


iftop界面说明:
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

常用参数:
-i设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n使host信息默认直接都显示IP,如:# iftop -n
-N使端口信息默认直接都显示端口号,如: # iftop -N
-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b使流量图形条默认就显示;
-f这个暂时还不太会用,过滤计算包用的;
-P使host信息及端口信息默认就都显示;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

iftop界面操作命令(注意大小写):
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

2014-04-24
发表者 Venus
暂无评论

关于mfs设置文件的副本数

首先,我这里有两台chunkserver,那么在mfs客户端设置文件副本数为 2
#设置副本数
[root@localhost ~]# /usr/local/mfs/bin/mfssetgoal 2 /mnt/mfs/
/mnt/mfs/: 2

#获取设置的副本数
[root@localhost ~]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/
/mnt/mfs/: 2
[root@localhost ~]# echo test > /mnt/mfs/test

#查看文件信息
[root@localhost ~]# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/test
/mnt/mfs/test:
chunk 0: 0000000000000014_00000001 / (id:20 ver:1)
copy 1: 192.168.0.6:9422
copy 2: 192.168.0.7:9422
[root@localhost ~]#

可以看到test 文件被copy到两台chunkserver中,停掉一台chunkserver,test文件的数据仍然可以读写。
如果是副本数为1的话,那么数据会分到其中一台chunkserver中,如果这台chunkserver停掉
文件信息虽然可以看到,但是已经无法读写了。

实际环境中,如果说chunkserver不挂存储,一般是双硬盘做raid1,或者是raid5之类,这样也保证了数据的安全性。
如果是存储那么安全性更高,只需要考虑因为系统或者是软件导致的chunkserver宕机问题。

个人建议chunkserver3台以上,副本数2以上。

2014-04-24
发表者 Venus
暂无评论

openvas 的一些配置

openvas-mkcert -q
openvas-mkcert-client -n om -i   这两句运行所需的证书文件
openvas-nvt-sync   升级NVT库
初始化操作:
openvassd
openvasmd –migrate
openvasmd –rebuild
添加一个管理员的openvas登录用户
openvasad -c ‘add_user’ -n root -r ‘Admin’
启动openvas
openvassd –listen=127.0.0.1 –port=9391
最后启动openvas manager
openvasmd –database=/usr/local/var/lib/openvas/mgr/tasks.db –slisten=127.0.0.1 –sport=9391 –listen=0.0.0.0 –port=9390

 

打开网页版:http://localhost:9392
gsad –listen=0.0.0.0 –port=9392 –alisten=127.0.0.1 –aport=9393 –mlisten=127.0.0.1 –mport=9390 –http-only

2014-04-23
发表者 Venus
暂无评论

Linux多网卡绑定

为什么要使用多网卡绑定技术呢?我们知道如果使用一块网卡进行网络数据传输时其速度是有限的,即使是千兆网卡,其速度也是有限制的,我们为了提高带宽,我们可以将多块物理网卡绑定成一块逻辑网卡,这样网卡的速率就是多块网卡的速率了。
Linux支持将多块物理网卡绑定成一块逻辑网卡,绑定后的逻辑网卡可以并行使用组成其的所有物理网卡,通过这样的方式可以提高带宽以及网路的稳定性
我们在将多块物理网卡绑定成一块逻辑网卡以后,我们的IP地址就要求配置在这块逻辑网卡上了,而非多块物理网卡

Linux下支持三种模式的网卡绑定:

模式0:平衡轮训  使用这种模式来进行多网卡绑定时我们可以提高网络的带宽,其流量是从绑定的多块网卡上平均分配的
模式1:主动备份  使用这种模式来进行多网卡绑定时我们可以提高网络的稳定性,这种模式不会提高网络的带宽,每次只有一块网卡在走流量,只有当这块网卡发生故障时,绑定在一起的其它物理网卡才会工作
模式3:广播模式  这种模式一般不用

我们如果想通过多网卡绑定来提升网络的带宽,就选择模式0,如果想提高网络的稳定性,则选择模式1
网卡绑定以后我们需要给我们的逻辑网卡取一个名字,通常格式为 bondn,n代表的是编号。

首先关掉 NetworkManager 服务。

编辑逻辑网卡配置文件:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-band0
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.3
NETMASK=255.255.255.0
ONBOOT=yes
USERCTL=no
GATEWAY=192.168.0.254

编辑两块物理网卡配置文件:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.5
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.102.134.68
NM_CONTROLLED=”no”
MASTER=bond0
SLAVE=yes
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.4
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.102.134.68
NM_CONTROLLED=”no”
MASTER=bond0
SLAVE=yes

主要就是添加MASTER=bond0(将网卡绑定到bond0逻辑网卡上)和SLAVE=yes(表示网卡附属于bond0这块逻辑网卡)

编辑/etc/modprobe.conf文件,如果没有,手动创建。
[root@localhost ~]# cat /etc/modprobe.conf
alias bond0 bonding
options bond0 miimon=100 mode=0

添加上面两行。
miimon 是链路监测的时间间隔单位是毫秒,miimon=100的意思就是,每100毫秒检测网卡和交换机之间是否连通,如不通则使用另外的链路。
mode=0 表示负载均衡方式,两块网卡都工作,需要交换机作支持。
mode=1 表示冗余方式,网卡只有一个工作,一个出问题启用另外的替上去。

重启网络service network restart:
[root@localhost ~]# ifconfig
bond0 Link encap:Ethernet HWaddr 00:0C:29:B8:44:3B
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feb8:443b/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:38572 errors:0 dropped:0 overruns:0 frame:0
TX packets:3022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2847831 (2.7 MiB) TX bytes:1639276 (1.5 MiB)

eth1 Link encap:Ethernet HWaddr 00:0C:29:B8:44:3B
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:30763 errors:0 dropped:0 overruns:0 frame:0
TX packets:2413 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2270571 (2.1 MiB) TX bytes:1529059 (1.4 MiB)
Interrupt:19 Base address:0x2000

eth2 Link encap:Ethernet HWaddr 00:0C:29:B8:44:3B
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:7809 errors:0 dropped:0 overruns:0 frame:0
TX packets:610 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:577260 (563.7 KiB) TX bytes:110819 (108.2 KiB)
Interrupt:16 Base address:0x2400

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)

会看到eth1和eth2的ip信息没有了,之前我是配置上的,重启网络的时候ssh断掉了,重新去连接逻辑网卡ip。

查看bond0状态:
[root@localhost ~]# more /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b8:44:3b
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b8:44:45
Slave queue ID: 0

测试:

负载均衡可通过流量监控来监视拷贝文件花销时间(流量)与单网卡花销时间(流量)对比。

冗余可通过拔网线测试,这里是在虚拟机配置的,无法测试出来效果。建议用物理机测试。

2014-04-21
发表者 Venus
暂无评论

配置mysql实现读写分离

环境信息:
mysql_master centos6.5_x64 ip:192.168.0.75
mysql_slave    centos6.5_x64 ip:192.168.0.76
mysql_proxy  centos6.5_x64 ip:192.168.0.77

selinux iptables 关闭
mysql_master 和 mysql_slave 做主从复制,过程略过。
可参考:https://www.rootop.org/pages/1503.html
mysql_proxy 代理,将写操作分到mysql_master,读操作分到mysql_slave。

 mysql_proxy 配置:

mysql-proxy的读写分离是通过 rw-splitting.lua 脚本实现的,因此需要安装lua开发语言。
目前最新版下载:http://www.lua.org/ftp/lua-5.2.3.tar.gz

[root@localhost ~]# yum install -y gcc gcc-c++ libedit libedit-devel libtermcap-devel ncurses-devel libevent-devel readline-devel
[root@localhost ~]# wget -c http://www.lua.org/ftp/lua-5.2.3.tar.gz
[root@localhost ~]# tar zxvf lua-5.2.3.tar.gz
[root@localhost ~]# cd lua-5.2.3
[root@localhost ~]# make linux
[root@localhost ~]# make install

下载mysql_proxy,目前最新版本 mysql-proxy-0.8.4,处于某些因素,推荐采用已经编译好的二进制版本
[root@localhost ~]# wget -c http://cdn.mysql.com/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz
[root@localhost ~]# tar zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz
[root@localhost ~]# mv mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit /usr/local/mysql_proxy

复制读写分离脚本:
[root@localhost ~]# mkdir /usr/local/mysql_proxy/scripts
[root@localhost ~]# cp /usr/local/mysql_proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql_proxy/scripts                                                                                                

编辑rw-splitting.lua:
[root@localhost ~]# vi /usr/local/mysql_proxy/scripts/rw-splitting.lua

if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认为4
max_idle_connections = 1, #默认为8

is_debug = false
}
end

当会话数达到最小为4时,才会进行读写分离。改为1,直接读写分离。

编辑代理配置文件(手动创建):
[root@localhost ~]# vi /usr/local/mysql_proxy/proxy.conf
[mysql-proxy]
admin-username=root
admin-password=root

admin-lua-script=/usr/local/mysql_proxy/lib/mysql-proxy/lua/admin.lua #定义管理脚本路径
proxy-read-only-backend-addresses=192.168.0.76 #读服务器地址,如果有多个的话,以逗号分开。
proxy-backend-addresses=192.168.0.75 #写服务器地址
proxy-lua-script=/usr/local/mysql_proxy/scripts/rw-splitting.lua #读写分离脚本路径
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true #启动两个进程,互相监视,提高可靠性。

[root@localhost mysql_proxy]# chmod 660 /usr/local/mysql_proxy/proxy.conf #改为660权限,否则启动报错。
启动代理:

 [root@localhost ~]#/usr/local/mysql_proxy/bin/mysql-proxy -P 192.168.0.77:3306 --defaults-file=/usr/local/mysql_proxy/proxy.conf

代理监听占用4040端口,但是为了方便php连接,通过-P将其代理监听为3306。
[root@localhost ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysql-pro 1924 root 10u IPv4 15349 0t0 TCP 192.168.0.77:mysql (LISTEN)

开启mysql主、从的允许远程连接:
mysql>use mysql;
mysql> grant all privileges on *.*to ‘root’@’%’ identified by ‘root’ with grant option;
mysql> flush privileges;

读写分离测试:
想达到测试效果,先停掉mysql slave的复制功能
我这里windows下装了mysql,通过mysql的-h参数远程连接 mysql-proxy 执行操作。

声明:因为之前配置好mysql主从复制,那么这里直接用 venus 库为测试数据库,venus_tab为测试表名。
首先在主库的 venus 库创建表 venus_tab ,因为主从同步现在已经被手动停止了,所以从库也需要创建 venus_tab 表,语句为:
create table venus_tab(id int,name varchar(40),birthday date);

windows mysql客户端执行:

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -proot -h192.168.0.77 -e “Insert into venus.venus_tab values(6,’fff’,19991212);”
Warning: Using a password on the command line interface can be insecure.

去主库中查询:
mysql> select * from venus.venus_tab;
+——+——+————+
| id | name | birthday |
+——+——+————+
| 2 | bbb | 1999-12-12 |
| 1 | aaa | 1999-12-12 |
| 3 | ccc | 1999-12-12 |
| 4 | d | 1999-12-12 |
| 5 | eee | 1999-12-12 |
| 6 | fff | 1999-12-12 |
+——+——+————+
6 rows in set (0.00 sec)

发现数据插入。

从mysql proxy查询数据:
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -proot -h192.168.0.77 -e “select * from venus.venus_tab;”
Warning: Using a password on the command line interface can be insecure.
+——+——+————+
| id | name | birthday |
+——+——+————+
| 2 | bbb | 1999-12-12 |
| 1 | aaa | 1999-12-12 |
| 3 | ccc | 1999-12-12 |
| 4 | d | 1999-12-12 |
+——+——+————+
发现查询没有数据,这是因为主从停掉的原因(去从库查询也没有数据)。

现在用discuz正式测试一下:
编辑主从mysql配置文件,否则客户端查询会出现乱码,添加:
[mysqld]
default-character-set=utf8 #默认编码
init_connect=’SET NAMES utf8′ #连接使用的编码
skip-character-set-client-handshake #忽略客户端字符集

[client]
default-character-set=utf8

启动mysql的主从复制,清空主、从的 venus 库。
在master中解压discuz,开始安装。为了方便,这里直接用设置好同步的venus库。
先指定连接数据库名称为venus,mysql的ip为master的ip,数据会自行同步到slave中。
安装完成后修改数据库ip为mysql proxy的ip,访问没问题。发表新帖,测试通过。