linux搭建Twemproxy+不同主机的redis9个节点

11 篇文章 0 订阅

序言

4月12号写了一篇在测试环境的1台主机上搭建9个redis节点和1个twemproxy的博客,这个是根据我在测试环境真实搭建成功的过程来写的,最近完成了生产环境的9个redis节点和2个twemproxy的搭建,所以也记录一下

在看这篇博客之前希望你已经搭建好了9个redis节点,否则是无法搭建Twemproxy的,而这9个redis节点是每3台为一组,一组是1主2备,而主节点可读可写,2个从节点只能读。

如果没有搭建,可以按照我今天刚写的博客搭建完成后再来参考我的这篇来搭建。

主机情况

主机主备
127.0.1.0
127.0.2.0

我这里采用的是一主一备的模式来搭建,2台主机的搭建是一模一样的。

我参考的博客:
文章链接1
在这里插入图片描述

文章链接2
在这里插入图片描述
--------------------开始搭建和配置啦-------------------

1、新建用户

在2台主机新建用户

groupadd twempsrv
useradd -m -d /home/twempsrv -g twempsrv -s /bin/bash -u 502 twempsrv

2、解压

解压从测试环境打包的twemproxy,如果想看最开始是怎么安装的,可以看我的这篇文章

 tar -zxvf twemproxy.tar.gz

3、修改配置文件

修改配置文件nutcracker.yml

cd /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/conf
vim nutcracker.yml

配置文件内容

redis:
  listen: 0.0.0.0:22122
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 30000
  server_failure_limit: 2
  servers:
   - 127.0.0.1:7000:1 server0
   - 127.0.0.3:7003:1 server3
   - 127.0.0.5:7006:1 server6

4、检查配置文件格式

cd /home/twempsrv/twemproxy/twemproxy-master/installs/sbin
 ./nutcracker -t

显示内容:

nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok

5、修改配置文件的名称

cp nutcracker.yml redis_22122.yml

注:之所以要修改配置文件名称是因为更新配置文件的脚本需要获取里面的redis_22122

6、启动nutcracker

cd /home/twempsrv/twemproxy/twemproxy-master/installs/sbin

nutcracker -d -c /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/conf/nutcracker.yml -p /home/twempsrv/twemproxy/twemproxy-master/installs/run/redisproxy.pid -o /home/twempsrv/twemproxy/twemproxy-master/installs/run/redisproxy.log

7、编写启动脚本

cd /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh
vim downtwemproxy.sh

启动脚本内容

#!/bin/bash
SERVER_NAME="nutcracker"
/home/twempsrv/twemproxy/twemproxy-master/installs/sbin/nutcracker -d -c /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/conf/nutcracker.yml -p /home/twempsrv/twemproxy/twemproxy-master/installs/run/redisproxy.pid -o /home/twempsrv/twemproxy/twemproxy-master/installs/run/redisproxy.log
sp_pid=`ps -ef | grep  $SERVER_NAME | grep -v grep | awk '{print $2}'`
if [ -z "$sp_pid" ];
then
 echo "cannot run $SERVER_NAME,please check!"
else
 echo "$SERVER_NAME is starting, pid:"$sp_pid
fi
cd  $BIN_DIR

8、编写停止脚本

cd /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh
vim uptwemproxy.sh

停止脚本内容

#!/bin/bash
SERVER_NAME="nutcracker"
sp_pid=`ps -ef | grep  $SERVER_NAME | grep -v grep | awk '{print $2}'`
if [ -z "$sp_pid" ];
then
 echo "stop fail! The $SERVER_NAME not start!"
else
 kill -9 $sp_pid
 echo "stop success! pid:"$sp_pid
fi
cd  $BIN_DIR

9、创建sentinel的启动环境

cd  /home/twempsrv/twemproxy/
mkdir redis_sentinel
cd redis_sentinel
mkdir bin conf logs  pid sh

从7000端口的主机将 redis-cli和 redis-sentinel
传到bin目录下

cd bin
scp  rdsclsr@127.0.0.1:/bal/rdsclsr/redis/redis-5.0.8/installs/bin/redis-server .
scp  rdsclsr@127.0.0.1:/bal/rdsclsr/redis/redis-5.0.8/installs/bin/redis-cli  .

注:命令的最后有个点(.),表示传到当前目录

11、本机的sentinel的启动脚本

cd  /home/twempsrv/twemproxy/redis_sentinel/sh
vim up_tw_sentinel.sh

启动脚本的内容

#!/bin/bash
/home/twempsrv/twemproxy/redis_sentinel/bin/redis-sentinel /home/twempsrv/twemproxy/redis_sentinel/conf/sentinel.conf

12、本机的sentinel的停止脚本

cd  /home/twempsrv/twemproxy/redis_sentinel/sh
vim down_tw_sentinel.sh

停止脚本的内容

#!/bin/bash
/home/twempsrv/twemproxy/redis_sentinel/bin/redis-cli -h 10.253.47.143  -p 25379  shutdown

13、编写更新配置文件的脚本

为了在master宕机后,将选举出来的master写入到nutcracker.yml文件中,需要写一个更新配置文件的脚本,脚本client-reconfig.sh

cd /home/twempsrv/twemproxy/twemproxy-master/installs/sbin
mkdir logs sh
vim /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/client-reconfig.sh

脚本内容:

# reconfig nutcracker.yml add by fanhf in 202006151700
#!/bin/sh 

monitor_name="$1"   ##monitor master-group-name
master_old_ip="$4"
master_old_port="$5"
master_new_ip="$6"
master_new_port="$7"
twemproxy_name=$(echo $monitor_name |awk -F'_' '{print $1"_"$2}')   

