日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
nginx+keepalived:局域网内网和公网外网 搭建nginx HA 双机热备 高可用
nginx 自动解压gzip压缩数据的两种方式:nginx自动解压、后台java程序解压
nginx安装、nginx反向代理/负载均衡、Lua、LuaJIT、openresty、lua-nginx-module、ngx_devel_kit 的安装
nginx 配置获取GET请求参数、POST请求参数、nginx配置开启跨域访问、nginx+keepalived配置主备切换/双机热备、nginx优化配置
yum -y install gcc gcc-c++ lua-devel pcre pcre-devel zlib zlib-devel
禁用 防火墙(重启生效)
查看防火墙状态 systemctl status firewalld
查看开机是否启动防火墙服务 systemctl is-enabled firewalld
关闭防火墙 systemctl stop firewalld
禁用防火墙 systemctl disable firewalld
禁用 SELINUX
1.临时关闭SELINUX
setenforce 0 ##设置SELinux 成为permissive模式
getenforce ##可以用这个命令检查是否为Permissive 或者为 Disabled
2.永久关闭SELINUX
修改配置文件 vim /etc/selinux/config(重启生效)
将 SELINUX=enforcing 改为 SELINUX=disabled
3.查看SELINUX状态 sestatus
getenforce ##可以用这个命令检查是否为Permissive 或者为 Disabled
reboot 重启机器后 执行 sestatus 显示 SELinux status: disabled
nginx+keepalived:局域网内网 搭建nginx HA 双机热备 高可用
要求master和backup两台机器的广播地址要一致,那么才能通信进行master和backup之间的选举机制,也才能让vip在master和backup之间进行切换的通信
192.168.88.100 node1(master) 安装 nginx + Keepalived
192.168.88.101 node2(backup) 安装 nginx + Keepalived
192.168.88.110 vip(该IP可以为不存在的局域网内IP,只用于一开始映射master的网卡)
192.168.88.100 node1(master) 和 192.168.88.101 node2(backup) 安装 nginx
tar -zxvf nginx-1.17.0.tar.gz
cd /root/nginx
./configure --prefix=/usr/local/nginx
make
make install
修改 /usr/local/nginx/html/index.html 的页面内容 用于识别浏览器切换到哪台机器上的 nginx
nginx 启动 和 加载指定nginx.conf配置文件的方式启动
cd /usr/local/nginx/sbin 执行./nginx 或 ./nginx -c /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -s reload
浏览器访问 192.168.88.100 和 192.168.88.101
默认日志存放路径:/usr/local/nginx/logs
ps aux|grep nginx
192.168.88.100 node1(master) 和 192.168.88.101 node2(backup) 安装 keepalived
tar -zxvf keepalived-2.0.16.tar.gz
cd /root/keepalived
./configure --prefix=/usr/local/keepalived
make
make install
建立软链接
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
keepalived 启动 和 加载指定nginx.conf配置文件的方式启动
keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf
keepalived 关闭
killall keepalived
ps aux|grep keepalived
service keepalived restart 或 /bin/systemctl restart keepalived.service
service keepalived status 或 /bin/systemctl status keepalived.service
service keepalived stop 或 /bin/systemctl stop keepalived.service
service keepalived start 或 /bin/systemctl start keepalived.service
默认keepalived 日志存放在系统日志:cat /var/log/messages
ip addr 查看网卡名称,用以配置keepalived.conf中的interface
查看到 网卡名称为ens33。其他机器有可能是 eth0
keepalived帮助nginx热备切换的原理
1.当MASTER的nginx宕掉时,则可在循环检测的脚本中自动停止MASTER的keepalived,然后MASTER的vip就会移动到BACKUP上的nginx。
2.MASTER的keepalived停止会导致MASTER的vip移动到BACKUP上的nginx上,那么BACKUP 就会变成 MASTER,那么变成由MASTER的nginx提供服务。
当原本的MASTER上重启keepalived和nginx后,BACKUP重新变为BACKUP,MASTER重新又变为MASTER,重新由MASTER的nginx提供服务。
3.结论:要想达到nginx热备切换,就是当MASTER的nginx宕掉时,就需要通过脚本必须也把MASTER的keepalived停止掉,然后vip才会发生转移,
vip的转移体现在:通过ip addr查看到MASTER的网卡中的IP消失,IP转而出现在BACKUP的网卡中。
vip的转移的作用:通过IP访问nginx时,就会从MASTER的nginx转而访问BACKUP的nginx。
默认keepalived 日志存放在系统日志:cat /var/log/messages
192.168.88.100 node1(master) 配置keepalived.conf:vim /usr/local/keepalived/etc/keepalived/keepalived.conf
(在默认的keepalive.conf里面还有 virtual_server,real_server 这样的配置,我们这用不到,它是为lvs准备的。)
vim /home/data/keepalived/etc/keepalived/keepalived.conf
vrrp_script chk_http_port {
script "/root/chk_nginx_pid.sh"
interval 2 #检测脚本执行的间隔
weight 2
}
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 #当前进行vrrp通讯的网络接口卡(使用 ip addr 查看当前centos7的网卡名称,可能是ens33或eth0)
virtual_router_id 51 #虚拟路由编号,主备的virtual_router_id要一致
priority 100 #定义优先级,数字越大,优先级越高,获取处理请求的优先级越高,MASTER要比BACKUP的priority值高
advert_int 1 #检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #调用检测脚本 执行监控的服务
}
virtual_ipaddress {
192.168.88.110 #VIP:该IP不是真正存在的IP,是虚拟的不存在的IP
}
}
192.168.88.101 node2(backup) 配置keepalived.conf:vim /usr/local/keepalived/etc/keepalived/keepalived.conf
(在默认的keepalive.conf里面还有 virtual_server,real_server 这样的配置,我们这用不到,它是为lvs准备的。)
vim /home/data/keepalived/etc/keepalived/keepalived.conf
vrrp_script chk_http_port {
script "/root/chk_nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 这里改为 BACKUP
interface ens33
virtual_router_id 51
priority 99 # 当前BACKUP这里改为99,master优先级是100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.88.110
}
}
检测脚本
vim /root/chk_nginx_pid.sh
chmod 777 chk_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
echo 'nginx server is died'
sudo killall keepalived
fi
默认keepalived 日志存放在系统日志:cat /var/log/messages
nginx+keepalived:公网外网 搭建nginx HA 双机热备 高可用
应该要符合以下3条才能成功的
1.广播地址要 一样的
2.外网IP 之间可以互相ping通
3.vip虚拟IP 要用通过路由创建出来的外网IP(并且能访问外网),不能用外网网卡唯一IP
要求master和backup两台机器的广播地址要一致,那么才能通信进行master和backup之间的选举机制,也才能让IP在master和backup之间进行切换的通信
默认keepalived 日志存放在系统日志:cat /var/log/messages
node1(master) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
130.110.22.26 (外网网卡eno1中唯一的真正的公网IP)
130.110.22.27(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)
node2(backup) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
130.110.22.50(外网网卡eno1中唯一的真正的公网IP)
130.110.22.51(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)
使用node1(master) 的其中一个路由创建出来的公网IP 130.110.22.27 作为vip,可用于master和backup之间切换使用的vip。
注意1:通过路由创建出来的公网IP也必须是注册在互联网上服务器的唯一可用IP地址。
注意2:绝对不能使用外网网卡中唯一的真正的公网IP来作为vip,不然当vip切换的时候,外网网卡中唯一的真正 的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为vip。
检测脚本
vim /home/data/chk_nginx_pid.sh
cd /home/data
chmod 777 chk_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
echo 'nginx server is died'
sudo killall keepalived
fi
node1(master) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
130.110.22.26 (外网网卡eno1中唯一的真正的公网IP)
130.110.22.27(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)
注意:绝对不能使用外网网卡中唯一的真正的公网IP来作为 vip,不然当vip切换的时候,外网网卡中唯一的真正 的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为 vip。
vim /home/data/keepalived/etc/keepalived/keepalived.conf
global_defs
{
script_user root #用户名
enable_script_security
}
vrrp_script check_nginx {
script "/home/data/chk_nginx_pid.sh"
interval 3
}
vrrp_instance http {
state MASTER
interface eno1
lvs sync daemon interface eno1
mcast_src_ip 130.110.22.26
garp_master_delay 6
virtual_router_id 60
priority 110
advert_int 1
authentication {
auth_type PASS
autp_pass 1234
}
virtual_ipaddress {
130.110.22.27
}
track_script {
check_nginx
}
}
node2(backup) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
130.110.22.50(外网网卡eno1中唯一的真正的公网IP)
130.110.22.51(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)
注意:绝对不能使用外网网卡中唯一的真正的公网IP来作为 vip,不然当 vip切换的时候,外网网卡中唯一的真正 的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为 vip。
vim /home/data/keepalived/etc/keepalived/keepalived.conf
global_defs
{
script_user root #用户名
enable_script_security
}
vrrp_script check_nginx {
script "/home/data/chk_nginx_pid.sh"
interval 3
}
vrrp_instance http {
state BACKUP
interface eno1
lvs sync daemon interface eno1
mcast_src_ip 130.110.22.50
garp_master_delay 6
virtual_router_id 60
priority 105
advert_int 1
authentication {
auth_type PASS
autp_pass 1234
}
virtual_ipaddress {
130.110.22.27
}
track_script {
check_nginx
}
}
测试
keepalived 启动 和 加载指定nginx.conf配置文件的方式启动
keepalived -D -f /data/keepalived/etc/keepalived/keepalived.conf
/data/keepalived/etc/sysconfig/keepalived -D -f /data/keepalived/etc/keepalived/keepalived.conf
keepalived 关闭(yum install psmisc)
killall keepalived
netstat -an | grep 112 默认端口
ps aux|grep keepalived
默认日志存放在系统日志:cat /var/log/messages
ip addr
cdh01(master)
eno1:存在 vip地址
cdh02(backup)
eno1:不存在 vip地址
测试:停掉cdh01的nginx,同时keepalived自动执行脚本chk_nginx_pid.sh,keepalived也会自动停止
/data/nginx/sbin/nginx -s stop
ps aux|grep nginx
cdh01(master)
eno1:不存在 vip地址
cdh02(backup)
eno1:存在 vip地址
测试:重新启动cdh01的nginx、keepalived,必须先启动nginx 再启动keepalived,因为一启动keepalived,cdh02的vip就会重新漂移回到cdh01上
keepalived -D -f /data/keepalived/etc/keepalived/keepalived.conf
/data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
ps aux|grep keepalived
ps aux|grep nginx
默认日志存放在系统日志:cat /var/log/messages
日志中错误信息1:
Unsafe permissions found for script
script_user #脚本执行用户,该参数是我们根据官方说明手动添加的,默认没有,如果不添加,会报错 WARNING - default user 'keepalived_script' for script execution does not exist - please create.
enable_script_security #设置脚本的可运行性,该参数是我们根据官方说明手动添加的,默认没有,如果不添加,会报错 WARNING - default user 'keepalived_script' for script execution does not exist - please create.
解决:
global_defs
{
script_user gzp #用户名
enable_script_security
}