redis 3.2 cluster搭建

来源:互联网 发布:机战j 4主角后继机数据 编辑:程序博客网 时间:2024/05/21 07:14
版本:redis 3.2.10 cluster
部署架构:
   192.168.65.31  M1(6379)  S2(6380)
   192.168.65.32  M2(6379)  S3(6380)
   192.168.65.33  M2(6379)  S1(6380)
部署目录:
/apps/svr/redis3.0/bin/ #redis程序目录
/apps/dbdat/redis_data_6379 #redis 6379数据文件目录
/apps/dbdat/redis_data_6380 #redis 6380数据文件目录
/apps/conf/redis #redis配置文件目录
/apps/logs/redis #redis日志文件目录
1.安装python
yum install gcc-c++
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel
更改yum的python版本:
vi /usr/bin/yum
#!/usr/bin/python改为#!/usr/bin/python-2.6.6
将python改名:
cp /usr/bin/python /usr/bin/python-2.6.6
下载Python-2.7.13.tgz:https://www.python.org/downloads/
tar -zxvf Python-2.7.13.tgz
cd Python-2.7.13
./configure
make && make install
2.7.13默认会安装在/usr/local/bin下,而系统自带的2.6.6是在/usr/bin下
再删除系统默认的 python-config 软链接:
rm -f /usr/bin/python-config
最后创建新版本的 Python 软链接:
cd /usr/bin
mv python python_old
ln -s /usr/local/bin/python /usr/bin/python
ln -s /usr/local/bin/python2.7-config /usr/bin/python-config
ln -s /usr/local/include/python2.7 /usr/include/python2.7
vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/svr/mariadb10/lib:/usr/local/lib
source /etc/profile
检查版本并执行python:
python -V
python
新版 Python 安装 setuptools:setuptools-0.6c11.tar.gz
tar -zxvf setuptools-0.6c11.tar.gz
python setup.py install
easy_install-2.7放在了/usr/local/bin下
安装pip:
easy_install pip(若能上外网)
下载安装pip-9.0.1.tar.gz:https://pypi.python.org/pypi/pip
tar -zxvf pip-9.0.1.tar.gz
python setup.py install
pip放在了/usr/local/bin下
每台机器: root执行   
/usr/local/bin/pip install click
/usr/local/bin/pip install Werkzeug 
/usr/local/bin/pip install retrying 
/usr/local/bin/pip install hiredis 
/usr/local/bin/pip install six 

2.安装其它包
zlib-1.2.6.tar.gz
./configure  
make  
make install  
# ruby1.9.2  (http://www.ruby-lang.org/en/downloads/releases/)
tar -zxvf ruby-1.9.2-p0.tar.gz  
./configure -prefix=/usr/local/ruby  
make  
make install  
cp ruby /usr/local/bin
make时出现报错:
ossl_pkey_ec.c:819: error: 'EC_GROUP_new_curve_GF2m' undeclared (first use i...)
cd /apps/software/ruby-1.9.2-p0/ext/openssl
解决方法:
vi ext/openssl/ossl_pkey_ec.c  #ext目录放置在ruby安装文件的解压目录ruby-1.9.3-p0里.
#在method = EC_GFp_nist_method();下一行新增 #if !defined(OPENSSL_NO_EC2M)  
#在method = EC_GF2m_simple_method();下一行新增 #endif  
--------------------------如下-----------------------------------
           if (id == s_GFp_simple) {  
               method = EC_GFp_simple_method();  
           } else if (id == s_GFp_mont) {  
               method = EC_GFp_mont_method();  
           } else if (id == s_GFp_nist) {  
               method = EC_GFp_nist_method();  
#if !defined(OPENSSL_NO_EC2M)  
           } else if (id == s_GF2m_simple) {  
               method = EC_GF2m_simple_method();  
#endif  
           }  
#在new_curve = EC_GROUP_new_curve_GFp;下一行新增 #if !defined(OPENSSL_NO_EC2M)  
#在new_curve = EC_GROUP_new_curve_GF2m;下一行新增 #endif  
-------------------------如下--------------------------------
           if (id == s_GFp) {  
               new_curve = EC_GROUP_new_curve_GFp;  
#if !defined(OPENSSL_NO_EC2M)  
           } else if (id == s_GF2m) {  
               new_curve = EC_GROUP_new_curve_GF2m;  
#endif  
           } else {  
               ossl_raise(rb_eArgError, "unknown symbol, must be :GFp or :GF2m");  
           }  


