设为首页 收藏本站
查看: 1671|回复: 0

[经验分享] 金庸武功之“蛤蟆功”--memcached主从复制

[复制链接]

尚未签到

发表于 2018-12-26 06:56:10 | 显示全部楼层 |阅读模式
  Repcached介绍
  Repchched项目地址:http://repcached.sourceforge.net/
  关于repcached
  “repcached”是一个补丁集合,它添加数据复制功能到memcached 1.2.x。
  主要目的

  •   实现冗余memcached系统。
      主要功能
  •   多主复制。
  •   异步数据复制。
  •   支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。
  Memcached 1.4.x的Repcached补丁
  地址:http://mdounin.ru/
  最新补丁:http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz
  工作原理
  repcached实现了memcached复制的功能,它是一个单master单slave的方案,但master/slave都是可读写的,而且可以相互同步,如果master坏掉slave侦测到连接断了,它会自动listen而成为master,这时坏掉的master只能启用为slave,它们之间互换角色,才能保持复制功能,换句话说,master没有抢占功能;而如果slave坏掉,master也会侦测到连接断,它就会重新listen等待新的slave加入。
  应用场景
  用memcached做session共享或其它服务时会存在memcached的单点故障,如果memcached宕机,那么整个系统用户无法登陆(session)。
  基于这种情况,采用repcached做memcached的主从冗余。
  Repcached下载地址
  http://sourceforge.net/projects/repcached/files/repcached/
  Repcached安装方式
  Repcached有两种安装方式:
  1.补丁版本安装
  先安装相应版本的memcached,然后对应版本的Repcached补丁。
  2.整合版本安装
  直接安装整合版本的memcached
  方式一:补丁版本安装
  1. 安装Memcache,相关安装方法可以参见博文:
  http://ultrasql.blog.运维网.com/9591438/1632179
  2. 下载对应的repcached版本补丁安装文件:
  假设安装的memcahced版本为1.2.8,下载针对该版本最新的补丁:
  wget http://softlayer-dal.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/repcached-2.2.1-1.2.8.patch.gz
  gzip -cd ../repcached-2.2.1-1.2.8.patch.gz | patch -p1
  ./configure --enable-replication
  make && make install
  方式二:整合版本安装

  •   yum -y install gcc gcc-c++
  •   安装libevent:
      cd /tmp
      wget http://downloads.sourceforge.net/levent/libevent-2.0.22-stable.tar.gz
      tar zxvf libevent-2.0.22-stable.tar.gz
      cd libevent-2.0.22-stable
      ./configure --prefix=/usr/
      make && make install
  将libevent的库文件添加到动态库中:
  vi /etc/ld.so.conf
  在最后添加如下行:
  /usr/ //此处为要添加的libevent库目录
  重新加载动态lib库
  ldconfig
  注意:如果无此步骤,在启动memcached时,会提示看不到libevent的库文件。
  测试libevent是否安装成功:
  ll /usr/lib/libevent*
  3. 创建启动帐号:
  groupadd memcached
  useradd -g memcached memcached
  4. 创建PID进程目录并修改所有者:
  mkdir /var/run/memcached
  chown -R memcached.memcached /var/run/memcached
  5. 安装整合memcached-repcached包:
  wget https://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
  tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz
  mv memcached-1.2.8-repcached-2.2.1 memcached
  cd memcached
  ./configure --prefix=/usr/local/memcached --with-libevent=/usr/ --enable-replication --enable-64bit
  注意:默认memcached单个进程只支持到2G内存,需要更大内存支持的话,需要打开64位支持,编译的时候加参数:
  --enable-64bit
  make && make install
  提示编译出错:
  make all-recursive
  make[1]: Entering directory `/usr/local/memcached'
  Making all in doc
  make[2]: Entering directory `/usr/local/memcached/doc'
  make[2]: Nothing to be done for `all'.
  make[2]: Leaving directory `/usr/local/memcached/doc'
  make[2]: Entering directory `/usr/local/memcached'
  gcc -DHAVE_CONFIG_H -I. -DNDEBUG -m64 -g -O2 -MT memcached-memcached.o -MD
  MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f
  memcached.c' || echo './'`memcached.c
  memcached.c: In function ‘add_iov’:
  memcached.c:697: error: ‘IOV_MAX’ undeclared (first use in this function)

  memcached.c:697: error: (Each undeclared>  memcached.c:697: error: for each function it appears in.)
  make[2]: *** [memcached-memcached.o] Error 1
  make[2]: Leaving directory `/usr/local/memcached'
  make[1]: *** [all-recursive] Error 1
  make[1]: Leaving directory `/usr/local/memcached'
  make: *** [all] Error 2
  解决方案:
  vi memcached.c
  将下面的几行
  /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
  #ifndef IOV_MAX
  #if defined(__FreeBSD__) || defined(__APPLE__)
  # define IOV_MAX 1024
  #endif
  #endif
  修改为
  /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
  #ifndef IOV_MAX
  # define IOV_MAX 1024
  #endif
  重新编译和安装:
  make && make install
  修改memcached目录所有者:
  cd ..
  chown -R memcached.memcached memcached
  配置主从复制
  参数说明:
  -x 设置从哪个IP上进行同步。
  -X 指定数据同步的端口。
  Memcached默认服务端口是11211,默认同步监听端口是11212。
  启动Master:
  /usr/local/memcached/bin/memcached -d -m 100 192.168.11.51 -p 11211 -u memcached -c 1024 -x 192.168.11.52 -X 11212 -P /var/run/memcached/memcached-rep.pid
  查看监听端口:
  netstat -tupln | grep memcached
  tcp 0 0 192.168.11.51:11211 0.0.0.0:* LISTEN 18634/memcached
  tcp 0 0 192.168.11.51:11212 0.0.0.0:* LISTEN 18634/memcached
  udp 0 0 192.168.11.51:11211 0.0.0.0:* 18634/memcached
  启动Slave:
  /usr/local/memcached/bin/memcached -d -m 100 -l 192.168.11.52 -p 11211 -u memcached -c 1024 -x 192.168.11.51 -X 11212 -P /var/run/memcached/memcached-rep.pid
  说明:-x 192.168.11.51用于同步的Master的IP地址。
  查看监听端口:
  netstat -tupln | grep memcached
  tcp 0 0 192.168.11.52:11211 0.0.0.0:* LISTEN 24262/memcached
  udp 0 0 192.168.11.52:11211 0.0.0.0:* 24262/memcached
  验证数据同步
  在Master创建数据:
  [root@test01 bin]# telnet 192.168.1.10 11211
  Trying 192.168.1.10…
  Connected to 192.168.1.10.
  Escape character is ‘^]’.
  get key1
  END
  set key1 0 0 2
  aa
  STORED
  quit
  Connection closed by foreign host.
  在Slave获取数据:
  [root@test02 bin]# telnet 192.168.1.11 11211
  Trying 192.168.1.11…
  Connected to 192.168.1.11.
  Escape character is ‘^]’.
  get key1
  VALUE key1 0 2
  aa
  END
  quit
  Connection closed by foreign host.
  在Slave创建数据:
  [root@test02 bin]# telnet 192.168.1.11 11211
  Trying 192.168.1.11…
  Connected to 192.168.1.11.
  Escape character is ‘^]’.
  get key2
  END
  set key2 0 0 3
  bbb
  STORED
  get key2
  VALUE key2 0 3
  bbb
  END
  quit
  Connection closed by foreign host.
  在Master获取数据:
  [root@test01 bin]# telnet 192.168.1.10 11211
  Trying 192.168.1.10…
  Connected to 192.168.1.10.
  Escape character is ‘^]’.
  get key2
  VALUE key2 0 3
  bbb
  END
  quit
  Connection closed by foreign host.
  Memcached高可用
  启动Master和Slave时不要加-l参数指定监听地址,否则keepalived无法监听VIP的地址。
  /usr/local/memcached/bin/memcached -d -m 100 192.168.82.91 -p 11211 -u memcached -c 1024 -x 192.168.82.92 -X 11212 -P /var/run/memcached/memcached-rep.pid
  然后配置上keepalived就可以作为高可用了。
  以下是keppalived配置信息,在此就不多数了,相信大家都熟悉keepalived的作用了
  MASTER 主机 配置信息
  ! Configuration File for keepalived
  global_defs {
  notification_email {
  happy.yin@qq.com
  }
  notification_email_from zqtsx@email.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  }
  vrrp_instance VI_1 {
  state MASTER
  interface eth1
  virtual_router_id 51
  priority 101 主机 为 101
  advert_int 1
  authentication {
  auth_type PASS 验证类型
  auth_pass 1111 验证密码自己修改即可,记得主备机上的密码要一致
  }
  virtual_ipaddress {
  192.168.1.120 虚拟IP 地址
  }
  }
  SLAVE 从机 配置信息
  ! Configuration File for keepalived
  global_defs {
  notification_email {
  happy.yin@qq.com
  }
  notification_email_from zqtsx@email.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  }
  vrrp_instance VI_1 {
  state MASTER
  interface eth1
  virtual_router_id 51
  priority 100 从机 为 100
  advert_int 1
  authentication {
  auth_type PASS 验证类型
  auth_pass 1111 验证密码自己修改即可,记得主备机上的密码要一致
  }
  virtual_ipaddress {
  192.168.1.120 虚拟IP 地址
  }
  }
  通过虚拟IP进行memcached 存取操作
  要用这个VIP启动memcached
  [root@localhost happy]# telnet 192.168.1.120 11211
  Trying 192.168.1.120…
  Connected to 192.168.1.120.
  Escape character is ‘^]’.
  set key 0 0 6
  123456
  STORED
  get key
  VALUE key 0 6
  123456
  END
  get key1
  VALUE key1 0 2
  aa
  END
  quit
  Connection closed by foreign host.
  OK keepalived + memcached主备模式到此设置完成了,下面我们来停止一台机器上的keepalived模拟down机,然后再用虚拟IP 192.168.1.120链接memcached并对其进行读写,看下能否正常访问到memcached数据就知道了主备模式是否健全了
  [root@localhost happy]# telnet 192.168.1.120 11211
  Trying 192.168.1.120…
  Connected to 192.168.1.120.
  Escape character is ‘^]’.
  get key
  VALUE key 0 6
  123456
  END
  get key1
  VALUE key1 0 2
  aa
  END
  quit
  Connection closed by foreign host.
  OK MEMCACHED一切正常,不仅memcached实现了内存复制,而且keepalived运行也一切正常,至此一个完整可靠的memcached主备模式构建完成了。。。


运维网声明 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-655839-1-1.html 上篇帖子: 在Linux x86_64环境下编译memcached 下篇帖子: Memcached分布式缓存-windows上初步使用-网摘
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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