Linux虚拟机 配置keepalived+nginx 实现双机热备(离线安装+简单配置+测试)新增 (LVS 负载均衡 ipvsadm+keepalived)

准备两台linux服务器
例:主:192.168.1.17 备:192.168.1.18 虚拟ip:192.168.1.101
安装配置 nginx 的略过不提,有需要请查阅 nginx 相关文档

安装包下载地址

以下安装包下载地址-开源

1.准备 keepalived的安装环境 安装keepalived

1.1、安装popt

上传keepalived-1.1.20.tar.gz、daemon-0.6.4.tar.gz和 popt_1.18.orig.tar.gz

解压压缩文件
# tar -zxvf popt_1.18.orig.tar.gz
进入目录
# cd popt-1.18/
离线安装
# ./configure
# make && make install 

1.2、安装daemon-0.6.4.tar

解压压缩文件
# tar -zxvf daemon-0.6.4.tar.gz
# cd daemon-0.6.4
# ./configure
# make && make install	

1.3、安装 keepalived

解压压缩文件
# tar -zxvf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20/
# ./configure --prefix=/usr/local/keepalived  --sysconf=/etc
# make && make install	

1.4、查看是否安装成功 查看版本号

# keepalived -v 

1.5、配置环境、启动脚本等

# 将keepalived主程序加入到环境变量(安装目录下)
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

# 去keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
# cp /usr/local/keepalived-1.1.20/keepalived/etc/init.d/keepalived.init /etc/init.d/keepalived.init 

# 如果/usr/local/sbin/已存在可以忽略
# cp /usr/local/keepalived/sbin/keepalived /usr/local/sbin/

查看/etc/rc.d/init.d/functions文件和文件夹是否存在  没有的话创建这个路径和文件夹 运行下面指令  否则启动时会出错
# ln -s /lib/lsb/init-functions /etc/rc.d/init.d/functions

1.5.1、查看是否安装成功 查看版本号

keepalived -v 查看版本号

如果报错 (没有请忽略)
keepalived: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
执行以下代码
ln -s /usr/local/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

1.6 查看启动文件配置 修改配置文件为具体路径 避免启动出错

# 查看启动配置
vim /etc/sysconfig/keepalived

# 注释掉原有的 KEEPALIVED_OPTIONS="-D"
#KEEPALIVED_OPTIONS="-D"

# 添加 配置文件路径
KEEPALIVED_OPTIONS="-f /etc/keepalived/keepalived.conf.sample -D -d -S 0"

1.7 keepalived 启动日志路径

# 常用Liunx环境下
# tail -555f /var/log/messages

# 银河麒麟国产环境下
# tail -555f /var/log/syslog

2.keepalived 常用指令

# 启动
# systemctl start keepalived.service
# 停止
# systemctl stop keepalived.service
# 状态
# systemctl status keepalived.service

到此可以启动一下 查看状态是否可以启动成功

3. keepalived 配置文件

3.1打开配置文件路径 修改配置

# /etc/keepalived/keepalived.conf

3.2主 192.168.1.17 配置文件

# 可直接复制替换所有内容
! Configuration File for keepalived
global_defs {
 router_id LVS_DEVEL
}
# nginx 监听脚本 如果nginx 挂掉 会停止 当前服务器的 keepalived 切换到另一台服务器
vrrp_script chk_nginx {
	script "/etc/keepalived/nginx_check.sh"#  执行脚本所在的位置
	interval 2 	#  检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
	weight 2
}

