时间:2021-07-01 10:21:17 帮助过:47人阅读
简介 搭建时间:2014/07/24 搭建系统:centos 6.2,centos 6.5 服务器架构 192.168.0.221 twemproxy,redis master01,redis slave02 192.168.0.220 twemproxy,redis master02,redis slave01 192.168.0.10 keepalived master 192.168.0.20 keepalived slav
搭建时间:2014/07/24
搭建系统:centos 6.2,centos 6.5
服务器架构
192.168.0.221 twemproxy,redis master01,redis slave02
192.168.0.220 twemproxy,redis master02,redis slave01
192.168.0.10 keepalived master
192.168.0.20 keepalived slave
服务版本:
redis?: 2.4.10
keepalived: 1.2.2
twemproxy-master: 0.3.0
解压redis源码包;
根据README的介绍,完成安装步骤(make)
将redis文件夹mv到/usr/local下面,完成安装
新建redis配置文件路径
登录到192.168.0.221服务器
mkdir /var/redis/master01/{conf,data,logs,run};
mkdir /var/redis/slave02/{conf,data,logs,run};
登录到192.168.0.220服务器
mkdir /var/redis/master02/{conf,data,logs,run};
mkdir /var/redis/slave01/{conf,data,logs,run};
创建redis.conf文件(master和slave都大致一样,只有2行不同)
dir /var/redis/master01/? #redis的地址
pidfile ./run/redis.pid? #相对路径地址是相当dir来说的
logfile ./logs/stdout.log
dbfilename ./data/dump.rdb
bind 192.168.0.220 #监听服务地址
daemonize yes
requirepass 123qwe #服务密码
masterauth 123qwe? #这个只是在slave服上面配置,master不需要配置
slaveof 192.168.0.221 6601 #这个只是需要在slave上面配置,master不需要配置,指定master的地址
databases 16
port 6601 # 服务端口
timeout 0
loglevel verbose
save 900 1
save 300 10
rdbcompression yes
slave-serve-stale-data yes #如果master断了,slave是否提供服务
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
slowlog-log-slower-than 10000
slowlog-max-len 1024
启动redis服务 先启动redis master服务,然后再启动redis slave服务
登录到slave服务器,执行./redis-cli -h 192.168.0.220 -p 6601 -a 123qwe info,如果配置正确,最后会显示
role:slave
master_host:192.168.0.221
master_port:6601
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
说明redis的master/slave已经完成配置
首先去下载最新的twemproxy,在github上面找到最新版本
如果是采用和我一样的系统,需要先更新autoconf,系统自带版本过低,编译会报错
CFLAGS=”-ggdb3 -O0″ autoreconf -fvi
./configure –prefix=/usr/local/twemproxy? –enable-debug=log
make && make install
这里配置是采用2台服务器搭建,每个服务器都安装一个twemproxy,配置一样,前端使用keepalived进行LVS分发
登陆到192.168.0.221/220,修改conf下面的nutcracker.yml,配置如下:
redis1:
listen: 0.0.0.0:10000
hash: fnv1a_64 #分发算法
distribution: ketama
timeout: 400
backlog: 1024
preconnect: true
auto_eject_hosts: true
server_retry_timeout: 2000 # 重试的时间
server_failure_limit: 3 #失败尝试次数,达到上限就取消后端分发权限
servers:
- 192.168.0.220:6601:1? # redis实例的ip,端口,权重
- 192.168.0.221:6601:1
/usr/local/twemproxy/sbin/nutcracker -c /usr/local/twemproxy/conf/nutcracker.yml -d
随便另外找一个安装有redis的服务器
./redis-cli -h 192.168.0.220 -p 10000 -a 123qwe
如果没有报错,说明成功!
登录到192.168.0.10
yum install kernel-devel
./configure –prefix=/usr/local/keepalived –with-kernel-dir=/usr/src/kernels/2.6.18-308.el5-x86_64/
make && make install
在make之前,如果现实如下结果,表示你的系统可以完成keepalived的各项功能
Keepalived configuration
————————
Keepalived version?????? : 1.2.2
Compiler???????????????? : gcc
Compiler flags?????????? : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib??????????????? : -lpopt -lssl -lcrypto
Use IPVS Framework?????? : Yes # 要实现LVS功能,必须保证这个地方是YES
IPVS sync daemon support : Yes #
IPVS use libnl?????????? : No
Use VRRP Framework?????? : Yes
Use Debug flags????????? : No
修改文件keepalived.conf
global_defs {
router_id wd_twemproxy
}vrrp_instance wd2 {
state BACKUP # master标准MASTER
nopreempt
interface em2
track_interface {
em2
}virtual_router_id 70
priority 100 # 权重高的作为master
advert_int 1
authentication {
auth_type PASS
auth_pass css74..tfwwapmzi4r
}virtual_ipaddress {
192.168.0.100/16 dev em2 scope global #定义VIP
}
}virtual_server 192.168.0.100 10000 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.0.0
persistence_timeout 120
protocol TCPreal_server 192.168.0.220 10000 {
weight 1
TCP_CHECK {
connect_timeout 60
nb_get_retry 3
delay_before_retry 3
connect_port 10000
}
}real_server 192.168.0.221 10000 {
weight 1
TCP_CHECK {
connect_timeout 60
nb_get_retry 3
delay_before_retry 3
connect_port 10000
}
}
}
配置完成了之后,启动keepalived
/usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf
执行 ipvsadm -Ln
显示如下:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port
Forward Weight ActiveConn InActConn
TCP? 192.168.0.100:10000 wrr persistent 120
-> 192.168.0.220:10000???????? Route?? 1????? 0????????? 0
-> 192.168.0.221:10000???????? Route?? 1????? 0????????? 0
说明keepalived配置成功
因为不想再次修改上面的内容,所以直接在后面添加说明,看了之后再根据下面的内容自己调整上面的配置!
以上的做法当你完全配置完成之后,可以发现无法提供服务,想知道为什么吗,我TM也不知道,反正就是不行,无法连接
[Mon Jul 28 10:57:29 2014] nc_proxy.c:336 accepted c 9 on p 8 from ‘unknown’
[Mon Jul 28 10:57:29 2014] nc_core.c:201 close c 9 ‘unknown’ on event FF00FF eof 0 done 0 rb 0 sb 0: Connection reset by pee
[Mon Jul 28 10:57:35 2014] nc_proxy.c:336 accepted c 9 on p 8 from ‘unknown’
[Mon Jul 28 10:57:35 2014] nc_core.c:201 close c 9 ‘unknown’ on event FF00FF eof 0 done 0 rb 0 sb 0: Connection reset by peer
以上为twemproxy启动之后报错信息,如果你也是采用keepalived作为最前端的LVS分发功能,那估计结果不会比我好到哪去。
解决办法:
放弃使用keepalived使用LVS的功能,最多使用热备功能,前端使用两个twemproxy,一个主,一个备,keepalived提供服务。
如果redis使用主备功能,不要使用密码认证,直接使用内网地址也很安全,不然twemproxy无法提供服务,切记,切记!!!
原文地址:Keepalive,Twemproxy,Redis整体集群搭建记录, 感谢原作者分享。