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"}'

你可能感兴趣的:(linux--rabbitmq--集群搭建脚本)