欢迎光临
我们一直在努力

mdadm创建软raid 0并创建lvm

u22e阅读(668)

1.创建raid0:

指定riad级别、磁盘数量和使用的磁盘

mdadm  --create /dev/md0 --level=0 --raid-devices=8 /dev/sd[c-j]
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

2.从磁盘创建PV

[root@mongodb1 tianqi]# pvcreate /dev/md0
Physical volume “/dev/md0 successfully created

3.创建VG

[root@mongodb1 tianqi]# vgcreate VG1 /dev/md0
Volume group VG1 successfully created

4.创建lv并使用全部的空间

[root@mongodb1 tianqi]# lvcreate -l 100%FREE -n LV1 VG1
Logical volume LV1 created.

5.查看创建的lv

[root@mongodb1 tianqi]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LV1 VG1 -wi-a—– 399.75g

6.创建配置文件,否则重启系统后raid可能会丢失

[root@mongodb1 tianqi]# echo DEVICE /dev/sd[c-j] > /etc/mdadm.conf
[root@mongodb1 tianqi]# mdadm -Ds >> /etc/mdadm.conf

7.查看生成的配置文件:

[root@mongodb1 tianqi]# cat /etc/mdadm.conf
DEVICE /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj
ARRAY /dev/md0 metadata=1.2 name=mongodb1:0 UUID=037701ed:533c2d74:119d2da2:f2fec1af

8.格式化lv:
[root@mongodb1 tianqi]# mkfs.ext4 /dev/mapper/VG1-LV1

9.设置开机自动挂载磁盘:

[root@mongodb1 tianqi]# blkid  /dev/VG1/LV1 #计算UUID,这样不会因磁盘名称发生变化而导致开机挂载失败
/dev/VG1/LV1: UUID=”5940e6fa-6aae-449e-aff7-673c5b689386 TYPE=”ext4
[root@mongodb1 tianqi]# mkdir /mongodb #挂载目录
[root@mongodb1 tianqi]# vim /etc/fstab #编辑fstab文件,添加下面一行
UUID=”5940e6fa-6aae-449e-aff7-673c5b689386 /mongodb ext4 defaults 0 0
[root@mongodb1 tianqi]# mount -a #执行全部挂载

10.验证挂载:
[root@mongodb1 tianqi]# mount

计算机的启动流程

u22e阅读(494)

服务器或PC机从按下电源按钮开始,会首先进行自检流程,其实一个非常复杂的过程,只见屏幕上字幕乱飞,各种check和ok,那么其间究竟发生了什么事情呢?

启动又称为boot,而boot的原意为靴子,那么启动与靴子有什么关系呢?其实boot是boot是bootstrap(鞋带)的缩写,它来自于一句谚语:

 "pull oneself up by one's bootstraps"

意思为拉着自己的鞋带儿把自己拉起来,这肯定是不可能的事情,但是在早期PC还没有问世的时候,研发的工程师门用这句话来比喻计算机的开机流程是一个很复杂的过程,因为计算机要运行就得先运行程序,但是计算机还没有运行的时候又怎么运行程序呢?

所以工程师们要想尽各种办法,在计算机启动之前将一小段程序放进内存,然后计算机才能正常工作,所以工程师们把这个过程称为“拉鞋带儿(bootstraps)”,慢慢就习惯称为boot了。

下面开始介绍计算机的启动流程:

一:BIOS阶段:

在上世纪70年代初期,只读内存(read0only memory,缩写为ROM)问世,开机的第一个程序被预先写入到ROM内置芯片,当计算机通电后,第一件事情就是读取位于ROM中的程序,这个程序后来被叫做基本输入输出系统(basic input/output system),就是现在每台PC都有的BIOS。

1.1:加电自检:

BIOS启动后会首先进行硬件检测,即检测硬件是否满足计算机的启动条件,BIOS是计算机厂商在计算机出厂之前就写入到芯片的,因此每个厂商的BIOS还不尽相同,硬件自检称为(Poer-On Self-Test),缩写为POST,自检会检测内存、CPU、风扇、硬盘等信息,如果有硬件不符合要求会发出不同的声音进行提示,如果检测通过则会在屏幕输出硬件信息。

