寻觅生命中的那一片浅草......

Xen虚拟机迁移到VMware

由于种种原因,我们之前使用了Xen,但使用起来不是很方便,例如有时物理机上的LVM并不会开机激活等,我们就想着集中迁移到VMware进行集中管理

1 环境说明

  1. Xen虚拟机为全虚拟机化,就是内核是没有修改的,此处主要影响硬件驱动,如果用的是半虚拟化,估计转换后,还要处理下initrd文件
  2. 虚拟机里的系统使用了LVM(特别坑)

2 export to ovf

失败

导出后,在导入VMware的时候,提示

encoding specified in XML declaration is incorrect

对于上述错误,有人在VMware论坛提出了解决方案:Xen -> VirtualBox -> VMware

1)Exported OVF and VHD from Citrix XenCenter

2)Created a new VM in Oracle VirtualBox using as virtual disk the VHD disk exported above. (this step was performed on my desktop pc on which I installed VirtualBox) 

3)Exported OVA from Oracle VirtualBox

4)Imported OVA as an Assembly in vSphere

满心欢喜,进行了16个小时的导出后,在导入的时候,并不行,提示硬件不兼容,放弃

参考:OVA文件导入VMware ESXi出错解决办法

3 P2V

就是用物理机转换为虚拟机的方法,可行

我们在转换的时候,转换工具可以识别到源机的磁盘结构(LVM), 但转换过去后,磁盘大小却不对,结构也是乱的,猜测是LVM导致,这里有提到一个将LVM降级的解决办法,但我们没有试,主要是考虑

  1. 数据安全,将LVM降级,怕有风险
  2. 文章发表时间为2013年,较旧
  3. VMware官方文档也表示转换工具支持LVM

文档地址:Solution for LVM based Linux servers using VMware Converter showing no volumes

下面讲可行的方法

步骤一

在「Optinons」这一步,点击「Data to copy」部分内容,或者点击「Edit」,然后选择「Advanced」,然后去到下图

步骤二

此处选择「Destination layout」,点击「VirtualDisk2」,然后点击「To basic」,就是在目标机器上不使用LVM,只使用普通磁盘分区,此处为关键

至于另外2个「Thin」,则可设置,也可以不设置,设置为Thin就是按需占用,按实际使用分配,而不是一下子就分配所有空间

步骤三

Xen服务器上的虚拟机转成VMware的虚拟机后,发现开机黑屏,最后摸索后发现是grub菜单项有问题导致,在开机的时候,直接修改grub菜单,然后把consolse=hvc0删掉,并在最后加入fastboot,就可以正常启动了

步骤四

由于转换的时候,没有识别到/data,我怀疑是因为它磁盘设备文件是/dev/xvdb导致,一般应该是/dev/xvdb1,所以,我们在开机后,添加新磁盘,然后在线同步一次data,最后,关闭所有服务,再同步要同步的数据,本例中含/var/data,最后换ip,开启服务,迁移完成

vmware回收vmdk空间

1 问题

我们内网有一个vmware的集群,以前年少无知,所以vmdk的格式选择了「厚置备延迟置零」,也就是分配多少,vmdk文件就会占用多大的空间,这里的好处是能提供较好的io,但我们虚拟机大部分用来做测试的,所以对io要求不高,而且实际并不需要这么大的空间,这里是第一个问题,我们需要将vmdk转换为「Thin Provisioning」,就是按需使用,并不是一开始就分配所有空间。

后来的虚拟机,我们选用了「Thin Provisioning」,部分虚拟机在一开始写了大量文件,现在不需要存了,需要回收这部分空间,这是第二个问题。

2 转换

有2个方式

vShpere Client

就是迁移虚拟机,只需要转移存储就可以了,当然也可以连主机也迁移了,原来就是在迁移选择存储时,可以在「选择虚拟磁盘格式」下拉菜单中选择「Thin Provisioning」,我感觉原理和vmkfstools是一样的,就是在迁移的过程中,做一次转换

vmkfstools

由于我没有使用此方法,直接贴参考资料好了

Cloning and converting virtual machine disks with vmkfstools (1028042)

3 回收空间

在转换的时候, 发现部分机器已经回收空间了,但有些没有自动回收,暂时不知道什么原因,下面讲下手动回收。

大概原理是先在虚拟机里标记哪些磁盘块是已经删除了,然后再通过vmkfstools进行回收

Windows虚拟机

可以用

sdelete.exe -z [DRIVE:]

Linux虚拟机

比较粗暴,用dd填满磁盘,再删除文件

