机器1 | 机器2 | vip |
---|---|---|
192.168.19.200 | 192.168.19.201 | 192.168.19.203 |
# 第一台
hostnamectl set-hostname nginx01
# 第二台
hostnamectl set-hostname nginx02
#关闭selinux
#永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时关闭
setenforce 0
#查看
getenforce
cat >> /etc/hosts << EOF
192.168.19.130 nginx01
192.168.19.131 nginx02
EOF
yum -y install keepalived
获取安装包https://www.keepalived.org/download.html
找到自己需要的版本安装,本次安装2.1.5,双机下载,也可以wget
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel -y
# 解压源码包
tar fx keepalived-2.1.5.tar.gz
# 进入解压后的目录
cd keepalived-2.1.5
# 配置选项
./configure --prefix=/usr/local/keepalived --sysconf=/etc --with-run-dir=/usr/local/keepalived/run
# 编译安装
make && make install
# 检查安装情况 如果等于0则代表成功编译安装
echo $?
# 创建存放pid的目录
mkdir /usr/local/keepalived/run
# 拷贝启动文件到/usr/sbin/
cp -rf /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
>/etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {# 唯一表示id 规格为keep_ip最优一段router_id keep_200
}
vrrp_script check_nginx {# 执行的检测脚本script "/etc/keepalived/check_nginx.sh"# 间隔检测的时间2sinterval 2# 检测失败降低权重,需要与主实例权重相减后小于备份实例weight -20
}
vrrp_instance VI_1 {# 指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUPstate BACKUP# 设置不抢占nopreempt# 网卡设置 此处记得修改,ip a s显示需要绑定vip的网卡interface ens33# 虚拟路由标识,是一个数字,不用更改virtual_router_id 51# 定义优先级,数字越大,优先级越高priority 100# 设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔advert_int 1# 设置验证类型和密码,两个节点必须一致authentication {auth_type PASSauth_pass 1111}# 脚本监控状态track_script {check_nginx}virtual_ipaddress {192.168.19.133}
}
! Configuration File for keepalivedglobal_defs {# 唯一表示id 规格为keep_ip最优一段router_id keep_201
}
vrrp_script check_nginx {# 执行的检测脚本script "/etc/keepalived/check_nginx.sh"# 间隔检测的时间2sinterval 2# 检测失败降低权重,需要与主实例权重相减后小于备份实例weight -20
}
vrrp_instance VI_1 {# 指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUPstate BACKUP# 设置不抢占nopreempt# 网卡设置 此处记得修改,ip a s显示需要绑定vip的网卡interface ens33# 虚拟路由标识,是一个数字,不用更改virtual_router_id 51# 定义优先级,数字越大,优先级越高priority 99# 设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔advert_int 1# 设置验证类型和密码,两个节点必须一致authentication {auth_type PASSauth_pass 1111}# 脚本监控状态track_script {check_nginx}virtual_ipaddress {192.168.19.133}
}
vim /etc/keepalived/check_nginx.sh
#!/bin/bashA=`ps -C nginx --no-header |wc -l`if [ $A -eq 0 ];thensystemctl start nginxif [ `ps -C nginx --no-header |wc -l` -eq 0 ];thensystemctl stop keepalivedelseexit 0fielseexit 0fi
systemctl enable keepalived
# 下载依赖
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
# 创建相关目录src为下载nginx安装包目录,soft为nginx安装目录
mkdir -p /data/{src,soft}
# 进入下载目录
cd /data/src/
# 下载nginx安装包
yum -y install wget
wget http://nginx.org/download/nginx-1.21.0.tar.gz
# 解压
tar fx nginx-1.21.0.tar.gz
cd nginx-1.18.0/
# 配置nginx编译环境
./configure --prefix=/data/soft/nginx --with-http_stub_status_module
# 编译安装
make && make install
# 检查安装是否有问题
echo $?
vim /lib/systemd/system/nginx.service
将下面文字直接粘贴进去修改
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
ExecStart=/data/soft/nginx/sbin/nginx -c /data/soft/nginx/conf/nginx.conf
ExecReload=/data/soft/nginx/sbin/nginx -s reload
ExecStop=/data/soft/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
ExecStart:nginx的启动命令
ExecReload:nginx的重载命令
ExecStop:nginx的停止命令
systemctl daemon-reload
systemctl enable nginx
第一台
"hello world 1" > /data/soft/nginx/html/index.html
第二台
"hello world 2" > /data/soft/nginx/html/index.html
# 开启keepalived
systemctl start keepalived
# 检查keepalived状态
systemctl status keepalived
首先查看vip在那台机器上,应该在第一台上,因为给的权重高
ip a s
浏览器访问下,访问vip
关闭第一台机器的nginx,这时候我们将check_nginx.sh的启动nginx命令先注释下,要不会自动启动
完成后停止第一台nginx
# 停止nginx
systemctl stop nginx
# 查看nginx状态
systemctl status nginx
# 查看keepalived 状态
systemctl status keepalived
# 查看vip在哪台机器上(两台执行)
ip a s
nginx 停止了
keepalived也停止了
查看vip 再第二台机器上,说明没问题
访问下浏览器http://192.168.19.203/
因为用的是不抢占模式,所以我们恢复下,看看vip会不会漂移回来(不漂移回来是对的)
首先修改刚刚修改的第一台check_nginx.sh脚本,将注释取消掉
直接启动第一台的keepalived,脚本会启动nginx的
# 启动第一台keepalived
systemctl start keepalived
# 查看状态
systemctl status keepalived
# 查看nginx启动状态
systemctl status nginx
# 都启动后查看vip再那台机器上(双机执行)
ip a s
还是再第二台上,说明没问题
上一篇:函数式编程:Lambda 表达式
下一篇:Linux操作系统学习(互斥)