vrrp_instance VI_1 {  # 定义一个实例
    state MASTER   #  主服务 必须要是 MASTER  
    interface eth0 #  指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。  改为自己本地IP 所用的 网口 # ip addr 来查看网口
    virtual_router_id 101 #  虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。
    priority 100   #  指定这个实例优先级  主备值差不要超过 10
#    unicast_src_ip 192.168.1.17  # 配置单播的源地址
#    unicast_peer { 
#        192.168.1.18  #  配置单播的目标地址
#    }   
    advert_int 1       #  心跳报文发送间隔
    authentication {
        auth_type PASS      #  设置验证类型,主要有PASS和AH两种
        auth_pass test123   #  设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信
    }
    virtual_ipaddress {     #  设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.1.101       #  自定义的 虚拟ip  VIP  也是测试时需要访问的ip
    }
    track_script {
        chk_nginx
    }
}
#以下是做lvs+keepalived集群所需要的负载配置 定义对外提供服务的LVS的VIP以及port 对于nginx做了负载的屏蔽掉下面代码即可
# **

## 由于负载容易出现问题,本人不是很了解,所以抛弃了这种方式,感兴趣的可以搜索学习以下,仅供参考!

**
#virtual_server 192.168.1.101 80 {  
#    delay_loop 6 # 设置健康检查时间,单位是秒                    
#    lb_algo wrr # 设置负载调度的算法                   
#    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
#    nat_mask 255.255.255.0                
#    persistence_timeout 0          
#    protocol TCP                  
#    real_server 192.168.1.17 443 {  # 指定real server1的IP地址
#        weight 3   # 配置节点权值,数字越大权重越高              
#        TCP_CHECK {  
#        connect_timeout 10         
#        nb_get_retry 3  
#        delay_before_retry 3  
#        connect_port 80  
#        }  
#    }  
#    real_server 192.168.1.18 443 {  # 指定real server2的IP地址
#        weight 3  # 配置节点权值,数字越大权重越高  
#        TCP_CHECK {  
#        connect_timeout 10  
#        nb_get_retry 3  
#        delay_before_retry 3  
#        connect_port 80  
#        }  
#     }  
#} 

33.备 192.168.1.18 配置文件

# 可直接复制替换所有内容
! Configuration File for keepalived
global_defs {
 router_id LVS_DEVEL2
}
# nginx 监听脚本 如果nginx 挂掉 会停止 当前服务器的 keepalived 切换到另一台服务器
vrrp_script chk_nginx {
	 script "/etc/keepalived/nginx_check.sh"#  执行脚本所在的位置
	 interval 2 	#  检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
	 weight 2
}

vrrp_instance VI_1 {  # 定义一个实例
    state BACKUP   #  备服务 必须要是 BACKUP
    interface eth0 #  指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。  改为自己本地IP 所用的 网口
    virtual_router_id 101 #  虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。
    priority 90   #  指定这个实例优先级  主备值差不要超过 10
#    unicast_src_ip 192.168.1.18  # 配置单播的源地址
#    unicast_peer { 
#        192.168.1.17  #  配置单播的目标地址
#    }   
    advert_int 1       #  心跳报文发送间隔
    authentication {
        auth_type PASS      #  设置验证类型,主要有PASS和AH两种
        auth_pass test123   #  设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信
    }
    virtual_ipaddress {     #  设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.1.101       #  自定义的 虚拟ip  VIP  也是测试时需要访问的ip
    }
    track_script {
        chk_nginx
    }
}
#以下是做lvs+keepalived集群所需要的负载配置 定义对外提供服务的LVS的VIP以及port 对于nginx做了负载的屏蔽掉下面代码即可
# **

## 由于负载容易出现问题,本人不是很了解,所以抛弃了这种方式,感兴趣的可以搜索学习以下,仅供参考!

