http://m.blog.csdn.net/xysoul/article/details/42975159
ipsan 不见得比fcsan 差多少吧?
ipsan 是: 物理层 -〉以太网数据链路层 -〉 ip -〉 scsi
fcsan是: 物理层(光纤) -〉fc协议 -〉 scsi
DevOps
http://m.blog.csdn.net/xysoul/article/details/42975159
ipsan 不见得比fcsan 差多少吧?
ipsan 是: 物理层 -〉以太网数据链路层 -〉 ip -〉 scsi
fcsan是: 物理层(光纤) -〉fc协议 -〉 scsi
由于我的rbd image中都是一个相同的基础镜像,里面的文件系统都一样,相同的xfs文件系统格式,相同的文件系统id;所以,就算可以rbd map多个,也不能同时mount多个,因为文件系统id一样啊。
问题是,我已经umount了rbd image1,再去mount rbd image2,为啥还是提示:
1 |
XFS (nbd1p1): Filesystem has duplicate UUID 0356e691-d6fb-4f8b-a905-4230dbe62a32 - can't mount |
原因: 虽然umount了,但是相关的xfs后台进程并没有退出,所以,可以进一步unmap掉那个不需要的设备,xfs进程就会退出:
对于使用linux-bridge来实现网络虚拟化的情况:
如果需要使用vlan来作为provider,则,配置基本如下:
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 2 |
[linux_bridge] physical_interface_mappings = provider:eth0 |
/etc/neutron/plugin.ini
1 2 |
[ml2_type_vlan] network_vlan_ranges =provider:3000:3001 |
注意: network_vlan_ranges 是需要配置的, 这样在重启neutron服务的时候,会在neutron数据库中创建:
1 2 3 4 5 6 7 |
# mysql -uroot -pxxxx neutron -e 'select * from ml2_vlan_allocations;' +------------------+---------+-----------+ | physical_network | vlan_id | allocated | +------------------+---------+-----------+ | provider | 3000 | 0 | | provider | 3001 | 0 | +------------------+---------+-----------+ |
network_vlan_ranges 配置从注释来看,似乎可以不写vlan范围,其实不行,因为需要在表中创建条目,如果指定range大小会1000,则会一次产生1000个数据库记录;
另外,当我们从配置文件中把 provider 删除(或重命名)时,数据库中的条目并不被删除,而且会导致neutron服务启动失败,这时候,可以手动删除上述条目
当我们在provider上创建一个vlan id为3000的vlan provider时,会自动创建eth0.3000, 假如compute节点上部署openstack-controller(确切说,应该是neutron)虚拟机,由于该虚拟机也需要类似eth0.3000的接口,然而,宿主机只有一个网卡的情况下,如果虚拟机桥接的也是eth0的话,宿主机上创建了eth0.3000后,虚拟机将不再能收到vlan3000的流量了(被截流了),所以就比较麻烦,所以,建议neutron虚拟机不要部署在计算节点上;也或者还有其它的不愉快。
当然,如果确实没有其它的机器安装neutron虚拟机呢?其实办法还是有的:
openstack 中配置给provider的物理网卡使用veth1 就行, 这样的话,vm-neutron也能看到vlan3000的数据包了
问: openstack 中配置给provider的物理网卡使用veth0 行不?
根据veth对儿实现原理,veth0接收到的数据如果不是从veth1来的,肯定发送给veth1,否则发送给br0;假如,配置为veth0,则vm的数据发送给veth0.3000后,经过veth0会被发送给veth1,而不是br0,这不是我们想要的
参考: https://www.cnblogs.com/xieshengsen/p/6215168.html
在kernel启动参数中添加: console=ttyS0
这岂不是要重启?
也不用,centos7下,只需要启动一个服务就行:
1 |
systemctl start getty@ttyS0 |
为了下次能自动启动,可以enable一下:
1 |
systemctl enable getty@ttyS0 |
注意: 最好确保 ttyS0已经加入了 /etc/securetty :
1 |
echo ttyS0 >> /etc/securetty |
然后就可以virsh console $domain 了
其实对应domain的console在宿主机是有一个tty的,如下方式查看:
1 |
virsh ttyconsole $domain |
如:
1 2 |
# virsh ttyconsole ceph-8 /dev/pts/2 |
比较有趣的玩法是:
为什么virsh console没有配置的时候,virt-manager依然能看到虚拟机的界面呢?virt-manager走的是vnc(或spice)方式,而且是宿主机里面提供的,和虚拟机里面是否有vnc(spice)没有关系。
通过ps也能查看:
1 |
ps aux|grep -E "\-(vnc|spice) [^ ]*" |
默认情况下,虚拟机的vnc(或spice)会listen 127.0.0.1 上的端口,远程通过virt-manager访问的时候,如果使用ssh协议的话,会通过如下方式将vnc(或spice)端口重定向到本地:
1 |
ssh libvirtd-host sh -c 'nc -q 2>&1 | grep "requires an argument" >/dev/null;if [ $? -eq 0 ] ; then CMD="nc -q 0 127.0.0.1 5901";else CMD="nc 127.0.0.1 5901";fi;eval "$CMD";' |
然后在这个打开的流上进行vnc(或spice)协议,这个可就不想tty那么好模拟了
那么,kvm如何就能启动一个vnc,使得能够访问虚拟机呢?模拟硬件的tty?
表象:
kvm虚拟机vm的nic使用virio驱动,在vm流量大的时候,vm就直接断网了; 我们原本有多台vm的,但是其中几台已经多次出现断网的情况,重启vm就好使了;我以为这个vm有问题,后来其他的vm也出现类似问题,我才察觉,其实是这台vm的流量通常更高,出现问题的概率大而已。
虚拟机信息:
1 2 |
# uname -a Linux ceph-5 4.4.61-1.el7.elrepo.x86_64 #1 SMP Wed Apr 12 11:53:28 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux |
宿主机信息:
1 2 |
# uname -a Linux compute-5 4.10.10-1.el7.elrepo.x86_64 #1 SMP Wed Apr 12 13:38:46 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux |
我的问题和 https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/997978 基本是一样的
重新attach网络接口:
1 2 3 4 |
# virsh domiflist instance-000000c4 接口 类型 源 型号 MAC ------------------------------------------------------- tapf4bddb27-1d bridge brqce4d2a54-44 virtio fa:16:3e:5e:93:29 |
1 |
# virsh detach-interface --mac fa:16:3e:5e:93:29 instance-000000c4 bridge |
1 |
# attach-interface --mac fa:16:3e:5e:93:29 --domain instance-000000c4 --type bridge --model virtio --live --source brqce4d2a54-44 --target tapf4bddb27-1d |
1 |
# ifup eth0 |
参考:
https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/1050934
https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/997978
场景,用docker做开发用的虚拟机,每个docker都有一个可以公开访问的IP地址。
由于docker和宿主机共享内核,一不小心可能会把整个宿主机搞挂,而且,docker热迁移也是个难题,所以,尽管openstack马上可以支持docker,我也不想让docker直接部署在计算节点;我的思路是,将docker部署在openstack管理的kvm虚拟机上,这样还能通过热迁移kvm的方式将容器迁移到别的计算节点。
注意事项:
我们通过一个网桥两个设备对,来连接两个网络名字空间,每个名字空间中创建两个vlan
借助vconfig来配置vlan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#创建网桥 brctl addbr br-test-vlan #创建veth对儿 ip link add veth01 type veth peer name veth10 ip link add veth02 type veth peer name veth20 #将veth对儿的一段添加到网桥 brctl addif br-test-vlan veth01 brctl addif br-test-vlan veth02 #启动设备 ip link set dev br-test-vlan up ip link set dev veth01 up ip link set dev veth02 up ip link set dev veth10 up ip link set dev veth20 up #创建网络名字空间 ip netns add test-vlan-vm01 ip netns add test-vlan-vm02 #将设备对儿的另一端添加到另个名字空间(其实在一个名字空间也能玩,只是两个名字空间更加形象) ip link set veth10 netns test-vlan-vm01 ip link set veth20 netns test-vlan-vm02 #分别进入两个名字空间创建vlan和配置ip #配置名字空间test-vlan-vm01 ip netns exec test-vlan-vm01 bash #配置vlan 3001 和 vlan 3002 vconfig add veth10 3001 vconfig add veth10 3002 #启动两个vlan的设备 ip link set veth10.3001 up ip link set veth10.3002 up #分别在两个vlan上配置ip (这里简单起见,使用了同一个网段了IP,缺点是,需要了解一点儿路由的知识) ip a add 172.16.30.1/24 dev veth10.3001 ip a add 172.16.30.2/24 dev veth10.3002 #添加路由 route add 172.16.30.21 dev veth10.3001 route add 172.16.30.22 dev veth10.3002 #配置名字空间test-vlan-vm02 ip netns exec test-vlan-vm02 bash #配置vlan 3001 和 vlan 3002 vconfig add veth20 3001 vconfig add veth20 3002 #启动两个vlan的设备 ip link set veth20.3001 up ip link set veth20.3002 up #分别在两个vlan上配置ip (这里简单起见,使用了同一个网段了IP,缺点是,需要了解一点儿路由的知识) ip a add 172.16.30.21/24 dev veth20.3001 ip a add 172.16.30.22/24 dev veth20.3002 #添加路由 route add 172.16.30.1 dev veth20.3001 route add 172.16.30.2 dev veth20.3002 |
查看一下vlan配置:
1 2 3 4 5 |
# cat /proc/net/vlan/config VLAN Dev name | VLAN ID Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD veth10.3001 | 3001 | veth10 veth10.3002 | 3002 | veth10 |
现在,我们可以分别在两个名字空间来ping另外一个名字空间的两个IP,虽然两个IP都能ping通,但是使用的源IP是不同的,走的vlan也是不同的,我们可以在veth01/veth10/veth02/veth20/br-test-vlan 任意一个上抓包,会看到vlan信息:
1 2 3 4 5 6 7 8 9 |
# tcpdump -i veth10 -nn -e tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on veth10, link-type EN10MB (Ethernet), capture size 262144 bytes 15:38:18.381010 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan <span style="color: #ff0000;">3001</span>, p 0, ethertype IPv4, <strong><span style="color: #ff0000;">172.16.30.1 > 172.16.30.21</span></strong>: ICMP echo request, id 19466, seq 1, length 64 15:38:18.381183 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan <span style="color: #ff0000;"><strong>3001</strong></span>, p 0, ethertype IPv4, 172.16.30.21 > 172.16.30.1: ICMP echo reply, id 19466, seq 1, length 64 15:38:19.396796 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan 3001, p 0, ethertype IPv4, 172.16.30.1 > 172.16.30.21: ICMP echo request, id 19466, seq 2, length 64 15:38:19.396859 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan 3001, p 0, ethertype IPv4, 172.16.30.21 > 172.16.30.1: ICMP echo reply, id 19466, seq 2, length 64 15:38:23.162052 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan 3002, p 0, ethertype IPv4, 172.16.30.2 > <strong><span style="color: #ff0000;">172.16.30.22</span></strong>: ICMP echo request, id 19473, seq 1, length 64 15:38:23.162107 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan 3002, p 0, ethertype IPv4, <strong><span style="color: #ff0000;">172.16.30.22 > 172.16.30.2</span></strong>: ICMP echo reply, id 19473, seq 1, length 64 |
如果试图从veth10.3001 去ping 172.16.30.22 是不能通的,因为是不同的vlan呀:
1 2 3 4 5 |
# ping -I veth10.3001 172.16.30.22 PING 172.16.30.22 (172.16.30.22) from 172.16.30.1 veth10.3001: 56(84) bytes of data. ^C --- 172.16.30.22 ping statistics --- 9 packets transmitted, 0 received, 100% packet loss, time 8231ms |
不适用vconfig的解法:
1 |
ip link add link veth10 name veth10.3001 type vlan id 3001 |
另: vlan 一般以 设备名.vlanid 来命名,不过并非强制,如下命名为 vlan3003也是没问题的
1 |
# ip link add link veth10 name vlan3003 type vlan id 3003 |
注意:一个主设备上相同vlan好的子设备最多只能有一个
1 2 |
# ip link add link veth10 name vlan3001 type vlan id 3001 RTNETLINK answers: File exists |
所以,正常来讲,一般是这样的:
ceph-bluestore-tool 可以对bluestore 文件系统进行检查:
1 2 3 4 5 6 7 8 9 10 11 |
#ceph-bluestore-tool --path /var/lib/ceph/osd/ceph-0 --command fsck ... 2017-12-11 12:06:22.464823 7f9bce47bd00 4 rocksdb: Compression algorithms supported: 2017-12-11 12:06:22.465071 7f9bce47bd00 4 rocksdb: Snappy supported: 0 2017-12-11 12:06:22.465078 7f9bce47bd00 4 rocksdb: Zlib supported: 0 2017-12-11 12:06:22.465080 7f9bce47bd00 4 rocksdb: Bzip supported: 0 2017-12-11 12:06:22.465083 7f9bce47bd00 4 rocksdb: LZ4 supported: 0 2017-12-11 12:06:22.465085 7f9bce47bd00 4 rocksdb: ZSTD supported: 0 2017-12-11 12:06:22.465087 7f9bce47bd00 4 rocksdb: Fast CRC32 supported: 0 ... 2017-12-11 12:06:26.629854 7f9bce47bd00 1 bluestore(/var/lib/ceph/osd/ceph-0) fsck finish with 0 errors in 7.053573 seconds |
注意: 必须把对应的osd停掉才行
取消某个mon的法人资格:
1 2 |
# ceph tell mon.ceph-test-3 quorum exit stopped responding to quorum, initiated new election |
恢复一个mon的法人资格
1 |
# ceph tell mon.ceph-test-3 quorum enter |
不幸的是,该命令卡死不动;甚至,如果期望提示enter补全都会卡死不动; 哪怕是4个mon,exit一个再tell回来也是卡死的,所以,tell命令似乎只能取消法人资格,不能恢复法人资格
方法2: 直接在需要恢复法人资格的daemon上执行如下命令
1 2 |
# ceph daemon mon.ceph-test-3 quorum enter started responding to quorum, initiated new election |
为什么第二条命令输出的不是a b c三行?
改进:
这里把ssh的标准输入关闭了,结果就正常了,可见,原来不能输出三行是有ssh的标准输入导致的
再次验证如下:
这里比较清晰地说明了b、c被ssh给读走了
如果不想费这心思,完全可以别走管道:
有时候就是这样,能用简单明了的写法,最好别摆酷
非图片版:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@ceph-test-1 my-cluster]# echo -e "a\nb\nc" | while read c; do ssh localhost echo $c; done a [root@ceph-test-1 my-cluster]# echo -e "a\nb\nc" | while read c; do ssh localhost echo $c <&-; done a b c [root@ceph-test-1 my-cluster]# echo -e "a\nb\nc" | while read c; do ssh localhost 'while read c; do echo ">>$c";done'; done >>b >>c [root@ceph-test-1 my-cluster]# echo -e "a\nb\nc" | while read c; do ssh localhost 'while read d; do echo ">>$d";done'; echo ">$c";done >>b >>c >a [root@ceph-test-1 my-cluster]# for c in $(echo -e "a\nb\nc"); do ssh localhost echo $c; done a b c |