加速 ubuntu启动
sed -i ‘s/20\|40\|59/1/g’ /etc/init/failsafe.conf
分类目录归档:云运维
xenserver下p2v迁移linux服务器
在虚拟化和云计算以及容器时代,我们将很多物理服务器所跑的应用全部迁移至以xen虚拟化私有云中。这时候会面临物理服务器迁移到虚拟服务器的问题。迁移windows到是xencover可以干,但是linux呢,网络上很多人都没有说。这里我简单介绍下迁移流程:
1.使用clonezilla live cd启动物理服务器
2.使用网络方式挂在nas
3.使用dd将硬盘block导到nas上
4.启动vm即可!
来点图:
Step 1 use “clonezilla Live CD”
Step 2 boot using Clonezilla Live CD
Step 3 Choose language in Clonezilla live
Step 4 Keyboard selection in clonezilla live
Step 5 Enter clonezilla or shell command (choose shell command)
Step 6 Choose option “2″
Step 7 You’ll get “$” prompt
Step 8 $ sudo bash
Step 9 # ifconfig eth0 XXX.XXX.XXX.XXX
Step 10 # passwd (change root passwd)
Step 11 # /etc/init.d/ssh restart
Step 12 Create new VM with HDD/CPU/MEM
Step 13 Boot VM with Clonezilla Live CD
Step 14 Follow above 11 step
Step 15 # dd if=/dev/sda |gzip -c | ssh root@target ip address ‘gzip -d | dd of=/dev/sda’
Step 16 reboot VM
修改docker的镜像容器存储路径
默认docker的存储路径在:
/var/lib/docker
# docker info
Containers: 1
Images: 41
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 43
Execution Driver: native-0.2
Kernel Version: 3.13.0-32-generic
WARNING: No swap limit support
可以这样:
service stop docker.io
mv /var/lib/docker to SAN
ln -s SAN /var/lib/docker
最后
# docker info
Containers: 5
Images: 572
Storage Driver: aufs
Root Dir: /data/docker/aufs
Dirs: 593
Execution Driver: native-0.2
Kernel Version: 3.16.0-30-generic
WARNING: No swap limit support
Docker在阿里云ecs的注意事项
故障:
1.安装好docker后,无法启动docker服务
2.创建docker0后,容器网络命名空间路由出不去
错误信息:
Please configure its address manually and run ‘docker -b docker0′
解决方法:
1.创建Docker0的网卡
2.启动该网卡
3.指定一个私有ip网络,切勿与阿里云的内网同一网段,同一网段有人说删除172的路由,这样会导致rds访问走外网会产生rds费用。还有其他莫名其妙的网络故障,所以建议不要动任何缺省的路由。
详细操作:
root@sklinux.com#brctl addbr docker0
root@sklinux.com#ip link set dev docker0 up
root@sklinux.com#ifconfig docker0 192.168.42.1
如果不想玩docker了,干了goto重建,先清除docker的桥
root@sklinux.com#ip link set dev docker0 down
root@sklinux.com#brctl delbr docker0
阿里云的内网路由:
centos6上玩docker
只需要如下操作即可:
#yum clean all && yum makecache && yum update -y
但是这样的docker文件系统是有问题的,
[root@jboss ~]# docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
Pool Name: docker-253:0-5112199-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 305.7 MB
Data Space Total: 107.4 GB
Metadata Space Used: 733.2 kB
Metadata Space Total: 2.147 GB
Udev Sync Supported: true
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.89-RHEL6 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 2.6.32-358.el6.x86_64
Operating System: <unknown>
CPUs: 16
Total Memory: 70.75 GiB
Name: jboss
注意 Data file: /dev/loop0,docker的文件存储是用loop循环块设备模式进行挂载读写,今后扩容很是麻烦。
所以最后还是升级内核3.10后进行操作
升级内核,只需要4步:
#cd /etc/yum.repos.d
#wget http://www.hop5.in/yum/el6/hop5.repo
#yum install kernel-ml-aufs kernel-ml-aufs-devel -y
#修改grub.conf启动内核3.10 && reboot
再继续玩!
Containers: 0
Images: 0
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.10.5-3.el6.x86_64
Operating System: <unknown>
CPUs: 24
Total Memory: 11.81 GiB
Storage Driver: aufs 看见了吗?
/etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
docker监听
root@docker:/etc# cat /etc/default/docker
# Docker Upstart and SysVinit configuration file
# Customize location of Docker binary (especially for development testing).
#DOCKER=”/usr/local/bin/docker”
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS=”–dns 8.8.8.8 –dns 8.8.4.4″
DOCKER_OPTS=”-H 0.0.0.0:4243 -H unix:///var/run/docker.sock”
# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy=”http://127.0.0.1:3128/”
# This is also a handy place to tweak where Docker’s temporary files go.
#export TMPDIR=”/mnt/bigdrive/docker-tmp”
DOCKER_OPTS=”$DOCKER_OPTS –insecure-registry=dl.dockerpool.com:5000″
DOCKER_OPTS=”$DOCKER_OPTS –insecure-registry=192.168.1.110:5000″
CDN全网详细调度器HAProxy、Nginx、Varnish比较
CDN功能如下:
1、将全网IP分为若干个IP段组,分组的依据通常是运营商或者地域,目的是让相同网络环境中的用户聚集到相同的组内;
2、依据CDN服务器们的网络和容量,确定哪些CDN服务器适合服务哪些IP段组;
3、根据以上两步得到的结论,让用户去最适合他的服务器得到服务。
说白了,就是根据用户不同的来源IP把用户请求重定向到不同的CDN服务器上去。
那么,如何实现呢?
智能DNS是办法之一,稳定可靠且有效。
但至少在两个环境下它不能完全满足我们:
1、需要特别精细的调度时。由于大多数DNS Server不支持DNS扩展协议,所以拿不到用户的真实IP,只能根据Local DNS来调度。
2、访问特别频繁时。由于每次调度都将触发一次DNS,如果请求变得密集,DNS请求本身带来的开销也会相应变大;
3、需要根据服务器的带宽容量、连接数、负载情况、当机与否来调度时。由于DNS Server没有CDN节点服务器的信息,这种调度会变得困难。
这时候我们可以:
1、将用户先行引导到某一台或几台统一的服务器上去;
2、让它拿到用户的真实IP,计算出服务他的服务器;
3、通过HTTP302或其它方式把用户定位到最终服务器上。
部署在用户先访问到的那几台服务器上,负责定位IP然后重定向用户请求的那个软件,我们叫它“调度器”。 继续阅读
docker私有仓库建立与镜像推送
简单记录:
1.拉原始镜像
docker pull regsitry
docker pull centos
2.启动registry仓库
docker run -t -i -d -p 5000:5000 -v /root/my_registry:/tmp/registry registry [你懂的]
3.给进行打标签
docker tag 9dbcac75201e docker10.sklinux.com:5000/centos:7 [tag为仓库地址+端口+名称+版本]
4.推送镜像至私有仓库
docker push docker10.sklinux.com:5000/centos:7[你懂的]
root@docker10:~/my_registry# docker tag 9dbcac75201e docker10.sklinux.com:5000/centos:7
root@docker10:~/my_registry# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 7 9dbcac75201e 3 days ago 215.6 MB
centos centos7 9dbcac75201e 3 days ago 215.6 MB
centos latest 9dbcac75201e 3 days ago 215.6 MB
docker10.sklinux.com centos7 9dbcac75201e 3 days ago 215.6 MB
docker10.sklinux.com:5000/centos 7 9dbcac75201e 3 days ago 215.6 MB
centos 7.1.1503 b58de3b24eb7 9 days ago 212.1 MB
centos centos7.1.1503 b58de3b24eb7 9 days ago 212.1 MB
registry latest 59b1f7d49dc8 9 days ago 413.6 MB
centos 5.11 2e4a66ce2189 5 weeks ago 284.2 MB
centos centos5.11 2e4a66ce2189 5 weeks ago 284.2 MB
centos 6.6 0bc55ae673f7 5 weeks ago 202.6 MB
centos centos6.6 0bc55ae673f7 5 weeks ago 202.6 MB
centos 7.0.1406 99d42dc65aa6 5 weeks ago 210.2 MB
centos centos7.0.1406 99d42dc65aa6 5 weeks ago 210.2 MB
centos 5 861c710fef70 5 weeks ago 284.1 MB
centos centos5 861c710fef70 5 weeks ago 284.1 MB
centos 6 f6808a3e4d9e 5 weeks ago 202.6 MB
centos centos6 f6808a3e4d9e 5 weeks ago 202.6 MB
root@docker10:~/my_registry# docker push docker10.sklinux.com:5000/centos:7
The push refers to a repository [docker10.sklinux.com:5000/centos] (len: 1)
Sending image list
Pushing repository docker10.sklinux.com:5000/centos (1 tags)
511136ea3c5a: Image successfully pushed
b6718650e87e: Image successfully pushed
493bab5fff45: Image successfully pushed
9dbcac75201e: Image successfully pushed
Pushing tag for rev [9dbcac75201e] on {http://docker10.sklinux.com:5000/v1/repositories/centos/tags/7}
root@docker10:~/my_registry# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 7 9dbcac75201e 3 days ago 215.6 MB
centos centos7 9dbcac75201e 3 days ago 215.6 MB
centos latest 9dbcac75201e 3 days ago 215.6 MB
docker10.sklinux.com centos7 9dbcac75201e 3 days ago 215.6 MB
docker10.sklinux.com:5000/centos 7 9dbcac75201e 3 days ago 215.6 MB
centos 7.1.1503 b58de3b24eb7 9 days ago 212.1 MB
centos centos7.1.1503 b58de3b24eb7 9 days ago 212.1 MB
registry latest 59b1f7d49dc8 9 days ago 413.6 MB
centos 5.11 2e4a66ce2189 5 weeks ago 284.2 MB
centos centos5.11 2e4a66ce2189 5 weeks ago 284.2 MB
centos 6.6 0bc55ae673f7 5 weeks ago 202.6 MB
centos centos6.6 0bc55ae673f7 5 weeks ago 202.6 MB
centos 7.0.1406 99d42dc65aa6 5 weeks ago 210.2 MB
centos centos7.0.1406 99d42dc65aa6 5 weeks ago 210.2 MB
centos 5 861c710fef70 5 weeks ago 284.1 MB
centos centos5 861c710fef70 5 weeks ago 284.1 MB
centos 6 f6808a3e4d9e 5 weeks ago 202.6 MB
centos centos6 f6808a3e4d9e 5 weeks ago 202.6 MB
iptables中hashlimit模块介绍
iptables中用hashlimit来限速
hashlimit是iptables的一个匹配模块,用它结合iptables的其它命令可以实现限速的功能(注意,单独hashlimit模块是无法限速的)。
不过首先必须明确,hashlimit本身只是一个“匹配”模块。我们知道,iptables的基本原理是“匹配–处理”,hashlimit在这个工作过程中只能起到匹配的作用,它本身是无法对网络数据包进行任何处理的。
我看到网上有些hashlimit的例子里面说只 用一条包含hashlimit匹配规则的iptables语句就可以实现限速,那是错误的。
实际上,利用hashlimit来限速需要包括两个步骤:
1.对符合hashlimit匹配规则包放行
2.丢弃/拒绝未放行的包
下面是一个简单的例子:
iptables -A INPUT -p tcp –dport 22 -m hashlimit –hashlimit-name ssh –hashlimit 5/sec –hashlimit-burst 10 –hashlimit-mode srcip –hashlimit-htable-expire 90000 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -j DROP
然后,我们来着重讲讲hashlimit模块具体是如何工作的。 继续阅读
Glusterfs集群分布式文件系统掉brick的处理
我们最近在一个已经正常运行半年左右的一个gluster分布式文件系统集群中发现一个Brick掉线了。
Volume Name: web-volume
Type: Replicate
Volume ID: cd9bf5ad-1b5f-404b-8279-6de12b8838ec
Status: Started
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 10.48.83.204:/data/gfs
Brick2: 10.48.83.200:/data/gfs
Brick3: 10.48.83.196:/data/gfs
Status of volume: web-volume
Gluster process Port Online Pid
——————————————————————————
Brick 10.48.83.204:/data/gfs 49152 Y 1791
Brick 10.48.83.200:/data/gfs 49152 Y 17406
Brick 10.48.83.196:/data/gfs N/A N N/A
这个节点是SSD盘,由于SSD极其个别会出现IO故障导致。我们决定将该节点下线,更换新的SSD。更换过程中我们的GFS文件系统内容数据一点也不收影响。这归功于GlusterFS,这不是我们今天主要想表达的。
我们今天主要是谈论如何将新的SSD节点brick重新加入集群。
1.将节点196的/data/挂载
2.我们需要首先得到GFS的文件扩展属性(在正常节点做),如下:
[root@node1.sklinux.com ~]# getfattr -d -m ‘.*’ /data/gfs
getfattr: Removing leading ‘/’ from absolute path names
# file: data/gfs
trusted.afr.web-volume-client-0=0sAAAAAAAAAAAAAAAA
trusted.afr.web-volume-client-1=0sAAAAAAAAAAAAAAAA
trusted.afr.web-volume-client-2=0sAAAAAAAAAAAAAAAA
trusted.gfid=0sAAAAAAAAAAAAAAAAAAAAAQ== ;得到trusted.gfid的值
trusted.glusterfs.dht=0sAAAAAQAAAAAAAAAA/////w==
trusted.glusterfs.volume-id=0szZv1rRtfQEuCeW3hK4g47A== ;得到 trusted.glusterfs.volume-id的值
3.设置196的gfs文件夹扩展属性,如下:
setfattr -n trusted.glusterfs.volume-id -v 0szZv1rRtfQEuCeW3hK4g47A== /data/gfs
setfattr -n trusted.gfid -v 0sAAAAAAAAAAAAAAAAAAAAAQ== /data/gfs
4.重启GFS服务{/etc/init.d/glusterd restart}
5.@196执行getfattr -d -m ‘.*’ /data/gfs;加入完成!
数据会像Raid1一样同步过来,如果你的集群是条带的,也是一样。