上一篇文章 《 keepalived+nginx打造高可用web应用的架构方案》 写了web server高可用架构的方案思路。
但是,
陆游教育我们纸上得来终觉浅,绝知此事要躬行。不操作一遍就是不会。
所以,这一篇是我对DNS+(keepalived & nginx反向代理)+web server三层架构的实践操作记录。
首先,我需要4台机器。两台做keepalived-nginx代理,两台做web server。哪儿来四台机器呢?靠vagrant 。 个人电脑上安装vagrant、virtualbox。vagrant是跨平台虚拟机管理工具,通过下载虚拟机镜像box文件和Vagranfile可以配置以启动N台虚拟机,非常方便。我这里用centos7.box启动四台虚拟机分别是keepalived1、keepalived2、web1、web2 。配置文件如下:
第二,安装keepalived & nginx。
登录keepalived1,先安装各种依赖
yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
yum -y install ipvsadm
最后安装keepalived和nginx
yum -y install keepalived
下载nginx包,解压安装即可。
下面是master机器keepalived.conf配置。
设置vip 192.168.200.18
机器192.168.2.11和192.168.2.12上配置keepalived.conf有区别,backup机器需要修改如下:
vrrp_instanceVI_1 { state BACKUP //初始化状态 interface eth0 virtual_router_id 51 priority 99 //优先级,一定要比master的优先级要低 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.2.8 } }
然后是nginx负载均衡配置,负载量不大的时候这其实是master-backup配置,nginx自带服务检测。
机器192.168.2.11和192.168.2.12上nginx配置完全一致。
第三,启动测试web server
web server测试机的准备我打算用docker,下载安装启动docker,因为国内下载镜像实在太慢了,所以配置docker镜像加速。创建 /etc/docker/daemon.json 文件配置如下:
{ "registry-mirrors": [ "https://kfwkfulq.mirror.aliyuncs.com", "https://2lqq34jg.mirror.aliyuncs.com", "https://pee6w651.mirror.aliyuncs.com", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com" ], "dns": ["8.8.8.8","8.8.4.4"] }
这样就快多了,分别下载php-fpm和apache镜像:
dmiseev/php-fpm7.1 latest a496a8708389 12 months ago 675MB
httpd 2.4-alpine 141bb8d01fbd 3 weeks ago 127MB
然后就是启动docker,并且关联两个容器。
启动php-fpm 命令是:
docker run -d --rm --name fpm -v "/data1/apache2/www:/php" a496a8708389
-v参数是把镜像中php命令关联到宿主机项目路径下。
启动apache命令是:
docker run -d -p 80:80 --link fpm:php --rm --name httpd-service -v "/data1/apache2/www:/usr/local/apache2/htdocs/" 141bb8d01fbd
对外暴露80端口
-v命令关联项目和容器项目路径
配置apache。 需要让apache进行fcgi代理关联,本来可以在宿主机写好httpd.conf 通过-v命令管理,但是不知道为什么我加上 -v "/data1/apache2/conf/:/usr/local/apache2/conf/" 参数dockers启动一直失败。只好先启动docker,然后进入容器修改httpd.conf,然后重启apache。
首先测试web server。分别访问http://192.168.2.13/index.php http://192.168.2.14/index.php 看到如下结果,表示web server启动成功。
最后,启动nginx机器上keepalived,用ip 命令查看虚拟ip已经添加到eth0:,如下图:
配置虚拟域名,进行访问测试,配置为 192.168.200.18 web.me 浏览器访问呢 web.me,结果如下:
多次刷新发现13 、14两个web server依次被访问,这是nginx的反向代理没有设置负载均衡访问配置,默认轮询。
登陆到192.168.2.11 或者 192.168.2.12 机器上kill掉nginx, 刷新浏览器发现web server依然可以访问,keepalived起到检测自动故障转移的功能。
这就保证了DNS+(keepalived & nginx反向代理)+web server三层架构的高可用性。