1.2 启动顺序:

在BIOS对硬件自检通过之后,BIOS会把启动控制权交给下一阶段的启动程序,下一阶段的启动程序需要进行提前设置,可以设置硬盘启动、光驱启动、网卡启动、USB启动等方式,BIOS会选择排在第一行的作为第一启动项,如下:

二:主引导阶段:

BISO安装预先设定好的启动顺序,将启动控制权交给排在第一位的存储设备。

然后计算机会读取该设备的第一个扇区512字节,叫做“主引导记录”(Master boot record,缩写为MBR),硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和分区有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,每个分区16个字节,所以只能有最多4个分区,硬盘中分区有多少以及每一分区的大小都记在其中,第三部分是magic number,占2个字节,固定为55AA,MBR是由安装操作系统时写入到硬盘里面的,它的主要功能是在开机从BIOS接到引导后,检测硬盘分区表是否完整,如果分区表有问题则会显示一个横杠在屏幕闪动或GRUB界面,然后在分附表中查找标记为活动的分区,并将活动分区的第一逻辑扇区装在到内存,将引导交予活动分区继续引导,MBR由系统引导代码段、分区表和有效标志组成,MBR分区表的最大可寻址的存储空间只有2Tb,当PC加电BIOS自检完毕后将控制权交给MBR中的引导代码段,由MBR代码加载操作系统完成启动过程,MBR信息不能存在于不可分区的媒介或高级分区,如软盘、LVM等分区中,是因为系统开机时没有相关驱动,无法识别有效的分区信息。

另外MBR信息是可以备份的,也建议将服务器的MBR信息备份一下,复制到安全的地方,以避免突然断电等非正常关机后导致MBR丢失而无法开机,以下方法可以将当前计算机的MBR进行提取:

dd if=/dev/sda of=/root/mbr bs=1 count=512
即从sda读取512个块,每个块大小为1字节,即512字节,也就是将整个MBR导出成mbr文件
文件导出后是二进制文件,是无法使用cat或vim等命令直接打开或编辑的,但是可以使用od命令查看
od命令常用参数:
-Ax :左边地址显示用十六进制显示
-tx1 :显示内容以十六进制显示,并以一个字节为一个显示单位

使用以下命令查看MBR信息:

[root@linux-node1 ~]# od -tx1 -Ax /root/mbr  
000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0
000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00
000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75
000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b
000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00
000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00
000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70
000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc
000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c
000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75
0000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89
0000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66
0000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd
0000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84
0000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88
0000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88
000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1
000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7
000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1
000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00
000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e
000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f
000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00
000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00
000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52
000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00
0001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 #以上为主引导程序(boot loader) 
0001b0 00 00 00 00 00 00 00 00 b1 d3 05 00 00 00 80 20 #第一个分区信息
0001c0 21 00 83 9f 06 19 00 08 00 00 00 40 06 00 00 9f #第二个分区信息,83为标准linix分区,这里是boot分区
0001d0 07 19 8e 98 79 1f 00 48 06 00 00 38 40 00 00 98 #第三个分区信息,8e是LVM分区
0001e0 7a 1f 8e fe ff ff 00 80 46 00 00 80 b9 09 00 00 #第四个分区信息
0001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa #55 aa为分区合法标志,表示磁盘可以引导系统启动,即有活动分区

#第一个分区表信息,从80开始到06结束,80表示可启动分区,20/21/00是开始磁头/开始扇区/开始柱面,第五字节83是分区信息,6第-8字节9f/06/19字节结束磁头/结束扇区/结束柱面,第9-12字节

00/08/00是分区前的隐藏扇区,是8个隐藏的扇区,是保护此分区表,第13-16字节00/00/40/06是分区大小总共的扇区。

第二个分区到第四个分区一次类推。

从备份恢复mbr的命令:

 dd if=/root/mbr of=/dev/sda bs=1 count=512

总结:

(1) 第1-446字节:调用操作系统的机器码。

(2) 第447-510字节:分区表(Partition table)。

