twemproxy安装访问及同机部署多实例
twemproxy是干啥的网上讲的很多,这里就不提了。
项目github地址:https://github.com/twitter/twemproxy/releases
twemproxy不支持事务操作
twemproxy支持的命令情况:https://github.com/twitter/twemproxy/blob/master/notes/redis.md
首先安装配置redis,此处略过。
下载
到github上下载twemproxy的源代码,此处下载的zip版本的,然后解压:
unzip twemproxy-0.4.1.zip
编译
# 进入到源码目录
cd twemproxy-0.4.1
# 使用autoreconf工具生成一些编译的程序文件
yum install autoconf automake libtool libffi-dev
autoreconf -fvi
# 建立一个twemproxy编译后的工作目录
mkdir -p /home/redis-test/twemproxy
# 进行编译的目录配置
./configure --prefix=/home/redis-test/twemproxy
# 进行源代码的编译与安装
make && make install
配置
# 将源码中提供的配置文件复制到源码安装目录
mkdir -p /home/redis-test/twemproxy/conf
cp -p /home/redis-test/twemproxy-0.4.1/conf/nutcracker.yml /home/redis-test/twemproxy/conf/redis_master.yml
默认文件内容如图:
删除多余内容,修改配置文件,LISTEN的含义和redis的host:port相同,代表允许访问IP的范围,第一个字段要和文件名一致:
redis_master:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 127.0.0.1:6379:1
- 127.0.0.1:6380:1
- 127.0.0.1:6381:1
运行访问
# 创建pid目录
mkdir -p /home/redis-test/twemproxy/pids
# 创建log目录
mkdir -p /home/redis-test/twemproxy/logs
# 启动
# 还有参数会用到,用于监控 如果在同一台机器上启动多个twemproxy,不修改端口的话也会报错
# -s, --stats-port=N : set stats monitoring port (default: 22222)
# -a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
# 更多参数见文末
/home/redis-test/twemproxy/sbin/nutcracker -c /home/redis-test/twemproxy/conf/redis_master.yml -p /home/redis-test/twemproxy/pids/redis_master.pid -o /home/redis-test/twemproxy/logs/redis_master.log -d
然后通过redis-cli 进行访问就好,twemproxy相当于redis的代理,所以地址和ip改为twemproxy的即可:
redis-cli -h 127.0.0.1 -p 22121
因为twemproxy是代理,所以依旧可以用各种client直接访问。
下面是lettuce的例子:
public class LettuceMain {
public static void main(String[] args) {
RedisClient redisClient = RedisClient.create(
RedisURI.builder()
.withHost("47.93.126.108")
.withPort(22121)
.build()
);
RedisCommands<String, String> commands = redisClient.<String, String>connect().sync();
commands.set("test", "test twemproxy");
System.out.println(commands.get("test"));
}
}
jedis的例子:
public class JedisMain {
public static void main(String[] args) {
Jedis jedis = new Jedis("47.93.126.108", 22121);
System.out.println(jedis.get("test"));
}
}
高可用
通过平行的部署多个twemproxy实例,外面再加一层负载均衡,如Nginx、HAProxy等。
个人测试一般是在同机部署多实例,直接按上面的运行方式,修改配置文件的端口后运行,是无法启动的。
因为twemproxy提供的有监控访问端口,如果直接启动就会端口冲突,上面提到了监控访问端口的ip和port参数。
# -s, --stats-port=N : set stats monitoring port (default: 22222)
# -a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
所以同机启动多实例时,还需要加个-s参数,使用一个未被占用的端口即可。
命令参数
-h, –help : 查看帮助文档,显示命令选项
-V, –version : 查看nutcracker版本
-t, –test-conf : 测试配置脚本的正确性
-d, –daemonize : 以守护进程运行
-D, –describe-stats : 打印状态描述
-v, –verbosity=N : 设置日志级别 (default: 5, min: 0, max: 11)
-o, –output=S : 设置日志输出路径,默认为标准错误输出 (default: stderr)
-c, –conf-file=S : 指定配置文件路径 (default: conf/nutcracker.yml)
-s, –stats-port=N : 设置状态监控端口,默认22222 (default: 22222)
-a, –stats-addr=S : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)
-i, –stats-interval=N : 设置状态聚合间隔 (default: 30000 msec)
-p, –pid-file=S : 指定进程pid文件路径,默认关闭 (default: off)
-m, –mbuf-size=N : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)