华为云的一次虚拟ip体验
背景:单主机ecs上起俩个haproxy,采用keepalived实现高可用
ecs配置虚拟ip和虚拟ip的公网ip
因为要实现高可用,需要使用到keepalived来实现,keepalived需要虚拟ip。由于阿里云已经不允许ecs上使用虚拟ip(变相必须使用slb),所以这里ecs选择了
华为云。华为云支持虚拟ip的申请,并且是免费的。接下来说明申请流程和ecs的使用.具体请参考
-
点击进入ecs实例后,点击网卡一项,可以看到管理虚拟ip
image -
点击管理虚拟ip,然后选择申请虚拟ip,申请方式可以自动分配和手段分配。这里需要注意的是申请的虚拟ip和ecs的内网ip都在同一个网段下,私网ip上图中
image
为172.16.0.77,所以在虚拟ip申请的范围也就是172.16.0.1-244之间。虚拟ip就相当于是ecs的内网ip,内网ip能访问的资源该内网ip也同样能访问,唯一不同的
是内网ip只能绑定一个ecs,而虚拟ip可以绑定多个ecs上。如果多台ecs上绑定了同一虚拟ip,且并没有配置keepalived,如果此时访问该内网ip,经测试在
华为云上只会访问同一台ecs,而不是轮训访问所有绑定该虚拟ip的ecs,这个可能和华为云平台有关,不能确定其他ecs是否也是这种的情况
-
我申请的是172.16.0.100。接下来就是给虚拟ip绑定ecs,点击绑定服务器即可。这里需要注意一点,绑定的服务器必须和虚拟ip是一个网段。买ecs时候需要
注意一下。
image -
接下来最重要的一步。在ecs上手动配置虚拟ip.进入ecs后,输入以下命令
cd /etc/sysconfig/network-scripts
随后vi。原本是没有这个文件的。
vi ifcfg-eth0:1
在文件中输入以下内容,DEVICE指新建的网卡,即虚拟ip所在网卡,冒号前面的是现在的网卡名,使用ifconfig可查看,IPADDR为我们在华为云申请的虚拟ip
DEVICE=eth0:1
IPADDR=172.16.0.100
输入后,保存退出,并reboot重启服务器。
重启后进入ecs后,使用ifconfig查看后,如果多了一个eth0:1的网卡则说明虚拟ip配置成功,如下
image
此时看看虚拟ip是否能ping通.到此则虚拟ip配置成功
image5 如果该虚拟ip想要通过外网访问的话必须绑定公网ip,如下点击绑定即可。
image此时外网还不能访问。云服务器所在的default安全组入方向添加ICMP协议,才能ping通。
在宿主机ecs上安装keepalived
配置文件如下
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.16.0.100
}
}
virtual_server 172.16.0.100 8888 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 172.40.0.100 8888 {
weight 1
}
}
virtual_server 172.16.0.100 3306 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 172.40.0.100 3306 {
weight 1
}
}
可以看到虚拟ip是我们在华为云申请的172.16.0.100,而他需要映射的是俩haproxy的虚拟ip172.40.0.100。
首先我们要保证俩点,一是telnet 172.40.0.100 8888和telnet 172.40.0.100 3306时都显示是连通的,如果这个没通则是docker haproxy的问题,
其次保证telnet 172.16.0.100 8888和telnet 172.16.0.100 3306能显示连通,如果连不通,则说明是宿主机keepalived的
问题,此时可以查看/var/log/message来查看keepalived的错误日志。如果显示都能连通,则本地keepalived启动成功
tail -f /var/log/message
启动成功日志显示如下,要注意圈住部分,只有出现圈住的部分才是启动成功。
image