通过keepalived以及nginx实现高可用部署双主模式

方案选择

部署方案有主从模式以及双主模式

主从模式:将一台机器配置为主,另一台机器配置为从

主从是为了实现高可用,一台提供服务一台热备机,主机正常运行的情况下备机不提供服务,只有主机挂掉的情况下,备机才会接管虚拟ip;也就是说一般情况下备机的资源没有得到利用,造成资源的浪费;

双主模式:双主意思是两台机器中互为主从,即两台机器任意一台既是主又是从

即要将主从的配置用另一个虚拟ip反过来再配置一组;这样通过两个虚拟ip的访问都是高可用的;但是现在是两个虚拟ip,必须要轮询访问两个虚拟ip才能实现负载均衡;一般利用DNS域名解析进行虚拟ip的负载均衡,即一个域名解析到两个虚拟ip上,当访问域名时,DNS服务器会通过简单的轮询算法将请求负载到两个虚拟ip上;

为了保证服务的高可用,准备通过2台服务器双主的方式进行部署。通过对2台服务器都部署相同端口的nginx,2台服务器都通过部署keepalived来虚拟两个virtual IP来对其访问,两台服务器互为双主。获得服务器的高可用的实现。

我们在这里选择双主模式

方案验证

在两台服务器都安装keepalived以及nginx

安装keepalived

 

apt-get install keepalived

  • 两台机器上修改keepalived配置文件

 

vim /etc/keepalived/keepalived.conf

  • A主机

 

global_defs { router_id 192.168.186.129 #可定义任意如 boya-1等等我这里用的虚拟机IP只要和B机配置不重复即可 script_user root } vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" interval 2 } vrrp_instance VI_1{ state MASTER #主机 interface ens33 #网卡名 virtual_router_id 100 #虚拟路由名 和备机相同即可 priority 101 #权重值,master要比backup大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.186.230 #虚拟IP } track_script { chk_nginx #执行上面的sh文件检查nginx的健康状态如果挂了重启nginx } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id 52 #和上面那组区分开 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.186.229 } }

  • B主机

 

global_defs { router_id 192.168.186.128 script_user root } vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" interval 2 } vrrp_instance VI_1{ state BACKUP interface ens33 virtual_router_id 100 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.186.230 } track_script { chk_nginx } } vrrp_instance VI_2 { state MASTER interface ens33 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.186.229 } }

将A主机的nginx代理转发到www.163.com B主机的nginx转发到www.hupu.com

重启2台服务器的keepalived

 

systemctl restart keepalived

查看keepalived的状态

 

systemctl status keepalived

分别查看A B主机的虚拟IP

 

ip a

现在即可通过虚拟IP加nginx端口的方式访问nginx代理转发的地址

部署nginx

通过docker 安装 nginx

 

#cp出来的路径请事先准备好或者放在已有的路径 # 生成容器 docker run --name nginx -p 9001:80 -d nginx # 将容器nginx.conf文件复制到宿主机 docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf # 将容器conf.d文件夹下内容复制到宿主机 docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d # 将容器中的html文件夹复制到宿主机 docker cp nginx:/usr/share/nginx/html /home/nginx/

将映射文件保存之后 删除nginx镜像

 

docker run -d -p 3000:80 --name nginx_zf -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx

192.168.186.128的虚拟IP 192.168.186.229访问

192.168.186.129的虚拟IP 192.168.186.230访问

验证VIP漂移

当我关闭128主机的 keepalived 通过A主机的虚拟IP 192.168.186.229:3000访问则 229的虚拟IP漂移到了129的

重启128的keepalived之后 229 的虚拟IP返回之前的页面

高可用

双主机Web层可以主备高可用

双主机数据层的高可用性

  • Couch DB,复制

  • MySQL使用阿里云RDS

  • 文件存储,MinIO,OSS

K8S

  • 可以使用 MicroK8s 比较方便地构建 Kubernetes 运行环境;必要时可以利用 virtualbox 创建虚拟机来模拟多物理节点。

  • Budibase 官方提供了可用的 Helm Chart 配置脚本;

  • MySQL 高可用部署存在成熟的 Helm Chart 脚本及说明;

  • Ray 应该也已经提供了 K8s 部署方案;

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值