(3) 第511-512字节:主引导记录签名(0x55和0xAA)。
在此阶段,启动引导会识别一个激活的主分区,并将下一步的引导交于主分区继续进行启动引导,这样就到了第三阶段。

三、第三阶段:硬盘启动

计算机在 上一个阶段读取了主引导记录前面的446字节的引导代码之后,会运行事先安装在此分区的“启动管理器(boot loader)”,由用户选择启动的操作系统,在linux RHEL 7版本之前,通常是Grub引导,由此将控制权交给操作系统继续引导,如下:

四、第四阶段:操作系统

控制权转交给操作系统后,操作系统的内核vmlinuz首先被载入内存,以Linux系统为例,先载入/boot目录下面的kernel,内核加载成功后,第一个运行的程序是/sbin/init,它产生出init进程,这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的子进程,然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码,至此,全部启动过程完成。

haproxy监听多配置文件

u22e阅读(622)

haproxy是常用的负载均衡软件,在业务比较多的时候需要在主配置文件/etc/haproxy/haproxy.cfg配置较多的VIP和配置,时间一长多达数百行,后期进行更改会比较麻烦,而haproxy有没有Nginx的include功能可以直接导入其他目录的配置文件,因此通过自带参数-f实现配置文件导入功能,可以安装业务配置不同的 XX.cfg文件,然后在haproxy服务启动脚本里面进行配置即可,具体如下:

[root@bj-yz-haproxy-v-119-153 ~]# cat /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
EnvironmentFile=/etc/sysconfig/haproxy
ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/pubcfg -p /run/haproxy.pid $OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

#创建配置文件目录

[root@bj-yz-haproxy-v-119-153 ~]# mkdir /etc/haproxy/pubcfg

[root@bj-yz-haproxy-v-119-153 ~]# cat /etc/haproxy/pubcfg/haproxy1.cfg

frontend test_web1
    bind 10.20.113.26:80
    mode http
    default_backend  test_web_node1

backend test_web_node1
    mode http
    balance source
    server 127.0.0.1 127.0.0.1:80  check inter 2000 fall 3 rise 5
    server 127.0.0.1 127.0.0.1:80  check inter 2000 fall 3 rise 5
    server 127.0.0.1 127.0.0.1:80  check inter 2000 fall 3 rise 5

重新加载配置文件:

[root@bj-yz-haproxy-v-119-153 ~]# systemctl  reload  haproxy

验证端口:ss    -tnl

haproxy 1.8.X版本编译安装教程

u22e阅读(454)

1.7和1.8版本的haproxy 略有不同,从1.8.3版本开始,haproxy支持单主进程多子进程模式,类似于的Nginx的单master process进程多worker process结构,haproxy 1.8.3之前的版本是多个主进程,haproxy 1.8.3安装的时候需要安装systemd-devel提供底层编译支持,否则编译安装haproxy 的时候会报错,并且使用Ws参数启动haproxy主进程,之前的版本没有此参数,具体过程参考如下:

1.1:下载并编译安装haproxy-1.8.3:

[root@bj-zw-comm-lb-h-25-3 ~]# cd /usr/local/src/
#安装基础依赖包,必须安装system-devel,如果不安装会报错
[root@bj-zw-comm-lb-h-25-3 src]# yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel systemd-devel net-tools vim iotop bc  zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
[root@bj-zw-comm-lb-h-25-3 src]# tar xvf haproxy-1.8.3.tar.gz
[root@bj-zw-comm-lb-h-25-3 src]# cd haproxy-1.8.3/
#USE_CPU_AFFINITY=1 为开启haproxy进程与CPU核心绑定,USE_SYSTEMD=1为支持使用 -Ws参数(systemd-aware master-worker 模式)启动Haproxy,从而实现单主进程多子进程运行模式。
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# make  ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1  USE_CPU_AFFINITY=1  PREFIX=/usr/local/haproxy
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# make install PREFIX=/usr/local/haproxy
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# cp haproxy  /usr/sbin/

1.2:准备启动脚本文件:

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
#支持多配置文件读取,类似于从侧面是实现配置文件的include功能。
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

1.3:验证haproxy版本:

