提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
新项目下来以后,搭建了基本的环境,两台web服务器(nginx代理转发)、两台APP(docker)、一台数据库(mysql),搭配nfs存储;部署环境可以连接公网。
这里先只记录部署nginx和keepalive。
做时间同步
安装时间同步工具ntpdata
# yum -y install ntp ntpdate
同步网络时间
# ntpdate cn.pool.ntp.org
制定计划任务,每日0点同步网络时间
crontab -e
每天0点同步一次
* 00 * * * /usr/sbin/ntpdate cn.pool.ntp.org
以上步骤所有服务器都操作
更改主机名
# hostnamectl set-hostname web1 && bash
修改主机名为web1 并执行bash启动新的bash就会看到更改后的主机名了。
如果有防火墙先关闭防火墙
# systemctl stop iptables
# systemctl stop firewalld
两种防火墙,个人比较习惯使用iptables,后面做策略也是使用iptables;没有的话可以安装一个;
# yum install iptables-services #安装这个比较方便管理。
安装依赖包
# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
下载并解压安装包
//创建一个文件夹
cd /usr/local
mkdir nginx
cd nginx
//下载tar包
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -xvf nginx-1.22.1.tar.gz
ps: 可以查看官网找自己需要的版本官网地址如下:
http://nginx.org/en/download.html
//进入nginx目录cd nginx-1.22.1
//执行命令 考虑到后续安装ssl证书 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
//执行make编译安装
//执行make install命令
make -j 4 && make install
-j 4 :此参数代表用4核心编译
配置nginx.conf
如果启动nginx可以正常访问页面的话可以忽略此步骤忽略,
vim /usr/local/nginx/conf/nginx.conf
root html; 改成自己的路径 /usr/local/nginx/html;
index 后面加一个 index.php 否则无法显示网页内容,报403错误的。
location / {
root /usr/local/nginx/html;
index index.html index.php index.htm,;
设置禁止显示nginx版本号:
server_tokens off;
#关闭显示Nginx版本号,为了安全。此内容在http模块下找个地方写就行
校验配置文件是否正确
/usr/local/nginx/sbin/nginx -t
看到如下显示代表正常:
nginx.conf syntax is ok
nginx.conf test is successful
#启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重新加载配置命令:
/usr/local/nginx/sbin/nginx -s reload
验证
浏览器页面输入自己的服务器地址出现下面页面表示安装成功:
添加环境变量,使nginx在任意目录都可以执行启动操作;
编辑/etc/profile文件在最后添加如下命令:
PATH=$PATH:/usr/local/nginx/sbin
export PAT
保存退出:
按ESC后输入 :wq
执行生效命令:
source /etc/profile
两台web部署操作方式相同
安装依赖包
yum install -y gcc openssl-devel libnl3-devel net-snmp-devel
安装keeplived
yum install keepalived -y
配置文件位置:
/etc/keepalived/
主Keepalived配置文件解析
web服务器VIP:192.168.10.100;
[root@ywbd-web1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1 # SMTP服务器地址(邮箱服务器地址)
smtp_connect_timeout 30 #超时时间
router_id NGINX # 路由器标识,一般不用改,也可改成应用名,主从服务器要一致
}
#一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_script check_nginx { #脚本模块
script "/etc/keepalived/check_nginx.sh" #脚本模块
interval 2 #每2秒钟检测一次脚本
#weight 10 #优先级
}
vrrp_instance VI_1 {
state MASTER # 定义初始状态,可以是MASTER或者BACKUP
interface eth0 #当前使用的网卡名
virtual_router_id 51 #虚拟路由id号
priority 100 #当前服务器优先级,数字越大越优先
advert_int 1 #检测心跳时间为1秒
authentication { #身份验证方式通信认证机制,这里是明文认证还有一种是加密认证
auth_type PASS #密码验证
auth_pass 1111 #密码为1111
}
virtual_ipaddress {
192.168.10.100 #VIP地址
}
track_script{ #添加监控条件
check_nginx #脚本模块后边定义的名称
}
}
Keepalived监控Nginx状态
编写监控脚本
cat /etc/keepalived/check_nginx.sh
#!/bin/bash
#1、判断 Nginx 是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ]; then
#2、如果不存活则尝试启动 Nginx
#/usr/local/nginx/sbin/nginx
sleep 5
#3、等待 5 秒后再次获取一次 Nginx 状态
counter=`ps -C nginx --no-header | wc -l`
#4、再次进行判断,如 Nginx 还不存活则停止 Keepalived,让地址进行漂移
if [ $counter -eq 0 ]; then
systemctl stop keepalived #停用keepalived服务
fi
fi
从服务器的keepalived配置
[root@ywbd-web2 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id NGINX
}
vrrp_script check_nginx { #这个地方名字不能乱改,系统不认识,
script "/etc/keepalived/check_nginx.sh"
interval 2 #每2秒钟检测一次脚本
}
vrrp_instance VI_1 {
state BACKUP #改这里
interface eth0
virtual_router_id 51
priority 80 #改这里
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.28.127.100
}
track_script {
check_nginx
}
}
keepalived相关命令:
启动:systemctl start keepalived
重启:systemctl restart keepalived
动态持续查看日志:tail -f /var/log/messages
启动keepalive后查看是否存在VIP地址:
[root@web1 conf]# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:7d:e3:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/19 brd 172.28.127.255 scope global dynamic eth0
valid_lft 72478sec preferred_lft 72478sec
inet 192.168.10.100/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe7d:e356/64 scope link
valid_lft forever preferred_lft forever
上面可以看到VIP192.168.10.100/32找个地址就是vip地址;
测试停止nginx后,会漂移到从服务器上为正常;
测试的时候需要把监控脚本中重启nginx的部分先注释掉,否则系统会重启nginx,无法看到VIP漂移的效果了。
/usr/local/nginx/sbin/nginx -s stop
分别登陆web1、web2服务器修改nginx配置
[root@web1 ~]# cd /usr/local/nginx/conf/ #进入配置文件目录
[root@web1 conf]# cp nginx.conf{,.bak} #备份原始配置文件
修改内容如下:
添加39~45行内容
修改端口为:19180;默认端口为:80。
注释掉50~54行内容。参数说明:
proxy_set_header Host $host:$server_port;
如果启用缓存,来自之前请求的头字段“If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”, “If-Match”, “Range”, 和 “If-Range” 将不会被代理服务器传递。一个不会变化的“Host”头请求字段可通过此配置传输,服务器名称和端口一起通过代理服务器传递。
proxy_set_header X-real-ip $remote_addr;
在web服务器端获得用户的真实ip。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
也是为了获取用户真实的ip
proxy_pass http://192.168.10.12:60086;
需要转发到的目标地址;
输入:wq保存退出。
[root@ywbd-web1 conf]# nginx -s reload
#重新加载配置(我做了nginx的环境变量配置,所有不需要指定路径)
或者执行下面的命令
[root@ywbd-web1 conf]# /usr/local/nginx/sbin/nginx -s reload
网页输入VIP地址访问:
http://192.168.20.100:19180
访问正常就表示配置成功了。
proxy_set_header X-real-ip $remote_addr;
在web服务器端获得用户的真实ip。
但是,实际上要获得用户的真实ip,不是只有这一个方法。
为了方便后续的nginx配置,添加多断的server段的模块,单独吧server部分的内容分离出来,相关配置如下:!在nginx配置的最后一个中括号上方添加如下命令:
include /usr/local/nginx/conf/conf.d/*.conf;
在nginx配置文件下创建conf.d文件,然后在conf.d目录想创建对应的server内容文件即可:
[root@web1 conf.d]# pwd
/usr/local/nginx/conf/conf.d
对应的文件如下:
[root@web1 conf.d]# ls
ywbd.conf zljz.conf
大概内容如下:
[root@web1 conf.d]# cat zljz.conf
server {
charset utf-8;
listen 20053 ssl;
#填写证书绑定的域名
server_name idc.sheec.cn;
root html;
index index.html index.htm;
#填写证书文件名称
ssl_certificate /opt/ssl_certs/idc.sheec.cn.pem;
#填写证书私钥文件名称
ssl_certificate_key /opt/ssl_certs/idc.sheec.cn.key;
ssl_session_timeout 5m;
#表示使用的加密套件的类型
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.97.9:20053/;
#Web网站程序存放目录
root html;
index index.html index.htm;
}
}
部署后整理记录方便后续如有相关的不是可以直接拿来用或者作为参考,以后如果忘记了也可以拿来参考一下。