设为首页 收藏本站
查看: 3650|回复: 1

[经验分享] Redis集群部署过程记录(3台服务器共6个节点)

[复制链接]
累计签到:524 天
连续签到:1 天
发表于 2018-9-23 13:29:54 | 显示全部楼层 |阅读模式
这是我的第一篇博文,整理了我在部署Redis集群踩过的坑,以及详细的部署过程,同时归结了部署过程中遇到的问题的处理方法。
1、部署的环境:SUSE Linux Enterprise 11 sp4
2、涉及到的安装包如下:
(1) 安装包:redis-4.0.2.tar.gz
下载地址:http://download.redis.io/releases/ redis官网http://www.redis.io
(2) 接口包:redis-4.0.0.gem
(3) 脚本语言包:ruby-2.4.2.tar.gz rubygems-2.7.3.tgz
(4) 依赖库:
zlib-1.2.11.tar.gz ;
openssl-1.0.2j.tar.gz ;
libopenssl-devel-0.9.8h-30.11.x86_64.rpm ;
gcc
部署操作步骤:
一、环境准备
1、本次部署共使用3台服务器,每台服务器2个节点,总共6个节点;
安装3台SUSE Linux操作系统,镜像为SLES-11-SP4-DVD-x86_64-GM-DVD1.iso
2、由于生产环境服务器不能上外网,所以需要提前准备好相关软件包
二、redis部署
2.1安装redis软件包
1、优先安装好gcc、 gcc-c++、make、unzip等基础环境软件包
这些rpm软件包下载比较简单, 这里不具体介绍。
2、上传redis-4.0.2.tar.gz安装包到/opt/software目录下
3、解压安装

    suse01:~# mkdir /opt/software    suse01:~# cd /opt/software    suse01:~# tar -zxvf redis-4.0.2.tar.gz    suse01:~# cd redis-4.0.2    suse01:~# make    suse01:~# cd src
坑一:不是直接make
    suse01:~# make MALLOC=libc    suse01:~# sudo make install
4、redis部署集群环境准备

suse01:~# mkdir -p /usr/local/redis/bin    suse01:~# mkdir -p /usr/local/redis/etc/  suse01:~# cp /opt/software/redis-4.0.2/redis.conf /usr/local/redis/etc  suse01:~# cd /opt/software/redis-4.0.2/src  suse01:~# cp mkreleasehdr.sh redis-benchmark redis-server /usr/local/redis/bin
2.2 redis集群创建准备工作
2.2.1 安装ruby
1、上传安装包ruby-2.4.2.tar.gz到/opt/software目录
2、解压并完成ruby安装

suse01:~# cd /opt/software  suse01:~# tar -zxvf ruby-2.4.2.tar.gz  suse01:~# cd ruby-2.4.2  suse01:~# ./configure    suse01:~# make  suse01:~# sudo make install
3、修改profile配置文件

suse01:~# vi /etc/profileexport PATH=$HOME/bin:$JAVA_HOME/bin:$PATH:/usr/bin/rubysuse01:~# source /etc/profile
4、查询安装的版本

suse01:~# ruby -v
2.2.2 安装zlib
1、上传安装包zlib-1.2.11.tar.gz到/opt/software目录
2、解压并完成zlib安装

suse01:~# cd /opt/softwaresuse01:~# tar -zxvf zlib-1.2.11.tar.gz    suse01:~# cd zlib-1.2.11suse01:~# ./configuresuse01:~# makesuse01:~# sudo make install
3、修改Makefile文件

suse01:~# cd /opt/software/ruby-2.4.2/ext/zlibsuse01:~# ruby extconf.rb
坑二:修改Makefile文件头
修改的参数具体如下(否则make操作会报错)    suse01:~# vi Makefile    zlib.o:$(top_srcdir)/include/ruby.h           ****#将$(topsrcdir)修改为../..****    修改后的具体代码结果如下    zlib.o: ../../include/ruby.hsuse01:~# makesuse01:~# sudo make install
2.2.3 安装Rubygems
1、上传安装包rubygems-2.7.3.tgz到/opt/software目录
2、解压并完成rubygems安装

