1 部署环境要求
硬件要求:内存64GB以上,数量3台及以上
Zookeeper节点为奇数个数,建议三个节点以上,Codis节点根据内存的大小以及存储数据量来估算,建议6个节点以上,以达到互备的效果,如下表格以最低要求为例:
组件类型 |
主机1 |
主机2 |
主机3 |
zookeeper |
Node1 |
Node2 |
Node3 |
Codis/Group1 |
Master |
Slave |
N |
Codis/Group2 |
N |
Master |
Slave |
Codis/Group3 |
Slave |
N |
Master |
1.1 安装Zookeeper及Codis
1.1.1 Zookeeper安装
将Zookeeper安装文件解压合适的目录,修改对应的配置文件,安装节点数应为奇数,具体步骤如下:
1)tar –zxvf zookeeper.x.x.x
2)cd zookeeper/conf(修改zoo.cfg配置文件)
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/beh/core/zookeeper/data
dataLogDir=/opt/beh/core/zookeeper/logs
maxClientCnxns=18192
clientPort=2181
server.1=xxxx:2888:3888
server.2=xxxx:2888:3888
server.3=xxxx:2888:3888
参数说明:
tickTime: zookeeper中使用的基本时间单位, 毫秒值.
dataDir: 数据目录. 可以是任意目录.
dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
clientPort: 监听client连接的端口号.
initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s.
syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime,即4000ms.
server.X=A:B:C 其中X是一个数字, 表示这是第几号server.A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口.由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.
3)将配置的zookeeper目录拷贝到其他机器相应的目录,并在对应dataDir目录下 新建myid文件,写入server.x对应的值(例如:server.0则写入0)。
4)启动相应的进程,cd zookeeper/bin sh ZkServer.sh start
1.1.2 Codis安装
创建安装目录,解压安装文件,并修改对应的配置文件,步骤如下:
1. 添加redis部署专用用户:redis
useradd redis -d /data/redis(目录可自行选择)
为用户做免密:
ssh-keygen -t rsa --生成.ssh目录
cd .ssh
touch authorized_keys --生成文件
chmod 640 authorized_keys
如果A免秘登录到B,那么将A的密码放到B的authorized_keys里边
2. mkdir /opt/beh/core/codis
3. 在redis家目录解压安装包:unzip bonc-codis3.1.zip (可以不做之前的步骤,直接在这一步开始,在任意一个普通用户的家目录下解压缩)
4. 进入bonc-codis3.1/etc目录修改对应的配置
a)config.ini配置文件
coordinator=zookeeper
zk=node1:2181,node2:2181,node3:2181 ---zookeeper地址
product=test ---数据库名称
dashboard_addr=node1:60010– dashboard页面地址(端口可自行指定)(注意这个端口可能会与hbase冲突)
dashboard_users=test@test– dashboard页面登录用户名密码(可自行指定)
记得吧最后一行的proxy_id=proxy_1,给删除了,如果被注释掉,那就不用管。
b)initslot.sh配置文件(主要配置slot)根据key将数据分布到不同的节点:
group_num=3---节点分组数,一般多少个节点就是多少组
step=341---slot共有1024块,step=1024/group_num
c)group.json节点分组配置,根据实际的需求做对应的配置,此次配置3个节点
{
"codis-group": [
{
"group_id": 1,
"nodes": [
{"host": "192.168.0.1:6380", "type": "master"},
{"host": "192.168.0.2:6381", "type": "slave"}
]
},
{
"group_id": 2,
"nodes": [
{"host": "192.168.0.2:6380", "type": "master"},
{"host": "192.168.0.3:6381", "type": "slave"}
]
},
{
"group_id": 3,
"nodes": [
{"host": "192.168.0.3:6380", "type": "master"},
{"host": "192.168.0.1:6381", "type": "slave"}
]
}
]
}
备注:节点组、slot也可以通过dashboard页面动态调整
d)managelist配置集群节点信息,只需配置ip地址
e)配置proxy,进入bonc-codis3.1/,修改gen_start_proxy.sh,只需更改端口,端口可自行指定,前提是没有做网络限制。(一般不用管)
cat << EOF > ./tem/start_proxy.sh
#!/bin/bash
echo "start new proxy..."
nohup ../bin/codis-proxy --log-level warn -c ../etc/config.ini -L ../logs/proxy.log --cpu=8 --addr=$1:8099--http-addr=$1:11000 &>/dev/null &
echo "done"
EOF
f)配置redis,进入bonc-codis3.1/source/etc/redis_conf目录,修改启用节点配置文件,只需更改内存配置(根据主机情况进行分配,一般物理机内存128G,redis可分配三分之二的内存,主备可分别分配45g)
maxmemory 45g
注意:这次要修改的是bonc-codis3.1/source/etc/redis_conf下的6380.conf,6381.conf
同时 修改: dir ../../data 为dir /opt/beh/core/codis/data
在执行下一步之前,需要在各个节点创建/opt/beh/core/codis目录
5. 将配置文件分发各节点:进入目录bonc-codis3.1/执行脚本,当执行脚本时会提醒分发目录,如图:
sh install.sh
4.3 启动集群
1、随便选一台机器进到redis配置文件分发目录:(尽量选择,dashboard所在机器)
先把bonc-codis3.1/etc/initslot.sh 拷贝到 /opt/beh/core/codis/etc
然后执行 sh initslot.sh,过程可能有点长,然后在执行下一步。
a) cd /opt/beh/core/codis/sbin
b)sh start_cluster.sh (选择all,这一步可能会跟上一步冲突,如果冲突,可以在执行一次上一步,不过事先可能删除/zk/../fence 和proxy)
期间会有30秒时间等待。
c)集群起来之后观察进程是否起来:
ps-ef | grep codis
备注:启动dashboard的节点会有dashbosrd进程,ha进程;所有节点需启动6380/6381两个redis进程,proxy进程。
d)此时集群已安装完毕,切换到浏览器观察页面是否正常。
后记:先启动dashboard,再添加group,然后添加group,然后sh initslot.sh,然后启动proxy,ha
再后记:按照这样测试后,服务确实一下子起来了,不过codis/data/下没有6380.rdb和6381.rdb出现,为空,后来再次执行stop_cluster,然后start_cluster才ok,不知道问题出在那里。