标签:cli evel bind dev any 一个 down 次方 blog
这是我的第一篇博文,整理了我在部署Redis集群踩过的坑,以及详细的部署过程,同时归结了部署过程中遇到的问题的处理方法。二、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/profile
export PATH=$HOME/bin:$JAVA_HOME/bin:$PATH:/usr/bin/ruby
suse01:~# 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/software
suse01:~# tar -zxvf zlib-1.2.11.tar.gz
suse01:~# cd zlib-1.2.11
suse01:~# ./configure
suse01:~# make
suse01:~# sudo make install
3、修改Makefile文件
suse01:~# cd /opt/software/ruby-2.4.2/ext/zlib
suse01:~# ruby extconf.rb
坑二:修改Makefile文件头
修改的参数具体如下(否则make操作会报错)
suse01:~# vi Makefile
zlib.o:$(top_srcdir)/include/ruby.h ****#将$(topsrcdir)修改为../..****
修改后的具体代码结果如下
zlib.o: ../../include/ruby.h
suse01:~# make
suse01:~# sudo make install
2.2.3 安装Rubygems
1、上传安装包rubygems-2.7.3.tgz到/opt/software目录
2、解压并完成rubygems安装
suse01:~# tar -zxvf rubygems-2.7.3.tgz
suse01:~# 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.2j
suse01:~# ./config
suse01:~# make
suse01:~# 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/openssl
suse01:~# 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:~# make
suse01:~# sudo make install
以上的三个坑如果没有注意,以下是具体运行相关命令时提示的错误记录:
错误一:当运行ruby extconf.rb时界面报错,提示如下错误信息:
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
处理方法:
1、添加参数重新编译生成Makefile;2、安装接口包
suse01:~# cd /opt/software/ruby-2.4.2/ext/openssl
suse01:~# ruby extconf.rb --with-openssl-include=/usr/local/ssl/include --with-openssl-lib=/usr/local/ssl/lib
suse01:~# vi Makefile
具体修改的参数信息是将Makefile文件中所有的$(top_srcdir)/include/ruby.h(计数统计是33个或38个)修改为../../include/ruby.h
suse01:~# make
suse01:~# sudo make install
错误二:当运行make时界面报错,提示如下错误信息:
suse01:~# make
gcc -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.2j
suse01:~# make clean
suse01:~# ./config -fPIC
suse01:~# ./config -t
suse01:~# make
suse01:~# sudo make install
二、重建ruby
suse01:~# cd /opt/software/ruby-2.3.2/ext/openssl
suse01:~# ruby extconf.rb --with-openssl-include=/usr/local/ssl/include --with-openssl-lib=/usr/ssl/lib
suse01:~# vi Makefile
备注:将Makefile文件中所有的$(top_srcdir)/include/ruby.h修改为../../include/ruby.h
suse01:~# make
suse01:~# sudo make install
2.2.7 执行安装命令
suse01:~# cd /opt/software
suse01:~# 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.conf
daemonize 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.conf
suse01:~# cp redis.conf redis-7002.conf
server2:172.107.14.53
suse01:~# cp redis.conf redis-7001.conf
suse01:~# cp redis.conf redis-7002.conf
server3:172.107.14.54
suse01:~# cp redis.conf redis-7001.conf
suse01:~# cp redis.conf redis-7002.conf
suse01:~# vi redis-7001.conf
suse01:~# vi redis-7002.conf
3、三个主机,修改配置文件:
bind 127.0.0.1 #第69行,修改为当前创建集群服务器的ip 如:bind 172.107.14.52
port 7001 #第93行,端口号7001、 7002
pidfile /var/run/redis_7001.pid #第158行,pidfile文件对应7001、7002
logfile "/usr/local/redis/log/redis_7001.log" #第171行,logfile文件对应7001、7002
dir ./ #第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.log
suse01:~# touch redis_7002.log
5、启动redis:
(1)、三台主机分别启动两个redis节点
suse01:~# cd /usr/local/redis/bin
suse01:~# ./redis-server /usr/local/redis/etc/redis-7001.conf
suse01:~# ./redis-server /usr/local/redis/etc/redis-7002.conf
(2)、验证集群是否创建成功(在53服务器上执行该操作)
suse01:~# cd /opt/software/redis-4.0.2/src
suse01:~# ./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集群的部署!!
标签:cli evel bind dev any 一个 down 次方 blog
原文地址:http://blog.51cto.com/8355320/2175724