修改以上两个地方以后,就能正常安装了!
# rubygems-2.6.13.tgz   (https://rubygems.org/pages/download/)
cd /apps/software 
gzip -d rubygems-2.6.13.tgz
tar -xvf rubygems-2.6.13.tar 
cd rubygems-2.6.13
ruby setup.rb 
cp bin/gem /usr/local/bin 
#yum install rubygems(安装os自带的1.8.7)
#download地址:http://rubygems.org/gems/redis/versions/3.0.0  
https://rubygems.org/gems/redis/versions/3.2.2
gem install -l /apps/software/redis-3.2.2.gem
下载redis-trib.py-master.zip:https://github.com/Negashev/redis-trib.py(注意这个py是支持密码的)
unzip redis-trib.py-master.zip
cd redis-trib.py-master
python setup.py install
3.redis安装
下载redis 3.2.10:
https://redis.io/download
tar -zxvf redis-3.2.10.tar.gz
cp -r redis-3.2.10 /usr/local/redis3.2
cd /usr/local/redis3.2
make & make install
三台机建立如下目录:
mkdir -p /apps/dbdat/redis_data_6379
mkdir -p /apps/dbdat/redis_data_6380 
mkdir -p /apps/svr/redis3.0/bin
mkdir -p /apps/conf/redis
mkdir -p /apps/logs/redis
mkdir -p /apps/run/redis
cd /usr/local/redis3.2/src
cp mkreleasehdr.sh /apps/svr/redis3.0/bin/
cp redis-trib.rb /apps/svr/redis3.0/bin/
cp redis-server /apps/svr/redis3.0/bin/
cp redis-sentinel /apps/svr/redis3.0/bin/
cp redis-cli /apps/svr/redis3.0/bin/
cp redis-benchmark /apps/svr/redis3.0/bin/
cp redis-check-rdb /apps/svr/redis3.0/bin/
cp redis-check-aof /apps/svr/redis3.0/bin/
同样把/apps/svr/redis3.0/bin/下的文件copy到32和33两台机对应目录下,redis3.0_cluster_6379.conf和redis3.0_cluster_6380.conf配置文件同位放到三台机的/apps/conf/redis下。
三台机执行如下授权操作:
chown -R apps:apps /apps/svr
chown -R apps:apps /apps/dbdat
chown -R apps:apps /apps/conf
chown -R apps:apps /apps/logs
chown -R apps:apps /apps/run
若要更改密码,则使用如下:
cd /apps/conf/redis/
 sed -i "s/masterauth abc/masterauth Lsredis921/g" redis*.conf
 sed -i "s/requirepass abc/requirepass Lsredis921/g" redis*.conf
cluster相关的参数:
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file /apps/conf/redis/nodes-6379.conf
cluster-node-timeout 20000
appendonly yes
daemonize yes
cluster-require-full-coverage yes  #表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群不可用,默认为yes
maxclients 10000
maxmemory 2gb
maxmemory-policy allkeys-lru
dir /apps/dbdat/redis_data_6379
port 6379
save ""
appendfilename appendonly6379.aof
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
appendfsync everysec
appendfilename appendonly6379.aof
pidfile /apps/run/redis/redis6379.pid
logfile /apps/logs/redis/redis6379.log
dbfilename dump6379.rdb
启动redis server:
   /apps/svr/redis3.0/bin/redis-server /apps/conf/redis/redis3.0_cluster_6379.conf
   /apps/svr/redis3.0/bin/redis-server /apps/conf/redis/redis3.0_cluster_6380.conf  
