|
本次实验中需要使用到四台主机:
四台虚拟机上安装的都是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
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/056b48ffc7f569cce6dd72622d174791.png)
紧接着配置一个稳定(stable)的仓库?
仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/1197a4e035a3345beb6020590d5b85b7.png)
生成元数据
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/a31db0fe70c29bbce2c839b8e637dd80.png)
安装docker-ce
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/ba10111ca506d679e396e06c316685cf.png)
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
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/7a09a3bcb8e9a7804e154592aa77585d.png)
把docker加入开机启动
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/9c4002a8390c5ab4092fc5397a2d7a42.png)
拉取一个nginx镜像
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/b0afd23e7894e5ee41cecce962893ef0.png)
创建nginx配置文件目录,启动一个nginx-c容器并把容器里的nginx.conf拷贝到本地
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/4f883d193d5c335306b259d65b9a5cd9.png)
删除容器nginx-c
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/e148ec72922dccc0110889ae0577cd08.png)
这两步就是在nginx容器的配置文件的基础上修改参数,以实现想要的功能。
3、创建nginx容器并对其进行配置
(1)编写创建nginx容器的脚本
#!/bin/bash
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
注:--restart=always是重启策略,当docker服务重启后,容器也会自动启动
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/a4bed4cc0524cd1451494cc1364c1de7.png)
(2) 赋予脚本执行权限 并运行
chmod +x docker_nginx.sh
sh docker_nginx.sh
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/633017fd504ca20fc7ab9501da54f480.png)
(3)修改nginx主配置文件
vim /data/docker/nginx/conf/nginx.conf
修改前
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/ff6a14acb27e86e4a75922973f3d4231.png)
修改后
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/3aaf60aed9b7312a32937cbf67e30d88.png)
(4) 创建upstream配置文件
vim /data/docker/nginx/conf/conf.d/myhost.conf
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;
}
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/0af0eaaf27b3c9e16caeef47255414b3.png)
(5) 创建虚拟主机配置文件
vim /data/docker/nginx/conf/conf.d/xuad.conf
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;
}
#查看nginx的并发连接数配置
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
}
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/7e34b240c5b34273cfc7580a0409bc3e.png)
(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就行了。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/8336a60ad0b1cfc3cf5ff45163427bc0.png)
编译
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
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/a4895ba94b67d2f2ebddd2f59b3b0bf3.png)
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
}
}
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/2f2cc5194c5b1f21f33a6a519b770202.png)
4、添加检查nginx状态的脚本
vim /etc/keepalived/nginx_pid.sh
#!/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
脚本说明:当nginx进程不存在时,会自动重启docker服务,docker服务启动时会自动启动nginx容器;再次检查nginx进程,如果不存在,就停止keepalived服务,然后NGINX_BACKUP主机会自动接替NGINX_MASTER的工作。
chmod +x /etc/keepalived/nginx_pid.sh
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/2f622ac4d6f60d91de1a16cd15d6abb1.png)
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
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/698b2f19f6870c2219aff606f8e7cc62.png)
如果是backup服务器,source address改成master服务器的IP
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/18166f575c627e92fa4594f6190c2aaf.png)
6 、启动keepalived
systemctl start keepalived
三、 配置时间同步
在NGINX_MASTER和NGINX_BACKUP上安装ntp
yum -y install ntp
在NGINX_MASTER上修改ntp配置文件
添加以下两行。
vim /etc/ntp.conf
server 127.127.1.0 iburst local clock #添加使用本地时间 restrict 192.168.8.0 mask 255.255.255.0 nomodify #允许更新的IP地址段
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/c77c111b5cf8f30186afc63937c043e7.png)
在NGINX_MASTER上启动ntp服务,并加入开机启动
systemctl start ntpd systemctl enable ntpd
在NGINX_MASTER上添加防火墙策略
只允许192.168.8.129访问ntp服务。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/6124fc9fc92b9b2d91eacc816621a402.png)
在NGINX_BACKUP上同步NGINX_MASTER的时间
ntpdate 192.168.8.128
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/bdb02c2cd8c17e86cbb2c876ddcca11f.png)
在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上
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/9a5704d2b17bb048eba3ea13c4bca775.png)
在NGINX_BACKUP上
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/5e328cbaffd7c101bce53ec5a55747de.png)
master服务器ens32网卡正常绑定VIP,而backup却没有绑定,通过浏览器可正常访问网站。
(2)关闭NGINX_MASTER的nginx容器
当nginx容器停止后,马上就又启起来了,nginx启动脚本没问题
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/35661244e1eb5381f9df4ef3a75a3dd2.png)
(3)关闭NGINX_MASTER的keepalived服务
在NGINX_MASTER上。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/3d84e293c5aa9e5d6a8683ee9630d89e.png)
在NGINX_BACKUP上
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/2b63376ed52f8e3b81b5779a21fb5f19.png)
NGINX_BACKUP的ens32网卡已瞬间绑定VIP,通过浏览器访问网站正常。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/8e3db46f15859015923f41d443ddeddb.png)
(4)将NGINX_MASTER的keepalived服务启动
在NGINX_MASTER上
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/1668702d387772e7da87521bd1c932a4.png)
在NGINX_BACKUP上
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/907eae116d536eaec449383f596d4b8a.png)
NGINX_MASTER的ens32网卡重新绑定VIP,通过浏览器访问网站正常。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/c2f2df81b00a1d42514b717e786a011c.png)
2、测试WEB服务器
关闭WEB_1服务器
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/3439a0cf9275d7a0778e138abb8fbfc1.png)
通过浏览器访问网站正常。
![点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小](png/fd1bc0f55860e5ff47f4c62fc5d2a1ef.png)
----------------------------
原文链接:https://blog.51cto.com/13670314/2340692
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 sunweiqin 在 2020-01-28 11:56:20 重新编辑]
|
|