首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

KeepAlived + Redis 部署详细过程以及遇到的有关问题

2013-10-31 
KeepAlived + Redis 部署详细过程以及遇到的问题?一、Redis和Keepalived安装?cd /usr/local?2、命令:mkdir m

KeepAlived + Redis 部署详细过程以及遇到的问题

?

一、Redis和Keepalived安装

?

cd /usr/local

?

2、命令:mkdir ms40? 新建ms40目录

?

???????? 3、cd ms40

?

???????? 4、mkdir redis && cd redis && mkdir log && mkdir data? 然后切回ms40目录

?

5、mkdir keepalived

?

???????? 6、上传文件redis-2.6.14.tar.gz至redis目录

?

?????????????????? 上传文件keepalived-1.2.7.tar.gz至keepalived目录

?

???????? 7、安装redis

?

?????????????????? 1)cd redis

?

?????????????????? 2)tar zxvf redis-2.6.14.tar.gz

?

?????????????????? 3)cd redis-2.6.14

?

????????????? 4)make

?

?????????????????? 5)cd src

?

?????????????????? 6)cp redis-benchmark redis-cli redis-server /usr/bin/

?

?????????????????? 7)切回至ms40目录

?

?????? 8、安装keepalived

?

?????????????????? 1)cd keepalived

?

?????????????????? 2)tar zxvf keepalived-1.2.7.tar.gz

?

?????????????????? 3)yum install popt-devel

?

?????????????????? 4)yum -y install openssl-devel

?

?????????????????? 5)cd keepalived-1.2.7

?

?????????????????? 6)./configure

?

?????????????????? 7)make && make install

?

?

?

二、Keepalived配置

?

?

?

三、Mater配置(10.25.174.121)

?

/etc/keepalived目录下

?

