1.准备俩台虚拟机,一台主机,一台备机
我这里模拟的是
主机ip: 192.168.42.66 masternginx
备机ip: 192.168.42.77 slavenginx
虚拟ip: 192.168.42.11
具体步骤:
2.1 将keepalived上传到linux系统当中
2.2 cd /usr/local目录
2.3 tar -zxvf keepalived-xxxxxxxxx
2.4 切换到解压目录
2.5 yum install -y openssl openssl-devel
2.5 ./configure --prefix=/usr/local/keepalived 编译,将编译文件放到/usr/local/keepalived
2.6 make
2.7 make install
2.8 在/etc/keepalived 创建目录: mkdir /etc/keepalived
2.9 cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
2.10 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
2.11 cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
2.12 ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
2.13 ln -s /usr/local/keepalived/sbin/keepalived/sbin/
2.14 将nginx启动脚本和keepalived.conf配置上传到/etc/keepalived
2.15 主机:修改keepalived.conf配置文件
interface 配置成与主机相同的网络 ip a
mcast_src_ip 配置成自己机器的IP
virtual_ipaddress {
192.168.42.11 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
完整配置:
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { state MASTER #来决定主从 interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.42.66 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.42.11 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 }
2.16 启动keepalived
这里如果报错:Job for keepalived.service failed because the control process exited with error code. See "systemctl status keepalived.service" and "journalctl -xe" for details.
那么我们需要修改软连接配置
解决办法:rm /usr/sbin/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
2.17 备机keepalived.conf
state BACKUP 备机
interface 配置成与主机相同的网络 ip a
mcast_src_ip 配置成自己机器的IP
priority 90 这里备机的权重设为90比主机低,主机宕机时权重-20,就切换到了备机
virtual_ipaddress {
192.168.42.11 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
完整配置:
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { state BACKUP #来决定主从 interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.42.77 #填写本机ip priority 90 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.42.11 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 }
这里配置完成后,主机和备机都以192.168.42.11作为虚拟ip
当我们访问虚拟ip时,它就会为我们分发请求,默认找主机
先来看一下主机和备机的效果
主机:
备机:
接着我们访问虚拟ip,在主机备机同时存活的情况下默认访问主机
这里从虚拟机中的ip中也可以看出来
命令:ip a
主机:
备机:
这时候我们模拟主机宕机
虚拟IP也转到了备机上
再在网页访问虚拟ip
也是切换到了备机上
这时再将主机重启
命令:service keepalived start
我们的主机又回来了
如果想模拟nginx宕机,需要我们给.sh脚本赋权
脚本如下
配置好后就会每2秒检测nginx是否存活,不存活则自动重启nginx,(配置了这里下一次就不需要启动nginx,直接启动keepalived就可以了)
我们也可以设置keepalived开机自启
命令:
至此,keepalived的大致配置结束
即实现了服务的高可用!