|  | 本次实验中需要使用到四台主机:
 四台虚拟机上安装的都是centos7.6操作系统
 
 
  |  | | 主机名 | ip | 功能 | 
|---|
 | nginx_master | 192.168.8.128 | 负载均衡,健康检查 |  | nginx_backup | 192.168.8. 129 | nginx_master的小弟 |  | web1 | 192.168.8.126 | 提供web服务 |  | web2 | 192.168.8.127 | 提供web服务 |  
 说简单点,小弟的作用就是在大哥有危难之际,替大哥挨刀的。当nginx_master出现故障时,nginx_backup就代替nginx_master正常工作。
 另外还有一个虚拟 ip:192.168.8.242
 keepalived可以将多个无状态的单点通过虚拟IP(VIP)漂移的方式搭建成一个高可用服务。
 
 一、负载均衡服务器nginx的配置
 nginxmaster和nginxbackup上都需要进行以下操作
 
 1、docker安装
 安装yum-utils,它提供一个yum-config-manager单元,同时安装的device-mapper-persistent-data和lvm2用于储存设备映射(devicemapper)必须的两个软件包。
 
   yum install -y yum-utils device-mapper-persistent-data lvm2
  紧接着配置一个稳定(stable)的仓库?
 仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中。
 
  生成元数据
 
  安装docker-ce
 
  2、 配置deamon.json和nginx.conf文件
 编辑daemon.json文件,填写阿里云镜像仓库的地址并指定docker数据存储目录
 vim daemon.json。
 
   { "registry-mirrors": ["你的阿里镜像仓库地址"], "graph": "/data/docker" }重新加载daemon,重启docker服务。
 
   [root@localhost docker]# systemctl daemon-reload[root@localhost docker]# systemctl restart docker
 
  
 把docker加入开机启动
 
 
  
 拉取一个nginx镜像
 
 
  
 创建nginx配置文件目录,启动一个nginx-c容器并把容器里的nginx.conf拷贝到本地
 
 
  
 删除容器nginx-c
 
  这两步就是在nginx容器的配置文件的基础上修改参数,以实现想要的功能。
 
 3、创建nginx容器并对其进行配置
 
 (1)编写创建nginx容器的脚本
 
   #!/bin/bash注:--restart=always是重启策略,当docker服务重启后,容器也会自动启动docker run --name nginx --restart=always -p 80:80 \
 -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
 -v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
 -v /data/docker/nginx/html:/usr/share/nginx/html \
 -v /data/docker/nginx/logs:/var/log/nginx \
 -d nginx:latest
 
 
 
  
 (2)  赋予脚本执行权限 并运行
 
   chmod +x docker_nginx.shsh docker_nginx.sh
 
  
 (3)修改nginx主配置文件
 
   vim /data/docker/nginx/conf/nginx.conf修改前
 
  修改后
 
  
 (4) 创建upstream配置文件
 
   vim /data/docker/nginx/conf/conf.d/myhost.conf(5)  创建虚拟主机配置文件upstream xuad {
 ip_hash; #会话保持
 server 192.168.2.226 max_fails=1 fail_timeout=60s;
 server 192.168.2.227 max_fails=1 fail_timeout=60s;
 }
 
  
 
   vim /data/docker/nginx/conf/conf.d/xuad.conf#查看nginx的并发连接数配置server {
 listen     80;
 server_name  localhost;
 #charset GB2312;
 location /
 {
 proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_pass http://lxc;
 }
 
 
   location /NginxStatus {
 stub_status on;
 access_log off;
 auth_basic "NginxStatus"; } access_log off;
 error_page 404 /404.html;
 error_page 500 502 503 504 /404.html;
 location = /404.html {
 root    html;
 }
 limit_conn perip 200; #同一ip并发数为200,超过会返回503
 }
 
  (6)重启nginx容器
 docker restart nginx
 
 二、负载均衡服务器keepalived的配置
 nginxmaster和nginxbackup上都需要进行以下操作
 1 下载并安装keepalived
 
 分别在NGINX_MASTER、NGINX_BACKUP两台服务器上操作
 注:keepalived安装在实体机上
 yum install wget make gcc gcc-c++ openssl-devel
 wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
 tar zxvf keepalived-2.0.7.tar.gz
 cd keepalived-2.0.7
 ./configure --prefix=/data/keepalived
 
 如果报以下警告:
 WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
 不用担心,我们只需要用到VRRP功能,不需要用IPVS功能,所以请确保以下三项是yes就行了。
 
 
  
 编译
 make
 make install
 
 2、将keepalived 以服务方式启动
 创建/etc/keepalived目录并把keepalived的配置文件拷贝/etc/keepalived目录下并加入到开机启动。
 
   mkdir /etc/keepalived cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ systemctl enable keepalived
 
  
 3、 修改keepalived配置文件
 
   vim /etc/keepalived/keepalived.conf! Configuration File for keepalived
 global_defs {
 notification_email {
 lxc@lxc.com
 }
 notification_email_from root@lxc.com
 smtp_server mail.lxc.com
 smtp_connect_timeout 30
 router_id LVS_DEVEL
 vrrp_skip_check_adv_addr
 vrrp_strict
 vrrp_garp_interval 0
 vrrp_gna_interval 0
 }
 
 vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_pid.sh" # 检查nginx状态的脚本
 interval 2
 weight 3
 }
 vrrp_instance VI_1 {
 state MASTER #备份服务器上将MASTER改为BACKUP
 interface ens32 virtual_router_id 51 priority 100 #备份服务上将100改为小于100,可配置成90
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 192.168.8.242 #有多个vip可在下面继续增加
 }
 track_script {
 chk_nginx
 }
 }
 
  
 4、添加检查nginx状态的脚本
 
   vim /etc/keepalived/nginx_pid.sh脚本说明:当nginx进程不存在时,会自动重启docker服务,docker服务启动时会自动启动nginx容器;再次检查nginx进程,如果不存在,就停止keepalived服务,然后NGINX_BACKUP主机会自动接替NGINX_MASTER的工作。#!/bin/bash
 #version 0.0.1
 A=
 
 
 | ps -C nginx --no-header |wc -l | 
 if [ $A -eq 0 ];then
 systemctl restart docker
 sleep 3
 if [
 
 
 | ps -C nginx --no-header |wc -l | 
 -eq 0 ];then
 systemctl stop keepalived
 fi
 fi
 
 
   chmod +x /etc/keepalived/nginx_pid.sh
  
 5、配置firewalld防火墙允许vrrp协议
 
   VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.8.129" protocol value="vrrp" accept"
 firewall-cmd --reload
 
  如果是backup服务器,source address改成master服务器的IP
 
  
 6 、启动keepalived
 
   systemctl start keepalived三、 配置时间同步
 
 在NGINX_MASTER和NGINX_BACKUP上安装ntp
 
   yum -y install ntp在NGINX_MASTER上修改ntp配置文件
 添加以下两行。
 
   vim /etc/ntp.conf在NGINX_MASTER上添加防火墙策略server 127.127.1.0 iburst local clock #添加使用本地时间 restrict 192.168.8.0 mask 255.255.255.0 nomodify #允许更新的IP地址段
 
  在NGINX_MASTER上启动ntp服务,并加入开机启动
 systemctl start ntpd systemctl enable ntpd
 
 只允许192.168.8.129访问ntp服务。
 
  
 在NGINX_BACKUP上同步NGINX_MASTER的时间
 
   ntpdate 192.168.8.128
  
 在NGINX_BACKUP上设置计划任务
 每天凌晨5点01分同步时间。
 
 crontab -e 1 5   * /usr/sbin/ntpdate 192.168.8.128 >> /var/log/upClock.log
 
 四、负载均衡服务器测试
 
 1、测试nginx服务器
 (1)当NGINX_MASTER、NGINX_BACKUP服务器nginx均正常工作时查看VIP
 在NGINX_MASTER上
 
  在NGINX_BACKUP上
 
  master服务器ens32网卡正常绑定VIP,而backup却没有绑定,通过浏览器可正常访问网站。
 
 (2)关闭NGINX_MASTER的nginx容器
 当nginx容器停止后,马上就又启起来了,nginx启动脚本没问题
 
  (3)关闭NGINX_MASTER的keepalived服务
 在NGINX_MASTER上。
 
  在NGINX_BACKUP上
 
  
 NGINX_BACKUP的ens32网卡已瞬间绑定VIP,通过浏览器访问网站正常。
 
  (4)将NGINX_MASTER的keepalived服务启动
 在NGINX_MASTER上
 
  在NGINX_BACKUP上
 
  NGINX_MASTER的ens32网卡重新绑定VIP,通过浏览器访问网站正常。
 
  
 2、测试WEB服务器
 
 关闭WEB_1服务器
 
  通过浏览器访问网站正常。
 
  
 
 
 ----------------------------
 原文链接:https://blog.51cto.com/13670314/2340692
 
 程序猿的技术大观园:www.javathinker.net
 
 
 
 [这个贴子最后由 sunweiqin 在 2020-01-28 11:56:20 重新编辑]
 |  |