由于它是填满磁盘,就是该盘会最终占用分配给它的全部空间,所以要看看该vmdk所在的物理盘是否有足够的空间

# xxx为你需要回收的磁盘挂载点
cd xxx
dd if=/dev/zero of=zeroes bs=4096 || rm -f zeroes

开始回收

经过上面2种虚拟机的处理后,就可以ssh到vmware物理机上进行回收

此处注意,vmkfstools要用xxx.vmdk,不要用xxx-ctk.vmk,也不要用xxx-flat.vmdk

# 处理前确认大小
du -h xxx-flat.vmdk
vmkfstools -K xxx.vmdk
# 处理后确认大小
du -h xxx-flat.vmdk

处理完后,在「vShpere Client」中,可以选择「刷新存储使用情况」来获取最新的使用情况

4 注意

磁盘有价,数据无价,请操作前做好备份,操作的时候,再三确认

5 参考资料

PostgreSQL简介

怎么用了PostgreSQL?

PostgreSQL,在国内应该是没有MySQL那么流行,但对它的介绍,通常是和Oracle比,我们也只在2个地方用了:

  1. Zabbix,一开始是MySQL,后来agent端出现很多unreachable,才用了PostgreSQL,但换数据库并没有解决问题,最后是采用了表分区才解决了
  2. 大数据,CDH这个Hadoop发行版,默认使用的是PostgreSQL 8.4(2009年发行),有几个数据库连接 ,长期占用CPU达50%,花了点时间去看,但最终也没有解决。而且版本太旧,目前搜到的资料,都不太适用

安装

官方提供了各系统,各版本的rpm包,直接yum或者rpm即可

rpm -ivh https://download.postgresql.org/pub/repos/yum/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-3.noarch.rpm
yum -y install libxslt uuid
yum -y install postgresql93-server postgresql93-contrib postgresql93-libs postgresql93

上面的安装可能会提示证书有问题,此时可以去看看yum仓库的地址,然后手动wget回来安装即可

grep baseurl /etc/yum.repos.d/pgdg-93-centos.repo 

初始化和连接

# 初始化数据,数据库文件目录在/var/lib/pgsql/9.3/data/
/etc/init.d/postgresql-9.3 initdb

# 启动
/etc/init.d/postgresql-9.3 start

连接

# 以系统用户连接
# 连接,切换到postgres,然后就可以直接连接了
su - postgres
psql
# 通过用户密码连接,只能通过环境变量指定密码
PGPASSWORD=xxx /usr/bin/psql -U zabbix
# 把连接信息写到文件
cat /root/.pgpass
localhost:5432:*:test_user:user_password
# 通过指定用户名即可连接 
psql -U test_user

认证

它和MySQL一样,也是基于用户和主机进行认证的,配置文件如下,就是和数据在一起

# 修改此文件
# 需要以root身份进行reload:/etc/init.d/postgresql-9.3  reload

/var/lib/pgsql/9.3/data/pg_hba.conf

文件内容

# "local" is for Unix domain socket connections only
# 类型 数据库             用户           地址          认证方式
local   all             all                        peer
# IPv4 local connections:
host    all             all       127.0.0.1/32   ident
host    replication     replica     192.168.8.198/32    md5

认证类型

local的话,就是不指定主机名或者指定主机名为localhost,它默认使用unix socket进行连接/tmp/.s.PGSQL.5432,5432会随着监听端口改变,例如改为7432,则socket文件名就会变成/tmp/.s.PGSQL.7432

其他的就是通过host:port这样的tcp方式访问

认证方式

数据库和用户没什么要说的,这里讲下认证方式

  • ident,就是用PostgreSQL所在机器的系统用户,例如上面提到的切换到postgres用户,当系统用户和PostgreSQL里的用户名一致,就可以连接
  • peer,和ident一样,只是它是在客户端系统进行识别
  • md5,就是密码认证
  • trust,只验证主机,不验证用户名和密码
  • password,这个没去了解

使用

以下指令为输入psql进入PostgreSQL控制台输入

\?:
    打印PostgreSQL帮助
\h:
    打印SQL帮助
\c   :  
    可以通过\c databasename  切换数据库
\l    :
    数据库列表的详细信息
\q   :
    退出数据库
\d或\dt:
      该数据库下所有表的详细信息
\d  tablename:
      该表的表结构
\df 
    打印函数
\df+ partition_every_day
    打印partition_every_day的信息
\du
    列出所有用户

alter user postgres with password 'xxx'
    修改用户名密码 
      

以下指令在系统终端执行

# 创建数据库
createdb test_db

