运维-技能大杂烩
描述
此文档记录Centos实际生产环境遇到的一些疑难杂点且比较实用的配置,以此纪录形成知识归档。
技能1: centos7修改网卡名
因客户业务系统从vmware迁移至openstack,原来网卡名是ens开头,迁移到opensatck是eth开头,
现在客户要求保留原有的网卡名,通过修改udev配置文件实现。
$ vim /etc/udev/rules.d/70-persistent-ipoib.rules
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="58:c7:ac:c7:45:76", NAME="ens32"
$ reboot
# ATTR{address}=="现有网卡的mac地址"
# NAME="改成的网卡名"
技能2: centos7 配置静态路由
运行在openstack的虚拟机有多网卡的承载不同的物理平面的网络,比如业务网、管理网、存储网等。但是默认路由只有一条,所以只能通过静态路由来指定路由。
- for example:
- 虚拟机eth0是管理网:10.0.43.0/24
- 虚拟机eth1是业务网:10.0.54.0/24
- 虚拟机默认路由是业务网
default via 10.0.54.1 dev eth1
- 现在虚拟机的管理网,想要跟10.0.44.0/24管理网通,就要配置静态路由打通,不然会走业务网出去导致网络不通。
$ cat << EOF > /etc/sysconfig/network-scripts/route-eth0
10.0.44.0/24 via 10.0.43.1 dev eth0
EOF
$ systemctl restart network
# 访问的目标网络 via 管理网网关 dev 管理网的interface
# 动态生效静态路由(不用重启network)
$ route add -net 10.0.44.0/24 gw 10.0.43.1
$ ip route add 10.0.44.0/24 via 10.0.43.1 dev eth0
# 获取IP地址走的是哪条路由
$ ip route get 10.0.26.211
local 10.0.26.211 dev lo src 10.0.26.211
cache <local>
# 动态生效默认路由
$ route add default gw gateway_ip
技能3: centos7单网卡配置子接口
在生产环境,有可能服务器只有一个业务口可用,而上联交换机端口做了trunk口模式,可以采用此方法进行配置通信。
# eth2修改为自己的网卡名
$ cat > /etc/sysconfig/network-scripts/ifcfg-eth2 << EOF
# Created by cloud-init on instance boot automatically, do not edit.
BOOTPROTO=none
DEVICE=eth2
NAME=eth2
ONBOOT=yes
TYPE=Ethernet
EOF
# eth2.760修改为自己的网卡名和vlan
$ cat > /etc/sysconfig/network-scripts/ifcfg-eth2.760 << EOF
BOOTPROTO=none
NAME=eth2.760
DEVICE=eth2.760
ONBOOT=yes
IPADDR=192.168.10.20
PREFIX=24
NETWORK=192.168.10.1
VLAN=yes
EOF
技能4: centos7双网卡配置bond4
在生产环境业务网络通常跑的业务流量比较大,万兆口通常不够用且不可靠,所以要做聚合,本文以bond4链路聚合为例(比较常用)。
服务器配置bond4,上联交换机端口要做动态链路聚合
# ens2f0接口,作为bond4的其中一个接口
# MASTER=bond名字
$ cat << EOF > /etc/sysconfig/network-scripts/ifcfg-ens2f0
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=none
NAME=ens2f0
DEVICE=ens2f0
ONBOOT=yes
MASTER=bondmg
SLAVE=yes
EOF
# ens1f0接口,作为bond4的其中一个接口
# MASTER=bond名字
$ cat << EOF > /etc/sysconfig/network-scripts/ifcfg-ens1f0
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=none
NAME=ens1f0
DEVICE=ens1f0
ONBOOT=yes
MASTER=bondmg
SLAVE=yes
EOF
# 配置bond4
# ifcfg-bond名字
$ cat << EOF > /etc/sysconfig/network-scripts/ifcfg-bondmg
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
BOOTPROTO=static # 如果使用子接口,则把这行注视掉
IPADDR=192.168.1.7 # 如果使用bond子接口,则把这行注视掉
NETMASK=255.255.255.0 # 如果使用bond子接口,则把这行注视掉
DEFROUTE=yes # 如果使用bond子接口,则把这行注视掉
IPV4_FAILURE_FATAL=no
NAME=bondmg
DEVICE=bondmg
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS='mode=4 miimon=100 lacp_rate=1 xmit_hash_policy=1'
EOF
# 如果走bond子接口,则配置,否则跳过。
# ifcfg-bond名字.vlan_id
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-bondmg.102
TYPE=Ethernet
PROXY_METHOD=none
DEFROUTE=yes
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.1.7
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV4_FAILURE_FATAL=no
NAME=bondmg.102
DEVICE=bondmg.102
ONBOOT=yes
VLAN=yes
EOF
技能5: centos进行抓包
在云生产环境,虚拟机通常遇到网络不通,可通过tcpdump or ovs-tcpdump工具进行抓包判断那个路径丢包。
在ovs环境下,抓取ovs的bridge or port 可采用ovs-tcpdump
# 抓取bonddata的包
$ tcpdump -i bonddata [arp or icmp] host [vm_ip or vm_gateway] -nne
# 抓取ovs br-int的包
$ ovs-tcpdum -i br-int [arp or icmp] host [vm_ip or vm_gateway] -nne
# 抓取bonddata的[in or out]的包
$ tcpdump -i bonddata [arp or icmp] host [vm_ip or vm_gateway] -Q [in or out] -nne
# 抓取bonddata 的vxlan包
$ tcpdump -i bonddata dst 172.18.70.72(目的pod物理业务网卡IP) and udp
技能6: centos IPv4的dhclient守护进程持久化配置
在云生产环境,虚拟机通常采用dhcp的方式获取到IP,但是会出现一个问题,有时候会出现虚拟机的IP没了。是因为IPv4的dhclient进程配置为“非持久化”,当dhclient向DHCP服务器发送一次请求报文而无响应,则会间隔一段时间后退出,退出值为2。要配置dhclient为持久化才得以解决该问题PERSISTENT_DHCLIENT=1
,这样dhclient会向DHCP服务器反复发送请求报文。
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=yes
TYPE=Ethernet
DEFROUTE=no # 设置是否为默认路由
HWADDR=fa:16:3e:3f:7a:d5
PERSISTENT_DHCLIENT=1 # dhclient进程配置为“持久化”
技能7: unbuntu 静态路由配置
运行在openstack的虚拟机有多网卡的承载不同的物理平面的网络,比如业务网、管理网、存储网等。但是默认路由只有一条,所以只能通过静态路由来指定路由。
# 动态生效静态路由(不用重启network)
$ route add -net 10.63.0.0/16 gw 10.64.29.1
$ ip route add 10.63.0.0/16 via 10.64.29.1 dev ens9
# 持久化静态路由配置
$ vim /etc/network/interfaces
auto ens9
iface ens9 inet static
address 10.64.29.44
netmask 255.255.255.0
up route add -net 10.63.0.0 netmask 255.255.0.0 gw 10.64.29.1 ens9
技能8: 如何查看某个IP走的是哪条路?
检查IP走的路由。
# 获取10.63.0.5从哪条路由出去
$ ip route get 10.63.0.5
10.63.0.5 dev ens9 src 10.64.29.1
cache
# 删除路由
$ ip route del 10.63.0.0/16
技能9: 如何远程重启服务器BMC?
采用ipmitool重启服务器BMC。
# ipmitool -H <ipmi address> -I lanplus -U <user> -P <password> mc reset cold
$ ipmitool -H 192.168.4.127-I lanplus -U admin -P admin mc reset cold
技能10: openstack 云主机磁盘在线扩容操作
当在openstack扩容块设备时,文件系统识别不了扩容的容量,下面以centos为例。
# 可以通过执行blkid命令可以看到文件系统类型
# 当使用的是ext4格式文件系统扩容(扩vdb,不是分区vdb1)
$ umount /dev/vdb
$ 开始扩容磁盘
$ e2fsck -f /dev/vdb
$ resize2fs /dev/vdb size
$ mount /dev/vdb /mnt
# 使用xfs格式文件系统扩容(扩vdb,不是分区vdb1)
$ umount /dev/vdb
$ 平台扩容磁盘
$ mount /dev/vdb /mnt
$ xfs_growfs /dev/vdb
# 如果挂载使用的是分区,则使用以下方法扩容,使用growpart工具扩容
# 格式:growpart 块设备 分区号
$ growpart /dev/vdb 1
unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]
$ echo $LANG
zh_CN.UTF-8
$ LANG=en_US.UTF-8
$ growpart /dev/vdb 1
CHANGED: partition=1 start=2048 old: size=419428352 end=419430400 new: size=4294965248 end=4294967296
$ xfs_growfs /dev/vdb1 (ext4文件系统要umount)
技能11: windows设置静态路由?
多网络连接情况下,配置静态路由实现多网络连接。
# 首先要有超级管理员打开命令行终端,输入route print -4 查看当前ipv4路由表
# 添加一条路由条目
$ route add 157.0.0.0 MASK 255.0.0.0 157.55.80.1
# 添加一条永久路由条目(-p 表示永久路由,重启后不丢失)
$ route add 157.0.0.0 MASK 255.0.0.0 157.55.80.1 -p
# 删除路由条目
$ route delete 157.0.0.0 MASK 255.0.0.0
技能12: centos 7.6 安装python 3.7环境
# 配置centos 7 yum 源
$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ yum clean all; yum makecache;yum install wget
$ wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 安装CentOS开发工具
$ yum -y groupinstall development
# 安装python的yum依赖
$ yum -y install zlib-devel bzip2-devel openssl-devel openssl-static ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel lzma gcc
# 下载python3.7安装包
$ cd /usr/local/src/
$ wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
# 解压python3.7文件夹
$ tar xvf Python-3.7.0.tar.xz
$ mv Python-3.7.0 python3
$ cd python3
编译python3.7
$ ./configure --prefix=/usr/local/python3
# 将python3.7 安装到/usr/local/python3 下
$ make && make install
# 安装虚拟化环境
$ pip3 install virtualenv
# 创建虚拟环境
$ virtualenv --python /usr/local/python3/bin/python3 virt_inspaction
# 使用虚拟环境
$ cd virt_inspaction/; source bin/activate