搭建缓存功能的WEB服务集群
实验简介
本文主要介绍双主模型的nginx proxy高可用集群的搭建方式。
实验环境:
- 使用nfs服务器提供页面数据共享
- 使用单独的mariadb服务器提供关系型数据库
- 使用两台httpd服务器处理动态的php和静态页面资源
- 使用两台nginx服务器处理图片资源
- 使用两台varnish服务器作缓存处理
- 使用两台nginx作代理
- 对两台nginx配置keepalived保证集群的高可用
拓扑
配置
nfs
#修改主机名
hostnamectl set-hostname nfs.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#搭建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
mariadb
#修改主机名
hostnamectl set-hostname mydb.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#搭建mariadb
yum install -y mariadb-server
vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve=ON
log-bin=master-bin
innodb_file_per_table=ON
systemctl start mariadb.service
#简单配置mariadb
mysql_secure_installation
mysql -uroot -peasy
GRANT ALL ON *.* TO 'root'@'192.168.1.2__' IDENTIFIED BY 'easy';
CREATE DATABASE wordpress;
SELECT * FROM mysql.user \G
SHOW DATABASES;
ap1
#修改主机名
hostnamectl set-hostname web1.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#安装httpd
yum install -y httpd php php-mysql php-mcrypt php-mbstring
#挂载nfs
yum install -y nfs-utils
mkdir /data/html -pv
mount 192.168.1.201:/data/html /data/html
#安装wordpress、phpMyAdmin
rz
wordpress-4.7.4-zh_CN.tar.gz
phpMyAdmin-4.0.10.20-all-languages.zip
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 /data/html/wordpress-4.7.4
mv /root/phpMyAdmin-4.0.10.20-all-languages /data/html
cd /data/html
ln -sv phpMyAdmin-4.0.10.20-all-languages pma
ln -sv wordpress-4.7.4 wp
#php首页
vim /data/html/index.php
<h1>This is index pages</h1>
<?php
phpinfo();
?>
#测试页面
mkdir /var/www/html/test
echo "web dynamic server ap1">>/var/www/html/test/index.html
echo "web dynamic server ap1">>/var/www/html/index.html
#配置httpd虚拟主机
vim /etc/httpd/conf.d/vhost.conf
listen 8080
<VirtualHost 192.168.1.211:80>
DocumentRoot /data/html
Servername www.easy.com
<Directory '/data/html'>
Options FollowsymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.1.211:8080>
DocumentRoot /var/www/html/test
<Directory '/var/www/html/test'>
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
#配置php-mysql
vim /etc/php.ini
mysqli.default_host = 192.168.1.202
mysqli.default_user = root
mysqli.default_pw = easy
systemctl restart httpd
#配置phpMyAdmin
cd /data/html/pma
cp config.sample.inc.php config.inc.php
vim config.inc.php
$cfg['blowfish_secret'] = 'easyeasyeasy';
$cfg['Servers'][$i]['host'] = '192.168.1.202';
#配置wordpress
cd /data/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.1.202');
ap2
#修改主机名
hostnamectl set-hostname ap2.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#安装httpd
yum install -y httpd php php-mysql php-mcrypt php-mbstring
#挂载nfs
yum install -y nfs-utils
mkdir /data/html -pv
mount 192.168.1.201:/data/html /data/html
#测试页面
mkdir /var/www/html/test
echo "web dynamic server ap2">>/var/www/html/test/index.html
echo "web dynamic server ap2">/var/www/html/index.html
#配置httpd虚拟主机
vim /etc/httpd/conf.d/vhost.conf
listen 8080
<VirtualHost 192.168.1.212:80>
DocumentRoot /data/html
Servername www.easy.com
<Directory '/data/html'>
Options FollowsymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.1.212:8080>
DocumentRoot /var/www/html/test
<Directory '/var/www/html/test'>
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
#配置phpMyAdmin
cd /data/html/pma
cp config.sample.inc.php config.inc.php
vim config.inc.php
$cfg['blowfish_secret'] = 'easyeasyeasy';
$cfg['Servers'][$i]['host'] = '192.168.1.202';
#启动httpd
systemctl start httpd
np1
#修改主机名
hostnamectl set-hostname ng1.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#安装nginx
yum install -y nginx
#挂载nfs
yum install -y nfs-utils
mkdir /data/images -pv
mount 192.168.1.201:/data/images /data/images
#安装wordpress、phpMyAdmin
rz
wordpress-4.7.4-zh_CN.tar.gz
phpMyAdmin-4.0.10.20-all-languages.zip
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 /data/images/wordpress-4.7.4
mv /root/phpMyAdmin-4.0.10.20-all-languages /data/images
cd /data/images
ln -sv phpMyAdmin-4.0.10.20-all-languages pma
ln -sv wordpress-4.7.4 wp
#测试页面
mkdir /usr/share/nginx/html/test
echo "web static server np1">>/usr/share/nginx/html/test/index.html
#修改nginx配置
vim /etc/nginx/nginx.conf
#修改默认server的root
#root /usr/share/nginx/html;
root /data/images;
vim /etc/nginx/conf.d/test.conf
#增加test页面
server {
listen 8080;
server_name _;
root /usr/share/nginx/html/test;
location / {
}
}
#启动nginx
systemctl start nginx
np2
#修改主机名
hostnamectl set-hostname ng2.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#安装nginx
yum install -y nginx
#挂载nfs
yum install -y nfs-utils
mkdir /data/images -pv
mount 192.168.1.201:/data/images /data/images
#复制首页
cp /usr/share/nginx/html/* /data/images
#测试页面
mkdir /usr/share/nginx/html/test
echo "web static server np2">>/usr/share/nginx/html/test/index.html
#修改nginx配置
vim /etc/nginx/nginx.conf
#修改默认server的root
#root /usr/share/nginx/html;
root /data/images;
vim /etc/nginx/conf.d/test.conf
#增加test页面
server {
listen 8080;
server_name _;
root /usr/share/nginx/html/test;
location / {
}
}
#启动nginx
systemctl start nginx
varnish 1
#修改主机名
hostnamectl set-hostname var1.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#安装varnish
yum install -y varnish
#修改varnish.params
vim varnish.params
VARNISH_LISTEN_ADDRESS=192.168.1.221
VARNISH_LISTEN_PORT=80
VARNISH_USER=root
VARNISH_GROUP=root
#修改default.vcl
mv default.vcl{,.bak}
vim default.vcl
vcl 4.0;
import directors;
probe check {
.window = 5;
.interval = 2s;
.timeout = 1s;
.threshold = 4;
}
backend websrv1 {
.host = "192.168.1.211";
.port = "80";
.probe = check;
}
backend websrv2 {
.host = "192.168.1.212";
.port = "80";
.probe = check;
}
backend imgsrv1 {
.host = "192.168.1.216";
.port = "80";
.probe = check;
}
backend imgsrv2 {
.host = "192.168.1.217";
.port = "80";
.probe = check;
}
backend web1test {
.host = "192.168.1.211";
.port = "8080";
.probe = check;
}
backend web2test {
.host = "192.168.1.212";
.port = "8080";
.probe = check;
}
backend img1test {
.host = "192.168.1.216";
.port = "8080";
.probe = check;
}
backend img2test {
.host = "192.168.1.217";
.port = "8080";
.probe = check;
}
sub vcl_init {
new imgsrvs = directors.round_robin();
imgsrvs.add_backend(imgsrv1);
imgsrvs.add_backend(imgsrv2);
new websrvs = directors.round_robin();
websrvs.add_backend(websrv1);
websrvs.add_backend(websrv2);
new testsrvs = directors.round_robin();
testsrvs.add_backend(web1test);
testsrvs.add_backend(web2test);
testsrvs.add_backend(img1test);
testsrvs.add_backend(img2test);
}
sub vcl_recv {
if (req.url ~ "(?i)\.(test|test/|test/index.html)$") {
set req.backend_hint = testsrvs.backend();
}
if (req.url ~ "(?i)\.(jpg|jpeg|png|gif)$") {
set req.backend_hint = imgsrvs.backend();
}
if (req.url ~ "(?i)\.php$") {
set req.backend_hint = websrvs.backend();
}
set req.backend_hint = websrvs.backend();
}
#启动varnish
systemctl start varnish
varnish 2
#修改主机名
hostnamectl set-hostname var2.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
#安装varnish
yum install -y varnish
#修改varnish.params
vim /etc/varnish/varnish.params
VARNISH_LISTEN_ADDRESS=192.168.1.221
VARNISH_LISTEN_PORT=80
VARNISH_USER=root
VARNISH_GROUP=root
#从varnish1服务器copy default.vcl
scp /etc/varnish/default.vcl 192.168.1.222:/etc/varnish/
#启动varnish
systemctl start varnish
proxy1
#修改主机名
hostnamectl set-hostname proxy1.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
yum install -y psmisc #killall指令安装
#安装nginx
yum install -y nginx
#配置代理
vim /etc/nginx/nginx.conf
http {
pstream backend {
server 192.168.1.221:80;
server 192.168.1.222:80;
}
。。。。。。
location / {
proxy_pass http://backend;
}
#启动Nginx
systemctl start nginx
#安装keepalived
yum install -y keepalived
#配置keepalived
mv /etc/keepalived/keepalived{.,conf}
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_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 MASTER
interface ens37
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass SWF5FW2DF
}
virtual_ipaddress {
172.16.51.1/16 dev ens37 label ens37:6
}
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:8
}
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"
}
#启动keeplived
systemctl start keepalived
proxy2
#修改主机名
hostnamectl set-hostname proxy2.easy.com
#同步时间
yum install -y ntp
ntpdate 172.16.0.1
yum install -y psmisc #killall指令安装
#安装nginx
yum install -y nginx
#从proxy 1 复制代理配置
scp /etc/nginx/nginx.conf 192.168.1.232:/etc/nginx
#启动Nginx
systemctl start nginx
#安装keepalived
yum install -y keepalived
#复制keepalived配置并修改权限
scp /etc/keepalived/keepalived.conf 192.168.1.232:/etc/keepalived/
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1{
state BACKUP
priority 96
vrrp_instance VI_2{
state MASTER
priority 100
原创文章,作者:easyTang,如若转载,请注明出处:http://www.178linux.com/81267