# 备份数据库,dumpall为备份所有库
pg_dump/pg_dumpall

# 备份结构
pg_dump --schema-only

# 执行sql文件

psql -f xxx.sql

schema

目前我无法说清楚这是什么东西,大概理解为是一种隔离机制吧,默认只有$userpublic,如果你的表有分区,那么你虽然在打印的时候可以看到,但你要drop分区的时候,则会提示找不到

# 显示Schema的搜索路径
SHOW search_path;

# 从上面的输出可以看出,默认没有partitions,我们加入,如果不加入,在drop table的时候,就会提示does not exist
SET search_path TO "$user",partitions,public;

# 可以drop了,CASCADE的作用是把关联的触发条件删除,这触发条件,其实就是什么数据应该插入此分区的,现在已经是2017了,自然不会有2015的数据需要插入,所以可以放心删除
drop table history_uint_2015_01_11 CASCADE;

# 当然也可以不用设置,直接加partitions前缀

drop table partitions.history_uint_2015_01_11 CASCADE;

性能

  • shared_buffers,缓存最近查询的数据页,设置为系统内存的25%,但不应该超过8G
  • effective_cache_size,单次查询可用缓存,如果是专门的PostgreSQL服务器,设置为系统总内存一半
  • work_mem,用于排序、表扫描、哈希关联等操作的最大内存量,如果是多用户并发进行简单查询,那么此设置很小也没有问题,如果执行复杂查询,可以调大
  • maintenance_work_mem,用于vaccum(回收内存和磁盘空间)操作的内存总量。不应该大于1G。

一些工具

pgAdmin

是PostgreSQL官方的图形界面管理客户端

  • 版本3可以管理PostgreSQL 8.4
  • 版本4可以管理PostgreSQL 9.x

pgsniff

从网络流量中提取SQL,测试支持9.3版本,8.4版本不支持

# 最后一个-,意思是输出到终端
pgsniff -d eth1 -l -

还有一个叫pgshark,没测试

书籍

  • PostgreSQL 9 Admin Cookbook,有中文版
  • PostgreSQL即学即用
  • PostgreSQL 9.0性能调校,一定不要看中文版

shadowsocket和ipset实现科学上网

1. 背景

我们有了专线接入的,而基于shadowsocket,网上的资料已经无法访问了,经过一翻摸索,终于又还原出来

2. 使用原有软件

上面专线版本,我们已经安装了一些软件,这里可以继续用

  • dnsmasq
  • pdnsd

3. shadowsocket配置

服务器端已经有了,这里讲下客户端,CentOS 6安装shadowsocket 3.x比较麻烦,这里安装2.x的

配置yum源

sudo cat > /etc/yum.repos.d/librehat-shadowsocks.repo <<EOF
[librehat-shadowsocks]
name=Copr repo for shadowsocks owned by librehat
baseurl=https://copr-be.cloud.fedoraproject.org/results/librehat/shadowsocks/epel-6-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/librehat/shadowsocks/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1
EOF

安装

sudo yum install shadowsocks-libev

连接shadowsocket

# 下面需要以root身份运行,主要是ulimit
ulimit -SHn 65535
# -v参数为输出详细信息,在debug的时候有用
# 要用ss-redir才行,ss-local不支持iptables REDIRECT的方式
su - ssproxy bash -c "ss-redir -s ss_svr_ip -p 58000 -k abc_pass -m aes-256-cfb -l 1080 -b 0.0.0.0 -v"

4. 设置dnsmasq

sudo cat > /data/conf/dnsmasq/ss_kexue.conf <<EOF
server=/facebook.com/127.0.0.1#1053
ipset=/facebook.com/ss_kexue
EOF
# 另外需要修改dnsmasq.conf,让它包含ss_kexue.conf,并重启dnsmasq

5. 设置ipset

# 新增hash表
sudo /usr/sbin/ipset -N ss_kexue iphash
# 添加facebook的ip倒表里
sudo ipset add ss_kexue facebook_ip
# 从旧的hash表里移除
sudo ipset del kk_kexue facebook_ip

6. 设置iptables

# 需要写到配置文件
sudo iptables -t nat -A PREROUTING -p tcp -m set --match-set ss_kexue dst -j REDIRECT --to-port 1080
sudo iptables -A RH-Firewall-1-INPUT -s 192.168.0.0/16 -p tcp --dport 1080 -j ACCEPT
sudo iptables -A RH-Firewall-1-INPUT -s 172.16.28.0/23 -p tcp --dport 1080 -j ACCEPT

好了,现在应该可以了

