nginx+keepalived主备双机部署
1. 环境准备
两台服务器10.10.36.30和10.10.36.31
同一网段的虚拟IP:10.10.36.29
2. 安装nginx
-
安装编译环境
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel -
下载安装包并解压
wget https://nginx.org/download/nginx-1.16.1.tar.gz tar -zxvf nginx-1.16.1.tar.gz -
配置编译和安装
./configure --prefix=/usr/local/nginx make && make install -
配置为系统服务
vim /lib/systemd/system/nginx.service # nginx.service内容如下 [Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target# 编辑保存后需重新加载系统服务 systemctl daemon-reload -
设置开机启动
# 设置开机启动 systemctl enable nginx.service -
服务的常用命令
#启动nginx服务 systemctl start nginx.service #停止服务 systemctl stop nginx.service #重新启动服务 systemctl restart nginx.service #查看服务当前状态 systemctl status nginx.service #设置开机自启动 systemctl enable nginx.service # 停止开机自启动 systemctl disable nginx.service
3. 安装keepalived
-
用yum命令进行安装
yum install keepalived #查看是否已经安装上 rpm -q -a keepalived -
修改配置文件
# /etc/keepalived目录里面有配置文件keepalived.conf vim /etc/keepalived/keepalived.conf # 赋权 chmod 644 /etc/keepalived/keepalived.conf # keepalived.conf的内容如下 global_defs { router_id keep_30 # 唯一标识 } # 执行nginx是否启动的脚本,未启动则启动nginx,启动失败则杀死keepalived进程 vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 5 # 检测脚本执行的间隔:5s weight 5 # 权重,如果这个脚本检测为真,服务器权重+5 } vrrp_instance VI_1 { state MASTER # 主服务器为MASTER,备份服务器为BACKUP interface ens33 # 网卡名称 virtual_router_id 51 # 主、备机的virtual_router_id必须相同 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 # 每隔1s发送一次心跳 authentication { # 校验方式,类型是密码,密码1111 auth type PASS auth pass 1111 } virtual_ipaddress { # 虛拟ip 10.10.36.29 # 需要与当前服务器属于同一网段 } } -
创建nginx检测脚本
vim /usr/local/src/nginx_check.sh chmod 755 /usr/local/src/nginx_check.shnginx_check.sh内容如下
#!bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then #如果nginx没在运行 systemctl start nginx.service #启动nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #如果无法启动 killall keepalived #杀死keepalived进程 fi fi -
设置开机启动
systemctl enable keepalived.service -
常用命令
#启动nginx服务 systemctl start keepalived.service #停止服务 systemctl stop keepalived.service #重新启动服务 systemctl restart keepalived.service #查看服务当前状态 systemctl status keepalived.service #设置开机自启动 systemctl enable keepalived.service # 停止开机自启动 systemctl disable keepalived.service
4. 定时清理nginx日志
-
添加系统定时任务
crontab -e #每天0时1分进行日志分割 01 00 * * * /usr/share/nginx/logs/cut_nginx_log.sh -
新建cut_nginx_log.sh脚本
vim /usr/share/nginx/logs/cut_nginx_log.sh chmod 755 /usr/share/nginx/logs/cut_nginx_log.shcut_nginx_log.sh内容如下
#!/bin/bash #每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件 #Nginx日志文件所在目录 LOG_PATH=/usr/local/nginx/logs/ #获取昨天的日期 YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) #删除文件的日期 SEVENDAY=$(date --date="30 days ago" +%Y-%m-%d) #获取pid文件路径 PID=/usr/local/nginx/logs/nginx.pid #分割日志 mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log rm ${LOG_PATH}access-${SEVENDAY}.log rm ${LOG_PATH}error-${SEVENDAY}.log #向Nginx主进程发送USR1信号,重新打开日志文件 kill -USR1 `cat ${PID}`
5. 验证
-
启动两台服务器上的nginx和keepalived
systemctl start nginx.service systemctl start keepalived.service -
在浏览器地址栏输入虚拟ip地址10.10.36.29
-
把主服务器(10.10.36.30) nginx和keealived停止,再输入虚拟ip地址10.10.36.29
systemctl stop keepalived.service systemctl stop nginx.service -
以上访问都成功则配置成功