MariaDB/MySQL配置文件my.cnf解读

MariaDB/MySQL的默认设置性能非常差,仅仅起一个功能测试的作用,不能用在生产环境中,因此要对一些参数进行调整优化。当然,对配置文件各参数的调整需要根据实际环境,不同时期不同数量级的数据进行性能优化。

未分类

MySQL/MariaDB 配置文件位于 /etc/my.cnf。 每次更改此文件后你需要重启 MySQL 服务,以使更改生效。本文的参数配置基于MariaDB 10.2,硬件内存4G。文中一些选项值的设置只是推荐值,不要盲目的接受这些建议。每个 MySQL 设置都是不同的,在进行任何更改之前需要慎重考虑。

基本结构

[client]
port        = 3306 #客户端默认连接端口
socket      = /tmp/mysql.sock  #用于本地连接的socket套接字

[mysqld]  # 服务端基本配置
port        = 3306 # mysql监听端口
socket      = /tmp/mysql.sock #为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
user    = mariadb # mysql启动用户
basedir = /usr/local/mariadb # 安装目录
datadir = /data/mysql # 数据库数据文件存放目录
log_error = /data/mysql/mariadb.err #记录错误日志文件
pid-file = /data/mysql/mariadb.pid  #pid所在的目录
skip-external-locking  #不使用系统锁定,要使用myisamchk,必须关闭服务器
...

my.cnf配置文件以方括号如[client]区分模块作用域,其中[client]表示客户端配置,[mysqld]是服务端配置。以上几个选项是最基础的,每个选项有简单说明,其中有关路径的配置是基于本站文章:CentOS7下源码编译安装MariaDB 10.2和Linux下使用二进制格式安装MariaDB的安装路径来配置的,所以在配置前可以先按照两文先安装好MairaDB。

选项配置及说明

key_buffer_size = 32M 这个参数用来缓存MyISAM存储引擎的索引参数。MySQL5.5默认为InnoDB存储引擎,所以这个参数可以设置小点,64MB即可。

max_allowed_packet = 1M 允许最大接收数据包的大小,防止服务器发送过大的数据包。可以设置为16MB或者更大,但设置的太大也可能有危险。

table_open_cache = 128 #MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64,假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上。

sort_buffer_size = 768K 在表进行order by和group by排序操作时,由于排序的字段没有索引,会出现Using filesort,为了提高性能,可用此参数增加每个线程分配的缓冲区大小。默认为256KB,这个参数不要设置过大,一般在128~256KB即可。另外,一般出现Using filesort的时候,要通过增加索引来解决。

net_buffer_length = 8K 包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。

read_buffer_size = 768K 该参数用于表的顺序扫描,表示每个线程分配的缓冲区大小。比如在进行全表扫描时,MySQL会按照数据的存储顺序依次读取数据块,每次读取的数据块首先会暂存在read_buffer_size中,当buffer空间被写满或者全部数据读取结束后,再将buffer中的数据返回给上层调用者,以提高效率。默认为128K,这个参数不要设置过大,一般在128~256之间。

read_rnd_buffer_size = 512K 该参数用于表的随机读取,表示每个线程分配的缓冲区大小。比如,按照一个非索引字段做order by排序操作时,就会利用这个缓冲区来暂存读取的数据。默认为256KB,这个参数不要设置过大,一般在128~512KB。

myisam_sort_buffer_size = 8M 当对MyISAM表执行repair table或创建索引时,用以缓存排序索引;设置太小时可能会遇到” myisam_sort_buffer_size is too small”

thread_cache_size = 16 线程池,线程缓存。用来缓存空闲的线程,以至于不被销毁,如果线程缓存在的空闲线程,需要重新建立新连接,则会优先调用线程池中的缓存,很快就能响应连接请求。每建立一个连接,都需要一个线程与之匹配。

query_cache_size = 16M 缓存select语句和结果集大小的参数。查询缓存会存储一个select查询的文本与被传送到客户端的相应结果。如果之后接收到一个相同的查询,服务器会从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。如果你的环境中写操作很少,读操作频繁,那么打开query_cache_type=1,会对性能有明显提升。如果写操作频繁,则应该关闭它(query_cache_type=0)。

tmp_table_size = 32M 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。

explicit_defaults_for_timestamp = true 是否显示默认时间戳

#skip-networking

max_connections = 500 该参数用来设置最大连接数,告诉你当前你的服务器允许多少并发连接。默认为100,一般设置为512-1000即可。请记住,太多的连接会导致内存的使用量过高并且会锁住你的 MySQL 服务器。一般小网站需要 100-200 的连接数,而较大可能需要 500-800 甚至更多。这里的值很大程度上取决于你 MySQL/MariaDB 的使用情况。

max_connect_errors = 100 如果有时网络抽风,或者应用配置错误,或者其他原因导致客户端短时间内不断的尝试连接,客户端可能会被列入黑名单,然后将无法连接,直到再次刷新主机缓存。这个选项默认值太小了,可以考虑设的足够大(如果你的服务器配置够强大的话)。

open_files_limit = 65535 mysql打开最大文件数

log-bin=mysql-bin 这些路径相对于datadir

binlog_format=mixed 日志格式

server-id = 1 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。在复制数据同步的时候会用到,Helloweba后面会有文章介绍。

expire_logs_days = 10 启用二进制日志后,保留日志的天数。服务器会自动清理指定天数前的日志文件,如果不设置则会导致服务器空间耗尽。一般设置为7~14天。

default_storage_engine = InnoDB 新数据表的默认存储引擎(默认设置是MyISAM)。这项设置还可以通过–default-table-type选项来设置。