twemproxy_bin="/home/twempsrv/twemproxy/twemproxy-master/installs/sbin/nutcracker"
twemproxy_conf="/home/twempsrv/twemproxy/twemproxy-master/installs/sbin/conf/${twemproxy_name}.yml"
twemproxy_pid="/home/twempsrv/twemproxy/twemproxy-master/installs/sbin/logs/${twemproxy_name}.pid"
twemproxy_log="/home/twempsrv/twemproxy/twemproxy-master/installs/sbin/logs/${twemproxy_name}.log"
twemproxy_cmd="${twemproxy_bin} -c ${twemproxy_conf} -p ${twemproxy_pid} -o ${twemproxy_log} -v 11 -d"
 
sed -i "s/${master_old_ip}:${master_old_port}/${master_new_ip}:${master_new_port}/" ${twemproxy_conf}

ps -ef |grep "${twemproxy_cmd}" |grep -v grep |awk '{print $2}'|xargs kill
${twemproxy_cmd}
 
sleep 1
ps -ef |grep "${twemproxy_cmd}" |grep -v grep

14、执行动态修改127.0.1.0.:25379 sentinel 的配置的命令,添加 client-reconfig-script 项

进入sentinel的目录

cd /home/twempsrv/twemproxy/redis_sentinel

在twemproxy的主上依次执行下面的3条命令

/home/twempsrv/twemproxy/redis_sentinel/bin/redis-cli -h 127.0.1.0  -p 25379 sentinel set redis_22122_group1 client-reconfig-script /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/client-reconfig.sh

/home/twempsrv/twemproxy/redis_sentinel/bin/redis-cli -h  127.0.1.0  -p 25379 sentinel set redis_22122_group2 client-reconfig-script /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/client-reconfig.sh

/home/twempsrv/twemproxy/redis_sentinel/bin/redis-cli -h  127.0.1.0  -p 25379 sentinel set redis_22122_group3 client-reconfig-script /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/client-reconfig.sh

在twemproxy的从上执行上面的三个命令时需要将ip地址由127.0.1.0换成127.0.2.0
我在执行上面的命令的时候,出现了错误的信息:

(error)ERR Reconfiguration of scripts path is denied for security reasons.Check the deny-scripts-reconfig configuration in your Sentinel configuration

从这句话可以很明显的看出问题:sentinel.conf里的deny-scripts-reconfig配置的问题,.

我最开始的时候是停掉sentinel,把这句配置删掉,然后把sentinel拉起,再执行,但依然是这个错误,就这么重复了几次,和同事说这件事的时候,我猛然想到,如果把配置的值由yes改为no会怎么样,于是尝试了一下。

修改3台sentinel的配置文件和twemproxy主机上的配置:将deny-scripts-reconfig的值修改为no,就可以解决问题。

所以,得出的经验是:不能在启动哨兵之前将这句配置给删掉,一旦启动后,这句话就会被重新写进去,执行上面的命令依然会报错。

15、测试7000宕机后是否修改配置文件

测试一下上面的配置是否成功,当我把7000给杀掉,看看能否自动修改redis_22122.yml的配置文件

其实这个过程还有点小曲折,我反复试了好几次,把7000杀掉,配置文件纹丝未动,重新把上面的3个命令执行一遍,再次重启7000,再杀掉7000,还是不行,于是想肯定是哪里除了问题,看到我的redis_22122.yml的配置文件:

redis:
  listen: 0.0.0.0:22122
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 30000
  server_failure_limit: 2
  servers:
   - 127.0.0.1:7000:1 server0
   - 127.0.0.3:7003:1 server3
   - 127.0.0.5:7006:1 server6

里面还配置了server0、server3和server6,我在想替换脚本里面没有把server给替换掉,无法匹配,所以不行,于是就把server0、server3和server6去掉,变成了这样

redis:
  listen: 0.0.0.0:22122
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 30000
  server_failure_limit: 2
  servers:
   - 127.0.0.1:7000:1
   - 127.0.0.3:7003:1
   - 127.0.0.5:7006:1

再次把7000 杀掉,等了十几秒,怀着忐忑的心情看了一下配置文件,哇塞!!我成功啦,太 开森啦~

redis:
  listen: 0.0.0.0:22122
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 127.0.0.2:7001:1
   - 127.0.0.3:7003:1
   - 127.0.0.5:7006:1

再把7000拉起,7001杀掉,再拉起7001后配置文件又会自动恢复到之前的7000端口。

16、编辑切机脚本

vim /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/twemp_swap_script.sh 

切机脚本内容

#!/bin/bash

if [ "$1" == "start" ]
then
    echo start twempoxy time :`date +%Y:%m:%d%t%H:%M:%S`   >> /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/logs/starttwemp.log
    sh /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/uptwemproxy.sh
    echo twempoxy is starting......
fi


if [ "$1" == "stop" ]
then
    echo stop twempoxy time:`date +%Y:%m:%d%t%H:%M:%S`   >> /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/logs/stoptwem.log
    sh /home/twempsrv/twemproxy/twemproxy-master/installs/sbin/sh/downtwemproxy.sh
    echo  twempoxy stoped......
fi

肯定有的小伙伴会想,不用keepalived进行高可用吗?(整合keepalived可以参考博客),这个考虑是必须的,我们确实用了,不过用的是Pacemaker和pcs搭建的,这个我没有搭建过,是同事搭建的,所以我没有发言权,等我有机会搭建后再再补充博客吧。

与君共勉!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值