参考资料

lsiutil设置磁盘带宽

1. 问题

DELL R410自带RAID卡是SAS6IR,机械盘接上去带宽是3G,而SSD,无论是三星还是闪迪,都只有1.5G,查看指令

./lsiutil -p1 -a 69,8,21,4,0,0

有问题的结果,其中1.5处为接SSD的端口

SAS1068E's links are 3.0 G, 3.0 G, 3.0 G, 1.5 G, off, off, off, off

2. 解决

2.1 方法一

换个RAID卡,如 PERC 6i或者H700,贵

2.2 方法二

换pcie口的SSD,价格是sata口的两倍,贵

2.3 方法三

可以通过lsiutil(要求Version 1.62或以上)设置磁盘的带宽,此机接了4个盘,所以,具体设置,请根据实际情况选择

[root@localhost src]# ./lsiutil -p1 -a 69

LSI Logic MPT Configuration Utility, Version 1.63, June 4, 2009

1 MPT Port found

     Port Name         Chip Vendor/Type/Rev    MPT Rev  Firmware Rev  IOC
 1.  /proc/mpt/ioc0    LSI Logic SAS1068E B3     105      00192f00     0

Main menu, select an option:  [1-99 or e/p/w or 0 to quit] 69

Seg/Bus/Dev/Fun    Board Name       Board Assembly   Board Tracer
 0   2   0   0     SAS6IR                                            

# 输入13进行操作
Main menu, select an option:  [1-99 or e/p/w or 0 to quit] 13  

# 以下3行,直接回车即可
SATA Maximum Queue Depth:  [0 to 255, default is 8] 
Device Missing Report Delay:  [0 to 2047, default is 0] 
Device Missing I/O Delay:  [0 to 255, default is 0] 

PhyNum  Link      MinRate  MaxRate  Initiator  Target    Port
   0    Enabled     1.5      3.0    Enabled    Disabled  Auto
   1    Enabled     1.5      3.0    Enabled    Disabled  Auto
   2    Enabled     1.5      3.0    Enabled    Disabled  Auto
   3    Enabled     1.5      3.0    Enabled    Disabled  Auto
   4    Disabled    1.5      3.0    Enabled    Disabled  Auto
   5    Disabled    1.5      3.0    Enabled    Disabled  Auto
   6    Disabled    1.5      3.0    Enabled    Disabled  Auto
   7    Disabled    1.5      3.0    Enabled    Disabled  Auto

# 此处选择3,是我们接SSD的位置
Select a Phy:  [0-7, 8=AllPhys, RETURN to quit] 3
# 直接回车
Link:  [0=Disabled, 1=Enabled, default is 1] 
# 设置最小带宽,关键操作,选择1
MinRate:  [0=1.5 Gbps, 1=3.0 Gbps, default is 0] 1
# 以下4行,直接回车
MaxRate:  [0=1.5 Gbps, 1=3.0 Gbps, default is 1] 
Initiator:  [0=Disabled, 1=Enabled, default is 1] 
Target:  [0=Disabled, 1=Enabled, default is 0] 
Port:  [0 to 7 for manual config, 8 for auto config, default is 8] 

PhyNum  Link      MinRate  MaxRate  Initiator  Target    Port
   0    Enabled     1.5      3.0    Enabled    Disabled  Auto
   1    Enabled     1.5      3.0    Enabled    Disabled  Auto
   2    Enabled     1.5      3.0    Enabled    Disabled  Auto
   # 注意看下面一行,MinRate为3.0代表设置正确
   3    Enabled     3.0      3.0    Enabled    Disabled  Auto
   4    Disabled    1.5      3.0    Enabled    Disabled  Auto
   5    Disabled    1.5      3.0    Enabled    Disabled  Auto
   6    Disabled    1.5      3.0    Enabled    Disabled  Auto
   7    Disabled    1.5      3.0    Enabled    Disabled  Auto

# 以下4行,直接回车
Select a Phy:  [0-7, 8=AllPhys, RETURN to quit] 
Persistence:  [0=Disabled, 1=Enabled, default is 1] 
Physical mapping:  [0=None, 1=DirectAttach, 2=EnclosureSlot, default is 2] 
Number of Target IDs to reserve:  [0 to 32, default is 8] 

# 输入0退出设置
Main menu, select an option:  [1-99 or e/p/w or 0 to quit] 0

经过以上设置,重启系统,再次确认,带宽已经变为3,cp大量小文件,性能也提升了50%

参考资料

2021年九月
« 5月    
 12345
6789101112
13141516171819
20212223242526
27282930