首页 \ 问答 \ 什么是新媒体,它的应用领域主要是?

什么是新媒体,它的应用领域主要是?

更新时间:2022-05-30 18:05

最满意答案

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,当然,如果你的虚拟机不需要对外提供服务的话就不必申请公网 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 来发出了。

相关问答

更多
  • 和安装window一样的,不过就是过程不同。你要装的是Linux哪个版本啊?redhat?fedora ?我会的话,叫你
  • 配置的要求不是很高,关键看做什么用的,一般的家用电脑也能搭建起来,当然这只是针对学习或研究用的,这种家用电脑搭建起来的话做大型网站服务器是不行的,而且带宽也不够的。Linux的发行版本很多,如:Fedora、Ubuntu、OpenSUSE、Centos、Debian等等,如果你要选择自己学习或者什么的选择Centos还是不错的,因为现在很多IDC提供商也在用,相对Fedora来说没那么好,但是Centos是免费的,而Fedora是付费的。当然也可以选择其他的发行版搭建,根据自己的喜好来,我个人曾经就用Cen ...
  • 报告: vmware虚拟机里linux联网与虚拟机设置没关系 本人亲自测试雨林木风 ubuntu 小红帽 3个linux 都可以上网 下图为设置方法 【不看最下面的CCC虚拟系统设置方法】 注明:我系统在官网下OK
  • 最好重新下载只有一个ISO镜像的操作系统吧 点击 文件-新建-虚拟机 然后 点下一步(选典型) 再点 下一步(看你要安装的操作系统是什么就选什么) 点下一步 再点下一步(选NAT 第二个) 点下一步(磁盘8G就行了 你要是想分盘的话就点分盘 不分盘的话安装好了的系统就只有一个盘了) 完成 然后点击一下刚才新建好的虚拟机 在设备里找到 CD-ROM 然后双击 点使用ISO镜像 把你下载好的ISO镜像的路径弄上去 点确定 之后就启动这个虚拟机 然后就会像真机一样正常安装系统了
  • QQ.tar.gz的软件包放在哪无所谓.因为在windows中看不到linux分区.但在linux中能看到windows分区. 比如你把它放到c盘.你就在linux中找到c盘中的qq包.(但是看不到磁盘盘符,哪个盘符有program files,哪个就是c盘) tar zxvf /.../.../.. cd /root/qq.tar.gz/ ./configure --prefix=/usr/local/qq/ make make install (具体请看readme或install) 我不太清楚你为什么 ...
  • 1、先挂载光盘 #mount /dev/cdrom /media 2、然后安装DHCP服务器安装包 #rpm -ivh /media/Server/dhcp-3.0.5-3.el5.i386.rpm 3、复制dhcp服务器配置示例文件到/etc下并改名为dhcpd.conf #cd /usr/share/doc/dhcp-3.0.5/ #cp dhcpd.conf.sample /etc/dhcpd.conf这一步会有一个是否覆盖,写y就行了 4、修改dhcp服务器的配置文件:#vim /etc/dhcpd ...
  • UStack 为所有用户提供可靠、安全的云服务,但是如果用户希望在其上实现更加高可用的虚拟机来保证一些关键业务,在 UStack 上也同样可以方便快捷的完成。 @陈沙克 在他的博客里曾讲述了如何在 UStack 上通过 API 使用 Allowed address pairs,这里我们将同样通过 Allowed address pairs 来实现 VRRP 完成虚拟机的高可用。 VRRP 全称虚拟路由器冗余协议,通过 VRRP 我们可以将一些虚拟机配成一个备份组,然后指定一个 master 节点,当 mas ...
  • 一般有3个虚拟机软件,limbo bochs apq.需下载镜像
  • 虚拟机有ip地址的啊。在url中打上就行啦
  • 在使用未翻译的Java堆栈帧的示例中,您似乎正在使用ustack()操作。 为了获得翻译帧,我相信你应该使用jstack()动作。 In your example with untranslated Java stack frames, you appear to be using the ustack() action. In order to get translated frames, I believe you ought to be using the jstack() action instea ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)