方案选择
部署方案有主从模式以及双主模式
主从模式:将一台机器配置为主,另一台机器配置为从
主从是为了实现高可用,一台提供服务一台热备机,主机正常运行的情况下备机不提供服务,只有主机挂掉的情况下,备机才会接管虚拟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 部署方案;
-
-
-
-
还没有评论,来说两句吧...