???????? 2、给脚本加上可执行权限:chmod +x /etc/keepalived/scripts/*.sh

?

???????? 3、备份/usr/local/ms40/redis/redis-2.6.14目录下的redis.conf文件

?

4、从附件的Master文件夹中获取redis.conf文件覆盖至上述目录中

?

?

?

四、Slave配置(10.25.174.122)

?

/etc/keepalived目录下

?

???????? 2、给脚本加上可执行权限:chmod +x /etc/keepalived/scripts/*.sh

?

???????? 3、备份/usr/local/ms40/redis/redis-2.6.14目录下的redis.conf文件

?

4、从附件的Master文件夹中获取redis.conf文件覆盖至上述目录中

?

?

?

五、启动

?

1)cd /

?

2)cd /usr/local/ms40/redis/redis-2.6.14

?

3)src/redis-server

?

???????? 2、启动122上的redis

?

1)cd /

?

2)cd /usr/local/ms40/redis/redis-2.6.14

?

3)src/redis-server

?

???????? 3、启动121上的keepalived

?

?????????????????? 1)cd /

?

?????????????????? 2)service keepalived start

?

???????? 4、启动122上的keepalived

?

?????????????????? 1)cd /

?

?????????????????? 2)service keepalived start

?

?

?

六、验证

?

???????? 1、运行-cmd

?

?????????????????? Ping 10.25.174.200 看是否能够ping通

?

telnet 10.25.174.200 6379 是否能通

?

cd /usr/local/ms40/redis/redis-2.6.14

?

src/redis-cli –h 10.25.174.200

?

set name “test”

?

get name

?

看看结果是否为test

?

如果是则 del test

?

?

?

六、安装Redis过程中涉及的一些问题

?

????? 1、GCC的问题

?

make[2]: cc: Command not found

?

make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/usr/local/redis-2.6.16/src'
make: *** [all] Error 2

?

原因:没安装gcc,执行命令安装:yum install gcc-c++

?

????? 2、内存分配器的问题(重视)

?

make[1]: Entering directory `/usr/local/redis-2.6.16/src'

?

CC adlist.o

?

In file included from adlist.c:34:

?

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory

?

zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

?

make[1]: *** [adlist.o] Error 1

?

make[1]: Leaving directory `/usr/local/redis-2.6.16/src'

?

make: *** [all] Error 2

?

???????? 原因:查看redis的源码 src/zmalloc.c可以看到如下代码:

?

?????? #if defined(USE_TCMALLOC)

?

#define malloc(size) tc_malloc(size)

?

#define calloc(count,size) tc_calloc(count,size)

?

#define realloc(ptr,size) tc_realloc(ptr,size)

?

#define free(ptr) tc_free(ptr)

?

#elif defined(USE_JEMALLOC)

?

#define malloc(size) je_malloc(size)

?

#define calloc(count,size) je_calloc(count,size)

?

#define realloc(ptr,size) je_realloc(ptr,size)

?

#define free(ptr) je_free(ptr)

?

???????? 可以看到源码中首先会判断系统中是否存在tcmalloc内存分配器,如果没有,则使用jemalloc内存分配器,如果连jemalloc分配器也没有找到,就会报错了。

?

???????? 本次现网部署Redis后,因为没有jemalloc分配器,导致碎片率达到了1.59,redis的内存占用率也就是实际内存占用的1.59倍,这个数据量是非常恐怖的,对内存资源是个相当大的损耗。

?

???????? 在现网环境的linux系统中,可能没有预先安装Jemalloc分配器,需要手动安装。

?

???????? 1、wget http://www.canonware.com/download/jemalloc/jemalloc-3.2.0.tar.bz2

?

???????? 2、tar jxf jemalloc-3.2.0.tar.bz2? (tar.bz2的压缩格式使用 tar jxf 解压)

?

???????? 3、cd jemalloc-3.2.0

?

???????? 4、./configure

?

???????? 5、make && make install

?

???????? 6、ldconfig

?

???????? 过程完成后,在切回到redis-2.6.14目录中,重新执行make命令

?

?

?

当然如果不想使用jemalloc分配器,可以强制使用如下命令来安装redis:

?

???????? make MALLOC=libc? (libc是默认的内存分配器,不过经过验证,碎片率是最高的)

?

?

?

???????? 经现网验证:

?

http://blog.nosqlfan.com/html/3490.html

?

?

?

七、安装Keepalived过程中涉及的一些问题

?

????? 1、虚拟网卡sit0的问题

?

?????????????????? Keepalived安装完成后,在启动时报了如下的异常:

?

Oct?18?00:24:43?localhost?Keepalived[6866]:?Starting?VRRP?child?process,?pid=6868
Oct?18?00:24:43?localhost?Keepalived_vrrp[6868]:?No?such?interface,?sit0

?

使用ip a命令查看网卡信息如下:

?

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue

?

??? ?????? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

?

??? ?????? inet 127.0.0.1/8 scope host lo

?

??? ?????? inet6 ::1/128 scope host

?

?????? ????????? valid_lft forever preferred_lft forever

?

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

?

??? ?????? link/ether 00:50:56:ba:67:6e brd ff:ff:ff:ff:ff:ff

?

??? ?????? inet 10.25.174.122/24 brd 10.25.174.255 scope global eth0

?

??? ?????? inet6 fe80::250:56ff:feba:676e/64 scope link

?

?????? ????????? valid_lft forever preferred_lft forever

?

3: sit0: <NOARP> mtu 1480 qdisc noop

?

link/sit 0.0.0.0 brd 0.0.0.0

?

网上对于sit0的描述如下:

?

???????? SIT是IPv6-in-IPv4 tunnel interfaces, 这个interfaces(界面或是接口)也称作sitx, sit是"Simple Internet Transition"的缩写. 它可以将IPv6的数据包塞进IPv4, 通过IPv4到达另一个地点.sit0 不能使用在专用的tunnels 上.

?

?????? 一般它没有什么用, 还会减慢上网的速度, 可以修改

?

??????????????????

?

在/etc/modprobe.conf文件增加如下两行配置:

?

alias ipv6 off
alias net-pf-10 off

?

然后reboot重启服务器

?

2、nc命令的问题?????

?

家里测试环境(79.78、79.79)没有nc命令(类似windows下的telnet)

?

?

?

3、检测脚本的问题

?

因家里在压测的时候,服务器没有nc命令,所以在检测脚本redis_check.sh中使用的是ping命令来检测redis是否还活着。但是因为在大并发情况下,ping命令会被拥堵,由此可能导致redis主备进行切换

?

?????????????????? 原redis_check.sh:

?

??????????????????????????? #!/bin/bash

?

ALIVE=`/usr/bin/redis-cli PING`

?

if [ "$ALIVE" == "PONG" ]; then?

?

??????? ?????????????????? echo $ALIVE

?

??????? ?????????????????? exit 0

?

else?

?

??????? ?????????????????? echo $ALIVE

?

??????? ?????????????????? exit 1

?

fi

?

?????????????????? 现redis_check.sh:

?

??????????????????????????? #!/bin/bash

?

nc -w 0 127.0.0.1 6379 && exit 0 || exit 1

?

4、keepalived.conf问题

?

?????????????????? Keepalived.conf中有运行监测脚本redis_check.sh的配置:

?

?

?

?????????????????? vrrp_script chk_redis {

?

????????????????? script "/etc/keepalived/scripts/redis_check.sh"

?

????????????????? interval 1

?

}

?

?

?

变量interval 表示执行监测脚本的时间间隔:1秒执行一次确实没有必要。

?

?

?

5秒执行一次即可。

?

热点排行