作为一个架构师,不了解高可用,那真是说不过去。如果一个系统崩溃而没有自动切换备用系统的能力的时候,这真是架构师最大的罪过。 KeepAlived则是实现高可用的神器,有了它,实现高可用的分布式系统易如反掌。有了KeepAlived,实现MySQL读写分离兼高可用就相当容易。 以前我是不知道有这么一货的,总以为前面有台Nginx做反向代理,后面堆APP服务器即可。可是从来没想过如果Nginx也挂了怎么办?Nginx 一般不会挂吧,我总是这么想,如果挂了,那是上天对我的惩罚,我也认了。 这里举个简单的例子,我们要对外公开一个运行于192.168.122.49上的服务器,以提供网站访问。为了实现在192.168.122.49上的高可用,其实实际提供网站服务的是192.168.122.40,如果192.168.122.40挂掉的话,这时192.168.122.41会自动顶上,但是对于外部访问者来说,由始自终都是在访问192.168.122.49,并没有感觉到后台服务崩溃。
一、准备 准备两台Linux,这里是Ubuntu Linux 18.04 server: 192.168.122.40 # 主服务 192.168.122.41 # 备份服务 我们在各服务器上安装Nginx,以运行一个网站,不同的服务器显示不同的内容,以验证KeepAlived是否生效。 $ sudo apt install nginx 修改/var/www/html/index.nginx-debian.html文件: 192.168.122.40 <html> <head> <title>192.168.122.40</title> </head> <body> 192.168.122.40 </body> </html> 192.168.122.41 <html> <head> <title>192.168.122.41</title> </head> <body> 192.168.122.41 </body> </html> 安装KeepAlived: $ sudo apt install keepalived
二、配置 1.我们先配置主服务器,也就是192.168.122.40配置文件/etc/keepalived/keepalived.conf: # 主节点 vrrp_instance v0 { #指定该节点为主节点 state MASTER #绑定虚拟IP的网络接口 interface ens3 #VRRP组名,两个节点设置一样,以指明各个节点同属一VRRP组 virtual_router_id 40 #主节点的优先级,数值在1~254,注意从节点必须比主节点的优先级别低 priority 50 #组播信息发送间隔,两个节点需一致 advert_int 1 #设置验证信息,两个节点需一致 authentication { auth_type PASS auth_pass 1111 } #指定虚拟IP,两个节点需设置一样 virtual_ipaddress { 192.168.122.49 } } # 虚似IP信息,这里是192.168.122.49,端口:80 virtual_server 192.168.122.49 80 { #设定检查间隔 delay_loop 6 #指定LVS算法 lb_algo rr #指定LVS模式 lb_kind NAT nat_mask 255.255.255.0 #持久连接设置,会话保持时间 persitence_timeout 50 #转发协议为TCP protocol TCP #后端实际TCP服务配置 real_server 192.168.122.40 80 { weight 1 } } 2.配置备份服务器,也就是192.168.122.40配置文件/etc/keepalived/keepalived.conf: # 主节点 vrrp_instance v1 { #指定该节点为主节点 state BACKUP #绑定虚拟IP的网络接口 interface ens3 #VRRP组名,两个节点设置一样,以指明各个节点同属一VRRP组 virtual_router_id 40 #主节点的优先级,数值在1~254,注意从节点必须比主节点的优先级别低 priority 30 #组播信息发送间隔,两个节点需一致 advert_int 1 #设置验证信息,两个节点需一致 authentication { auth_type PASS auth_pass 1111 } #指定虚拟IP,两个节点需设置一样 virtual_ipaddress { 192.168.122.49 } } # 虚似IP信息,这里是192.168.122.49,端口:80 virtual_server 192.168.122.49 80 { #设定检查间隔 delay_loop 6 #指定LVS算法 lb_algo rr #指定LVS模式 lb_kind NAT nat_mask 255.255.255.0 #持久连接设置,会话保持时间 persitence_timeout 50 #转发协议为TCP protocol TCP #后端实际TCP服务配置 real_server 192.168.122.41 80 { weight 1 } } 3.重启动KeepAlived: $ sudo service keepalived restart
三、测试 1.直接访问192.168.122.49,内容是192.168.122.40。 2.关闭192.168.122.40,再访问192.168.122.49,内容是192.168.122.41。 3.启动192.168.122.40,再访问192.168.122.49,内容是`192.168.122.40。
四、总结 这种凭空弄出个IP(192.168.122.49)的方式真的很有趣,特别容易做MySQL的高可用。
相关主题 |