linux--rabbitmq--集群搭建脚本

用脚本搭建集群是为了减少人为操作,减少风险,加快部署进度;
但是我这个脚本是用编译安装的,多节点是单进程进行的,速度上存在一定问题;
只是部署几台可能没问题,部署节点如果超过10台,我估计有的等待了。。。
后面看能否改成用python脚本,估计还得要研究一段时间。

说明

环境为centos7(redhat 6.5测试也通过) , 使用方法只需要把脚本和两个安装包传到同一目录下,执行脚本即可;
执行过程中需要根据提示输入相应的值即可。
注意:

  • 需要这些节点都配有yum源
  • 生产环境在/u01 目录,没有的话该脚本会自动新建/u01目录
  • 节点通过ssh服务进行批处理,且端口固定为22,不是22端口无法进行批处理

执行脚本

链接:https://pan.baidu.com/s/1o2rOQnQZNNlE7jasGSuXjQ
提取码:rg3k
将以上文件上传服务器,解压文件,切换到上传文件的目录
在同一目录执行以下脚本

#!/bin/bash
####################################################################################
####################################################################################
##### 生成子脚本,集成到一起 ########################################################
####################################################################################
####################################################################################
echo "#!/bin/bash
this_dir=\`pwd\`
#### 环境准备
[ ! -d \"/u01\" ] && mkdir /u01
cd /u01
[ -d \"rabbit_install\" ] && mv rabbit_install-bak-\`date '+%Y%m%d-%H%M%S'\`
mkdir rabbit_install
base_dir='/u01/rabbit_install'
yum install -y unixODBC-devel  ncurses-devel openssl-devel gcc make perl


#### 安装erlang
cd \${base_dir}
cp \${this_dir}/otp_src_20.3.tar.gz ./

tar xf otp_src_20.3.tar.gz
cd otp_src_20.3/
./configure --prefix=/usr/local/erlang --without-javac
make && make install
sed -i '/erlang/d' /etc/profile
echo '#set erlang environment
export PATH=\$PATH:/usr/local/erlang/bin' >> /etc/profile
source /etc/profile


#### 安装rabbitmq,安装完关闭
cd \${base_dir}
cp \${this_dir}/rabbitmq-server-generic-unix-3.7.4.tar.xz ./
tar xf rabbitmq-server-generic-unix-3.7.4.tar.xz  -C /u01
sed -i '/rabbitmq/d' /etc/profile
echo '#set rabbitmq environment
export PATH=\$PATH:/u01/rabbitmq_server-3.7.4/sbin' >> /etc/profile
echo '启动测试'
source /etc/profile
sleep 1
rabbitmq-server -detached
rabbitmqctl status
sleep 2
rabbitmqctl stop
while :
do
  rabbit_pid=\`ps -ef | grep rabbitmq_server | grep -v grep | awk '{print $2}'\`
  if [[  -z \"\$rabbit_pid\" ]];then
        echo '关闭rabbitmq成功'
        break
  fi
done
" > 01_install_mq.sh

echo "#!/bin/bash
cd /home
for li in \`cat hostname.txt | awk '{print \$1}'\`;
do
  sed -i '/'\$li'/d' /etc/hosts
done

cat hostname.txt >> /etc/hosts
" > 02_rsync_node.sh

echo "#!/bin/bash
source /etc/profile
### 设置用户
rabbitmq-plugins enable rabbitmq_management
sleep 1
rabbitmqctl start_app
sleep 2
rabbitmqctl add_user admin admin123
sleep 2
rabbitmqctl set_user_tags admin administrator
sleep 2
### 添加节点
rabbitmqctl stop_app
sleep 2
rabbitmqctl join_cluster --ram rabbit@master_hostname
sleep 2
rabbitmqctl start_app
sleep 2
echo '查看添加状态'
rabbitmqctl cluster_status
" > 03_rabbit_join.sh
####################################################################################
####################################################################################
####################################################################################
####################################################################################
####################################################################################



##### 获取ip,主从信息
echo '需要在主节点上执行该脚本!'
echo '不是请按 ctrl+c 退出!'
read -p '输入主节点ip即当前节点ip:' master_ip
echo -e '\n'
read -p '输入从节点ip:(多个ip用 "-" 切分;
如:192.168.1.1-192.168.1.2-192.168.1.3):' salves_ip

echo 'master   '$master_ip > ip.txt

for li in `echo $salves_ip | awk -F '-' '{for(i=1;i<=NF;i++){print $i}}'`;
do
  echo 'salve   '$li >>ip.txt
done
echo -e '\n\n'

echo '确认信息是否有误,3秒后执行下一步!'
echo '--tag-----------ip--------------'
cat ip.txt
echo '--------------------------------'
sleep 3

##### 进行密钥匹配操作
if [  -z `ls /root/.ssh/ | grep id_rsa.pub` ];then
  echo '不存在密钥!'
  sleep 1
  while :
  do
    if [  -z `ls /root/.ssh/ | grep id_rsa.pub` ];then
        echo '默认回车生成密钥!'
        sleep 2
        ssh-keygen -t rsa
    else
        echo "生成密钥成功!"
        sleep 1
        break
    fi
  done
else
  echo '检查密钥通过'
fi

echo '根据提示输入,第一次需要输入yes,之后输入服务器密码'
for li in `cat ip.txt | grep salve | awk '{print $2}' | xargs -n 1`;
do
  echo 'salve '$li
  ssh-copy-id -i /root/.ssh/id_rsa.pub root@$li
done



##### 安装前需要先同步hosts文件,不然可能会报错
echo 'hostname文件生成'
master_ip=`cat ip.txt | grep master | awk '{print $2}'`
echo $master_ip `hostname`> hostname.txt
for li in `cat ip.txt | grep salve | awk '{print $2}' | xargs -n 1`;
do
  echo 'salve '$li
  this_hostname=`ssh root@$li "hostname"`
  echo $li $this_hostname >> hostname.txt
done

echo 'host文件如下'
echo '-----hostname----ip-------'
cat hostname.txt
echo '--------------------------'

for li in `cat hostname.txt | awk '{print $2}'`;
do
  sed -i '/'$li'/d' /etc/hosts
done
### 将hosts文件在主节点生效
cat hostname.txt >> /etc/hosts


### 将hosts文件在从节点生效
for li in `cat ip.txt | grep salve | awk '{print $2}' | xargs -n 1`;
do
  echo 'salve '$li
  scp ./hostname.txt root@$li:/home
  #scp /root/.erlang.cookie root@$li:/home
  scp ./02_rsync_node.sh root@$li:/home
  ssh root@$li "cd /home;bash 02_rsync_node.sh;rm -f 02_rsync_node.sh"
done
 

##### 节点上进行安装操作
echo '主节点安装中...'
[ ! -d "/u01" ] && mkdir /u01
bash ./01_install_mq.sh
### 主节点启动
echo '主节点启动测试'
rabbitmq-server -detached
sleep 2
rabbitmqctl stop
while :
do
  rabbit_pid=`ps -ef | grep rabbitmq_server | grep -v grep | awk '{print $2}'`
  if [[  -z "$rabbit_pid" ]];then
        echo '关闭rabbitmq成功'
        break
  fi
done

### 从节点安装,结束后关闭
echo '从节点安装中...'
for li in `cat ip.txt | grep salve | awk '{print $2}' | xargs -n 1`;
do
  echo 'salve '$li
  scp ./otp_src_20.3.tar.gz root@$li:/home
  scp ./rabbitmq-server-generic-unix-3.7.4.tar.xz root@$li:/home
  scp ./01_install_mq.sh root@$li:/home
  ssh root@$li "cd /home;bash 01_install_mq.sh;rm -f 01_install_mq.sh"
done


##### 同步cookie,结束后启动从节点
echo '同步erlang.cookie到从节点'

for li in `cat ip.txt | grep salve | awk '{print $2}' | xargs -n 1`;
do
  echo 'salve '$li
  scp /root/.erlang.cookie root@$li:/root
  ssh root@$li "source /etc/profile && rabbitmq-server -detached"
done
### 从节点启动完成后,启动主节点
rabbitmq-server -detached
sleep 2
rabbitmq-plugins enable rabbitmq_management
sleep 1
rabbitmqctl start_app
sleep 2
rabbitmqctl add_user admin admin123
sleep 2
rabbitmqctl set_user_tags admin administrator
sleep 2


##### 最后一步,从节点加入主节点
m_h=`hostname`
lines=`cat ip.txt | wc -l`
cp ip.txt ip2.txt
if (( lines >= 3 ));then
  echo '节点数量大于等于3台,可以开启ram'
  ram_ip=`cat ip.txt | grep salve | head -n1 | awk '{print $2}'`
  echo '开启ram节点 ip为:' $ram_ip
  cp  03_rabbit_join.sh temp.sh
  sed -i 's/master_hostname/'$m_h'/' temp.sh
  scp ./temp.sh root@$ram_ip:/home
  ssh root@$ram_ip "cd /home;bash temp.sh;rm -f temp.sh"
  sed -i '/'$ram_ip'/d' ip2.txt
fi

for li in `cat ip2.txt | grep salve | awk '{print $2}' | xargs -n 1`;
do
  echo 'salve '$li
  cp  03_rabbit_join.sh temp.sh
  sed -i 's/--ram rabbit@master_hostname/rabbit@'$m_h'/' temp.sh
  scp ./temp.sh root@$li:/home
  ssh root@$li "cd /home;bash temp.sh;rm -f temp.sh"
done

##### 主节点最后执行
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容