阿里云
发表主题 回复主题
  • 618阅读
  • 0回复

如何在 UStack 上实现虚拟机高可用

级别: 论坛版主
发帖
41
云币
72




问题导读
1、如何验证高可用性呢?
2、在 UStack 上建立环境,需要哪些环节?
3、通过 什么来实现高级控制?

如何在 UStack 上实现虚拟机高可用-cloudstack创建虚拟机




1.jpg (46.29 KB, 下载次数: 3)




下载附件

 保存到相册




2014-10-27 19:52 上传

















两个节点都没有分配浮动 IP,只是将其通过一个 router 连接到外网,为了能够 ssh 登录到这两个虚拟机,我们可以在路由器上设置转发规则,指向各自的 22 端口,方便我们管理。

创建公网IP和虚拟网卡


然后我们需要申请一个公网 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。

如何在 UStack 上实现虚拟机高可用-cloudstack系统虚拟机




1.png (91.48 KB, 下载次数: 3)




下载附件

 保存到相册




2014-10-27 19:52 上传















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:

如何在 UStack 上实现虚拟机高可用-cloudstack 高可用




1.png (315.29 KB, 下载次数: 4)




下载附件

 保存到相册




2014-10-27 19:52 上传
















图中第一个红框部分为我们输入的代码,第二个红框部分为我们获得的 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。

如何在 UStack 上实现虚拟机高可用-saltstack 高可用




1.png (240.9 KB, 下载次数: 4)




下载附件

 保存到相册




2014-10-27 19:53 上传
















第一个红框内为运行的 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 即可。

如何在 UStack 上实现虚拟机高可用-open stack设计与实现




1.png (299.79 KB, 下载次数: 4)




下载附件

 保存到相册




2014-10-27 19:54 上传
















第一个红框内为运行的 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 来发出了。


实际上,keepalived 还有很多配置,比如检查指定端口等,具体可以查阅 keepalived 的文档:Keepalived for Linux


发表主题 回复主题
« 返回列表
«12345678910»
共10页
上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)

      版权声明

      开发者论坛为你提供“如何在 UStack 上实现虚拟机高可用”的内容,论坛中还有更多关于 apache虚拟机配置curl实现多线程curl获取json 的内容供你使用,该内容是网友上传,与开发者论坛无关,如果需要删除请联系zixun-group@service.aliyun.com,工作人员会在5个工作日内回复您。