如果希望为虚拟机提供高可用能力、实时迁移能力,就需要将虚拟机加入到群集。如果希望最高的可用能力,虚拟机的存储应该放置在每个Host都可访问的共享位置。
Windows Server 2012提供了,不停机的情况,迁移虚拟机存储。所以,我们可以在虚拟机不停机的情况下,将虚拟机磁盘迁移至共享存储或共享文件夹上,以方便实现实时迁移的高可用能力。
……(见附件)……
如果希望为虚拟机提供高可用能力、实时迁移能力,就需要将虚拟机加入到群集。如果希望最高的可用能力,虚拟机的存储应该放置在每个Host都可访问的共享位置。
Windows Server 2012提供了,不停机的情况,迁移虚拟机存储。所以,我们可以在虚拟机不停机的情况下,将虚拟机磁盘迁移至共享存储或共享文件夹上,以方便实现实时迁移的高可用能力。
……(见附件)……
转载于:https://blog.51cto.com/hanwa/992621
一、安装虚拟机
浏览器中搜索VMware,下载安装包(这里我使用的版本是VMware10),具体操作步骤如下:
双击下载的安装包,进入安装向导,选择”同意”后出现如下界面
选择安装的路径
设置共享虚拟机存储位置
去掉产品更新和帮助改善
进入安装过程
输入产品秘钥:5F29M-48312-8ZDF9-A8A5K-2AM0Z
安装完成
二、新建虚拟机
之后我们要在虚拟机中安装Linux操作系统,所以需要新建一个虚拟机,操作步骤如下:
打开虚拟机,点击创建新的虚拟机或在文件—>新建虚拟机,出现如下安装向导
默认下一步
选择稍后安装操作系统
选择客户端操作系统
我这里选择安装的操作系统是CentOS 64位,这个需要根据你要安装的Linux操作系统来选择输入虚拟机名称、选择镜像文件存放路径
选择给虚拟机分配的cpu核的数量
如果为虚拟机选择的cpu数超过本机实际cpu数量,VMware会给出警告。这里选择默认即可。下一步虚拟机内存分配
一般选默认的1024MB就行
注:给虚拟机分配的内存不能超过物理 内存的一半,
而且稍后如果想要使用图形界面安装CentOS,至少要分配628M的内存,下一步选择网络类型(NAT模式)
.选择io控制器类型,默认,下一步
选择要创建的磁盘类型,默认,下一步
选择虚拟硬盘类型,选择创建一个新的,下一步
设置虚拟镜像文件名称,默认即可,下一步
创建完成
创建完成后会在左侧我的电脑中显示新建的虚拟机
说明:在使用VM安装oraclre rac时需要建立共享存储。oracle rac共享存储的建立有多重方式,博主选择了操作比较简单的方案。当前有两个虚拟机vm1和vm2。在虚拟机关闭的状态下。进行虚拟机的设置。
VM1操作
为vm1虚拟机添加新的磁盘
设置磁盘类型
创建新的磁盘
设置磁盘的目录位置
该磁盘文件不要与虚拟机存储在同一路径下
依次增加3个磁盘
VM2操作
向VM2虚拟机中添加之前创建的磁盘
选择磁盘 选择使用现有的虚拟磁盘
选择磁盘的存储路径
VM2将把之前创建的磁盘添加进来
修改vmx文件
policy.vm.mvmtid = "" checkpoint.vmState = "" scsi0:1.present = "TRUE" scsi0:1.fileName = "E:\vm\sharedisks\redbat-0.vmdk" scsi0:1.mode = "independent-persistent" scsi0:2.present = "TRUE" scsi0:2.fileName = "E:\vm\sharedisks\redbat-1.vmdk" scsi0:2.mode = "independent-persistent" scsi0:3.present = "TRUE" scsi0:3.fileName = "E:\vm\sharedisks\redbat-2.vmdk" scsi0:3.mode = "independent-persistent" floppy0.present = "FALSE" scsi0:3.redo = "" scsi0:1.redo = "" scsi0:2.redo = "" disk.locking="FALSE" scsi0:1.SharedBus="Virtual" scsi0:2.SharedBus="Virtual" scsi0:3.SharedBus="Virtual"
重新虚拟机将磁盘格式化并进行分区。
说明:虚拟机不同可能设置到有所说差别。
Java虚拟机
Java虚拟机运行时数据区域被分为五个区域:堆(Heap)、栈(Stack)、本地方法栈(Native Stack)、方法区(Method Area)、程序计数器(Program Count Register)。
方法区(线程共享)
类信息、构造函数、对象类型信息和普通方法的字节码内容、常量池和静态变量存储在该位置,方法区和堆一样都是运行时内存区域线程共享的;
JAVA堆(线程共享)
new出来的类对象、数组和大部分非静态成员变量存储在该位置,java堆同样是线程共享的,操作共享区域的成员就有了锁和同步,而且它的生命周期是和虚拟机一样的;JVM将堆分为新生代和老年代,而在新生代中又可以分为Eden与Survivor两部分,两者默认呈4:1的比例分配内存,而在survivor中又可分为两部分;当在新生代执行了GC后存活的对象,会进入survivor的to space区域,如果达到一定限制仍存活,则进入老年代。(在物理内存中,java堆结构并不是一块连续的空间,它仅仅是逻辑上的连续)
JAVA栈(线程私有)
描述的是Java方法执行时的内存模型;进程的执行单元是线程,每个线程执行的逻辑方法中定义的局部变量或引用变量均保存在该位置,因为调用的方法可能重名,所以为保证线程安全,jvm按照线程分配栈空间,一个线程对应一个java栈,当一个线程调用一个方法时,会向java栈中压一个元素,这个元素的就是“栈帧”,而该方法可能还会调用另一个方法,所以该线程就会再压一个栈帧直到不再递归调用方法时停止压栈(要注意这样会导致栈空间溢出),栈帧存储着类方法中的局部变量和中间状态的操作数等,java栈是线程私有的,而且它的生命周期和线程是同步的
如下图所示:一个线程一个栈,栈内又分为多个部分
本地方法栈
保存了本地方法,它是当程序调用类库(本地方法)中的方法时才会用到它
PC计数器(线程私有)
因为执行的是字节码,所以为了有序执行就用到了PC计数器,它是当前线程执行字节码的行号指示器。在多线程中,为了让每个线程切换回来后能够恢复原来执行的指令,就需要为每个线程启动一个PC计数器,这些计数器之间是互补影响的,因为PC计数器和栈一样都是线程私有的。(PC计数器是jvm唯一个不会出现内存溢出的组件)
java中变量存储位置:
定义成员变量:int a=1;
a是基本数据类型且为非静态变量,所以存储在堆中
static int b = 2;
b为静态变量存储在方法区的静态区
String s = “abc”
s是成员变量的引用所以它存储在类对象所在的堆中,而此处的“abc”要存储在方法区的常量池。
定义局部变量
int i =1;
i是基本数据类型且是局部变量,所以存储在栈中
String st = new String(“hello”);
st是对象的引用应当存储在java栈中,而使用new关键字或者构造器创建的“hello”对象要存储在堆中;
简述栈和堆的差异
从存放数据来看:栈存放的是基本数据类型和引用变量;堆存放的是new对象和数组;栈中的引用变量大小在32位,基本数据类型变量在1-8字节,但是对于堆的话,他具有动态性,在运行时动态分配内存。
从数据共享来看:
栈中的引用变量可以指向同一个地址空间,而堆中的数据是使用new关键字创建的,所以它们的地址空间均不同。
JVM执行流程:
java源文件–>使用编译器编译成.class文件–>将字节码信息加载到方法区,并生产Class对象用于访问类的各种信息。–>基本语法、格式等验证–>初始化工作–>进入main主方法–>逐行执行命令,若遇到方法时创建栈帧压入栈顶。(依次循环直至退出main方法)–>垃圾回收(虚拟机管理并不一定最后进行回收)
编译的大致过程: