设为首页 收藏本站
查看: 863|回复: 0

[经验分享] KeepAlived + Redis 部署详细过程以及遇到的问题

[复制链接]

尚未签到

发表于 2016-12-20 09:04:44 | 显示全部楼层 |阅读模式
一、RedisKeepalived安装
1、  以下步骤在121122上均要进行一遍
2、  root用户登录,
cd /usr/local
2、命令:mkdir ms40  新建ms40目录
         3cd ms40
         4mkdir redis && cd redis && mkdir log && mkdir data  然后切回ms40目录
5mkdir keepalived
         6、上传文件redis-2.6.14.tar.gzredis目录
                   上传文件keepalived-1.2.7.tar.gzkeepalived目录
         7、安装redis
                   1cd redis
                   2tar zxvf redis-2.6.14.tar.gz
                   3cd redis-2.6.14
              4make
                   5cd src
                   6cp redis-benchmark redis-cli redis-server /usr/bin/
                   7)切回至ms40目录
       8、安装keepalived
                   1cd keepalived
                   2tar zxvf keepalived-1.2.7.tar.gz
                   3yum install popt-devel
                   4yum -y install openssl-devel
                   5cd keepalived-1.2.7
                   6./configure
                   7make && make install
 
二、Keepalived配置
1、  转移keepalived的配置文件
1)  cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
2)  cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
3)  mkdir /etc/keepalived
4)  cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
5)  cp /usr/local/sbin/keepalived /usr/sbin/
 
三、Mater配置(10.25.174.121
1、  从附件的Master文件夹中获取scripts文件夹和keepalived.conf覆盖至目录
/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
1、  从附件的Slave文件夹中获取scripts文件夹和keepalived.conf覆盖至目录
/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、  启动121上的redis
1cd /
2cd /usr/local/ms40/redis/redis-2.6.14
3src/redis-server
         2、启动122上的redis
1cd /
2cd /usr/local/ms40/redis/redis-2.6.14
3src/redis-server
         3、启动121上的keepalived
                   1cd /
                   2service keepalived start
         4、启动122上的keepalived
                   1cd /
                   2service keepalived start
 
六、验证
         1、运行-cmd
                   Ping 10.25.174.200 看是否能够ping
2、  运行-cmd
telnet 10.25.174.200 6379 是否能通
3、  使用sshclient连接至121或者122,使用root用户
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过程中涉及的一些问题
      1GCC的问题
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.59redis的内存占用率也就是实际内存占用的1.59倍,这个数据量是非常恐怖的,对内存资源是个相当大的损耗。
         在现网环境的linux系统中,可能没有预先安装Jemalloc分配器,需要手动安装。
         1wget http://www.canonware.com/download/jemalloc/jemalloc-3.2.0.tar.bz2
         2tar jxf jemalloc-3.2.0.tar.bz2  tar.bz2的压缩格式使用 tar jxf 解压)
         3cd jemalloc-3.2.0
         4./configure
         5make && make install
         6ldconfig
         过程完成后,在切回到redis-2.6.14目录中,重新执行make命令
 
当然如果不想使用jemalloc分配器,可以强制使用如下命令来安装redis
         make MALLOC=libc  libc是默认的内存分配器,不过经过验证,碎片率是最高的
 
         经现网验证:
1)  使用libc内存分配器的话,内存碎片率可以达到1.6左右
2)  但是使用jemalloc,碎片率一般在1.1以内
3)  对于tcmalloc,和jemalloc的结果差不多,但是因为redis暂时还没有集成tcmalloc,所以需要另外来安装,过程详见:
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的描述如下:
         SITIPv6-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重启服务器
2nc命令的问题     
家里测试环境(79.7879.79)没有nc命令(类似windows下的telnet
1)  wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download
2)  tar zxvf netcat-0.7.1.tar.gz
3)  ./configure
4)  make && make install
 
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
4keepalived.conf问题
                   Keepalived.conf中有运行监测脚本redis_check.sh的配置:
 
                   vrrp_script chk_redis {
                  script "/etc/keepalived/scripts/redis_check.sh"
                  interval 1
}
 
变量interval 表示执行监测脚本的时间间隔:1秒执行一次确实没有必要。
 
5秒执行一次即可。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316760-1-1.html 上篇帖子: Redis、MongoDB、ZODB速度比较(小数据量) 下篇帖子: redis 数据类型,mget的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表