实验简介
本文主要介绍双主模型的nginx proxy高可用集群的搭建方式。
实验环境:
- 使用nfs/ftp服务器,nfs提供页面数据共享,ftp提供程序下载
- 使用单独的mariadb服务器提供关系型数据库
- 使用两台httpd服务器提供页面服务,包括静态的html和动态的php(phpmyadmin、wordpress、phpinfo)
- 使用两台nginx作为两台httpd的负载均衡器
- 对两台nginx配置keepalived保证集群的高可用
拓扑图

配置
nfs/ftp 192.168.45.201
#修改主机名
hostnamectl set-hostname nfs.easy.com
#同步时间
yum install -y ntp
ntpdate
#搭建nfs
yum install -y nfs-utils
mkdir /data/html -pv
vim /etc/exports
/data/html 192.168.45.0/24(rw)
systemctl start nfs
showmount -e
#搭建ftp
yum install -y vsftpd
yum install -y lrzsz
cd /var/ftp/pub
rz
上传phpMyAdmin-4.0.10.20-all-languages.zip
上传wordpress-4.7.4-zh_CN.tar.gz
mariadb 192.168.45.202
#修改主机名
hostnamectl set-hostname mydb.easy.com
#同步时间
yum install -y ntp
ntpdate
#搭建mariadb
yum install -y mariadb-server
vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=1
log-bin=mysql-bin
innodb_file_per_table = 1
systemctl start mariadb.service
#简单配置mariadb
mysql_secure_installation
mysql -uroot -peasy
GRANT ALL ON *.* TO 'root'@'192.168.45.%' IDENTIFIED BY 'easy';
CREATE DATABASE wordpress;
SELECT * FROM mysql.user \G ;
SHOW DATABASES;
web1 192.168.45.11
#修改主机名
hostnamectl set-hostname web1.easy.com
#同步时间
yum install -y ntp
ntpdate
yum install -y httpd php php-mysql php-mcrypt php-mbstring
#挂载nfs
yum install -y nfs-utils
mkdir /data/html -pv
mount 192.168.45.201:/data/html /var/www/html
#创建phpMyAdmin wordpress
yum install -y wget
wget ftp://192.168.45.201/pub/phpMyAdmin-4.0.10.20-all-languages.zip
wget ftp://192.168.45.201/pub/wordpress-4.7.4-zh_CN.tar.gz
tar xf wordpress-4.7.4-zh_CN.tar.gz
yum install -y unzip
unzip phpMyAdmin-4.0.10.20-all-languages.zip
mv /root/wordpress /var/www/html/wordpress-4.7.4
mv /root/phpMyAdmin-4.0.10.20-all-languages /var/www/html
cd /var/www/html
ln -sv phpMyAdmin-4.0.10.20-all-languages pma
ln -sv wordpress-4.7.4 wp
ls /var/www/html
#创建主页
vim /var/www/html/index.php
<h1>This is index pages</h1>
<?php
phpinfo();
?>
#创建负载均衡测试页
mkdir /var/www/lbtest
echo "web server1">> /var/www/lbtest/test.html
cat /var/www/lbtest/test.html
#配置httpd虚拟主机
vim /etc/httpd/conf.d/vhost.conf
listen 8080
<VirtualHost 192.168.45.11:80>
DocumentRoot /var/www/html
Servername www.easy.com
<Directory '/var/www/html'>
Options FollowsymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.45.11:8080>
DocumentRoot /var/www/lbtest
<Directory '/var/www/lbtest'>
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
systemctl start httpd
#配置php-mysql
vim /etc/php.ini
mysqli.default_host = 192.168.45.202
mysqli.default_user = root
mysqli.default_pw = easy
systemctl restart httpd
#配置phpMyAdmin
cd /var/www/html/pma
cp config.sample.inc.php config.inc.php
vim config.inc.php
$cfg['blowfish_secret'] = 'a8baskdljalskd7c6d';
$cfg['Servers'][$i]['host'] = '192.168.45.202';
#配置wordpress
cd /var/www/html/wp
cp wp-config-sample.php wp-config.php
vim wp-config.php
define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'easy');
define('DB_HOST', '192.168.45.202');
web2 192.168.45.12
#修改主机名
hostnamectl set-hostname web2.easy.com
#同步时间
yum install -y ntp
ntpdate
yum install -y httpd php php-mysql php-mcrypt php-mbstring
#挂载nfs
yum install -y nfs-utils
mkdir /data/html -pv
mount 192.168.45.201:/data/html /var/www/html
#创建负载均衡测试页
mkdir /var/www/lbtest
echo "web server2">> /var/www/lbtest/test.html
cat /var/www/lbtest/test.html
#配置httpd虚拟主机
vim /etc/httpd/conf.d/vhost.conf
listen 8080
<VirtualHost 192.168.45.12:80>
DocumentRoot /var/www/html
Servername www.easy.com
<Directory '/var/www/html'>
Options FollowsymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.45.12:8080>
DocumentRoot /var/www/lbtest
<Directory '/var/www/lbtest'>
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
systemctl start httpd
#配置php-mysql
vim /etc/php.ini
mysqli.default_host = 192.168.45.202
mysqli.default_user = root
mysqli.default_pw = easy
systemctl restart httpd
nginx1 192.168.45.201
#修改主机名
hostnamectl set-hostname nginx1.easy.com
#同步时间
yum install -y ntp
ntpdate
yum install -y psmisc #killall指令安装
#配置nginx负载均衡
yum install -y nginx
vim /etc/nginx/nginx.conf
http {
upstream backend {
server 192.168.45.11:80;
server 192.168.45.12:80;
}
upstream lbtest {
server 192.168.45.11:8080;
server 192.168.45.12:8080;
}
server{
location / {
proxy_pass http://backend;
}
location ~* 'test.html$' {
proxy_pass http://lbtest;
}
}
}
systemctl start nginx
#配置keepalived
yum install -y keepalived
mv /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs {
notification_email {
root@localhost;
}
notification_email_from keepadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
route_id nginx1
vrrp_mcast_group4 224.51.151.251
}
vrrp_instance VI_1{
state MASTER
priority 100
interface ens37
advert_int 1
authentication {
auth_type PASS
auth_pass SWF5FW2DF
}
virtual_ipaddress {
172.16.51.1/16 dev ens37 label ens37:0
}
notify_master "/etc/keepalived/notify.sh master"
notify_bachup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2{
state BACKUP
interface ens37
virtual_router_id 52
priority 96
advert_int 1
authentication {
auth_type PASS
auth_pass 7D2SS5DF
}
virtual_ipaddress {
172.16.51.2/16 dev ens37 label ens37:1
}
track_script {
chk_down
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_bachup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
#配置通知脚本
vim /etc/keepalived/notify.sh
#!/bin/bash
#
contact='root@localhost'
notify(){
local mailsubject="$(hostname) to be $1 ,vip floating"
local mailbody="$(date +'%F $T'):vrrp transition,$(hostname) changed to be $1"
echo "$mailbody" |mail -s "$mailsubject" $contact
}
case $1 in
master)
systemctl start nginx.service
notify master
;;
backup)
systemctl start nginx.service
notify backup
;;
fault)
systemctl stop nginx.service
notify fault
;;
*)
echo "ERROR"
exit 1
;;
esac
nginx2 192.168.45.202
#修改主机名
hostnamectl set-hostname nginx2.easy.com
#同步时间
yum install -y ntp
ntpdate
yum install -y psmisc #killall指令安装
#配置nginx负载均衡
yum install -y nginx
mv /etc/nginx/nginx.conf{,.bak}
接受nginx1传送配置后
systemctl start nginx
#配置keepalived
yum install -y keepalived
mv /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs {
notification_email {
root@localhost;
}
notification_email_from keepadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
route_id nginx2
vrrp_mcast_group4 224.51.151.251
}
vrrp_script chk_down{
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0 "
interval 1
weight -5
fall 1
rise 1
}
vrrp_script chk_nginx{
script "killall -0 nginx && exit 0 || exit 1"
interval 1
weight -5
fall 2
rise 2
}
vrrp_instance VI_1{
state BACKUP
interface ens37
virtual_router_id 51
priority 96
advert_int 1
authentication {
auth_type PASS
auth_pass SWF5FW2DF
}
virtual_ipaddress {
172.16.51.1/16 dev ens37 label ens37:0
}
track_script {
chk_down
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_bachup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2{
state MASTER
interface ens37
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 7D2SS5DF
}
virtual_ipaddress {
172.16.51.2/16 dev ens37 label ens37:1
}
track_script {
chk_down
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_bachup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
#配置通知脚本
vim /etc/keepalived/notify.sh
#!/bin/bash
#
contact='root@localhost'
notify(){
local mailsubject="$(hostname) to be $1 ,vip floating"
local mailbody="$(date +'%F $T'):vrrp transition,$(hostname) changed to be $1"
echo "$mailbody" |mail -s "$mailsubject" $contact
}
case $1 in
master)
systemctl start nginx.service
notify master
;;
backup)
systemctl start nginx.service
notify backup
;;
fault)
systemctl stop nginx.service
notify fault
;;
*)
echo "ERROR"
exit 1
;;
esac
实验总结
BUG
- 该环境配置完成后出现BUG,chk_nginx脚本并不会真正的检测nginx,来对keepalived权重进行调整
待完善
- 该实验环境只是实现基本功能,部分配置存在安全隐患
- 该环境单点状况过多,需要提升页面资源的nfs服务器和关系型数据库mariadb服务器的高可用性
- httpd服务器没有实现动静分离
- httpd服务器负载均衡不能保持会话,需要增加session服务器
- 增加cache服务器可以大幅度提高浏览速度
原创文章,作者:easyTang,如若转载,请注明出处:http://www.178linux.com/78553