innodb_file_per_table = 1 InnoDB 提供了更灵活的方式,它把每个数据库的信息保存在一个 .ibd 数据文件中。每个 .idb 文件代表它自己的表空间。通过这样的方式可以更快地完成类似 “TRUNCATE” 的数据库操作,当删除或截断一个数据库表时,你也可以回收未使用的空间。这样配置的另一个好处是你可以将某些数据库表放在一个单独的存储设备。这可以大大提升你磁盘的 I/O 负载。

innodb_data_home_dir = /data/mysql InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。

innodb_data_file_path = ibdata1:10M:autoextend 用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。

innodb_log_group_home_dir = /data/mysql 用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下,InnoDB驱动程序将使用 MySQL数据目录作为自己保存日志文件的位置。

innodb_buffer_pool_size = 128M 这个参数是InnoDB存储引擎的核心参数,默认为128KB,这个参数要设置为物理内存的60%~70%。

innodb_log_file_size = 32M 事务日志文件写操作缓存区的最大长度(默认设置是1MB)。

innodb_log_buffer_size = 8M 事务日志所使用的缓存区。InnoDB在写事务日志的时候,为了提高性能,先将信息写入Innodb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)时,再将日志写到文件(或者同步到磁盘)中。可以通过innodb_log_buffer_size参数设置其可以使用的最大内存空间。默认是8MB,一般为16~64MB即可。

innodb_flush_log_at_trx_commit = 1 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日 志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。

innodb_lock_wait_timeout = 50 如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。

示例:内存4G的my.cnf配置

[client]
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
user    = mariadb
basedir = /usr/local/mariadb
datadir = /data/mysql
log_error = /data/mysql/mariadb.err
pid-file = /data/mysql/mariadb.pid
skip-external-locking
key_buffer_size = 64M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
net_buffer_length = 8K
read_buffer_size = 1M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 16M
thread_cache_size = 32
query_cache_size = 32M
tmp_table_size = 64M

explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id   = 1
expire_logs_days = 10

default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_data_home_dir = /data/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/mysql
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 1M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

使用sysbench测试mariadb性能的经验总结

github地址: https://github.com/akopytov/sysbench
我测试用的系统: CentOS Linux release 7.2.1511 (Core)
sysbench版本用了最新的, 1.1.0
过程中也搜了很多教程, 所以重复的就不多说, 主要说一下教程中没看到的或不够清楚的

1. 安装

安装可以用yum也可以自己下下来编译, 我两种都尝试了一下, 自己编译注意看情况指定–with-mysql-includes和 –with-mysql-libs, 比如:

./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib

如果是上面这种方式编译安装的, 将会只带mysql驱动, 跑测试的时候就不用指定 –db-driver

如果是yum安装的, 默认除了mysql还会带一个PostgreSQL的驱动, 就得指定 –db-driver=mysql, 否则会报错提示没指定驱动啥的

带了哪些驱动可以从sysbench –help里看到

2. 跑测试

勤看帮助。

sysbench –help的最上面是通用选项, 主要用到的比如线程数(–threads), 限制跑多久(–time), 跑多少次事件(–events)
sysbench –help的最后, 可以看到自带的测试方式有这些, 这就是–test=后面可以带的参数

Compiled-in tests:
  fileio - File I/O test
  cpu - CPU performance test
  memory - Memory functions speed test
  threads - Threads subsystem performance test
  mutex - Mutex performance test

基础用法(help, prepare, run, cleanup)参考github页面

想测数据库的, 一开始可能会有点懵逼, 因为这里没看到测试数据库的参数, 网上教程大都是旧的, 按那些填也没用, 而github主页上好像也没找到说明?

我也蛋疼了好一会儿, –help和github主页看了无数遍, 终于才在github主页最上面瞄到这个:

未分类

我tm也是醉了, 这里一般都当作介绍区域看一眼就跳过了, 谁会想到唯一能找到使用方式的线索在这里???

所以搜一下这个oltp_.lua吧, find / -name oltp_.lua, 会列出一堆lua脚本, 选择你要测的直接复制完整路径作为参数传给–test, 然后其他一堆参数该填的填, 就可以跑起来了

要注意的主要是这个参数–rand-type=, 这里官网给了可选的范围: {uniform, gaussian, special, pareto, zipfian}, 其他几个还能勉强看出是一些数学分布, uniform和special完全不知道是干什么的, uniform只知道有个统一的意思, 并不能确定, 搜也搜不到, 于是提了个issue问了一下:

未分类