**
#virtual_server 192.168.1.101 80 {  
#    delay_loop 6 # 设置健康检查时间,单位是秒                    
#    lb_algo wrr # 设置负载调度的算法                   
#    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
#    nat_mask 255.255.255.0                
#    persistence_timeout 0          
#    protocol TCP                  
#    real_server 192.168.1.17 443 {  # 指定real server1的IP地址
#        weight 3   # 配置节点权值,数字越大权重越高              
#        TCP_CHECK {  
#        connect_timeout 10         
#        nb_get_retry 3  
#        delay_before_retry 3  
#        connect_port 80  
#        }  
#    }  
#    real_server 192.168.1.18 443 {  # 指定real server2的IP地址
#        weight 3  # 配置节点权值,数字越大权重越高  
#        TCP_CHECK {  
#        connect_timeout 10  
#        nb_get_retry 3  
#        delay_before_retry 3  
#        connect_port 80  
#        }  
#     }  
#} 

3.4.nginx_check.sh 脚本文件

如果不需要nginx的 可以将 nginx 有关配置去掉,只测试 keepalived.

# 在/etc/keepalived/路径下创建 nginx_check.sh  文件
# 加入以下内容
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
 /usr/local/nginx/sbin/nginx 	#Nginx启动命令的位置
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  ps -C keepalived --no-header | awk '{print $1}' | xargs kill
 fi
fi

4.启动 keepalived 服务

4.1启动主服务器keepalived 服务

# 打开启动日志
# tail -555f /var/log/messages

# systemctl start keepalived
# 出现以下内容
 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs       Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on enp11s0 for 192.168.109.101
# Entering MASTER STATE 代表以 主服务器  启动

# 执行 ip addr 查看是否生成 虚拟ip
# 如果 **** 自定义的 VIP 虚拟ip 代表配置成功
# ip addr
  inet 192.168.1.101/32 scope global enp11s0

4.2启动备服务器keepalived 服务

# 打开启动日志
# tail -555f /var/log/messages

# systemctl start keepalived
# 出现以下内容
 Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
# Entering BACKUP STATE 代表以 备服务器  启动

# 执行 ip addr 查看是否生成 虚拟ip
# 如果 **没有** 自定义的 VIP 虚拟ip 代表配置成功
  inet 192.168.1.101/32 scope global enp11s0

4.3如果主备 都显示 虚拟ip

inet 192.168.1.101/32 scope global eth0
# 应该是防火墙的问题  需要关闭两个服务器防火墙  在测试

# 查看防火墙状态
# systemctl status firewalld

# 关闭防火墙
# systemctl stop firewalld

# 如果可以了  那么需要在防火墙 开启 vrrp 和 icmp
# 查看防火墙列表 **Chain IN_public** 是否有 icmp 有的话不需要再加
# iptables -nL

# 开启 防火墙 
# systemctl start firewalld

# 开启 vrrp 和 icmp
# iptables -A IN_public -p vrrp -j ACCEPT
# iptables -A IN_public -p vrrp -j icmp

# 测试查看 虚拟ip 是否只在 主服务显示  还是主备都有的话需要查看日志解决了

5.测试 keepalived 主备 切换

# 执行 主服务 keepalivde 的停止命令
# systemctl stop keepalived

# 查看 17 主服务的 192.168.1.101 是否还存在
# ip addr 
# 如果 inet 192.168.1.101/32 scope global enp11s0 不存在 为正常

# 查看 18 备服务器 192.168.1.101 是否存在
# ip addr 
# 如果 inet 192.168.1.101/32 scope global enp11s0 存在 标识切换成功

# 也可以查看 18 备服务器日志
# tail -555f /var/log/messages 
# 如果 18 备服务器日志出现 

 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
 # 也代表  主备切换成功	

6. nginx 测试 以 https 443 接口为例

#  17服务器 https://192.168.1.17:443/ 
#  18服务器 https://192.168.1.17:443/
# 测试keepalived访问  http://192.168.1.101:443/
# 如果访问可以通过 标识keepalived+nginx 正常
# systemclt stop keepalived 停掉 17 主服务器 
# 测试keepalived访问  http://192.168.1.101:443/
# 内容为  18服务器 https://192.168.1.17:443/

6.1 nginx负载均衡安装部署

