ngixn负载+keepalived高可用shell脚本

10 阅读 作者:a13568hki 2020-01-25

1、记住负载端口自己修改nginx配置

vim aa.sh
#/bin/bash
read -ep "请输入keepalived所在的本地IP:" IP
read -ep "请输入另一台keepalived所在的本地IP:" IP2
read -ep "请输入你创建的keepalived的VIP:" net
read -ep "请输入ngixn负载的IP:" fu
read -ep "请输入ngixn负载的另一条IP:" fu2
read -ep "是否终止(y),默认不终止" yn
if [ $yn == y ];then
 exit
fi
yum -y install keepalived
sed -i '/notification_email {/,/smtp_connect_timeout 30/d' /etc/keepalived/keepalived.conf
sed -i '/vrrp_skip_check_adv_addr/,/vrrp_gna_interval 0/d' /etc/keepalived/keepalived.conf
sed -i 's/eth0/ens33/' /etc/keepalived/keepalived.conf
sed -i '/persistence_timeout 50/d' /etc/keepalived/keepalived.conf
sed -i '/real_server/,$d' /etc/keepalived/keepalived.conf
sed -i '/192.168.200.16/,/192.168.200.17/d' /etc/keepalived/keepalived.conf
sed -i "s/192.168.200.18/$net/" /etc/keepalived/keepalived.conf
sed -i "s/192.168.200.100 443/$net 80/" /etc/keepalived/keepalived.conf
shu=`cat /etc/keepalived/keepalived.conf|grep real_server|wc -l`
if [ $shu -ne 1 ];then
echo "    real_server $IP 80 {
        weight 1
        notify_down /etc/keepalived/bb.sh
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }   
    }   
}
" >>/etc/keepalived/keepalived.conf
fi
echo '#!/bin/bash
systemctl stop keepalived'>/etc/keepalived/bb.sh
chmod +x /etc/keepalived/bb.sh
yum -y install expect
if [ -f /root/.ssh/id_rsa ]||[ -f id_rsa.pub ];then #判断是否有公密钥
  continue
else    #否则生产公密钥
/usr/bin/expect <<EOF  
spawn ssh-keygen -t rsa
expect ":" {send "\n;"}
expect ":" {send "\n;"}
expect ":" {send "\n;"}
expect eof
EOF
fi
/usr/bin/expect <<EOF
spawn ssh-copy-id root@$IP2
expect "yes/no" {send "yes\n;exp_continue"}
expect "password" {send "123456\n;"}
expect eof
EOF
ssh root@$IP2 'yum -y install keepalived'
scp /etc/keepalived/keepalived.conf $IP2:/etc/keepalived/keepalived.conf
scp /etc/keepalived/bb.sh $IP2:/etc/keepalived/bb.sh
/usr/bin/expect<<EOF
spawn ssh root@$IP2  
expect "~" {send "sed -i 's/$IP/$IP2/' /etc/keepalived/keepalived.conf\n"}
expect "~" {send "sed -i 's/priority 100/priority 99/' /etc/keepalived/keepalived.conf\n"}
expect "~" {send "sed -i 's/MASTER/BACKUP/' /etc/keepalived/keepalived.conf\n"}
expect "~" {send "exit\n"}
expect eof
EOF
wget http://nginx.org/download/nginx-1.16.1.tar.gz
yum -y install gcc gcc-c++ zlib-devel pcre-devel
tar zxf nginx-1.16.1.tar.gz
cd nginx-1.16.1 && ./configure && make && make install
shulian=`cat /usr/local/nginx/conf/nginx.conf|grep 'server $fu2:8081;'|wc -l`
if [ $shulian -ne 1 ];then #判断是否有该配置
sed -i  '/#gzip  on;/aupstream wg{' /usr/local/nginx/conf/nginx.conf   #在gzip  on;下一行追加upstream wg{
sed -i  "/upstream wg{/aserver $fu:8080;" /usr/local/nginx/conf/nginx.conf   #在upstream wg{下一行追加server 192.168.11.135:8080;
sed -i  "/server $fu:8080;/aserver $fu2:8080;" /usr/local/nginx/conf/nginx.conf  #在server 192.168.11.135:8080;下一行追加server 192.168.11.135:8081;
sed -i  "/server $fu2:8080/a\}" /usr/local/nginx/conf/nginx.conf  #在server 192.168.11.135:8081;下一行追加}
sed -i  's/index.htm;$/index.jsp;/' /usr/local/nginx/conf/nginx.conf  #把以index.htm;结尾换成index.jsp;
sed -i  '/404.html;/alocation ~ \\.jsp$ {' /usr/local/nginx/conf/nginx.conf  #在404.html;下一行追加location ~ \.jsp$ {
sed -i  '/location ~ \\.jsp$ {/aproxy_pass   http://wg;' /usr/local/nginx/conf/nginx.conf #在location ~ \.jsp$ {下一行追加proxy_pass   http://wg;
sed -i  '/proxy_pass   http:\/\/wg;/a\}' /usr/local/nginx/conf/nginx.conf  #在proxy_pass   http://wg;下一行追加}
fi
pkill -15 nginx
/usr/local/nginx/sbin/nginx
systemctl restart keepalived
ssh root@$IP2 'wget http://nginx.org/download/nginx-1.16.1.tar.gz;yum -y install gcc gcc-c++ zlib-devel pcre-devel;tar zxf nginx-1.16.1.tar.gz;cd nginx-1.16.1 && ./configure && make && make install'
scp /usr/local/nginx/conf/nginx.conf $IP2:/usr/local/nginx/conf/nginx.conf
ssh root@$IP2 'pkill -15 nginx;/usr/local/nginx/sbin/nginx;systemctl restart keepalived'