suse01:~# tar -zxvf rubygems-2.7.3.tgzsuse01:~# cd rubygems-2.7.3  suse01:~# ruby setup.rb
2.2.4 安装openssl
1、上传openssl-1.0.2j.tar.gz到/opt/software/目录下;
2、解压openssl-1.0.2j.tar.gz

suse01:~# cd /opt/software/suse01:~# tar -zxvf openssl-1.0.2j.tar.gz
3、安装openssl

suse01:~# cd openssl-1.0.2jsuse01:~# ./configsuse01:~# makesuse01:~# sudo make install
4、备份旧版openssl

suse01:~# mkdir -p /backup/openssl_old  suse01:~# mv /usr/bin/openssl /backup/openssl_old/
5、替换新版openssl

    suse01:~# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
6)检查更新后的OpenSSL版本

suse01:~# openssl version
2.2.5 安装libopenssl-devel

suse01:~# cd ..suse01:~# rpm -ivh libopenssl-devel-0.9.8h-30.11.x86_64.rpm --nodeps
2.2.6 安装redis-4.0.0.gem
1、上传redis-4.0.0.gem文件到/opt/software目录
2、修改Makefile文件

suse01:~# cd /opt/software/ruby-2.4.2/ext/opensslsuse01:~# ruby extconf.rb
坑三:修改Makefile文件头
suse01:~# vi Makefile
重要备注:将Makefile文件中所有的$(top_srcdir)/include/ruby.h修改为../../include/ruby.h 根据环境不同,$(top_srcdir)/include/ruby.h出现的次数有些是33次,有些是38次,不管出现的次数是多少,记得修改,否则make无法继续执行
suse01:~# makesuse01:~# sudo make install
以上的三个坑如果没有注意,以下是具体运行相关命令时提示的错误记录:
错误一:当运行ruby extconf.rb时界面报错,提示如下错误信息:

*** extconf.rb failed ***Could not create Makefile due to some reason, probably lack ofnecessary libraries and/or headers.  Check the mkmf.log file for moredetails.  You may need configuration options.
处理方法:

1、添加参数重新编译生成Makefile;2、安装接口包
suse01:~# cd /opt/software/ruby-2.4.2/ext/opensslsuse01:~# ruby extconf.rb --with-openssl-include=/usr/local/ssl/include --with-openssl-lib=/usr/local/ssl/libsuse01:~# vi Makefile
具体修改的参数信息是将Makefile文件中所有的$(top_srcdir)/include/ruby.h(计数统计是33个或38个)修改为../../include/ruby.h
suse01:~# makesuse01:~# sudo make install
错误二:当运行make时界面报错,提示如下错误信息:

suse01:~# makegcc -shared -o openssl.so ossl_x509.o ossl_x509cert.o ossl_x509crl.o ossl_pkcs7.o ossl_cipher.o ossl_pkey_dh.o ossl_ssl_session.o ossl_x509attr.o ossl_x509ext.o ossl_ocsp.o ossl_asn1.o ossl_x509name.o ossl_x509revoked.o ossl_rand.o ossl_pkcs12.o ossl_x509store.o ossl_ssl.o ossl.o ossl_digest.o ossl_config.o ossl_pkcs5.o ossl_bio.o ossl_pkey_dsa.o ossl_pkey.o ossl_x509req.o ossl_pkey_ec.o ossl_hmac.o openssl_missing.o ossl_ns_spki.o ossl_pkey_rsa.o ossl_engine.o ossl_bn.o -L. -L/usr/local/ruby/lib -Wl,-R/usr/local/ruby/lib -L/usr/local/ssl/lib -Wl,-R/usr/local/ssl/lib -L. -rdynamic -Wl,-export-dynamic -lssl -lcrypto -lrt -ldl -lcrypt -lm -lc  /usr/bin/ld: /usr/local/ssl/lib/libssl.a(s2_meth.o): relocation R_X86_64_32 against `a local symbol'  can not be used when making a shared object; recompile with -fPIC/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value  collect2: ld returned 1 exit status  make: *** [openssl.so] Error 1
处理方法

