千家信息网

Centos7 keepalived +nginx

发表于:2024-11-16 作者:千家信息网编辑
千家信息网最后更新 2024年11月16日,官网下载:keepalived-2.0.12.tarnginx-1.14.2.tar主机A:192.168.0.110/24主机B:192.168.0.120/24VRRP:192.168.0.200
千家信息网最后更新 2024年11月16日Centos7 keepalived +nginx

官网下载:
keepalived-2.0.12.tar
nginx-1.14.2.tar

主机A:192.168.0.110/24
主机B:192.168.0.120/24

VRRP:192.168.0.200/24

用winscp把文件上传到 /usr/local/
cd /usr/local/
安装keepalived:
(2)# cd /usr/local/
(3)# tar -zxvf keepalived-2.0.12.tar.gz
(4)# cd keepalived-2.0.12
(5)# ./configure --prefix=/usr/local/keepalived
(6)# make && make install

[root@localhost local]# tar -zxvf keepalived-2.0.12.tar.gz 

安装路径:/usr/local/keepalived

[root@localhost keepalived-2.0.12]# ./configure --prefix=/usr/local/keepalived
[root@localhost keepalived-2.0.12]# make && make install

如果是新的系统安装是需要安装依赖包,可以挂载光盘用本地yum安装。

[root@localhost keepalived-2.0.12]# mkdir /mnt/cdrom[root@localhost keepalived-2.0.12]# mount /dev/cdrom /mnt/cdrom/mount: /dev/sr0 is write-protected, mounting read-only cd /etc/yum.repos.d/ cp CentOS-Base.repo CentOS-Base.repo.bak  vi CentOS-Base.repo


保存

[root@localhost yum.repos.d]# yum repolist

报错1:

一次解决依赖包问题

[root@localhost yum.repos.d]# yum -y install openssl-devel gcc libnl-devel
[root@localhost keepalived-2.0.12]# yum -y install gcc   解决 

报错2:

[root@localhost keepalived-2.0.12]# yum -y install openssl-devel  解决

报错3:

[root@localhost keepalived-2.0.12]# yum -y install libnl-devel  解决

再次执行

./configure --prefix=/usr/local/keepalived  && make && make install    安装成为

没有任何错误出现

将keepalived添加到系统服务中

# 拷贝执行文件cp /usr/local/keepalived/sbin/keepalived /usr/sbin/# 将初始化脚本拷贝到系统初始化目录下cp /usr/local/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/# 将keepalived配置文件拷贝到etc下cp /usr/local/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/# 创建keepalived文件夹mkdir /etc/keepalived/# 将keepalived配置文件拷贝到etc下cp /usr/local/keepalived-2.0.10/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/# 添加可执行权限chmod +x /etc/init.d/keepalived# 添加keepalived到开机启动chkconfig --add keepalivedchkconfig keepalived on

此时已加入系统服务 可使用services 启动

#启动service keepalived start#停止service keepalived stop#重启service keepalived restart#查看启动情况ps -aux |grep keepalived

修改刚添加到系统的配置文件:vi /etc/keepalived/keepalived.conf
找到虚拟路由节点 vrrp_instance(Virtual Router Redundancy Protocol)

global_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL01    //router_id   不能想同   vrrp_skip_check_adv_addr   vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}vrrp_instance VI_1 {    state MASTER          //MASTER主节点,备用节点上设置为state BACKUP    interface ens32        //绑定虚拟机IP的网卡  两个节点设置一样 根据 ipaddr换成对应的网卡地址    virtual_router_id 51  //VRRP组名,主副节点设置必须一样,指名各个节点属于同一个VRRP组,同一个组的节点互相抢IP    priority 100         //优先级(1~254之间),备用节点必须比主节点优先级低    advert_int 1         //组播信息发送间隔,两个节点设置必须一样    authentication {    //设置验证信息, 两个节点设置必须一样,用于节点间信息转发时的加密        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {  // 虚拟IP两个节点设置必须一样,两节点同时抢一个io        192.168.0.200/24  // 如果两个nginx的ip分别是192.168.0.110,.120,则此处的虚拟ip跟它俩同一个网段即可 24代表3个255的子网掩码    }}

