LVM卷必须备份metadata

这是个反面教材。在京东数科的时候用的是kvm的虚机系统,同事追求更快,文件镜像用的是raw分区,里面装了lvm。 grub的启动文件如下: kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_root-lvroot rd_NO_LUKS rd_LVM_LV=vg_root/lvroot LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 console=ttyS0,115200n8 rd_LVM_LV=vg_root/lvswap KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet rd_NO_DM 看上面,root也被建立在lvroot的lvm卷上了。 然后就遇到了断电,导致kvm挂掉了,悲催的是lvm卷被破坏了,用尽办法也弄不出来卷信息。因为lvm的metadata没有备份。 数据全丢,无法恢复,杯具了。 综上LVM的metadata必须备份,方法如下: vgcfgbackup /etc/lvm/backup/VolGroup是当前lvm配置的一个备份,而/etc/lvm/archive是归档。 看看归档: ls -l /etc/lvm/archive/* -rw-------. 1 root root 1820 Jun 12 2015 /etc/lvm/archive/VolGroup_00000-444365108.vg 恢复方法: vgcfgrestore 具体恢复的步骤: 首先查看blkid,看看硬盘分区的UUID blkid /dev/mapper/VolGroup-LogVol01: UUID="d6d24cc3-5e4a-4f4d-a0b1-2524e727b0fe" TYPE="ext4" /dev/sda1: UUID="3d0103ac-1b18-4da5-bc20-4b7a980a55c0" TYPE="ext4" /dev/sda2: UUID="i5Cd6V-IVHN-e694-o9CQ-OZJe-zvt0-AhUBLq" TYPE="LVM2_member" /dev/mapper/VolGroup-LogVol00: UUID="06fe7af0-dee5-494a-9b5b-11bf95244acd" TYPE="swap" 查看lvm信息,找出里面所有物理卷的UUID: less /etc/lvm/archive/VolGroup_00000-444365108.vg ... physical_volumes { pv0 { id = "i5Cd6V-IVHN-e694-o9CQ-OZJe-zvt0-AhUBLq" device = "/dev/sda2" # Hint only ... 首先恢复所有的pv,物理卷,这里我们就一个物理卷,所以执行一次,如果有多个物理卷,一个一个来即可 pvcreate --uuid "i5Cd6V-IVHN-e694-o9CQ-OZJe-zvt0-AhUBLq" \ --restorefile /etc/lvm/archive/VolGroup_00000-444365108.vg 物理卷恢复完了,再恢复lv,逻辑卷: vgcfgrestore -f /etc/lvm/archive/VolGroup_00000-444365108.vg VolGroup 弄完后vgdisplay查看一下: vgdisplay --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 9 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 1.64 TiB PE Size 4.00 MiB Total PE 428705 Alloc PE / Size 428705 / 1.64 TiB Free PE / Size 0 / 0 VG UUID 3h3yik-kmqP-Q8sC-5bn0-cwtw-SXpo-orMlKn 就恢复成功了。 ...

2024年01月16日 · 1 分钟 · 159 字 · 八戒

kvm提高网卡效率使用SR-IOV

什么是SR-IOV呢? 简单的说,SR-IOV是一种虚拟化方案,用来使一个PCIe的物理设备,能虚拟出多个设备,这些虚拟出来的设备看起来就像是多个真实的物理设备一样,并获得能够与本机性能媲美的 I/O 性能。 SR-IOV现在最多是用在网卡上,kvm虚拟机的网卡功能一般会下降到实体机的30-50%,如果改用SR-IOV会大大提高网卡性能。 SR-IOV 有2种功能: 物理功能 (Physical Function, PF) 就是标准的PCIe的功能了 虚拟功能 (Virtual Function, VF) 与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。 好的,如何在生产环境中使用它呢? 场景如下: 如上: 机房里有两台交换机: switch-1用来连接各机器的eth0口 switch-2用来连接各机器的eth1口 switch-1和switch-2互联 这是一种机房的标准连法,eth0和eth1做bonding,做线路冗余 server-2是一台Dell R730的服务器,eth0连switch-1,eth1连switch-2,上面跑了三个虚机: VM-1跑在基于bonding的Bridge上,标准的做法 VM-2和VM-2则是利用了SR-IOV,从虚拟网卡直连到物理网卡,减少了中间环节,提高了网卡的效率。 首先要把服务器的vt和sr-iov打开: System BIOS > Processor Settings > Virtualization Technology System BIOS > Integrated Devices > SR-IOV Global Enable 当然,这么麻烦的事情,我们直接用脚本通过idrac调用racadm来做好了: #!/bin/sh sshpass -p "xxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm set BIOS.ProcSettings.ProcVirtualization Enabled sshpass -p "calvin" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm set BIOS.IntegratedDevices.SriovGlobalEnable Enabled sshpass -p "xxxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm serveraction powercycle 注意,Dell R730的机器用得是Intel I350的以太网卡,每个网口最多支持8个VF,如果是高级的X520网卡,就支持64个VF。 ...

2024年01月15日 · 5 分钟 · 883 字 · 八戒

idrac远程登录服务器

Linux的环境了,windows的不行。 Dell的idrac其实提供了远程的ssh界面,我们通常用idrac来设置bios什么的,当然如果能通过idrac直接登录服务器那就更好了。 首先普及以下几个概念: tty: Video console terminal (abbreviation for “Teletype”) ttyS: Serial console terminal pts: Virtual console terminal (pseudo-tty or pty but stands for Pseudo-Terminal Slave (PTS)) 简单说,tty是带显示器的终端,ttyS是串口终端,pts是虚拟终端。tty接显示器、键盘,ttyS接串口,pst就是远程ssh/telnet过来的虚拟终端。 第一步:修改Dell Bios dell的bios中关于serial的配置如下图: 我们只改前两个就可以了: Serial Communication: “On with serial redirection via com2” Serial Port Address: “Serial Device1 = COM1, Serial Device2=COM2 External Serial Connector: “Serial Device1” Failsafe Baud Rate: “115200” Remote Terminal Type: “VT100/VT220” Redirection After Boot: “Enabled” 解释一下: Serial Communication 缺省是 On without Console Redirection,我们需要把所有console的显示都转发到com2上,所以需要改。 Serial Port Address 缺省是 Serial Device 1=COM2, Serial Device 2=COM1,如果不改,那么接上物理机上的串口就可以看到登录画面了,这样等于串口1废掉了,万一我们要把物理机上的com1口给留出来备用,插个串口的wavecom modem做报警用,那就傻眼了,所以必须改掉留出com1备用。 External Serial Connector 缺省是 Serial Device1,不用改,那么物理机上的com口就是com1了,对应ttyS0。 Failsafe Baud Rate: “115200”,不用改,就用这个高的好了。 Remote Terminal Type: “VT100/VT220”,不用改,黑白的vt100就很好 Redirection After Boot: “Enabled”,也不用改,需要重定向。 当然,用脚本一次搞定更好: ...

2024年01月15日 · 2 分钟 · 252 字 · 八戒

用openssh的tunnel建立vpn

openssh是支持隧道的,所以很简单就可以在ssh中再套个管道,直接用来vpn,场景如下: 如上图,A机能ssh无密码登录B机 A机的IP:172.16.8.106 B机的IP:172.16.8.108 A机拨通vpn tunnel后tun的ip:192.168.244.2 B机拨通vpn tunnel后tun的ip:192.168.244.1 首先编辑A和B的/etc/ssh/sshd_config,允许tunnel,缺省是不允许的,然后service sshd restart ,重启sshd ... PermitTunnel yes ... A和B安装linux下的tunctl软件,并启动一个tunnel设备 yum install tunctl tunctl -t tun5 -u root 在A(172.16.8.106)机器上生成key,并设置能无密码证书直接登录B(172.16.8.108) ssh-keygen ssh-copy-id root@172.16.8.108 在A上执行命令,建立ssh tunnel: ssh -w 5:5 root@172.168.8.108 在A上执行 ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0 在B上执行 ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0 这样分别在A和B上ping 192.168.244.1和192.168.244.2,都能通就表示已经ok了。 优化一下,A和B两边都先把tun5起来以后,直接在A上一句话搞定,这个不会自动退出,所以得ctrl+z,然后bg放后台去: ssh \ -o PermitLocalCommand=yes \ -o LocalCommand="ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0" \ -o ServerAliveInterval=60 \ -w 5:5 root@172.16.8.108 \ 'ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0; echo tun5 ready' 如果要用在翻墙的环境,那就得保持长链接了。假设A机器是在一个防火墙后,且被NAT了,那么就得先这样打通隧道: ...

2024年01月15日 · 1 分钟 · 155 字 · 八戒

多网关、策略路由、负载均衡的实际应用

场景: 公司有两条线路,一条是鹏博士的,一条是电信的。 鹏博士是100兆共享线路,电信是10兆独享线路。 鹏博士对端的地址是1.1.1.1,本地服务器地址是1.1.1.2 电信对端的地址是2.2.2.2,本地服务器是2.2.2.3 所以导致有两个网关,大部分公司同事用得是100兆的共享,10兆的被客服独用,但是使用率很低。那能否两边都用呢? 答案是可以的,用策略路由就可以。 策略路由需要用到iproute2,没有的话先安装一下。 定义策略路由表 cd /etc/iproute2/ echo "101 pengboshi" >> rt_tables echo "102 dianxin" >> rt_tables 定义策略路由 ip route add default via 1.1.1.1 table 101 ip route add default via 2.2.2.2 table 102 ok,流量分为两个方向,进来的和出去的,先定义简单的,进来的: ip rule add from 1.1.1.1 table 101 ip rule add from 2.2.2.2 table 102 出就比较麻烦了,100兆和10兆按权重来分,8:2吧 ip route replace default scope global \ nexthop via 1.1.1.1 dev eth0 weight 8 \ nexthop via 2.2.2.2 dev eth0:1 weight 2 注意,因为我们是用了一台路由器来连接上面两个网关的,服务器实际是一个网卡上连到交换机,然后再上连路由器的,如下图: 我们把这一切固定下来,编辑/etc/rc.d/rc.local即可 # cat /etc/rc.local #!/bin/sh touch /var/lock/subsys/local /sbin/ip route replace default scope global nexthop via 1.1.1.1 dev eth0 weight 8 nexthop via 2.2.2.2 dev eth0:1 weight 2

2024年01月11日 · 1 分钟 · 104 字 · 八戒

Keepalived与iptables mark的联动

Iptable可以给进来的包打上标签,比如我们把从1.2.3.4进来的包都打上标签2000(标签可以是任何整数) iptables -t mangle -A PREROUTING -i eth0 \ -p tcp -s 1.2.3.4 --dport http -j MARK --set-mark 2000 或者把访问172.16.8.1的80和443端口的包都打上标签123: iptables -t mangle -A PREROUTING -i eth0 \ -p tcp -d 172.16.8.1/32 -m multiport --dports 80,443 -j MARK --set-mark 123 随后我们就可以在keepalived里来指定virtual_server来处理这些打过标签的流量了: virtual_server fwmark 123 { ... } 具体的一个用法,如果你想禁止从1.2.3.4来的ip访问你服务器,于是乎你就可以先给包打上标签2000,然后配个服务器,上面写联系人和电话,单独给他看,他看到会联系你询问被屏蔽的原因,如下: virtual_server fwmark 2000 { delay_loop 6 lb_algo wlc lb_kind NAT persistence_timeout 0 protocol TCP real_server 10.10.10.1 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 } } }

2024年01月11日 · 1 分钟 · 77 字 · 八戒

F5利用irule来防止Ddos的方法

公司的服务器遭受了攻击,某些人不停调用公司服务器发送短信的api,真是有够无聊的。 由于我们的架构是前面F5 Bigip,后面接了N个Tomcat,那就直接写个F5的irule来阻止它。 阻止GET请求的频率,30秒只允许单个ip发5次 假设GET的模式是 GET /sendsms.do?mobile=13800000000&msg=aaaaaaaa irule里有个非常神奇的东西,table,是session会话表的超表,基本操作是key-value型,带有生存时间,这点最重要。 详细的大家可以去看: https://clouddocs.f5.com/api/irules/table.html 阻止GET的irule: when RULE_INIT { set static::windowSecs 30 } when HTTP_REQUEST { if { ( [HTTP::method] equals "GET" ) && ( [HTTP::uri] starts_with "/sendsms.do" ) } { set myUserId [IP::client_addr] set myMaxRate 5 if { $myMaxRate ne "" } { set reqnum [table incr "req:$myUserId"] set tbl "countpost:$myUserId" table set -subtable $tbl $reqnum "ignored" indef $static::windowSecs if { [table keys -subtable $tbl -count] > $myMaxRate } { HTTP::respond 403 "Block" return } } } } 来个更加复杂的例子: POST的请求如下: POST /api/sendMessage.htm HTTP/1.1 Content-Length: 203 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Host: 172.8.2.23 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.5 (Java/1.7.0_51) Accept-Encoding: gzip,deflate action=order.sumit.order&jsonData=%7B%22channelCode%22%3A%22%22%2C%22mobiles%22%3A%5B%2215176989787%22%5D%2C%22source%22%3A%22pop%22%2C%22tempParameters%22%3A%5B%22480827%22%2C%2291%22%5D%2C%22templateId%22%3A2%7D 我们要阻止POST /api/sendMessage.htm且action=sendmsg的话,就比较复杂一些,我们判断uri满足条件后,还要进一步判断content中action=的内容: ...

2024年01月11日 · 2 分钟 · 226 字 · 八戒

用openssh的tunnel建立隧道翻墙

openssh是支持隧道的,所以可以在ssh中再套个隧道,直接用来翻墙,做法如下: 如上图,A机能ssh—->B机 A机的IP:172.16.8.106 B机的IP:172.16.8.108 A机建立tunnel后tun的ip:192.168.244.1 B机建立tunnel后tun的ip:192.168.244.2 首先编辑A和B的/etc/ssh/sshd_config,允许tunnel,缺省是不允许的,然后service sshd restart ,重启sshd PermitTunnel yes A和B安装linux下的tun软件,并启动一个tunnel设备 yum install tunctl tunctl -t tun5 -u root 在A(172.16.8.106)机器上生成key,并设置能无密码直接用证书登录B(172.16.8.108) ssh-keygen ssh-copy-id root@172.16.8.108 在A上执行命令,建立ssh tunnel: ssh -w 5:5 root@172.168.8.108 在A上执行 ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0 在B上执行 ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0 这样分别在A和B上ping 192.168.244.1和192.168.244.2,都能通就表示已经ok了。 优化一下,A和B两边都先把tun5启动以后,直接在A上一句话搞定,这个不会自动退出,所以得ctrl+z,然后bg放后台去;或者直接用screen挂住: ssh \ -o PermitLocalCommand=yes \ -o LocalCommand="ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0" \ -o ServerAliveInterval=60 \ -w 5:5 root@172.16.8.108 \ 'ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0; echo tun5 ready' 如果要用在翻墙的环境,那就得保持长链接了。假设A机器是在一个防火墙后,且被NAT了,那么就得先这样打通隧道: ...

2024年01月11日 · 1 分钟 · 151 字 · 八戒

Docker急速搭建运行ikev2 vpn来让iphone翻墙

这篇文章只适用于在自己的vps上运行: 步骤如下: 1、拉回来镜像,ikev2-vpn-server,话说这么多年过去了,依然适用,2016年到现在 docker pull gaomd/ikev2-vpn-server 2、启动服务端,注意–privileged参数,这个是必须的 docker run --privileged -d --name ikev2-vpn-server --restart=always -p 500:500/udp -p 4500:4500/udp gaomd/ikev2-vpn-server:0.3.0 搞定,只需要2步即可完成相对比较难搞的ikev2的安装. 3、生成iphone客户端配置文件 docker run -i -t --rm --volumes-from ikev2-vpn-server -e "HOST=vpn.rendoumi.com" gaomd/ikev2-vpn-server:0.3.0 generate-mobileconfig > ikev2-vpn-ihone6s.mobileconfig 注意:vpn.rendoumi.com替换成你自己对应的ip或者域名 然后你把这个配置文件下载,安装到MacOS或者iOS中,就可以愉快的玩耍了。

2024年01月11日 · 1 分钟 · 36 字 · 八戒

Linux下的策略路由

如果我们有两条上网线路可以使用,那么策略路由就是个好的选择了。 基本概念: 策略路由表(Policy routing tables): Linux 缺省有3个表, local (不能改也不能删), main, 和 default。添加路由的时候如果不指定,缺省是添加到main路由表里的。 策略路由规则(Policy routing rules): Linux 缺省也有三套路由规则,对应三个缺省路由表。 查看一下就可以看到三个表: # ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default 查local表的路由规则: # ip route list table local local 10.10.0.1 dev tun0 proto kernel scope host src 10.10.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 local 192.168.122.1 dev virbr0 proto kernel scope host src 192.168.122.1 local 172.16.8.1 dev br0 proto kernel scope host src 172.16.8.1 broadcast 192.168.122.0 dev virbr0 proto kernel scope link src 192.168.122.1 broadcast 172.16.8.0 dev br0 proto kernel scope link src 172.16.8.1 broadcast 172.16.9.255 dev br0 proto kernel scope link src 172.16.8.1 broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 broadcast 192.168.122.255 dev virbr0 proto kernel scope link src 192.168.122.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 使用策略路由的方法也很简单,1、定义一个路由表,2、定义路由规则,3、应用路由规则。 ...

2024年01月10日 · 2 分钟 · 227 字 · 八戒