1、重新编译openssl;2、重建ruby;3、安装接口包
重新编译openssl时,需要在./config后面添加–fPIC参数,为防止报缺失-fPIC可以在重新编译openssl时就添加–fPIC参数,具体操作步骤如下:
一、重新编译openssl
suse01:~# cd /opt/software/openssl-1.0.2jsuse01:~# make cleansuse01:~# ./config -fPICsuse01:~# ./config -tsuse01:~# makesuse01:~# sudo make install
二、重建ruby
suse01:~# cd /opt/software/ruby-2.3.2/ext/opensslsuse01:~# ruby extconf.rb --with-openssl-include=/usr/local/ssl/include --with-openssl-lib=/usr/ssl/libsuse01:~# vi Makefile
备注:将Makefile文件中所有的$(top_srcdir)/include/ruby.h修改为../../include/ruby.h
suse01:~# makesuse01:~# sudo make install
2.2.7 执行安装命令

suse01:~# cd /opt/softwaresuse01:~# gem install redis-4.0.0.gem
三、创建redis集群
3.1创建redis集群
3.1.1 集群基本介绍
Redis集群中内置了 16384(2的14次方)个哈希槽,当需要在Redis集群中放置一个 key-value时,redis先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点。
Redis集群,高可用架构采用6个redis节点部署,创建三主三从,主从分布在不同服务器,保证一台服务器宕机,从节点顶为主节点,保证任何时刻都有三个主节点可用。
3.1.2 修改配置文件
1、修改守护进程配置及配置集群连接超时时间

修改redis.conf文件第137行,将daemonize属性no改为yes
suse01:~# vi /usr/local/redis/etc/redis.confdaemonize yes           yes后台运行守护进程
去掉以下2条配置的#号注释标识
#cluster-enabled yes   #第814行,开启集群 #cluster-node-timeout 15000   #第828行,请求超时默认15秒,可自行设置**
2、三台redis主机拷贝配置文件
server1: 172.107.14.52
server2: 172.107.14.53
server3: 172.107.14.54

suse01:~# cd /usr/local/redis/etc
server1:172.107.14.52
suse01:~# cp redis.conf redis-7001.confsuse01:~# cp redis.conf redis-7002.conf
server2:172.107.14.53
suse01:~# cp redis.conf redis-7001.confsuse01:~# cp redis.conf redis-7002.conf
server3:172.107.14.54
suse01:~# cp redis.conf redis-7001.confsuse01:~# cp redis.conf redis-7002.confsuse01:~# vi redis-7001.confsuse01:~# vi redis-7002.conf
3、三个主机,修改配置文件:

bind 127.0.0.1 #第69行,修改为当前创建集群服务器的ip 如:bind 172.107.14.52port 7001                                                                  #第93行,端口号7001、 7002pidfile /var/run/redis_7001.pid                                  #第158行,pidfile文件对应7001、7002logfile "/usr/local/redis/log/redis_7001.log"              #第171行,logfile文件对应7001、7002dir ./                                                                          #第264行,./修改为/usr/local/redis/data/
删除以下1条配置的#号注释标识
cluster-config-file nodes-7001.conf  #第822行,集群配置对应7001、7002
给755权限(关于权限的问题,也可以另外新建redis用户及组,把相关目录权限授权给redis用户及组,并设置redis用户为nologin)
suse01:~# chmod 755 /usr/local/redis/etc/redis-7001.conf suse01:~# chmod 755 /usr/local/redis/etc/redis-7002.conf
4、创建相应的日志文件
suse01:~# mkdir /usr/local/redis/backup  suse01:~# mkdir /usr/local/redis/data/suse01:~# mkdir -p /usr/local/redis/log/suse01:~#cd /usr/local/redis/log/suse01:~# touch redis_7001.logsuse01:~# touch redis_7002.log
5、启动redis:
(1)、三台主机分别启动两个redis节点