如果要 ping 192.168.0.200 还需要注释掉配置文件中的# vrrp_strict

-----*****---
主备都抢到了虚拟ip

挂载了光盘可以直接安装 tcpdump

 yum -y install tcpdump

采用 tcpdump 抓包定位问题,以下是在192.168.0.110 主节点的抓包结果
tcpdump -i ens32 vrrp -n

由上图可以看到,192.168.93.140和192.168.93.141两个IP在轮流发送组播信号。而正常的应该是由MASTER服务器发送组播,如果BACKUP收不到MASTER的组播信号了,那么判定MASTER宕机了,BACKUP就会接手VIP

问题就是出现在了防火墙这里,防火墙阻止了vrrp组包发送

如果是Firewalld防火墙 则主、备都运行下面的命令

[root@localhost etc]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPTsuccess或者[root@localhost etc]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface  ens32 --protocol vrrp -j ACCEPTsuccess[root@localhost etc]# firewall-cmd --reloadsuccess[root@localhost etc]# 

如果添加了没有正常重启下服务器

重启后正常.
服务器A:

服务器B:

至此Keepalived 安装完成。


安装 Nginx
安装所需环境
Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境。

一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++
二. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel
三. zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel
四. OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

不过在安装keepalived 时都安装 了这些依赖包了,下面直接安装 就 行了.

[root@localhost ~]# cd /usr/local/[root@localhost local]# tar -zxvf nginx-1.14.2.tar.gz [root@localhost local]# cd nginx-1.14.2[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx

出现这个就 没问题了

[root@localhost nginx-1.14.2]# make && nake install


如果 没有生成Nginx 文件夹 就分开执行 1. make 2. make install

nginx 命令

5.启动$ /usr/local/nginx/sbin/nginx检查是否启动成功:打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。部分命令如下:重启:$ /usr/local/nginx/sbin/nginx -s reload停止:$ /usr/local/nginx/sbin/nginx -s stop测试配置文件是否正常: $ /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful强制关闭:$ pkill nginx

经过编译安装以及解决问题,Nginx 已经运行正常,但是此时 Nginx 并没有添加进系统服务。接下来会将 Nginx 添加进系统服务并且设置开机启动。
在 /usr/lib/systemd/system 目录中添加 nginx.service 内容如下

[Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target

添加完成后再来看下

输入 systemctl start nginx 启动

然后输入 systemctl enable nginx 设置开机启动

Nginx 安装成功.

下面来测试下 主备 nginx

[root@localhost ~]# cd /usr/local/nginx/html/

修改 主 机 index.html
添加

MASTTER:192.168.0.110


修改 备 机 index.html
添加

BACKUP:192.168.0.120


记得修改完要重启nginx

[root@localhost html]# systemctl restart nginx

如果访问不了 WEB 就在隔火墙上 添加

[root@localhost html]# firewall-cmd --zone=public --permanent --add-port=80/tcpsuccess[root@localhost html]# firewall-cmd --reloadsuccess

这是 正常情况下访问:

下 面是关闭服务器 A 访问的页面


再把服务器A打 开访问网页


接着添加 一nginx 脚本 :新建 chk_nginx.sh

[root@localhost ~]# cd /etc/keepalived[root@localhost keepalived]# touch chk_nginx.sh

内容如下

[root@localhost keepalived]# chmod +x chk_nginx.sh    添加执行权限

修改keepalived.conf

[root@localhost keepalived]# systemctl restart keepalived

ok 测试 脚本先 执行

[root@localhost keepalived]# systemctl stop nginx

再访问 网页,发现转到备机上了

实验完成。

0