第二步:在Virtualbox中安装Windows7.先运行Virtualbox,新建虚拟电脑,将光驱设置为第一启动方式,将提前下载好的Windows安装镜像添加到虚拟光驱中,启动,进入Windows安装界面,开始安装Windows
第三步:安装Virtualbox增强功能。先安装增强功能,然后,设置全屏模式:先选择缩放125%,再使用全屏快捷键,
第四步:安装Virtualbox扩展包(可读取U盘),下载扩展包,然后关闭Windows,接着开始安装Virtualbox扩展包,插入U盘,添加刚插入的U盘到虚拟机USB设备,最后启动Windows.
UStack 为所有用户提供可靠、安全的云服务,但是如果用户希望在其上实现更加高可用的虚拟机来保证一些关键业务,在 UStack 上也同样可以方便快捷的完成。@陈沙克 在他的博客里曾讲述了如何在 UStack 上通过 API 使用 Allowed address pairs,这里我们将同样通过 Allowed address pairs 来实现 VRRP 完成虚拟机的高可用。
VRRP 全称虚拟路由器冗余协议,通过 VRRP 我们可以将一些虚拟机配成一个备份组,然后指定一个 master 节点,当 master 节点失效时,备份组将会根据 VRRP 协议进行选举,选举后一个 slave 节点将代替原失效的 master 节点对外提供服务,在提高可靠性的同时,简化了主机的配置,避免了单点故障,是常见的高可用方案。
实现 VRRP 协议,我们可以使用开源的 keepalived 软件,优点是配置简单,功能也颇为强大,下面我就以 keepalived 来实现一个简单的双机热备对外提供 HTTP 服务。
在 UStack 上建立环境
创建虚拟网络与云主机
首先我们建立一个 VRRP 用的网络和子网,且将其命名为 vrrp-net 和 vrrp-subnet(10.10.0.0/24),然后在上面建立两个虚拟机,我将其命名为 vrrp-node-1(10.10.0.4)和 vrrp-node-2(10.10.0.5)。
两个节点都没有分配浮动 IP,只是将其通过一个 router 连接到外网,为了能够 ssh 登录到这两个虚拟机,我们可以在路由器上设置转发规则,指向各自的 22 端口,方便我们管理。
然后我们需要申请一个公网 IP 作为这两个虚拟机对外服务的出口 IP,当然,如果你的虚拟机不需要对外提供服务的话就不必申请公网 IP 了。
再在 vrrp-subnet 上新建一个虚拟网卡,只需要进入左侧边栏”虚拟数据中心”的“虚拟网卡”,再点击“新建虚拟网卡”,在“选择子网”里选择 vrrp-subnet,我们可以在这里指定一个 IP,比如 10.10.0.200,再指定一个名字,比如 vrrp-port。
通过 API 实现高级控制
下面我们需要将前面申请的公网 IP 关联到这个虚拟网卡上,这个操作我们目前不支持在界面上操作,需要用 API 完成,首先我们做一些准备工作。
准备工作
1. 记录 Floating IP 的 UUID、两个虚拟机上的虚拟网卡的 UUID 和 vrrp-port 的 UUID:Floating IP 的 UUID 可以在”公网 IP“页点开具体的 IP 即可看到,虚拟网卡的 UUID 则是在“虚拟数据中心”的“虚拟网卡”页里,通过“关联云主机”这一栏去查这个虚拟网卡属于哪个云主机,然后点击这个虚拟网卡,记录其 UUID。
2. 记录你的 User ID 和 Project ID:在 UOS 的 API中,每个用户都用其 User ID 和 Project ID 来做识别和资源的隔离,这两个 ID 可以将鼠标悬停在右上角后点击“个人设置”查看。
获得 Token
下面就可以进入 API 的操作了,首先获取一个 token:
curl -i -X POST https://identity.api.ustack.com/v3/auth/tokens \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"auth": {"scope": {"project": {"id": "{PROJECT_ID}"}}, "identity": {"password": {"user":{ "password": "{PASSWORD}", "id": "{USER_ID}"}}, "methods": ["password"]}}}'
复制代码
注意将里面的 {PROJECT_ID}、{PASSWORD}、{USER_ID} 替换成你自己的真实信息,下面的命令也做类似处理。
在终端运行后,我们可以获得一个 token:
图中第一个红框部分为我们输入的代码,第二个红框部分为我们获得的 Token,接下来每一步都需要用到这个 Token,请记住这个 Token。
将公网 IP 绑定到虚拟网卡
首先我们将前边的 Floating IP 绑定到 vrrp-port 上:
curl -s -X PUT https://bj1.network.api.ustack.com/v2.0/floatingips/{FLOATING_IP_UUID} \
-H "X-Auth-Token: {TOKEN}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"floatingip": {"port_id": "{VRRP-PORT-UUID}"}}'
复制代码
将其中的 {FLOATING_IP_UUID}、{TOKEN}、{VRRP-PORT-UUID} 换成我们前面查的真实的 UUID。
第一个红框内为运行的 curl 命令,第二个红框内可以看到“Fixed IP”已经成功变成 vrrp-port 的 IP 了。或者进入Ustack控制台 ,此时应能看到本来 “Available” 的公网 IP 此时已变成了 “In Use”
添加 Allowed address pairs
然后我们再添加 Allowed address pairs:
curl -s -X PUT https://bj1.network.api.ustack.com/v2.0/ports/{NODE-1-PORT-UUID} \
-H "X-Auth-Token: {TOKEN}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"port": {"allowed_address_pairs": [{"ip_address": "{VRRP-FLOATING-IP}"}]}}'
复制代码
将其中的 {NODE-1-PORT-UUID}、{TOKEN}、{VRRP-FLOATING-IP} 换成我们前面查的真实的 UUID。改完 Node-1 后同样处理 Node-2 即可。
第一个红框内为运行的 curl 命令,第二个红框内可以看到“allowed address pairs”已经成功变成了 vrrp-port 的 IP 了。
至此,UOS 上的准备就完成了,下面我们 ssh 到虚拟机去配置 keepalived。
配置虚拟机
配置 keepalived
keepalived 的配置可以做很多,他可以用来做3层及以上的高可用(TCP Check、HTTP Get、SSL Get、MISC Check), 参考 Keepalived 的 User Guide,里面详细介绍了 Keepalived 的使用方法。这里我们不做详细的 Health check,仅保证虚拟机连接正常,即当虚拟机网络断开时将流量切换到其他虚拟机。
首先在节点中安装 keepalived:
sudo apt-get install keepalive
复制代码
然后是 Master 节点的设置:
$ cat /etc/keepalived/keepalived.conf
vrrp_instance vrrp_group_1 {
state MASTER
interface eth0
virtual_router_id 1
priority 100
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.10.0.200/24 brd 10.0.0.255 dev eth0
}
}
复制代码
Slave 节点的设置:
$ cat /etc/keepalived/keepalived.conf
vrrp_instance vrrp_group_1 {
state BACKUP
interface eth0
virtual_router_id 1
priority 50
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.10.0.200/24 brd 10.0.0.255 dev eth0
}
复制代码
修改完配置后需要重启 keepalived:
service keepalived restart
复制代码
配置 Apache
为了演示高可用,我们需要安装一个 Web 服务器,比如 Apache:
sudo apt-get install apache2
复制代码
分别将两个虚拟机的主页设置成 “VRRP-node1″ 和 “VRRP-node2″:
$ sudo echo "VRRP-node1" >/var/www/index.html
$ sudo echo "VRRP-node2" >/var/www/index.html
复制代码
验证高可用
此时我们尝试访问 42.62.73.143:
$ curl 42.62.73.143
VRRP-node1
复制代码
现在我们让 VRRP-node1 的“虚拟网卡”转为关闭状态,这个可以通过设置虚拟网卡的 admin_state_up 来实现:
curl -s -X PUT https://bj1.network.api.ustack.com/v2.0/ports/{NODE-1-PORT-UUID} \
-H "X-Auth-Token: {TOKEN}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"port": {"admin_stat_up": [{"ip_address": "false"}]}}'
复制代码
再尝试访问 42.62.73.143:
$ curl 42.62.73.143
VRRP-node2
复制代码
此时 respone 已由 VRRP-node2 来发出了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)