sh aa.sh

原文地址:https://blog.csdn.net/a13568hki/article/details/102978716
广告一下
热门教程
PHP7报A non well formed numeric value encountered 0
Linux系统下关闭mongodb的几种命令分享 0
mongodb删除数据、删除集合、删除数据库的命令 0
Git&Github极速入门与攻坚实战课程 0
python爬虫教程使用Django和scrapy实现 0
libnetsnmpmibs.so.31: cannot open shared object file 0
数据结构和算法视频教程 0
redis的hash结构怎么删除数据呢? 0
C++和LUA解析器的数据交互实战视频 0
mongodb errmsg" : "too many users are authenticated 0
C++基础入门视频教程 0
用30个小时精通C++视频教程可能吗? 0
C++分布式多线程游戏服务器开发视频教程socket tcp boost库 0
C++培训教程就业班教程 0
layui的util工具格式时间戳为字符串 0
C++实战教程之远程桌面远程控制实战 1
网络安全培训视频教程 0
LINUX_C++软件工程师视频教程高级项目实战 0
C++高级数据结构与算法视频教程 0
跨域问题很头疼?通过配置nginx轻松解决ajax跨域问题 0
相关文章
【译】JavaScript数据结构(3):单向链表与双向链表 16
10个JavaScript难点 16
【译】苹果拒绝支持PWA,有损Web的未来 16
iView 一周年了,同时发布了 2.0 正式版,但这只是开始... 16
nodejs+mongodb构建一个简单登录注册功能 16
【译】JavaScript数据结构(4):树 16
组件化开发与黑箱 16
TypeScript - 不止稳,而且快 16
webpack3+anujs+ReactCSSTransitionGroup 16
原生js实现图片放大镜效果 16
WEB缓存探究第二弹——实战 16
纯笔记:vfork 的一些使用场景(顺便讲一下 fork 的原理) 16
Android APP 内部捐赠实现(支付宝&amp;微信) 16
WKWebView 的一些小总结 16
模型评价(一) AUC大法 16
开始使用GraphQL 16
Webpack模块化原理简析 16
gulp使用问题记录 16
使用Angular4动画为页面添彩 16
Python27 Matplotlib (win64 python2.7) 安装及简单使用 16