set -euxo pipefail
redisHome
=/opt/redis-6.0.5
redisClusterHome
=/opt/redis-cluster
stopFirewalld
(){
systemctl disable firewalld --now
sedisabled
=$(sestatus | awk '{print $NF}')
if [ $sedisabled = disabled
]
then
printf "\e[1;32m===========================selinux is disabled==================================\e[0m\n"
else
printf "\e[1;32m===========================请关闭selinux后再操作================================\e[0m\n"
exit 1
fi
}
netTools
(){
tools
=$(rpm -qa net-tools | wc -l)
if [ $tools -gt 0
]
then
printf "\e[1;32m===========================net-tools 已安装=====================================\e[0m\n"
else
printf "\e[1;32m===========================net-tools 未安装,开始安装===========================\e[0m\n"
yum -y
install net-tools
if [ $? -ne 0
]
then
printf "\e[1;32m===========================net-tools 安装失败===================================\e[0m\n"
exit 2
else
printf "\e[1;32m===========================net-tools 安装成功===================================\e[0m\n"
fi
fi
}
checkNetwork
(){
ping -c1 www.baidu.com
> /dev/null 2
>&1
if [ $? -eq 0
]
then
printf "\e[1;32m===========================网络正常=============================================\e[0m\n"
else
printf "\e[1;32m===========================请检查网络===========================================\e[0m\n"
exit 3
fi
}
checkNetwork
stopFirewalld
netTools
hostsIp
(){
ip
=$(ifconfig eth0 | grep netmask | awk '{print $2}')
ip1
=192.168.10.134
ip2
=192.168.10.135
cat >> /etc/hosts
<<eof
$ip redis01
$ip1 redis02
$ip2 redis03
eof
}
sshCopy
(){
yum -y
install sshpass
> /dev/null 2
>&1
ssh-keygen -t rsa -P
'' -f ~/.ssh/id_rsa
for cluster
in redis01 redis02 redis03
do
sshpass -p
'123.com' ssh-copy-id
$cluster -o StrictHostKeyChecking
=no
scp /etc/hosts
$cluster:/etc/hosts
if [ $? -eq 0
];then
printf "\e[1;32m===========================$cluster 秘钥copy完成================================\e[0m\n"
else
printf "\e[1;32m===========================$cluster 秘钥copy失败================================\e[0m\n"
exit 4
fi
done
}
installRedis
(){
if [ $(find / -iname 'redis-server' | wc -l) -gt 0
]
then
echo 'redis 已安装'
else
echo 'redis 未安装,开始安装'
for k
in redis01 redis02 redis03
do
ssh root@
$k "yum -y install gcc glibc glibc-kernheaders glibc-common glibc-devel make"
ssh root@
$k "yum -y install centos-release-scl"
ssh root@
$k "yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils"
ssh root@
$k "echo "source /opt/rh/devtoolset-9/enable
" >> /etc/profile.d/gcc9.sh && source /etc/profile.d/gcc9.sh"
ssh root@
$k "wget -O /opt/redis.tar.gz http://download.redis.io/releases/redis-6.0.5.tar.gz"
ssh root@
$k "cd /opt/ && tar xf redis.tar.gz && cd redis-6.0.5 && make && make install"
ssh root@
$k "sed -i 's/bind.*/bind 0.0.0.0/g' $redisHome/redis.conf"
ssh root@
$k "sed -i 's/protected-mode yes/protected-mode no/g' $redisHome/redis.conf"
ssh root@
$k "sed -i 's/daemonize no/daemonize yes/g' $redisHome/redis.conf"
ssh root@
$k "sed -i 's/# requirepass.*/requirepass redis/g' $redisHome/redis.conf"
ssh root@
$k "$redisHome/src/redis-server $redisHome/redis.conf"
ssh root@
$k "ss -nltp | grep 6379"
if [ $? -eq 0
]
then
printf "\e[1;32m===========================$k 启动成功=======================================\e[0m\n"
else
printf "\e[1;32m===========================$k 启动失败=======================================\e[0m\n"
exit 5
fi
done
fi
}
redisBGSAVE
(){
ip
=$(ifconfig eth0 | grep netmask | awk '{print $2}')
egrep -v
"^$|#" $redisHome/redis.conf
> $redisHome/redis.conf.bak
sed -i
"s/# replicaof.*/replicaof $ip 6379/g" $redisHome/redis.conf.bak
sed -i
"s/# masterauth.*/masterauth redis/g" $redisHome/redis.conf.bak
$redisHome/src/redis-server
$redisHome/redis.conf
if [ $? -eq 0
]
then
printf "\e[1;32m===========================redis01 启动成功=====================================\e[0m\n"
else
printf "\e[1;32m===========================redis01 启动失败=====================================\e[0m\n"
exit 6
fi
for m
in redis02 redis03
do
scp $redisHome/redis.conf.bak root@
$m:$redisHome/redis.conf
ssh root@
$m "$redisHome/src/redis-server $redisHome/redis.conf"
ssh root@
$m "ss -nltp | grep 6379"
if [ $? -eq 0
]
then
printf "\e[1;32m===========================$m 启动成功===================================== \e[0m\n"
else
printf "\e[1;32m===========================$m 启动失败===================================== \e[0m\n"
exit 7
fi
done
}
redisCluster
(){
node1
=6001
node2
=6002
ulimit
=$(ulimit -a | grep 'open files' | awk '{print $NF}')
if [ $ulimit -le 10032
]
then
ulimit -n 10032
else
printf "\e[1;32m===========================开始部署集群==================================== \e[0m\n"
fi
mkdir -p
$redisClusterHome/
{$node1,
$node2}/
{conf,data,log
}
egrep -v
"^$|#" $redisHome/redis.conf
> $redisClusterHome/
$node1/conf/redis-
$node1.conf
sed -i
"s/port.*/port $node1/g" $redisClusterHome/
$node1/conf/redis-
$node1.conf
sed -i
"s#dir.*#dir $redisClusterHome/$node1/data#g" $redisClusterHome/
$node1/conf/redis-
$node1.conf
sed -i
"s#pidfile.*#pidfile $redisClusterHome/$node1/#g" $redisClusterHome/
$node1/conf/redis-
$node1.conf
sed -i
"s#logfile.*#logfile $redisClusterHome/$node1/log/redis.log#g" $redisClusterHome/
$node1/conf/redis-
$node1.conf
cat >> $redisClusterHome/
$node1/conf/redis-
$node1.conf
<<EOF
cluster-enabled yes
cluster-config-file $redisClusterHome/$node1/conf/cluster-$node1.conf
cluster-node-timeout 5000
EOF
sed "s/$node1/$node2/g" $redisClusterHome/
$node1/conf/redis-
$node1.conf
> $redisClusterHome/
$node2/conf/redis-
$node2.conf
scp -r
$redisClusterHome root@redis02:/opt/
scp -r
$redisClusterHome root@redis03:/opt/
for n
in redis01 redis02 redis03
do
for node
in $node1 $node2
do
ssh root@
$n "$redisHome/src/redis-server $redisClusterHome/$node/conf/redis-$node.conf"
ssh root@
$n "ss -nltp | grep $node"
if [ $? -eq 0
]
then
printf "\e[1;32m===========================$node 启动成功================================== \e[0m\n"
else
printf "\e[1;32m===========================$node 启动失败================================== \e[0m\n"
exit 8
fi
done
done
}
case $1 in
'install')
hostsIp
sshCopy
installRedis
;;
'bgsave')
redisBGSAVE
;;
'cluster')
redisCluster
;;
'*')
printf "\e[1;32m===========================输入错误,请检查拼写=================================\e[0m\n"
exit 9
;;
esac