尽管nginx性能再强,但服务器和网络有很多因素是不可控的,如:网络抖动、网络不通、服务器宕机等情况,都会导致服务不可用(可理解为单点故障),这样的系统体验肯定得不到好评;如果当一个服务器宕机或服务挂掉时,另外一台服务器自动代替宕机服务器提供服务,保证系统的正常运行,这就实现了高可用;这里nginx实现高可用的方式和Redis的主从模式很相似,只是nginx使用的是keepalived来实现高可用集群。
5.1 keepalived简介keepalived实现高可用的关键思路还是主、备节点的来回切换;
首先需要配置一个VIP(虚拟IP),用于提供访问的接口地址,刚开始是在主节点上的;
当主节点发生故障时,VIP就漂移到备节点,由备节点提供服务;
如果主节点恢复,会通知备节点健康状态,VIP就会漂移到主节点;
由上可见,在keepalive实现高可用时,肯定要有机制选择主备节点,主备之间肯定要互相通知,不然咋知道节点之间的健康状态,所以就使用了VRRP协议,目的就是为了解决静态路由的单点故障。
VRRP协议,全称Virtual Router Redundancy Protocol(虚拟路由冗余协议),利用IP多播的方式实现通信;通过竞选协议机制(根据配置的优先级来竞选)来将路由任务交给某台VRRP路由器,保证服务的连续性;
理论先了解这么多,先来把keepalived安装上,
方式一
执行以下命令可直接安装:
# 安装,这种直接安装完成了,修改配置文件启动即可 yum install-y keepalived # 启动 systemctl start keepalived.service这种方式可能会遇到启动keepalived的时候报错,原因可能是服务配置文件(/usr/lib/systemd/system/keepalived.service)指定的keepalived相关目录找不到; 如果文件目录都正常,还报错,我折腾了好久,后来用源码方式进行安装就正常啦~~~
方式二
建议使用源码的形式进行安装,大概步骤如下:
第一步,环境准备
# 安装对应的依赖包 yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel第二步,下载并解压源码包
# 在/usr/local/src目录下执行,下载到该目录 wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz # 解压 tar -zxvf keepalived-2.0.18.tar.gz第三步,安装
# 进入到解压出来的目录 cd keepalived-2.0.18 # 编译并安装 ./configure && make && make install第四步,创建启动文件,即将编译出来的文件拷贝到对应的目录下
cp -a /usr/local/etc/keepalived /etc/init.d/ cp -a /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ cp -a /usr/local/sbin/keepalived /usr/sbin/第五步,创建配置文件
# 先创建配置文件存放的目录 mkdir /etc/keepalived # 再将创建好的配置文件通过xFtp传到此目录,也可以直接在这里创建配置文件名为keepalived.conf,内容如下:
! Configuration File for keepalived global_defs { # 每台机器的唯一标识 router_id 31 } # vrrp实例,可以配置多个 vrrp_instance VI_1 { # 标识为主节点,如果是被节点,就为BACKUP state MASTER # 网卡名称,通过ip addr 命令可以看到对应网卡,需要哪个就配置哪个就行 interface enp0s8 # 路由ID,主、备节点的id要一样 virtual_router_id 3 # 优先级,主节点的优先级要大于备节点的优先级 priority 200 # 主备心跳检测,间隔时间为1s advert_int 1 # 认证方式,主备节点要一致 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { # 虚拟IP 192.168.30.108 } }第六步,启动
# 启动 systemctl start keepalived.service # 查看虚拟IP情况 ip addr查看效果如下,虚拟ip正常在master节点上:
安装完keepalived和nginx之后就可以进行主备演示啦~~~
5.2 主备演示这里用了两台虚拟机,结构如下:
第一步nginx配置准备