2015年4月24日星期五

codis集群部署实战

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
codis集群部署实战  阅读原文»

codis集群部署实战

一、概要

1、折腾codis集群已经快两个月了,感谢一直以来codis的作者刘奇和黄东旭的耐心支持,在这里给你们点个赞,现在我司已经有一个业务跑在了codis集群上,目前只是切了整个业务的10%的量,预计下周会全量切到codis上,这个时候大家肯定特别想知道codis稳定吗?有没有什么bug啊,你想知道的也是我想知道的,搞起吧,用了才知道,反正目前我们这没发现啥问题,一些小的问题已经及时联系作者改掉了,好吧,不扯淡了,写这篇文章的目的是帮助想了解codis的初学者快速部署(官方的部署文档对应运维知识弱一点的童鞋看来还是有点费力)还有就是给自己做一个备录以便后期集群的部署。

2、Codis 是一个分布式Redis解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (有一些命令不支持), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis服务,当然,前段时间redis官方的3.0出了稳定版,3.0支持集群功能,codis的实现原理和3.0的集群功能差不多,我了解的现在美团、阿里已经用了3.0的集群功能了,我们这边的业务主要是php,3.0集群的sdk目前貌似还没有支持php语言的,大家谁的php应用上了3.0集群,请联系我,我去取经,有关redis常见的集群技术,请移步到 @萧田国 萧老师的infoq专栏Redis集群技术及Codis实践

二、架构

wKiom1U4wNbil8RQAAIeNjYHmcE992.jpg

三、角色分批

codis-config、codis-ha:
10.10.32.42:6379、10.10.32.43:6380(主、从)
10.10.32.43:6379、10.10.32.44:6380(主、从)
10.10.32.44:6379、10.10.32.42:6380(主、从)

四、部署

1、安装zookeeper

yum-yinstallzookeeperjdk##安装服务
vim/etc/hosts##添加host
10.10.0.47ZooKeeper-node1
10.10.0.48ZooKeeper-node2
10.10.1.76ZooKeeper-node3
vim/etc/zookeeper/conf/zoo.cfg##撰写zk的配置文件
maxClientCnxns=50
dataDir=/data/zookeeper/
clientPort=2181
server.1=ZooKeeper-node1:2888:3888
server.2=ZooKeeper-node2:2888:3888
server.3=ZooKeeper-node3:2888:3888
mkdir/data/zookeeper/##创建zk的datadir目录
echo"2">/data/zookeeper/myid##生成ID,这里需要注意,myid对应的zoo.cfg的server.ID,比如ZooKeeper-node2对应的myid应该是2
/usr/lib/zookeeper/bin/zkServer.shstart##服务启动

2、go安装(codis是go语言写的,所以那些机器需要安装你懂得)

wgethttps://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz
tar-zxvfgo1.4.1.linux-amd64.tar.gz
mvgo/usr/local/
cd/usr/local/go/src/
cat>>~/.bashrc<<_bashrc_export
exportGOROOT=/usr/local/go
exportPATH=\$PATH:\$GOROOT/bin
exportGOARCH=amd64
exportGOOS=linux
source~/.bashrc

3、下载并编译codis(codis-config、codis-proxy、codis-server所在的机器)

exportGOPATH=/data/go
/usr/local/go/bin/gogetgithub.comlinux下的数据备份工具rsync讲解  阅读原文»

linux下的数据备份工具rsync讲解

linux下的数据备份工具 rsync(remote sync 远程同步)

名词解释:

sync(Synchronize,即"同步")为UNIX操作系统的标准系统调用,功能为将内核文件系统缓冲区的所有数据(也即预定将通过低级I/O系统调用写入存储介质的数据)写入存储介质(如硬盘)。

sync是一个linux同步命令,含义为迫使缓冲块数据立即写盘并更新超级块。在linux系统中,为了加快数据的读取速度,默认情况下,某些数据将不会直接写入硬盘,而是先暂存内存中,如果一个数据被重复写,这样速度一定快,但存在一个问题,万一重新启动,或者是关机,或者是不正常断电的情况下,由于数据还没来得及存入硬盘,会造成数据更新不正常,这时需要命令sync进行数据的写入,即#sync,在内存中尚未更新的的数据会写入硬盘中。所以在关机或者开机之前最好多执行这个几次,以确保数据写入硬盘。

Rsync不仅可以远程同步数据(类似于scp),当然还可以本地同步数据(类似于cp),但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。

scp 用来远程拷贝数据,通过ssh协议通信。它的语法很简单,类似于cp, 唯一不同的是,源地址或者目标地址需要使用远程主机的ip或者hostname. 例如要把本地的数据拷贝到远程一台主机(192.168.0.111)的/data/目录下,可以这样实现:scp/dir/filenameroot@192.168.0.111:/data/其中filename 可以是目录也可以是文件。或者也可以把远程的文件拷贝到本地:scproot@192.168.0.111:/data/filename/data/

示例,scp拷贝root目录下面的文件到远程主机192.168.20.10的data目录下;

[root@yong~]#scp/root/iptables.shroot@192.168.20.10:/data
Theauthenticityofhost'192.168.20.10(192.168.20.10)'can'tbeestablished.
RSAkeyfingerprintis84:47:af:bf:11:69:43:aa:bc:fe:9b:d6:08:b4:c4:1a.
Areyousureyouwanttocontinueconnecting(yes/no)?yes
Warning:Permanentlyadded'192.168.20.10'(RSA)tothelistofknownhosts.root@192.168.20.10'spassword:
iptables.sh100%2540.3KB/s00:00

首次连接会提示是否要继续连接,我们输入yes继续,当建立连接后,需要输入远程主机root密码。

示例,scp拷贝目录需要加-r参数,拷贝的同时可以更改目录名;

[root@yongrsync]#scp-r/root/rsync/test1/192.168.20.10:/data/a/
root@192.168.20.10'spassword:
1100%00.0KB/s00:00
1.txt100%00.0KB/s00:00
2100%00.0KB/s00:00
2.txt100%00.0KB/s00:00
aa100%00.0KB/s00:00
3100%00.0KB/s00:00

安装rysnc的命令:yum install -y rsync

示例一,拷贝当前目录下test.txt 到/tmp目录下,拷贝的同时也可以更改文件名;

[root@yong~]#rsync-avtest.txt/tmp/a.txt
sendingincrementalfilelist

没有评论:

发表评论