1.安装gcc-c++.zip
gcc-c++.zip上传至/home/目录下
解压压缩包unzip gcc-c++.zip
进入gcc-c++目录,执行rpm -Uvh *.rpm --nodeps --force

2.安装pcre-8.35.tar.gz
pcre-8.35.tar.gz上传至/home/目录下
先解压 tar -zxvf pcre-8.35.tar.gz 
进入解压后的pcre-8.35,执行./configure
make && make install

3.安装nginx-1.13.9.tar.gz
nginx-1.13.9.tar.gz上传至/home/vpn_server/目录下
解压文件 tar xvf nginx-1.13.9.tar.gz
进入解压后的nginx-1.13.9;
执行./configure --with-stream --prefix=/home/nginx;
make && make install;
启动测试/home/nginx/sbin/nginx -c /home/nginx/conf/nginx.conf

----------
龙芯系统安装问题记录
nginx安装error: ‘struct crypt_data’ has no member named ‘current_salt’ cd.current_salt[0] = ~salt[0];
解决办法如下:强调!!!必须同时配置!!!
1、删/usr/src/nginx-1.13.9/objs/Makefile文件中的“ -Werror2、注释掉/usr/local/nginx/nginx-1.13.9/src/os/unix/nginx_user.c第26行的"cd.current_salt[0] = ~salt[0];"
----------

6.2 nginx负载简单配置

# 详细配置请自行搜索学习--这里只例举简单配置
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #keepalive_timeout  0;
    underscores_in_headers on;
    keepalive_timeout  300;
    proxy_buffer_size 128k;
    proxy_buffers   32 128k;
    proxy_busy_buffers_size 128k;
    #gzip  on;
    upstream systemmgr{
       ip_hash;
       server 192.168.10.1:8080; # 项目部署的服务器ip 
       server 192.168.10.2:8080; # 项目部署的服务器ip 
       #hash $request_uri;
    }
    #http资源
    server {
        listen  192.168.10.3:8081;#这里是监听keepalived的虚拟IP
        add_header Cache-Control no-cache;
        location / {
           proxy_pass  http://systemmgr;
           proxy_set_header Host $proxy_host;
        }
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
           proxy_set_header   Host $host;
           proxy_pass http://systemmgr;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
           expires      12h;
        } 
        location ~ .*.(woff|ttf|min|js|css)?$
        {
           proxy_set_header   Host $host;
           proxy_pass http://systemmgr;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
           expires      12h;
        } 
    }
}
#tcp 资源
stream {
   tcp_nodelay  on;
      upstream system8445{
       server 192.168.10.1:443; # 服务器ip端口 
       server 192.168.10.2:443; # 服务器ip端口 

   } 
   server {
        listen  192.168.10.3:445;
        proxy_pass  system8445;
    }
}

7.新增 lvs ipvsadm 离线安装 实现负载

7.1安装libnl

# tar -zxvf libnl-1.1.4.tar.gz
# cd libnl-1.1.4
# ./configure 
# make && make install

7.2安装libnl-devel

# rpm -ivh libnl-devel-1.1.4-3.el7.x86_64.rpm --nodeps

7.3安装ipvsadm-1.26

# tar -zxvf ipvsadm-1.26.tar.gz
# cd ipvsadm-1.26
# make && make install

# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
# 执行 查看安装是否成功
# ipvsadm

7.4 两台服务器17,18配置相同

#添加ipvsadm负载配置
# ipvsadm -At 192.168.109.101:8080 -s rr
# ipvsadm -at 192.168.109.101:8080 -r 192.168.109.17:8080 -g
# ipvsadm -at 192.168.109.101:8080 -r 192.168.109.18:8080 -g

# 绑定vip
# ip addr add 192.168.109.101/32 dev lo label lo:0

# 添加主机路由
# route add -host 192.168.70.5 dev lo
# 查看路由
# route -n


# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore 
# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

#查看转发详情
# ipvsadm -lnc

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heart&Fire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值