代理主機的配置
- 首先介紹環境是兩臺虛擬機,是爲了交任務才這樣配置,一臺虛擬機有數據庫、php、nginx、keepalived,一臺虛擬機有nginx、keepalived,未做動靜分離,只配置了nginx反向代理php與tomcat的請求,還弄了nginx負載均衡,創建了一個以.conf結尾的文件,實現由請求路勁的ip_hash分權,最後弄了keepalived,實現ip漂移,主機的權重爲100,從機的權重爲50,所以正常情況下虛擬ip在主機內,但是如果主機掛了,虛擬ip會判別,然後到另一臺代理服務器工作。
- 遇到的難點主要就是對腳本的不熟悉,對任務的理解不清晰,
對日誌文件的查錯不熟悉。而且很容易遇到技術難題,因爲對shell不熟悉,會出各種各樣的問題,非常考驗仔細度,而且每次爲了實現某個功能會先建一個腳本來達到效果再加進自己的腳本中。然後就是改端口,因爲nginx與httpd在同一臺機子,所以nginx一直無法打開讓我鬱悶很久,總以爲是腳本寫錯了,把配置改錯了。。。然後經過老師指點後我就把httpd的端口號從20到21,然後兩者就能在一個服務器共存了。 - shell腳本的目錄很簡單,就是一個主shell(t8.sh),多個副shell(t9.sh、t10.sh、t11.sh、t12.sh、t13.sh),依down的流程從頭到尾執行,每一個地方嵌套一個子shell,用source來嵌入子腳本,當子腳本執行完畢則回到父腳本繼續執行,所以子腳本分別實現了安裝配置數據庫、php、nginx、keepalived的功能,主shell就只是一個單純的菜單,只是沒有提供給用戶選擇安裝而已,最後,其實這兩臺機子都安裝了ansible,而且互相之間實現了免密登錄,我嘗試了用ansible在實現集羣執行腳本,但有問題,時間有限,我就只弄嘗試到了這個地步,希望以後能實現用ansible集羣部署,一切都是爲了讓我更懶。
- shell腳本不熟悉,所以寫得不完善,很多流程都沒有判斷就直接進行。然後是不會shell的某些功能就去百度查,大體按着自己的思路寫,嗯,以後有時間學得更多了再慢慢完善這些bug,先亮效果截圖:
- t6.sh—爲了嘗試一鍵安裝所以準備了一鍵卸載
systemctl stop mariadb-server mariadb
yum remove mariadb-server mariadb
rm -fr /var/log/mariadb
systemctl stop nginx
yum remove nginx
yum remove nginx-release-centos-7-0.el7.ngx.noarch
rm -fr /etc/nginx
systemctl stop httpd
yum remove httpd
rm -fr /etc/httpd/
systemctl stop keepalived
yum remove keepalived
rm -fr /etc/keepalived
t8.sh
#!/bin/bash
#function:install mariadb-server、mariadb、php、nginx、keepalived
echo -e "\033[32m 正在啓動數據庫的安裝.....\033[0m"
source ./t13.sh
echo "mariadb安裝成功!"
sleep 5
echo -e "\033[32m 正在啓動php的安裝和配置....\033[0m"
source ./t12.sh
echo "php安裝成功!"
sleep 5
echo -e "\033[32m 正在啓動安裝nginx.......\033[0m"
source ./t9.sh
echo -e "\033[32m nginx安裝成功!\033[0m"
sleep 5
echo -e "\033[32m 代理主機正在安裝keepalived....請稍後\033[0m"
source ./t10.sh
echo -e "\033[32m keepalived安裝成功!\033[0m"
sleep 5
if [[ $? -eq 0 ]];then
echo -e "\033[32m 子機安裝成功!\033[0m"
fi
echo -e "\033[32m 退出安裝,謝謝!\033[0m"
t9.sh
#!/bin/bash
#echo -e "\033[32m 正在禁止firewall開機啓動...\033[0m"
#`systemctl disable firewalld.service`
#echo -e "\033[32m firewall已禁止\033[0m"
#echo -e "\033[32m 正在打開selinux配置文件...\033[0m"
#`sudo vim /etc/selinux/config`
#改SELINUX=disable
#SELINUXTYPE=targeted #註釋
NGINXRPM=nginx-release-centos-7-0.el7.ngx.noarch.rpm
NGINXDIR=/opt/nginx-release-centos-7-0.el7.ngx.noarch.rpm
NGINXDIR=/etc/nginx/conf.d/default.conf
MYNGINXDIR=/etc/nginx/conf.d/tomcats.conf
MYCONF=tomcats.conf
CONTENT=index index.html index.htm
DIR=/etc/nginx/conf.d/tomcats.conf
echo -e "\033[32m 開始安裝nginx...\033[0m"
echo -e "\033[32m 正在下載...\033[0m"
wget http://nginx.org/packages/centos/7/noarch/RPMS/$NGINXRPM
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在解壓...\033[0m"
rpm -ivh $NGINXRPM
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在yum源下載...\033[0m"
yum -y install nginx
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 安裝成功!正在重啓...\033[0m"
systemctl restart nginx
echo -e "\033[32m 清除殘餘文件...\033[0m"
rm -fr $NGINXRPM
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 顯示nginx狀態...\033[0m"
systemctl status nginx
fi
echo -e "\033[32m 啓動修改nginx的配置...\033[0m"
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在添加tomcats.conf文件...\033[0m"
touch $DIR
fi
if [[ $? -eq 0 ]];then
echo "
upstream javaservers {
ip_hash;
server 39.106.50.206:8080;
}" > $DIR
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在添加php代理設置....請稍後...\033[0m"
echo "server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://javaservers/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location ~ \.php$ {
proxy_pass http://192.168.235.131:81;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
" > $NGINXDIR
echo -e "\033[32m 配置成功!\033[0m"
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在重新加載nginx...\033[0m"
systemctl restart nginx
echo -e "\033[32m 正在修改臨時權限...\033[0m"
setenforce 0
echo -e "\033[32m nginx全部配置完畢,請到瀏覽器訪問...\033[0m"
fi
t10.sh
#!/bin/bash
#function:安裝並修改keepalived主機
KEEPDIR=/etc/keepalived/keepalived.conf
if [[ $? -eq 0 ]];then
echo -e "\033[32m 開始下載keepalived...."
yum -y install keepalived
echo -e "\033[32m keepalived下載成功...、033[0m"
fi
#修改配置
if [[ $? -eq 0 ]];then
sleep 5
echo -e "\033[32m 正在修改代理主機keepalived的配置....\033[0m"
> KEEPDIR
echo -e "\033[32m 添加.....\033[0m"
echo "! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.150
}
}" > $KEEPDIR
sleep 5
echo -e "\033[32m 修改成功!請稍後...\033[0m"
echo -e "\033[32m 重新加載keepalived....請稍後....\033[0m"
systemctl restart keepalived
systemctl restart nginx
setenforce 0
echo -e "\033[32m 安裝成功,謝謝!\033[0m"
fi
t11.sh
#!/bin/bash
#function:keepalived從機配置
KEEPDIR=/etc/keepalived/keepalived.conf
if [[ $? -eq 0 ]];then
echo -e "\033[32m 開始下載keepalived...."
yum -y install keepalived
echo -e "\033[32m keepalived下載成功...、033[0m"
fi
#修改配置
if [[ $? -eq 0 ]];then
sleep 5
echo -e "\033[32m 正在修改代理主機keepalived的配置....\033[0m"
> KEEPDIR
echo -e "\033[32m 添加.....\033[0m"
echo "! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.150
}
}" > $KEEPDIR
sleep 5
echo -e "\033[32m 修改成功!請稍後...\033[0m"
echo -e "\033[32m 重新加載keepalived....請稍後....\033[0m"
systemctl restart keepalived
systemctl restart nginx
setenforce 0
echo -e "\033[32m 安裝成功,謝謝!\033[0m"
fi
t12.sh
#!/bin/bash
#function:安裝配置php
echo "這是shell腳本自動化安裝php環境"
DIR=/etctpd
if [ ! -d $DIR ];then
echo "開始安裝Apache"
yum -y install httpd
echo "安裝Apache完畢,正在啓動Apache..."
systemctl restart httpd
echo "啓動完畢!正在設置開機啓動..."
systemctl enable httpd
echo "設置完畢!"
echo "正在建立測試頁"
touch /var/www/html/homework.php
echo "<?php phpinfo();?>" > /var/www/html/homework.php
echo "建立測試頁成功!"
echo "開始安裝PHP"
yum -y install php
echo "安裝完畢!爲避免與nginx產生衝突正在修改httpd端口...."
sed -i 's/Listen 80/Listen 81/g' /etc/httpd/conf/httpd.conf
echo "正在重新加載hpptd..."
systemctl restart httpd
echo "請前往瀏覽器測試php安裝:"
echo "(提示:在瀏覽器中輸入:192.168.xxx.xxx/homework.php )"
else
echo "目標已存在"
fi
t13.sh
#!/bin/bash
#function: 安裝MariaDB
echo -e "\033[32m 這是shell腳本自動化安裝MariaDB\033[0m"
DIR=/mydata/data
if [[ ! -d $DIR ]];then
echo "開始安裝MariaDB"
yum -y install mariadb-server mariadb
echo "安裝MariaDB完畢,正在啓動MariaDB..."
systemctl restart mariadb
echo "啓動完畢!正在設置開機啓動..."
systemctl enable mariadb
echo "對mariaDB進行簡單配置"
mysql_secure_installation
echo "設置完畢!"
else
echo "目標已存在!"
fi
另一臺代理子機的安裝
t8.sh
#!/bin/bash
#function:install mariadb-server、mariadb、php、nginx、keepalived
echo -e "\033[32m 正在啓動安裝nginx.......\033[0m"
source ./t9.sh
sleep 5
echo -e "\033[32m nginx安裝成功!\033[0m"
echo -e "\033[32m 代理子機正在安裝keepalived....請稍後\033[0m"
source ./t11.sh
echo -e "\033[32m keepalived安裝成功!\033[0m"
sleep 5
if [[ $? -eq 0 ]];then
echo -e "\033[32m 子機安裝成功!\033[0m"
fi
t9.sh
#!/bin/bash
#echo -e "\033[32m 正在禁止firewall開機啓動...\033[0m"
#`systemctl disable firewalld.service`
#echo -e "\033[32m firewall已禁止\033[0m"
#echo -e "\033[32m 正在打開selinux配置文件...\033[0m"
#`sudo vim /etc/selinux/config`
#改SELINUX=disable
#SELINUXTYPE=targeted #註釋
NGINXRPM=nginx-release-centos-7-0.el7.ngx.noarch.rpm
NGINXDIR=/opt/nginx-release-centos-7-0.el7.ngx.noarch.rpm
NGINXDIR=/etc/nginx/conf.d/default.conf
MYNGINXDIR=/etc/nginx/conf.d/tomcats.conf
MYCONF=tomcats.conf
CONTENT=index index.html index.htm
DIR=/etc/nginx/conf.d/tomcats.conf
echo -e "\033[32m 開始安裝nginx...\033[0m"
echo -e "\033[32m 正在下載...\033[0m"
wget http://nginx.org/packages/centos/7/noarch/RPMS/$NGINXRPM
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在解壓...\033[0m"
rpm -ivh $NGINXRPM
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在yum源下載...\033[0m"
yum -y install nginx
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 安裝成功!正在重啓...\033[0m"
systemctl restart nginx
echo -e "\033[32m 清除殘餘文件...\033[0m"
rm -fr $NGINXRPM
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 顯示nginx狀態...\033[0m"
systemctl status nginx
fi
echo -e "\033[32m 啓動修改nginx的配置...\033[0m"
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在添加tomcats.conf文件...\033[0m"
touch $DIR
fi
if [[ $? -eq 0 ]];then
echo "
upstream javaservers {
ip_hash;
server 39.106.50.206:8080;
}" > $DIR
fi
if [[ $? -eq 0 ]];then
echo "server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://javaservers/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location ~ \.php$ {
proxy_pass http://192.168.235.131:81;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
" > $NGINXDIR
echo -e "\033[32m 配置成功!\033[0m"
fi
if [[ $? -eq 0 ]];then
echo -e "\033[32m 正在重新加載nginx...\033[0m"
systemctl restart nginx
echo -e "\033[32m 正在修改臨時權限...\033[0m"
setenforce 0
echo -e "\033[32m nginx全部配置完畢,請到瀏覽器訪問...\033[0m"
fi
t11.sh
#!/bin/bash
#function:keepalived從機配置
KEEPDIR=/etc/keepalived/keepalived.conf
if [[ $? -eq 0 ]];then
echo -e "\033[32m 開始下載keepalived...."
yum -y install keepalived
echo -e "\033[32m keepalived下載成功...、033[0m"
fi
#修改配置
if [[ $? -eq 0 ]];then
sleep 5
echo -e "\033[32m 正在修改代理主機keepalived的配置....\033[0m"
> KEEPDIR
echo -e "\033[32m 添加.....\033[0m"
echo "! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.235.150
}
}" > $KEEPDIR
sleep 5
echo -e "\033[32m 修改成功!請稍後...\033[0m"
echo -e "\033[32m 重新加載keepalived....請稍後....\033[0m"
systemctl restart keepalived
systemctl restart nginx
setenforce 0
echo -e "\033[32m 安裝成功,謝謝!\033[0m"
fi