nginx+keepalived高可用
一、准备安装包
1、如果机器本身有网络的话,可以直接执行:
yum -y install nginx keepalived |
2、如果机器没有网络的话,可以登录有网的机器使用
① 下载nginx需要的依赖环境
repotrack nginx ##提前创建一个目录:mkdir rpm-nginx |
② 下载keepalived需要的依赖环境
repotrack keepalived ##提前创建一个目录:mkdir rpm-keepalived |
③ 将nginx的rpm包打包
tar -cvf rpm-nginx.tar.gz /rpm-nginx/ |
④ 将keepalived的rpm包打包
tar -cvf rpm-keepalived.tar.gz /rpm-keepalived/ |
将准备好的rpm-nginx.tar.gz和rpm-keepalived.tar.gz上传至需要部署高可用的机器即可。
二、准备环境
1、准备至少两台虚机,下文以192.168.190.151和192.168.190.152机器为例
机器IP | 节点 | CPU&内存 |
192.168.190.151 | Master | 2C4G |
192.168.190.152 | Worker | 2C4G |
2、关闭防火墙(主备机都需要关闭)
systemctl status firewalld 若关闭,则检查下一项,若开启,则需要执行如下命令 systemctl stop firewalld ##临时关闭防火墙, systemctl disable firewalld ##永久关闭防火墙 |
三、详细步骤
1、如果机器有网:
yum -y install nginx keepalived |
2、如果机器没网,将上传好的rpm包解压:
(PS:192.168.190.152机器上的操作和192.168.190.151机器上的操作一致),下文以192.168.190.151机器为例:
① 解压 nginx tar包
tar -xvf rpm-nginx.tar.gz ##提前创建一个目录:mkdir nginx |
② 解压 keepalived tar包
tar -xvf rpm-keepalived.tar.gz ##提前创建一个目录:mkdir keepalived |
③ 进入nginx和keepalived目录后分别执行:
rpm -Uvh --force --nodeps *.rpm |
3、完成高可用配置:
一般情况下,无论是yum安装还是rpm安装,文件的目录都在/etc下。
① 备份:
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak |
② 配置conf文件
vi /etc/keepalived/keepalived.conf |
内容(1192.168.190.151):
global_defs { notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个 acassen@firewall.loc # 收件人邮箱1 failover@firewall.loc # 收件人邮箱2 sysadmin@firewall.loc # 收件人邮箱3 } notification_email_from Alexandre.Cassen@firewall.loc #邮件发件人 smtp_ server 192.168.190.151 #主服务器的ip地址。邮件服务器地址 smtp_connect_timeout 30 # 超时时间 router_id LVS_DEVEL # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机 } vrrp_script chk_http_ port { script "/usr/local/src/nginx_check.sh" #检测脚本存放的路径 interval 2 # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次 weight 2 #权重,如果这个脚本检测为真,服务器权重+2 } vrrp_instance VI_1 { state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP interface ens33 # 通信端口 通过ip addr可以看到,根据自己的机器配置 virtual_router_id 51 # vrrp实例id keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同 priority 100 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管; authentication { # 服务器之间通信密码 auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信 auth pass 1111 } virtual_ipaddress { # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.91.138,那么虚拟ip可以设置为192.168.91.139~255,前面三个数得一致 192.168.190.50 定义虚拟ip(VIP),可多设,每行一个 } } |
内容(192.168.190.152):
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_ server 192.168.190.152 #备份服务器的ip地址 smtp_connect_timeout 30 router_id LVS_DEVEL # LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机 } vrrp_script chk_http_ port { script "/usr/local/src/nginx_check.sh" #检测脚本 interval 2 # (检测脚本执行的间隔)2s weight 2 #权重,如果这个脚本检测为真,服务器权重+2 } vrrp_instance VI_1 { state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡 virtual_router_id 51 # 虚拟路由编号,主、备机的virtual_router_id必须相同 priority 90 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数),每隔1s发送一次心跳 authentication { # 校验方式, 类型是密码,密码1111 auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信 auth pass 1111 } virtual_ipaddress { # 虛拟ip 192.168.190.50 定义虚拟ip(VIP),可多设,每行一个 } } |
③ 创建检查脚本
vi /usr/local/src/nginx_check.sh(PS:主备机都需要) |
内容:
#! /bin/bash #检测nginx是否启动了 A=ps -C nginx -no-header | wc - 1 if [ $A -eq 0];then #如果nginx没有启动就启动nginx /usr/sbin/nginx #通过Nginx的启动脚本来重启nginx sleep 2 if [ps -C nginx --no-header| wc -1 -eq 0 ];then #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移 killall keepalived fi fi |
上文中标红加粗部分为nginx的启动路径,如果不知道路径在哪儿,可以执行:
find / -name “*nginx*”,找到含有sbin目录的nginx
4、全部设置完成之后,分别在主备机上执行启动指令:
systemctl start nginx systemctl start keepalived |
5、验证
登录windows浏览器打开:192.168.190.151来访问nginx,如果主机上的nginx不宕机,无论刷新几次都是主机上的资源,现在在主机上执行:
systemctl stop nginx systemctl stop keepalived |
此时再访问192.168.190.151,如果能正常访问,即代表备机在此时工作了。