suse01:~# cd /usr/local/redis/binsuse01:~# ./redis-server /usr/local/redis/etc/redis-7001.confsuse01:~# ./redis-server /usr/local/redis/etc/redis-7002.conf
(2)、验证集群是否创建成功(在53服务器上执行该操作)

suse01:~# cd /opt/software/redis-4.0.2/srcsuse01:~# ./redis-trib.rb create --replicas 1 172.107.14.52:7001 172.107.14.52:7002 172.107.14.53:7001 172.107.14.53:7002 172.107.14.54:7001 172.107.14.54:7002
(3)查看集群信息

suse01:~# redis-cli -c -p 7001 -h 172.107.14.52 cluster nodes
四、Redis集群设置SSH免密登陆
1、服务器52、53、54三台相互之间需要免密登陆。
2、在三台服务器上分别运行:
例如:52上实现与53、54之间免密登陆可进行如下操作
(1)在52服务器上运行ssh-keygen -t rsa

suse01:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa): #回车
Enter passphrase (empty for no passphrase): #回车代表无需密码登陆
Enter same passphrase again: #回车
Your identification has been saved in /root/.ssh/id_rsa. 私钥的存储路径
Your public key has been saved in /root/.ssh/id_rsa.pub. 公钥的存储路径
The key fingerprint is:
92:94:ad:a9:89:72:3b:65:3c:38:a2:81:93 [MD5] root@suse02 MD5加密key值

(2)使用ll命令可查看生成的私钥与公钥

    suse01:~# cd /root/.ssh使用ll命令查看到生成的私钥与公钥如下图:

(3)在52上运行命令把公钥复制到53服务器上,实现免密登陆

suse01:~# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.107.14.53
The authenticity of host ’172.107.14.53 (172.107.14.53)’ can’t be established.
ECDSA key fingerprint is51:07:ad:f7:aa:16:8d:51:52:b5:7g:p2:02[MD5].
Are you sure you want to continus connecting (yes/no)? #输入yes
/usr/bin/ssh-copy-id:INFO:attempting to log in with the new key(s),to filter out any that are already installed
/usr/bin/ssh-copy-id:INFO:1 key(s) remain to be installed – if you are prompted now it is to install the new keys
Password: #输入53服务器的用户密码
Number of key(s) added:1
Now try logging into the machine,with: “ssh root@’172.107.14.53’”
And check to make sure that only the key(s) you wanted were added.

(4)在52服务器上使用ssh root@172.107.14.53命令提示如下信息表示成功实现免密登陆

suse01:~# ssh root@172.107.14.53
Last login:The May 29 15:57:03 2018 from 76.10.127.200
suse02:~#使用exit命令退出登陆

备注:1、这只是实现了52与53之间的免密登陆,接下来还需要配置52与54之间的免密登录,只需要在对应在节点上做以上相同的操作即可,最终实现三台相互之间免密登陆。
2、如果免密登录测试拒绝,需要给文件授权,查看日志

suse01:~# cat /var/log/secure suse01:~# chmod 700 /root/.ssh suse01:~# chmod 600 /root/.ssh/authorized_keys
至此完成整个Redis集群的部署!!
我的51上还分享了些其他自己的部署经验分享,会陆续更新,欢迎关注,有不对的地方还请多多指教!
http://blog.51cto.com/8355320/2175724


运维网声明 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-600297-1-1.html 上篇帖子: Redis安装ruby报错:Error installing redis: redis requires Ruby version... 下篇帖子: 关于内部redis集群外放给公网上服务器使用
累计签到:67 天
连续签到:1 天
发表于 2018-10-21 21:16:12 | 显示全部楼层
有redis的调优的方案吗?有时候redis的命中率下降,运维人员该怎么办?有这相关的建议吗?

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

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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