4.建立集群:(https://github.com/Negashev/redis-trib.py/blob/master/README.md)
只在任一台主机上执行,我们这里在192.168.65.31上执行:
 redis-trib.py create --password abc 192.168.65.31:6379  192.168.65.32:6379 192.168.65.33:6379   #  添加主库,abc 替换为真实的密码
Redis-trib 0.5.0 Copyright (c) HunanTV Platform developers
Redis-trib 0.0.1 by Negash
INFO:root:Instance at 192.168.65.31:6379 checked
INFO:root:Instance at 192.168.65.32:6379 checked
INFO:root:Instance at 192.168.65.33:6379 checked
INFO:root:Add 5462 slots to 192.168.65.31:6379
INFO:root:Add 5461 slots to 192.168.65.32:6379
INFO:root:Add 5461 slots to 192.168.65.33:6379
报错:
Traceback (most recent call last):
  File "/usr/local/bin/redis-trib.py", line 5, in <module>
    from pkg_resources import load_entry_point
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2603, in <module>
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 666, in require
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 565, in resolve
pkg_resources.DistributionNotFound: click
或如下报错:
Traceback (most recent call last):
  File "/usr/local/bin/redis-trib.py", line 5, in <module>
    from pkg_resources import load_entry_point
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2603, in <module>
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 666, in require
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 565, in resolve
pkg_resources.DistributionNotFound: six>=1.7.0
解决方法:升级setuptools
pip install -U setuptools
为每个主库,添加从库   
redis-trib.py replicate --password abc --master-addr 192.168.65.31:6379 --slave-addr 192.168.65.32:6380    # abc 替换为真实的密码
redis-trib.py replicate --password abc --master-addr 192.168.65.32:6379 --slave-addr 192.168.65.33:6380    # abc 替换为真实的密码
redis-trib.py replicate --password abc --master-addr 192.168.65.33:6379 --slave-addr 192.168.65.31:6380    # abc 替换为真实的密码
查看集群状态:
redis-trib.py list --password abc --addr  192.168.65.32:6379    # abc 替换为真实的密码
Total 6 nodes, 3 masters, 0 fail
M  192.168.65.31:6379 master 5462
 S 192.168.65.32:6380 slave 192.168.65.31:6379
M  192.168.65.32:6379 myself,master 5461
 S 192.168.65.33:6380 slave 192.168.65.32:6379
M  192.168.65.33:6379 master 5461
 S 192.168.65.31:6380 slave 192.168.65.33:6379
其它命令查看:cluster info、info cluster 
若需重新配置:
pkill redis-server
1.删掉集群配置文件 
rm -rf /apps/conf/redis/nodes-*
2.删掉redis数据文件 
附cluster相关命令如下:
CLUSTER info:打印集群的信息。
CLUSTER nodes:列出集群当前已知的所有节点(node)的相关信息。
CLUSTER meet <ip> <port>:将ip和port所指定的节点添加到集群当中。
CLUSTER addslots <slot> [slot ...]:将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER delslots <slot> [slot ...]:移除一个或多个槽对当前节点的指派。
CLUSTER slots:列出槽位、节点信息。
CLUSTER slaves <node_id>:列出指定节点下面的从节点信息。
CLUSTER replicate <node_id>:将当前节点设置为指定节点的从节点。
CLUSTER saveconfig:手动执行命令保存保存集群的配置文件,集群默认在配置修改的时候会自动保存配置文件。
CLUSTER keyslot <key>:列出key被放置在哪个槽上。
CLUSTER flushslots:移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER countkeysinslot <slot>:返回槽目前包含的键值对数量。
CLUSTER getkeysinslot <slot> <count>:返回count个槽中的键。
CLUSTER setslot <slot> node <node_id> 将槽指派给指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。  
CLUSTER setslot <slot> migrating <node_id> 将本节点的槽迁移到指定的节点中。  
CLUSTER setslot <slot> importing <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。  
CLUSTER setslot <slot> stable 取消对槽 slot 的导入(import)或者迁移(migrate)。 
CLUSTER failover:手动进行故障转移。
CLUSTER forget <node_id>:从集群中移除指定的节点,这样就无法完成握手,过期时为60s,60s后两节点又会继续完成握手。
CLUSTER reset [HARD|SOFT]:重置集群信息,soft是清空其他节点的信息,但不修改自己的id,hard还会修改自己的id,不传该参数则使用soft方式。
CLUSTER count-failure-reports <node_id>:列出某个节点的故障报告的长度。
CLUSTER SET-CONFIG-EPOCH:设置节点epoch,只有在节点加入集群前才能设置。






















   
原创粉丝点击