好吧原来uniform就是离散均匀分布, 简单来说就是普通随机, special如作者所说,是不科学的,但它又是默认值……(还能说啥,前面的白测了_(:з」∠)
(简单对比了一下uniform和special, special测出来的性能大致是uniform的1.7倍)

3. 各lua脚本的区别

虽然没写过lua, 不过打开脚本看看基本能看出来, 我只测了下面三个(下列为后缀), 它们分别干的事是:

•  insert:, 即为纯insert
•  read_write 包括:  select (range, sum, order, distinct) ,  update,  update(non-index),  delete
•  read_only: select (range, sum, order, distinct)

--range_selects 参数决定select是否是仅单点 (只使用where=,而不使用上面括号中条件)

4. 其他

注意帮助最后一句写的See ‘sysbench help’ for a list of options for each test.
所以要看参数的话就是 sysbench xx.lua help, 可以看到参数用来设置测试用的表数量, 表大小之类的

自己撸了个python脚本测insert(主要是为了测别的), 用了sqlalchemy, 性能和测试脚本差距比较大…

我是三台虚拟机做了galera分布式集群的, 实测发现单节点跑测试时其他节点cpu也会飚起来, 所以就不贴结果了, 可能参考性不够强.

编译安装MariaDB

环境centOS6.9 MariaDB10.1.8

1、环境准备

yum -y install ncurses-devel 
yum -y install gcc-c++

2、介质准备

mariadb10.1.8,cmake3.8.2

3、安装cmake

tar xfz cmake-3.8.2.tar.gz
    cd cmake-3.8.2
    ./bootstrap
    make
    make install
    cmake --version

4、创建用户和组、数据目录

groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /home/data/mariadbdata
chown -R mysql:mysql /home/data/mariadbdata

5、解压、编译安装

tar xfz mariadb-10.1.8.tar.gz
cd mariadb-10.1.8

cmake . -DCMAKE_INSTALL_PREFIX=/home/opt/mariadb -DMYSQL_DATADIR=/home/date/mariadbdata -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

make
make install

6、安装数据库,配置my.cnf

cp -pv /home/opt/mariadb/support-files/my-innodb-heavy-4G.cnf /home/opt/mariadb/my.cnf
scripts/mysql_install_db --defaults-file=${INSTALL_DIR}/my.cnf --user=mysql --basedir=/home/opt/mariadb --datadir=/home/date/mariadbdata

7、配成Linux服务(名称mariadb)

cp -pv ${INSTALL_DIR}/support-files/mysql.server /etc/init.d/mariadb
chkconfig --add /etc/init.d/mariadb
chkconfig --list mariadb
service mariadb start

Linux之mariaDB的应用(论坛的搭建)

在mariadb的学习后,可以简单搭建一个论坛;
由于我之前已经下载了论坛文件的压缩包,这里就直接使用了

(1)下载模板Discuz_X3.2_SC_UTF8.zip

未分类

(2)解压包Discuz_X3.2_SC_UTF8.zip ##有readme,upload,utility,database四个目录

未分类

(3)cp -r upload/ /var/www/html/ ##把解压出来的upload目录复制到/var/www/html/

未分类

(4)chmod 777 /var/www/html/upload/* -R ##给目录下所有文件权限

未分类

测试:地址栏:IP/upload ##进行安装

未分类

安装

未分类

设置管理员用户密码

未分类

登录

未分类

主页

未分类

每一步都有提示,按提示安装

curl  -I   域名    域名         ##查看网站详情

baidu:

未分类

网易邮箱163:服务器采用nginx(俄罗斯的)

未分类

MariaDB基本命令

MariaDB名称来自Michael Widenius的女儿Maria的名字。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

1. 数据库安装并初始化

yum install mariadb-server.x86_64 -y    ##安装数据库
systemctl start mariadb         ##开启数据库服务
netstat -antlupe|grep mysql     ##查看数据库的接口信息
mysql                   ##测试能否打开数据库
vim /etc/my.cnf             ##关闭数据库对外接口
    skip-networking=1       ##在第6行添加命令(跳过网络服务)
:wq
systemctl restart mariadb       ##重启服务
netstat -antlupe|grep mysql     ##此时查看数据库端口已经关闭
mysql_secure_installation       ##数据库初始化,这里我们输入密码后全部选择y

2. MYSQL基本操作指令

mysql -uroot -p123  ##进入数据库(这里不要养成习惯因为输入密码时明文的)

1)查看****重点内容

show databases;                 ##显示数据库
use mysql;                  ##进入数据库
show tables;                    ##显示数据库中的表
select * from mysql.user;           ##查询mysql库下的user表中的数据
desc user;                  ##查看user表的数据结构
flush privileges;               ##刷新数据库信息
select host,user,password from user;        ##查询user表中的host,user,password字段
select host,user,password from user where host="::1"##查询表中字段中有关::1的数据

未分类

未分类

2)创建

create database westos;             ##创建westos数据库
use westos;                 ##进入westos数据库
create table linux(             ##创建表,user,passwd字段
user varchar(15) not null,
passwd varchar(15) not null             ##varchar可变型字符变量
 );
insert into linux values ('student','student');     ##在linux表中插入值为student student
select * from linux;                    ##查询linux中的数据

未分类

未分类

3)更改

alter table linux rename messages;          ##将linux表重命名为messages
alter table linux add age varchar(4);           ##添加age字段到linux表中
ALTER TABLE linux DROP age;             ##删除age字段
ALTER TABLE linux ADD age VARCHAR(5) AFTER name;    ##在name字段后添加字段age
ALTER TABLE linux ADD age VARCHAR(5)            
update linux set password=student where username=student;##更新linux表中user1的密码为password2

4)删除

delete from linux where username=user1;         ##删除linux表中user1的所有内容
drop table linux;                   ##删除linux表
drop database westos;                   ##删除westos数据库

5)用户授权

CREATE USER lee@localhost identified by 'lee';      ##创建用户lee密码为lee
grant select insert on  *.* to lee@localhost;   ##授权user1 密码为passwd1只能在本地 查询数据库的所以内容 
grant all on mysql.* to lee@'%' identified by 'lee2';   ##授权user2 密码为passwd2  可以从远程任意主机登录mysql 并且可以对mysql数据库任意操作
show grants for lee@localhost;          ##查看已经修改的权限;        
revoke insert on *.* from lee@localhost;    ##删除掉用户lee的添加数据权限;

6)备份

/var/lib/mysql
mysqldump -uroot -p123 westos > /mnt/mysql.sql  ##备份mysql库到mysql.bak
mysql -uroot -p123 -e "DROP database westos"
mysql -uroot -p123 westos < /mnt/mysql.sql      ##恢复mysql.bak 到westos库

7)mysql 密码恢复

/etc/init.d/mysqld stop
或者systemctl stop mariadb
mysqld_safe --skip-grant-tables &   ##跳过grant-tables授权表  不需要认证登录本地mysql数据库
update mysql.user set password=password('westos') where user='root';    ##更新mysql.user 表中条件为root用户的密码为加密westos
修改完成后
ps aux|grep mysql
kill -9 +端口号 结束所有关于mysql的进程
systemctl start mysql 

3. php-mysq

@@php -m 可以查看php所支持的服务,因为本身默认不支持mysql
所以需要安装php-mysql模块才能使用@@
phpmyadmin

yum install php php-mysql httpd mysql mysql-server  ##安装需要的服务
tar jxf phpmyadmin-*.tar.bz2 -C /var/www/html       ##将下载好的东西解压
mv phpmyadmin phpadmin                  ##重命名
cp config.sample.inc.php config.inc.php         ##复制文件
vim config.inc.php                  ##php3.4版本不需要
add 
$cfg['blowfish_secret'] = 'test';
/etc/init.d/httpd start

测试:http://172.25.254.117/phpadmin

未分类

未分类

4. discuz论坛建立

下载DISCUZ压缩包

unzip解压
cp -r upload /var/www/html/
chomd 777 /var/www/html/upload/* -R

测试:http://172.25.254.117/upload

未分类

LVM之Cache加速

概述

我们知道LVM是管理本地磁盘,更好的提供块设备服务的机制;

在现实环境中,我们的机器通常都有几种不同类型的磁盘存在,高性能的磁盘容量低,容量大的磁盘性能差,那如何利用Linux系统的各种cache机制来提升LVM卷的性能呢?

存储磁盘分类

通常我们使用的存储磁盘有三种,分别对应不同的容量、性能、价格,有:SATA盘,SSD盘和PCIE-SSD;

他们三个的大致性能容量和价格如下表所示:

未分类

从上面可以看出,可以作为普通磁盘加速的磁盘有:SSD盘和PCIE-SSD,其中SSD盘是最常见和用的最多的,PCIE卡在超高性能需求场所有使用。

注:其实现在SSD/PCIE-SSD的每GB价格相差不大了,若对超高性能有需求,PCIE-SSD是个很好的选择;

Cache算法

通常我们使用高性能磁盘来加速低性能磁盘时,都会选择一种Linux内核支持的Cache算法,现在Linux内核支持的常用Cache算法有如下几种;

flashcache

flashcache 是 facebook 开源的 ssd 存储产品,它基于内核的 devicemapper 机制,允许将 ssd 设备映射为机械存储设备的缓存,堆叠成为一个虚拟设备供用户读写,从而在一定程度上兼顾 ssd 的高速与机械存储设备的高容量,更加经济高效地支撑线上业务。

flashcache 支持三种缓存策略:

  • 回写(Write Back):修改内容之后,并不立即写入后端设备
  • 写透(Write Through): 修改内容时写入后端设备,同时也更新前端设备中的缓存块
  • 环写(Write Around): 修改内容时,先写入后端设备,同时使前端设备中对应的缓存块失效

参考:

https://github.com/facebookarchive/flashcache

https://en.wikipedia.org/wiki/Flashcache

bcache

bcache是linux内核块设备层cache,类似于flashcache使用ssd作为hdd的缓存方案,相比于flashcache,bcache更加灵活,支持ssd作为多块hdd的共享缓存,并且还支持多块ssd(还未完善),能够在运行中动态增加,删除缓存设备和后端设备。

从3.10开始,bcache进入内核主线。bcache支持writeback、writethrough、writearoud三种策略,默认是wriththrough,可以动态修改,缓存替换方式支持lru、fifo和random三种。

参考:

https://bcache.evilpiepirate.org/

http://www.sysnote.org/2014/06/20/bcache-analysis/

dm-cache

作为linux内核的一部分,dm-cache采用device mapper机制允许用户建立混合卷。dm-cache可以采用一个或多个快速设备为后端慢速存储系统扮演缓存的角色。

dm-cache设计成由3个物理存储设备来混合成一个逻辑卷的形式。操作模式和缓存策略决定了缓存数据的性能。这三个物理设备分别为:

  • 原始设备:提供主要的慢速存储(通常是一个硬盘或者SAN)
  • 缓存设备:提供高速原始设备数据的缓存(通常是一个SSD)
  • 元数据设备:记录硬盘块在缓存中的位置,脏标志以及执行缓存策略所需的内部数据

dm-cache支持写回,写通和旁路三种模式。

参考:

https://en.wikipedia.org/wiki/Dm-cache

LVM加速策略

flashcache

基于flashcache的使用策略(SSD-SATA 1对1),我们有如下策略:

未分类

bcache

bcache可以用一块SSD盘做多个SATA盘的缓存,有如下策略:

未分类

LVM自带Cache策略

LVM自带Cache策略可以配置两个LV之间做缓存,有如下策略:

未分类

LVM Cache策略选择

现实中,考虑稳定性和可靠性,使用flashcache作为Cache策略的比较多。

但最近bcache也越来越得到大范围的使用,在某些测试报告中,其性能多数场景优于flashcache。

逻辑卷管理(LVM)的创建与使用

未分类

我想告诉你的是,当 LVM (逻辑卷管理)首次出现在 Fedora Linux 中时,我是非常抗拒它的。我最初的反应是,我并不需要在我和我的设备之间有这种额外的抽象层。结果是我错了,逻辑卷管理是非常有用的。

管理磁盘空间对系统管理员来说是一件重要的日常工作。一旦磁盘空间耗尽就需要进行一系列耗时而又复杂的任务,以提升磁盘分区中可用的磁盘空间。它也需要系统离线才能处理。通常这种任务会涉及到安装一个新的硬盘、引导至恢复模式或者单用户模式、在新硬盘上创建一个分区和一个文件系统、挂载到临时挂载点去从一个太小的文件系统中移动数据到较大的新位置、修改 /etc/fstab 文件的内容来反映出新分区的正确设备名、以及重新引导来重新挂载新的文件系统到正确的挂载点。

我想告诉你的是,当 LVM (逻辑卷管理)首次出现在 Fedora Linux 中时,我是非常抗拒它的。我最初的反应是,我并不需要在我和我的设备之间有这种额外的抽象层。结果是我错了,逻辑卷管理是非常有用的。
LVM 让磁盘空间管理非常灵活。它提供的功能诸如在文件系统已挂载和活动时,很可靠地增加磁盘空间到一个逻辑卷和它的文件系统中,并且,它也允许你将多个物理磁盘和分区融合进一个可以分割成逻辑卷(LV)的单个卷组(VG)中。

卷管理也允许你去减少分配给一个逻辑卷的磁盘空间数量,但是,这里有两个要求,第一,卷必须是未挂载的。第二,在卷空间调整之前,文件系统本身的空间大小必须先被减少。

有一个重要的提示是,文件系统本身必须允许重新调整大小的操作。当重新提升文件系统大小的时候,EXT2、3 和 4 文件系统都允许离线(未挂载状态)或者在线(挂载状态)重新调整大小。你应该去认真了解你打算去调整的文件系统的详细情况,去验证它们是否可以完全调整大小,尤其是否可以在线调整大小。

即时扩展一个文件系统

在我安装一个新的发行版到我的生产用机器中之前,我总是喜欢在一个 VirtualBox 虚拟机中运行这个新的发行版一段时间,以确保它没有任何的致命的问题存在。在几年前的一个早晨,我在我的主要使用的工作站上的虚拟机中安装了一个新发行的 Fedora 版本。我认为我有足够的磁盘空间分配给安装虚拟机的主文件系统。但是,我错了,大约在安装到三分之一时,我耗尽了我的文件系统的空间。幸运的是,VirtualBox 检测到了磁盘空间不足的状态,并且暂停了虚拟机,然后显示了一个明确指出问题所在的错误信息。

请注意,这个问题并不是虚拟机磁盘太小造成的,而是由于宿主机上空间不足,导致虚拟机上的虚拟磁盘在宿主机上的逻辑卷中没有足够的空间去扩展。

因为许多现在的发行版都缺省使用了逻辑卷管理,并且在我的卷组中有一些可用的空余空间,我可以分配额外的磁盘空间到适当的逻辑卷,然后即时扩展宿主机的文件系统。这意味着我不需要去重新格式化整个硬盘,以及重新安装操作系统或者甚至是重启机器。我不过是分配了一些可用空间到适当的逻辑卷中,并且重新调整了文件系统的大小 —— 所有的这些操作都在文件系统在线并且运行着程序的状态下进行的,虚拟机也一直使用着宿主机文件系统。在调整完逻辑卷和文件系统的大小之后,我恢复了虚拟机的运行,并且继续进行安装过程,就像什么问题都没有发生过一样。

虽然这种问题你可能从来也没有遇到过,但是,许多人都遇到过重要程序在运行过程中发生磁盘空间不足的问题。而且,虽然许多程序,尤其是 Windows 程序,并不像 VirtualBox 一样写的很好,且富有弹性,Linux 逻辑卷管理可以使它在不丢失数据的情况下去恢复,也不需要去进行耗时的安装过程。

LVM 结构

逻辑卷管理的磁盘环境结构如下面的图 1 所示。逻辑卷管理允许多个单独的硬盘和/或磁盘分区组合成一个单个的卷组(VG)。卷组然后可以再划分为逻辑卷(LV)或者被用于分配成一个大的单一的卷。普通的文件系统,如 EXT3 或者 EXT4,可以创建在一个逻辑卷上。

在图 1 中,两个完整的物理硬盘和一个第三块硬盘的一个分区组合成一个单个的卷组。在这个卷组中创建了两个逻辑卷和文件系统,比如,可以在每个逻辑卷上创建一个 EXT3 或者 EXT4 的文件系统。

未分类
图 1: LVM 允许组合分区和整个硬盘到卷组中

在一个主机上增加磁盘空间是非常简单的,在我的经历中,这种事情是很少的。下面列出了基本的步骤。你也可以创建一个完整的新卷组或者增加新的空间到一个已存在的逻辑卷中,或者创建一个新的逻辑卷。

增加一个新的逻辑卷

有时候需要在主机上增加一个新的逻辑卷。例如,在被提示包含我的 VirtualBox 虚拟机的虚拟磁盘的 /home 文件系统被填满时,我决定去创建一个新的逻辑卷,以存储包含虚拟磁盘在内的虚拟机数据。这将在我的 /home 文件系统中释放大量的空间,并且也允许我去独立地管理虚拟机的磁盘空间。

增加一个新的逻辑卷的基本步骤如下:

☉ 如有需要,安装一个新硬盘。
☉ 可选: 在硬盘上创建一个分区。
☉ 在硬盘上创建一个完整的物理卷(PV)或者一个分区。
☉ 分配新的物理卷到一个已存在的卷组(VG)中,或者创建一个新的卷组。
☉ 从卷空间中创建一个新的逻辑卷(LV)。
☉ 在新的逻辑卷中创建一个文件系统。
☉ 在 /etc/fstab 中增加适当的条目以挂载文件系统。
☉ 挂载文件系统。

为了更详细的介绍,接下来将使用一个示例作为一个实验去教授关于 Linux 文件系统的知识。

示例

这个示例展示了怎么用命令行去扩展一个已存在的卷组,并给它增加更多的空间,在那个空间上创建一个新的逻辑卷,然后在逻辑卷上创建一个文件系统。这个过程一直在运行着和已挂载的文件系统上执行。

警告:仅 EXT3 和 EXT4 文件系统可以在运行和挂载状态下调整大小。许多其它的文件系统,包括 BTRFS 和 ZFS 是不能这样做的。

安装硬盘
如果在系统中现有硬盘上的卷组中没有足够的空间可以增加,那么可能需要去增加一块新的硬盘,然后创建空间增加到逻辑卷中。首先,安装物理硬盘,然后,接着执行后面的步骤。

从硬盘上创建物理卷
首先需要去创建一个新的物理卷(PV)。使用下面的命令,它假设新硬盘已经分配为 /dev/hdd。

pvcreate /dev/hdd

在新硬盘上创建一个任意分区并不是必需的。创建的物理卷将被逻辑卷管理器识别为一个新安装的未处理的磁盘或者一个类型为 83 的 Linux 分区。如果你想去使用整个硬盘,创建一个分区并没有什么特别的好处,而且元数据所用的磁盘空间也能用做 PV 的一部分使用。

扩展已存在的卷组
在这个示例中,我将扩展一个已存在的卷组,而不是创建一个新的;你可以选择其它的方式。在物理磁盘已经创建之后,扩展已存在的卷组(VG)去包含新 PV 的空间。在这个示例中,已存在的卷组命名为:MyVG01。

vgextend /dev/MyVG01 /dev/hdd

创建一个逻辑卷
首先,在卷组中从已存在的空余空间中创建逻辑卷。下面的命令创建了一个 50 GB 大小的 LV。这个卷组的名字为 MyVG01,然后,逻辑卷的名字为 Stuff。

lvcreate -L +50G --name Stuff MyVG01

创建文件系统
创建逻辑卷并不会创建文件系统。这个任务必须被单独执行。下面的命令在新创建的逻辑卷中创建了一个 EXT4 文件系统。

mkfs -t ext4 /dev/MyVG01/Stuff

增加一个文件系统卷标
增加一个文件系统卷标,更易于在文件系统以后出现问题时识别它。

e2label /dev/MyVG01/Stuff Stuff

挂载文件系统
在这个时候,你可以创建一个挂载点,并在 /etc/fstab 文件系统中添加合适的条目,以挂载文件系统。
你也可以去检查并校验创建的卷是否正确。你可以使用 df、lvs 和 vgs 命令去做这些工作。

在 LVM 文件系统中调整逻辑卷大小

从 Unix 的第一个版本开始,对文件系统的扩展需求就一直伴随,Linux 也不例外。随着有了逻辑卷管理(LVM),现在更加容易了。

☉ 如有需要,安装一个新硬盘。
☉ 可选: 在硬盘上创建一个分区。
☉ 在硬盘上创建一个完整的物理卷(PV)或者一个分区。
☉ 分配新的物理卷到一个已存在的卷组(VG)中,或者创建一个新的卷组。
☉ 从卷空间中创建一个新的逻辑卷(LV),或者用卷组中部分或全部空间扩展已有的逻辑卷。
☉ 如果创建了新的逻辑卷,那么在上面创建一个文件系统。如果对已有的逻辑卷增加空间,使用 resize2fs 命令来增大文件系统来填满逻辑卷。
☉ 在 /etc/fstab 中增加适当的条目以挂载文件系统。
☉ 挂载文件系统。

示例

这个示例展示了怎么用命令行去扩展一个已存在的卷组。它会给 /Staff 文件系统增加大约 50GB 的空间。这将生成一个可用于挂载的文件系统,在 Linux 2.6 内核(及更高)上可即时使用 EXT3 和 EXT4 文件系统。我不推荐你用于任何关键系统,但是这是可行的,我已经成功了好多次;即使是在根(/)文件系统上。是否使用自己把握风险。

警告:仅 EXT3 和 EXT4 文件系统可以在运行和挂载状态下调整大小。许多其它的文件系统,包括 BTRFS 和 ZFS 是不能这样做的。

安装硬盘
如果在系统中现有硬盘上的卷组中没有足够的空间可以增加,那么可能需要去增加一块新的硬盘,然后创建空间增加到逻辑卷中。首先,安装物理硬盘,然后,接着执行后面的步骤。

从硬盘上创建物理卷
首先需要去创建一个新的物理卷(PV)。使用下面的命令,它假设新硬盘已经分配为 /dev/hdd。

pvcreate /dev/hdd

在新硬盘上创建一个任意分区并不是必需的。创建的物理卷将被逻辑卷管理器识别为一个新安装的未处理的磁盘或者一个类型为 83 的 Linux 分区。如果你想去使用整个硬盘,创建一个分区并没有什么特别的好处,而且元数据所用的磁盘空间也能用做 PV 的一部分使用。

增加物理卷到已存在的卷组
在这个示例中,我将使用一个新的物理卷来扩展一个已存在的卷组。在物理卷已经创建之后,扩展已存在的卷组(VG)去包含新 PV 的空间。在这个示例中,已存在的卷组命名为:MyVG01。

vgextend /dev/MyVG01 /dev/hdd

扩展逻辑卷
首先,在卷组中从已存在的空余空间中创建逻辑卷。下面的命令创建了一个 50 GB 大小的 LV。这个卷组的名字为 MyVG01,然后,逻辑卷的名字为 Stuff。

lvcreate -L +50G --name Stuff MyVG01

扩展文件系统
如果你使用了 -r 选项,扩展逻辑卷也将扩展器文件系统。如果你不使用 -r 选项,该操作不行单独执行。下面的命令在新调整大小的逻辑卷中调整了文件系统大小。

resize2fs /dev/MyVG01/Stuff

你也可以去检查并校验调整大小的卷是否正确。你可以使用 df、lvs 和 vgs 命令去做这些工作。

提示

过去几年来,我学习了怎么去做让逻辑卷管理更加容易的一些知识,希望这些提示对你有价值。

◈ 除非你有一个明确的原因去使用其它的文件系统外,推荐使用可扩展的文件系统。除了 EXT2、3、和 4 外,并不是所有的文件系统都支持调整大小。EXT 文件系统不但速度快,而且它很高效。在任何情况下,如果默认的参数不能满足你的需要,它们(指的是文件系统参数)可以通过一位知识丰富的系统管理员来调优它。
◈ 使用有意义的卷和卷组名字。
◈ 使用 EXT 文件系统标签

我知道,像我一样,大多数的系统管理员都抗拒逻辑卷管理。我希望这篇文章能够鼓励你至少去尝试一个 LVM。如果你能那样做,我很高兴;因为,自从我使用它之后,我的硬盘管理任务变得如此的简单。

CentOS 7下如何配置KVM虚拟化环境

KVM是一个开源的虚拟化模块,是基于硬件的完全虚拟化,所以需要硬件的支持。废话不多说,操作步骤如下:

0x01 硬件检测

$ egrep '(vmx|svm)' /proc/cpuinfo   ##检测CPU是否支持虚拟化

如果输出的结果包含vmx,则是Intel处理器虚拟机技术标志;如果包含SVM,则是AMD处理器虚拟机技术的标志;如果什么都没有,则需要在BISO中开启VT(Virtual Technolege)功能。

0x02 软件包安装

$ yum -y install kvm python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tools virt-viewer

安装完成后,检查kvm模块有没有加载上

$  lsmod |grep kvm   ##有输出类似下面结果则正常

kvm_intel 148081 0

kvm 461126 1 kvm_intel

0x03 创建网桥

1、创建br0文件

$ cp ifcfg-eth0 ifcfg-br0  ##如果管理IP配置再eth0,则这就复制一个br0即可

2、编辑br0

TYPE=Bridge

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

DEVICE=br0

ONBOOT=yes

IPADDR=192.168.2.10

NETMASK=255.255.255.0

GATEWAY=192.168.2.1

3、编辑eth0

TYPE=Ethernet

BOOTPROTO=none

NM_CONTROLLED=no

NAME=eth0

DEVICE=eth0

BRIDGE=br0

ONBOOT=yes

配置完成后重启下机器,查看下网桥状态

$ brctl show

bridge name bridge id STP enabled interfaces

br0 8000.90b11c5a7c89 no eth0

virbr0 8000.5254000908ac yes virbr0-nic

至此,KVM环境配置完成。可以创建虚拟机尽情玩耍了。

修改kvm虚拟机镜像文件大小

1、查看kvm镜像的格式信息

[root@base-12-199 bakup]# qemu-img info 10.1.12.201_base-12-201
image: 10.1.12.201_base-12-201
file format: qcow2
virtual size: 200G (214748364800 bytes)
disk size: 88G
cluster_size: 65536

2、给镜像增加100G空间

[root@base-12-199 bakup]# qemu-img resize 10.1.12.201_base-12-201 +100G
Image resized.
[root@base-12-199 bakup]# qemu-img info 10.1.12.201_base-12-201
image: 10.1.12.201_base-12-201
file format: qcow2
virtual size: 300G (322122547200 bytes)
disk size: 88G
cluster_size: 65536

3、给镜像减少100G空间

qcow2格式降低空间

[root@base-12-199 bakup]# qemu-img resize 10.1.12.201_base-12-201-- -100G
This image format does not support resize

由于qcow2格式不支持空间减少,所以要使用raw格式。

[root@base-12-199 bakup]# qemu-img convert -O raw 10.1.12.201_base-12-201 10.1.12.201_base-12-201.raw

查看镜像信息

[root@base-12-199 bakup]# qemu-img info 10.1.12.201_base-12-201.raw
image: 10.1.12.201_base-12-201.raw
file format: raw
virtual size: 300G (429496729600 bytes)
disk size: 88G
[root@base-12-199 bakup]# qemu-img resize 10.1.12.201_base-12-201.raw -- 100G
Image resized.
[root@base-12-199 bakup]# qemu-img info 10.1.12.201_base-12-201.raw
image: 10.1.12.201_base-12-201.raw
file format: raw
virtual size: 200G (214748364800 bytes)
disk size: 88G

转换为qcow2

[root@base-12-199 bakup]# qemu-img convert -O qcow2 10.1.12.201_base-12-201.raw 10.1.12.201_base-12-201.qcow2
[root@base-12-199 bakup]# qemu-img info 10.1.12.201_base-12-201.qcow2
image: 10.1.12.201_base-12-201.qcow2
file format: qcow2
virtual size: 200G (214748364800 bytes)
disk size: 88G

Centos7.4安装kvm虚拟机(使用virt-manager管理)

之前介绍了使用WebVirtMgr或Openstack来部署及管理kvm虚拟机,下面简单介绍centos7.4下使用virt-manager部署及管理kvm虚拟机的做法:

0)KVM是什么

KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心
源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm
还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的
完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配
器等。

KVM和QEMU的关系
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT)
, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了
另一个独立的虚拟化解决方案:KVM+QEMU。

1)kvm相关安装包及其作用

qemu-kvm          主要的KVM程序包
python-virtinst   创建虚拟机所需要的命令行工具和程序库
virt-manager      GUI虚拟机管理工具
virt-top          虚拟机统计命令
virt-viewer       GUI连接程序,连接到已配置好的虚拟机
libvirt           C语言工具包,提供libvirt服务
libvirt-client    虚拟客户机提供的C语言工具包
virt-install      基于libvirt服务的虚拟机创建命令
bridge-utils      创建和管理桥接设备的工具

2)centos7安装VNC环境

请参考:http://www.cnblogs.com/kevingrace/p/5821450.html

3)安装kvm

1)检查cpu是否支持虚拟化
[root@kevin ~]# grep vmx /proc/cpuinfo
如果有vmx信息输出,就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。


2)确保BIOS里开启虚拟化功能,即查看是否加载KVM模块
[root@kevin ~]# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
=========================================================
如果没有加载,运行以下命令:
[root@kevin ~]# modprobe kvm
[root@kevin ~]# modprobe kvm-intel
[root@kevin ~]# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
=========================================================

内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。
[root@kevin ~]# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月  29 11:56 /dev/kvm


3)桥接网络
如果没有brctl命令(用来管理网桥的工具),则需要安装bridge-utils ,
[root@kevin ~]# yum -y install bridge-utils
[root@kevin ~]# systemctl restart network

配置KVM的网桥模式
[root@kevin ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# cp ifcfg-eno1 ifcfg-br0
[root@openstack network-scripts]# cat ifcfg-br0
TYPE="Bridge"                                        //这一行修改为Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"                                           //修改设备名称为br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"         //这一行注释
DEVICE="br0"                                         //修改设备为br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"

[root@openstack network-scripts]# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0                                           //添加这一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210"                          //注释掉这几行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"

重启网卡服务
[root@openstack network-scripts]# systemctl restart network

查看网卡
[root@openstack network-scripts]# brctl show
bridge name bridge id   STP enabled interfaces
br0   8000.0894ef518b22 no    eno1
virbr0    8000.52540095d7c2 yes   virbr0-nic

查看ip信息
[root@openstack network-scripts]# ifconfig |head -20
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.210  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::a94:efff:fe51:8b22  prefixlen 64  scopeid 0x20<link>
        ether 08:94:ef:51:8b:22  txqueuelen 1000  (Ethernet)
        RX packets 856  bytes 52981 (51.7 KiB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 120  bytes 23450 (22.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:94:ef:51:8b:22  txqueuelen 1000  (Ethernet)
        RX packets 10077  bytes 793083 (774.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1184  bytes 228415 (223.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16 

eno2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 08:94:ef:51:8b:23  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)


[root@openstack network-scripts]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=2.08 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=1.80 ms
........


4)安装libvirt及kvm
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
[root@kevin ~]#  yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64  libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64
libvirt-java.noarch  libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64  dbus-devel  virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst

由于要用virt-manager图形化安装虚拟机,所以还需要安装X-window(这个在前面部署VNC环境里就已经安装了)
[root@kevin ~]# yum groupinstall "X Window System"

安装中文字符,解决界面乱码问题
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"

启用libvirt
[root@kevin ~]# systemctl enable libvirtd
[root@kevin ~]# systemctl start libvirtd

4)使用virt-manager管理kvm(通过VNC连接服务器)

提前将ISO系统镜像存放到服务器的一个目录里,比如/data/iso

[root@openstack ~]# mkdir /data/iso
[root@openstack ios]# ll
总用量 3356384
-rw-r--r--. 1 qemu qemu 3436937216 1月  29 11:41 win-server2008_R2.iso

未分类

未分类

未分类

未分类

未分类

未分类

5)解决KVM虚拟机在使用vnc连接时鼠标不同步的问题

在VNC界面中感觉virt-manager管理的虚拟机界面总是鼠标跟不上,指到哪儿也看不出来,界面上一直显示press control_l+a/t_l来移动鼠标!十分郁闷!
想要修改鼠标和宿主机界面同步方法如下:

[root@openstack ~]# cd /etc/libvirt/qemu
[root@openstack qemu]# ls
networks  test-win2008.xml
[root@openstack qemu]# cp test-win2008.xml /opt/
[root@openstack qemu]# vim test-win2008.xml               //在<devices>标签中添加下面这段配置
<devices>   
......                                      
  <input type='tablet' bus='usb'/>                        //即添加这句话即可!
......    
</devices>

[root@openstack qemu]# virsh define /etc/libvirt/qemu/test-win2008.xml
定义域 test-win2008(从 /etc/libvirt/qemu/test-win2008.xml)

然后重启虚拟机后,发现虚拟机中的鼠标就会好事了,打开VNC查看虚拟机界面后默认情况下虚拟机中的鼠标指针和实体机的鼠标指针就是重合的,且两者运动速度也是同步的,
这下就彻底解决了鼠标指针漂移/不同步的情况了!

6)重定向USB设备

(即将宿主机上的USB设备指定到目标虚拟机上)。适合挂载银行前置机设备!

先将USB设备插到宿主机上,接着在virt-manager界面里打开虚拟机,然后虚拟机界面上栏里打开”虚拟机”->”重定向USB设备(R)”。(特别注意:如下选择将usb设备挂载到虚拟机上后,不要关闭这个挂载界面,否则usb挂载动作就会结束!)

未分类

未分类

查看虚拟机,发现指定的USB设备已经挂载到该虚拟机上了!

未分类

如果要卸载该虚拟机上挂载的这个USB设备,即在”重定向设备usb(R)”里将这个USB设备去掉,然后”确定”即可!

未分类

未分类