[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# haproxy -v
HA-Proxy version 1.8.3-205f675 2017/12/30
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>

1.4:定义简单haproxy配置文件:

[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# mkdir  /etc/haproxy
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# mkdir  /etc/haprox/conf
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# cat  /etc/haproxy/haproxy.cfg 
global
maxconn 100000
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
nbproc 4
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
cpu-map 4 3
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info

defaults
option http-keep-alive
option  forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

listen stats
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global
 stats uri     /haproxy-status
 stats auth    haadmin:q1w2e3r4ys

listen  web_port
 bind 0.0.0.0:80
 mode http
 log global
 server web1  127.0.0.1:8080  check inter 3000 fall 2 rise 5

1.5:启动验证haproxy状态:

1.5.1:以下是1.8.3版本的单主进程多子进程模式:

[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# systemctl daemon-reload
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# systemctl  restart haproxy
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# cat /run/haproxy.pid 
41998
[root@bj-zw-comm-lb-h-25-3 haproxy-1.8.3]# ps -ef | grep haproxy
root      41998      1  0 16:27 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    41999  41998  0 16:27 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    42000  41998  0 16:27 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    42001  41998  0 16:27 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody    42002  41998  0 16:27 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root      42186  10580  0 16:28 pts/14   00:00:00 grep --color=auto haproxy

1.5.2:以下是1.7版本的传统多进程的haproxy模式:

[root@docker-server4 ~]# ps -ef | grep haproxy
root     118786      1  0 17:10 ?        00:00:00 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root     118787 118786  0 17:10 ?        00:00:00 [haproxy] <defunct>
nobody   118788      1  6 17:10 ?        00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
nobody   118789      1  6 17:10 ?        00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
nobody   118790      1  3 17:10 ?        00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
nobody   118791      1  5 17:10 ?        00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
root     118814  99636  0 17:10 pts/0    00:00:00 grep --color=auto haproxy

1.5.3:以下是Nginx的单主进程多子进程模式,此模式和1.8.3版本的haproxy工作模式是类似的:

[root@docker-server5 ~]# ps -ef | grep nginx
root     13399     1  0 Jan06 ?        00:00:01 nginx: master process /apps/tengine/sbin/nginx -s start
devops   22165 22122  0 16:20 pts/0    00:00:00 grep --color=auto nginx
zceo     22915 13399  0 Jan13 ?        00:41:41 nginx: worker process
zceo     22916 13399  0 Jan13 ?        00:41:59 nginx: worker process
zceo     22917 13399  0 Jan13 ?        00:41:38 nginx: worker process
zceo     22918 13399  0 Jan13 ?        00:41:32 nginx: worker process
zceo     22919 13399  0 Jan13 ?        00:41:22 nginx: worker process
zceo     22920 13399  0 Jan13 ?        00:41:40 nginx: worker process
zceo     22921 13399  0 Jan13 ?        00:42:07 nginx: worker process
zceo     22922 13399  0 Jan13 ?        00:41:40 nginx: worker process

1.5.4:以下是apache的单主进程多子进程模式,也和1.8.3版本的haproxy工作模式类似:

[root@ztouch-cluster12-web1 ~]# ps -ef | grep apache
root      6758     1  0 11:01 ?        00:00:00 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6760  6758  0 11:01 ?        00:00:00 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6761  6758  0 11:01 ?        00:00:02 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6762  6758  0 11:01 ?        00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6764  6758  0 11:01 ?        00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6770  6758  0 11:01 ?        00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6771  6758  0 11:01 ?        00:00:03 /usr/local/apache2.2.17/bin/httpd -k start
webshop   6780  6758  0 11:01 ?        00:00:02 /usr/local/apache2.2.17/bin/httpd -k start
root      8076  8038  0 11:50 pts/2    00:00:00 grep apache

centos 7.X 编译安装内核升级到4.X

u22e阅读(537)

一:在运行k8s环境的时候,需要较新的内核支持,推荐使用ubuntu部署,使用centos系统可以升级linux kernel,需要在官网下载当前最新稳定长期支持版linux kernel 源码包:https://www.kernel.org/

1.1:下载源码包并编译安装:

[root@test-server ~]# uname  -a #查看当前内核版本
Linux k8s-node2.preview.com.novalocal 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
rpm包下载地址:http://elrepo.org/tiki/tiki-index.php #推荐使用编译安装,编译安装的功能和版本更方便自定义选择。
[root@test-server src]# tar xvf linux-4.14.78.tar.xz
[root@test-server src]# cd linux-4.14.78
#安装常用命令及编译安装环境
[root@test-server linux-4.14.78]# yum install hmaccalc zlib-develbinutils-devel elfutils-libelf-devel vim lrzsz tree screen \
lsof tcpdump wget  ntpdate  gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel systemd-devel net-tools vim \
iotop bc  zip unzip zlib-devel lrzsz tree screen lsof ncurses-devel
#将当前系统内核配置文件拷贝到当前目录并重名为.config,此步骤为必须过程
[root@test-server linux-4.14.78]# cp /boot/config-3.10.0-862.el7.x86_64  ./.config
#开始编译内核 
[root@test-server linux-4.14.78]# make menuconfig #图像选择模块
[root@test-server linux-4.14.78]# sh -c 'yes "" | make oldconfig' #自动应答yes并编译
[root@test-server linux-4.14.78]# make -j20 bzImage #编译内核镜像,-j指定最多20个并发编译任务
[root@test-server linux-4.14.78]# make -j20 modules #编译模块
[root@test-server linux-4.14.78]# make -j20 modules_install
[root@test-server linux-4.14.78]# make install
sh ./arch/x86/boot/install.sh 4.14.78 arch/x86/boot/bzImage \
    System.map "/boot"            

1.2:修改默认启动kernel版本:

#查看当前引导项:
[root@test-server linux-4.14.78]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.14.78) 7 (Core)
CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-3bc7222482c9453985dbd25dc0d5f308) 7 (Core)
使用第一个引导:
[root@test-server linux-4.14.78]# grub2-set-default  0
[root@test-server ~]# reboot
[root@test-server ~]# uname  -a  #重启后验证新版本内核是否生效
Linux test-server.novalocal 4.14.78 #1 SMP Tue Oct 23 13:56:45 CST 2018 x86_64 x86_64 x86_64 GNU/Linux

最小化centos 安装基础命令

u22e阅读(476)

最小化centos 安装基础命令

[code] yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre \
pcre-devel openssl openssl-devel zip unzip zlib-devel net-tools \
lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel \
bc systemd-devel bash-completion traceroute -y[/code]

Ubuntu Server 20.04开启root登录ssh的方式

u22e阅读(1486)

网上很多资料都是介绍桌面版的,对server版不管用,其实server版开放root登录要简单的多,只需要三步:

1、sudo passwd root 设置root密码

2、sudo vi /etc/ssh/sshd_config 修改

PermitRootLogin without-password

修改为

PermitRootLogin yes

3、sudo systemctl restart sshd 重启sshd服务

然后就可以使用root登录了

如何把VMware的虚拟机向KVM迁移

u22e阅读(747)

1. 前言

本文主要讲解如何把VMware的虚拟机向KVM迁移。
VMware虚拟机向KVM迁移,最重要的步骤就是虚拟磁盘格式的转换和新硬件环境的适配。如果能成功迁移,那么该虚拟机就可以在其它基于KVM虚拟化技术的平台上运行,比如OpenStack。

 

最终成果:
把vmware的虚拟机迁移到KVM平台。

部署前提条件:

  • 熟悉Linux基本的命令行操作
  • 具有系统的root账号权限或者sudo权限
  • 已经拥有vmware虚拟机磁盘文件
  • Linux系统上已经安装kvm套件

组件介绍:

  • Ubuntu 20.04 或 CentOS 操作系统
  • qemu-utils:提供qemu-img转换工具,把vmware虚拟磁盘格式转换为KVM格式
  • VNC客户端:需要在测试终端上安装VNC客户端。Linux不需要安装该组件。

2. 把VMware的虚拟硬盘文件转换为KVM格式

我们知道VMware的虚拟硬盘文件的后缀名为:vmdk
本教程中,将会用该文件作演示:CentOS7.vmdk

我们来看看该文件的信息:

ll -h CentOS7.vmdk

输出结果:

-rw-rw-r– 1 test test 1.7G 1月 22 2021 CentOS7.vmdk

可以看到该文件的大小为1.7G。

接下来,我们将要把VMware的虚拟磁盘格式vmdk转换为KVM的qcow2格式:

sudo qemu-img convert -O qcow2 CentOS7.vmdk /var/lib/libvirt/images/CentOS7.qcow2

如果没有输出任何信息,就表示转换成功,我们来看看转换后的文件:

由于普通账户无权限查看 目录/var/lib/libvirt/images/,该目录是KVM虚拟硬盘文件的默认目录。

先切换到root用户

ll -h /var/lib/libvirt/images/CentOS7.qcow2

-rw-r–r– 1 root root 1.7G 1月 22 09:13 /var/lib/libvirt/images/CentOS7.qcow2

可以看到,转换出来的文件同样是1.7G。

下一步是测试该虚拟磁盘文件。

3. 测试从vmdk转换出来的qcow2文件是否可用

先查看该虚拟磁盘的信息

qemu-img info /var/lib/libvirt/images/CentOS7.qcow2

image: /var/lib/libvirt/images/CentOS7.qcow2
file format: qcow2
virtual size: 40 GiB (42949672960 bytes)
disk size: 1.61 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false

可以看到,该虚拟硬盘大小为40G。

导入KVM虚拟机,内存4096M,2核CPU,VNC端口号5911:

virt-install --name=centos7 --ram=4096 --vcpus=2 --os-type=linux --os-variant=centos7.0 --network default,model=virtio --graphics=vnc,password=linuxrumen.com,port=5911,listen=0.0.0.0 --noautoconsole --accelerate --import --disk path=/var/lib/libvirt/images/CentOS7.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40

我们使用VNC客户端连接该KVM虚拟机的显示器看看:

我们发现,这样启动其实并不行,启动失败,进入dracut模式

测试失败,原因是我们的硬件环境发生了变化, initramfs 和 initrd需要重建。

查看KVM虚拟机列表:

virsh list –all

virsh destroy centos7

删除虚拟机的配置文件,保留磁盘文件:

virsh undefine centos7

由于我的镜像是CentOS 7,所以先下载好CentOS 7的光盘镜像,用于重建initramfs和initrd,放入目录/var/lib/libvirt/images/

ll -h /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso

可以看到该文件大小为1.1G,是CentOS7的安装光盘。

接下来我们使用该光盘镜像启动虚拟机,记得加入从VMware转换过来的qcow2文件

virt-install --name=centos7_2003 --ram=4096 --vcpus=2 --virt-type=kvm --os-type=linux --os-variant=centos7.0 --network default,model=virtio --graphics=vnc,password=u22e.com,port=5911,listen=0.0.0.0 --noautoconsole --accelerate --cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/CentOS7.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40

迅速启动VNC客户端连接该虚拟机的显示器。进入Rescue模式。

然后通过yum重新安装initramfs 和initrd即可。

4. 总结

通过本文,您应该可以了解到如何把VMware的虚拟机迁移到KVM平台了吧。其实,转换很简单,最关键的是解决转换后虚拟机的兼职性问题。如果有更好的方法,请留言。

Ubuntu 20.04如何安装和创建KVM虚拟机

u22e阅读(1513)

1. 前言

本文讲解KVM虚拟化的优势以及如何在Ubuntu 20.04 系统上安装KVM虚拟化套件。

先来了解了一下KVM虚拟化技术:

以下引用摘自红帽官网:

1.1 KVM是什么?

KVM是基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。

KVM 是 Linux 的一部分。Linux 2.6.20 或更新版本包括 KVM。KVM 于 2006 年首次公布,并在一年后合并到主流 Linux 内核版本中。由于 KVM 属于现有的 Linux 代码,因此它能立即享受每一项新的 Linux 功能、修复和发展,无需进行额外工程。

 

1.2 Linux KVM虚拟化有什么优势?

安全性: KVM 利用安全增强型 Linux(SELinux) 和安全虚拟化(sVirt) 组合来加强虚拟机的安全性和隔离性。SELinux 在虚拟机周围建立安全边界。sVirt 则扩展 SELinux 的功能,使强制访问控制 (MAC)安全机制应用到客户虚拟机,并且预防手动标记错误。

存储:KVM 能够使用 Linux 支持的任何存储,包括某些本地磁盘和网络附加存储(NAS)。还可以利用多路径 I/O 来增强存储并提供冗余能力。KVM 还支持共享文件系统,因此虚拟机镜像可以由多个主机共享。磁盘镜像支持精简置备,可以按需分配存储,不必预先备妥一切。

硬件支持:KVM 可以使用多种多样的认证 Linux 兼容硬件平台。由于硬件供应商经常助力内核开发,所以 Linux 内核中通常能快速采用最新的硬件功能。

内存管理:KVM 继承了 Linux 的内存管理功能,包括非统一内存访问和内核同页合并。虚拟机的内存可以交换,也可通过大型宗卷支持来提高性能,还可由磁盘文件共享或支持。

实时迁移:KVM 支持实时迁移,也就是能够在物理主机之间移动运行中的虚拟机,而不会造成服务中断。虚拟机保持开机状态,网络连接保持活跃,各个应用也会在虚拟机重新定位期间正常运行。KVM 也会保存虚拟机的当前状态,从而存储下来供日后恢复。

性能和可扩展性:KVM 继承了 Linux 的性能,针对客户机和请求数量的增长进行扩展,满足负载的需求。KVM 可让要求最苛刻的应用工作负载实现虚拟化,而这也是许多企业虚拟化设置的基础,如数据中心和私有云等(通过 OpenStack®)。

调度和资源控制:在 KVM 模型中,虚拟机是一种 Linux 进程,由内核进行调度和管理。通过 Linux 调度程序,可对分配给 Linux 进程的资源进行精细的控制,并且保障特定进程的服务质量。在 KVM 中,这包括完全公平的调度程序、控制组、网络命名空间和实时扩展。

更低延迟,更高优先级: Linux 内核提供实时扩展,允许基于虚拟机的应用以更低的延迟、更高的优先级来运行(相对于裸机恢复)。内核也将需要长时间计算的进程划分为更小的组件,再进行相应的调度和处理。

了解完KVM的特性与优势后,我们开始在Linux系统上安装KVM套件和尝试启动一台虚拟机。

2. 先检查我们自己服务器的硬件条件

2.1 检查CPU是否支持虚拟化

我们先检查本机CPU是否可以支持虚拟化。

grep -Eoc ‘(vmx|svm)’ /proc/cpuinfo

输出结果

96

我的输出结果表明,被匹配了96次。为什么是96次呢?因为我的服务器的每个CPU都带虚拟化,共96个CPU,每个CPU都匹配一次。所以在每台机器上执行该命令都可能不一样。只要输出结果大于0即表明您的CPU支持虚拟化。

注:Linux系统上的CPU数量与CPU的线程数一致,即一个线程数一个CPU

2.2 检查主板是否开启虚拟化

CPU支持虚拟化就可以正常使用KVM加速功能了吗?不一定的,我们还需要在主板BIOS上开启虚拟化的功能。

使用下面的指令检查KVM加速是否可用。

先安装检查工具:

Ubuntu系统执行以下命令:

sudo apt update && sudo apt install cpu-checker -y

笔者在CentOS系统上查找kvm-ok命令对应的软件包时,被提示所有EPEL仓库移除了该命令对应的软件包。

查找kvm-ok命令对应的软件包

yum provides kvm-ok

输出结果:

提示找不到文件。

Ubuntu 安装完成后,执行以下命令:

kvm-ok

我的服务器上输出的结果如下:

INFO: /dev/kvm exists
KVM acceleration can be used

3. 安装KVM虚拟化套件

确认CPU和主板都可支持后。接下来安装kvm虚拟化套件:

Ubuntu系统:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager -y

qemu-kvm: 提供硬件底层虚拟化。
libvirt-daemon-system: 为 libvirt作为系统服务的守护程序运行。
libvirt-clients: 为不同的虚拟机提供长期稳定的C API
bridge-utils:提供网络桥接功能
virtinst: 为libvirt创建虚拟机提供一系列的命令行工作
virt-manager: KVM虚拟机管理图形界面,如果服务器没有安装图形化界面,没有必要安装它。

检查libvirtd是否正在运行:

sudo systemctl is-active libvirtd

输出结果:

active

表明我的服务器上正在运行libvirtd

想要创建和管理虚拟机,你需要添加你的用户到libvirt 和 kvm用户组。输入:

sudo usermod -aG libvirt USER
sudo usermod -aG kvmUSER

如果不把用户加入组中,那就要在每条命令之前添加sudo获取更高的权限。

4. 查看虚拟网络

查看虚拟网桥,您可以理解为一个多接口的虚拟交换机:

brctl show

我的服务器输出结果:

该网桥用于为虚拟机提供连接物理网络的功能,即虚拟机可以访问其它机器,其它机器也可以直接访问它。

但本文不讨论它,因为接下来我只演示NAT模式。

5. 创建KVM虚拟机

先准备好操作系统的ISO镜像文件:
我已经准备好了CentOS 7.8的安装镜像,它的位置是:

/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso

先规划好虚拟机参数:

  • 名字:centos7_2003
  • 内存:4096M
  • CPU:2
  • 类型:linux
  • 模版:centos7.0
  • 虚拟显示器:VNC,定义密码,定义端口号5911
  • 网络模式:NAT
  • 虚拟磁盘文件:/var/lib/libvirt/images/CentOS7.qcow2
  • ISO安装镜像: /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso

命令行创建:

sudo virt-install –name=centos7_2003 –ram=4096 –vcpus=2 –virt-type=kvm –os-type=linux –os-variant=centos7.0 –network default,model=virtio –graphics=vnc,password=linuxrumen.com,port=5911,listen=0.0.0.0 –noautoconsole –accelerate –cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso –disk path=/var/lib/libvirt/images/CentOS7.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40

输出以下结果即表明创建成功:

开始安装……
正在分配 ‘CentOS7.qcow2’ | 40 GB 00:00:00
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。

当然,您也可以在Linux桌面环境中使用图形界面的virt-manager创建它。

6. 连接KVM虚拟机显示器

在Windows系统上安装VNC viewer客户端:
连接新创建虚拟机的显示器:

VNC服务器地址:

IP+端口

比如192.168.20.35:5911

在VNC viewer客户端:

添加一台VNC主机:

输入创建KVM虚拟机时配置的密码:

7. 结论:

本文主要演示如何在Ubuntu 20.04 系统上安装KVM与使用KVM基本功能。Linux KVM虚拟化平台非常值得深入研究和学习。它能提供稳定高性能的虚拟化技术。维护也比Exsi简单。命令行套件可以覆盖所有的功能。我一般使用命令行创建,一个SSH终端窗口可以搞定一切。如果您有更酷的用法。请留言。

mysql数据库导入导出

u22e阅读(506)

window下

1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u dbuser -p dbname > dbname.sql

2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u dbuser -p dbname users> dbname_users.sql

3.导出一个数据库结构
mysqldump -u dbuser -p -d –add-drop-table dbname >d:/dbname_db.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库
常用source 命令
进入mysql数据库控制台,如
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/dbname.sql

1. 导入数据到数据库

mysql -uroot -D数据库名

1. 导入数据到数据库中得某个表

mysql -uroot -D数据库名 表名

D:\APMServ5.2.6\MySQL5.1\bin>mysqldump -u root -p erp lightinthebox_tags > ligh
tinthebox.sql

linux下

一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql
敲回车后会提示输入密码

2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p -d abc > abc.sql

注:/usr/local/mysql/bin/ —> mysql的data目录

二、导入数据库
1、首先建空数据库
mysql>create database abc;

2、导入数据库
方法一:
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;
(3)导入数据(注意sql文件的路径)
mysql>source /home/abc/abc.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -uabc_f -p abc < abc.sql