codis 3.0.3应急恢复

一.    Codis基本信息

192.168.30.103:

   Zk1

   Codis-dashboard

   Codis-fe codis-ha

   Codis-proxy1

   Codis_group1_M(6379)Codis_group1_M(6380)

192.168.30.104:

   Zk2

   Codis-proxy2

   Codis_group2_M(6379)Codis_group2_M(6380)

192.168.30.105:

   Zk3

   Codis-proxy3

   Codis_group3_M(6379)Codis_group3_M(6380)

product_name :"test_prod"

ZK :"192.168.30.103:2181,192.168.30.104:2181,192.168.30.105:2181"

Proxy: "192.168.30.103:19000,192.168.30.104:19000,192.168.30.105:19000"

多个开源系统都共用这套codis,除codis中的单号是持久化外,其它用作缓存。Codis只有从库有开启aof持久化,每秒将有变化的key写入aof文件中。

软件目录:/codisapp/svr

日志目录/codisapp/logs/codis

配置文件目录: /codisapp/conf/codis

pid文件目录/codisapp/run/codis

相关启动脚本目录: /codisapp/sh/codis

codis-server数据目录: /codisapp/dbdat/redis_data_6379  /codisapp/dbdat/redis_data_6380   

备份信息:程序目录备份 /codisapp/svr/codis, /codisapp/svr/zookeeper-3.4.8, /codisapp/svr/jdk1.7.0_71, /root/gopkg(每周一次)

配置目录备份 /codisapp/conf/codis(每周一次)

脚本目录备份 /codisapp/sh/codis(每周一次)

AOF文件备份:每5分钟将三台6380aof文件copyNAS目录/ls_codis_backisilon.x400:/ifs/ls_codis_back

 

二.    各场景应急恢复

场景一:节点192.168.30.104主机挂掉,103105正常

1.  节点2主机正常停机维护操作

1.1.停掉codis server 63806379

cd /codisapp/sh/codis

sh ./stop_codis_server.sh 

1.2.正常停掉codis proxy 2(shutdown参数的脚本)和关闭zookper

sh ./stop_codis_proxy.sh

sh ./stop_zookeeper.sh 

1.3.移除关闭的proxy,等开机后启动proxyt会自动添加

查看proxy状态:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --proxy-status

[ ] proxy-1 [T] 8ed9a7531216512ccd8f23647ef31b61 [A] 192.168.30.103:11080 [P] 192.168.30.103:19000

[E] proxy-2 [T] 92db83aa55e8dacb6cdc358a98a9433d [A] 192.168.30.104:11080 [P] 192.168.30.104:19000

[ ] proxy-3 [T] 1b67e5afdd9709b4203bf7175f434204 [A] 192.168.30.105:11080 [P] 192.168.30.105:19000

或用: /codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.113:18080 --list-proxy

强制删除报错的proxy:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --remove-proxy --token=92db83aa55e8dacb6cdc358a98a9433d --force 

1.4.poweroff关机 

1.5.正常维护操作,如计划停电、增加内存等............ 

1.6.poweron开机 

1.7.启动zookper

cd /codisapp/sh/codis

sh ./start_zookeeper.sh 

1.8.启动codis server 63806379

sh ./start_codis_server.sh 

1.9.启动proxy

sh ./start_codis_proxy.sh 

1.10.增加原主库和同步操作

---2添加原主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=2 --addr=192.168.30.104:6379

---将原主库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.104:6379

---将原主库提升为新主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=2 --addr=192.168.30.104:6379

---2添加从库(由于提升新主库后,从库自动剔除下线)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=2 --addr=192.168.30.103:6380

---将从库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.103:6380

  

2.       节点2主机或OS异常,重启后OS恢复正常 

2.1.proxy2主机断电重启,OS启动后,先移除报错的proxy

查看proxy状态:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --proxy-status

[ ] proxy-1 [T] 8ed9a7531216512ccd8f23647ef31b61 [A] 192.168.30.103:11080 [P] 192.168.30.103:19000

[ ] proxy-3 [T] 92db83aa55e8dacb6cdc358a98a9433d [A] 192.168.30.105:11080 [P] 192.168.30.105:19000

[E] proxy-5 [T] 1b67e5afdd9709b4203bf7175f434204 [A] 192.168.30.104:11080 [P] 192.168.30.104:19000

或用: /codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.113:18080 --list-proxy

强制删除报错的proxy:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --remove-proxy --token=977d9f811b6b1675d37b6695b784aeb5 --force 

2.2.启动zookperproxy

cd /codisapp/sh/codis

sh ./start_zookeeper.sh

sh ./start_codis_proxy.sh 

2.3.启动codis 63806379暂不启,

/codisapp/sh/codis/bin/codis-server /codisapp/conf/codis/redis6380.conf & 

2.4.192.168.30.1036380从库上执行(可以跳过这步,用下面提升主库的步骤取代)

127.0.0.1:6380> slaveof no one

OK

FE页面上显示原主库error,无法自动消失。 

2.5.将从库提升为新主库(这样提升后,FE页面上报错的原主库才会剔除)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=2 --addr=192.168.30.103:6380 

2.6.启动192.168.30.104的原主库6379

cd /codisapp/sh/codis

sh ./start_codis_server_6379.sh 

2.7.增加原主库和同步操作

---2添加原主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=2 --addr=192.168.30.104:6379

---将原主库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.104:6379

---将原主库提升为新主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=2 --addr=192.168.30.104:6379

---2添加从库(由于提升新主库后,从库自动剔除下线)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=2 --addr=192.168.30.103:6380

---将从库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.103:6380 

3.       节点2主机或OS损坏,主机或OS无法修复

3.1    采用备用主机,将主机名和IP分别改成m2580192.168.30.104

3.2    配置好备份恢复客户端

3.3    安装相应包

3.3.1安装编译环境前的一些依赖安装(三台主机上执行)

yum install -y gcc make gcc-c++ automake lrzsz openssl-devel zlib-* bzip2-* readline* zlib-* bzip2-* git

yum install -y nmap unzip wget lsof xz net-tools mercurial

修改:

vi /etc/sysctl.conf

vm.overcommit_memory = 1

sysctl vm.overcommit_memory=1

手工执行:echo never > /sys/kernel/mm/transparent_hugepage/enabled

并加到:/etc/rc.local

3.3.2 配置dns解析:

vi /etc/resolv.conf

nameserver 192.168.1.1

3.3.3 安装jdk

  root 操作

  cd /tmp

  tar -C /codisapp/svr/ -xzf /tmp/jdk-7u71-linux-x64.gz

  chown -R codisapps:apps /codisapp/svr/jdk1.7.0_71

  alternatives  --install /usr/bin/java  java /codisapp/svr/jdk1.7.0_71/bin/java 300;alternatives --set java /codisapp/svr/jdk1.7.0_71/bin/java

  alternatives  --install /usr/bin/javac  javac /codisapp/svr/jdk1.7.0_71/bin/javac 300;alternatives --set javac /codisapp/svr/jdk1.7.0_71/bin/javac

  alternatives  --install /usr/bin/jstat  jstat /codisapp/svr/jdk1.7.0_71/bin/jstat 300;alternatives --set jstat /codisapp/svr/jdk1.7.0_71/bin/jstat 

3.4    建立apps用户和组

groupadd -g 802 apps

useradd -g apps -u 500 -d /codisapp apps

3.5    从备份中恢复codis相关组件的备份

recover -s m713 -c m2580

recover> cd /       

recover> ls

apps   root

recover> cd apps

recover> ls

conf    dbdat   sh      svr

recover>add *

recover>relocate /codisapp

recover>recover

cd /codisapp/dbdat

mkdir redis_data_6379

mkdir –p /codisapp/run/codis

chown –R codisapps:apps /codisapp/dbdat

chown –R codisapps:apps /codisapp/svr

chown –R codisapps:apps /aps/conf

cd /codisapp/svr

ln -s zookeeper-3.4.8 zookeeper 

3.6    从备份中将6380aof文件恢复(可选)

mount xxxx /ls_codis_back

NAS目录/ls_codis_back/是用于存放每5分钟copyaof文件,将最新的aof文件copy回。

假如最新的aof备份文件为appendonly6380.aof_20161103_14:40:01,那么操作为:

cd /ls_codis_back/104

cp  –p               

appendonly6380.aof_20161103_14:40:01 /codisapp/dbdat/redis_data_6380/appendonly6380.aof 

3.7 接下来,按2.12.7的步骤处理。

 

场景二:节点192.168.30.103主机挂掉,104105正常

1. 节点1主机正常停机维护操作

1.1 ha

 cd /codisapp/sh/codis

 sh ./stop_codis_ha.sh

1.2 proxy

 sh ./stop_codis_proxy.sh

1.3 移除proxy

查看proxy状态:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --proxy-status

[ ] proxy-3 [T] 92db83aa55e8dacb6cdc358a98a9433d [A] 192.168.30.105:11080 [P] 192.168.30.105:19000

[E] proxy-5 [T] 6e88699fc6bee93eaa8c6def7530bd8c [A] 192.168.30.103:11080 [P] 192.168.30.103:19000

[ ] proxy-6 [T] 8bf57fb21f04f13495c216f04ba8ce1c [A] 192.168.30.104:11080 [P] 192.168.30.104:19000

或用: /codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --list-proxy

强制删除报错的proxy:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --remove-proxy --token=d8904b40658ba18f1e49bcd7050cad17 --force

1.4 FEdashborad

sh ./stop_codis_fe.sh

sh ./stop_codis_dashboard.sh

1.5 codis server

sh ./ stop_codis_server.sh

1.6 zookper

sh ./stop_zookeeper.sh

1.7 关机维护和开机

1.8 启动zookper(若没有启动的话)

cd /codisapp/sh/codis

sh ./start_zookeeper.sh

1.9 启动codis 6380和其它服务

sh ./start_codis_server_6380.sh

sh ./start_codis_dashboard.sh

异常关机后,无法启动dashboard,日志报下错:

2016/11/15 21:41:05 topom.go:121: [ERROR] store: acquire lock of codis_gls_prd failed

[error]: zk: node already exists

解决方法:

/codisapp/svr/codis/bin/codis-admin --remove-lock --product=codis_gls_prd --zookeeper=127.0.0.1:2181

sh ./start_codis_proxy.sh

sh ./start_codis_fe.sh

sh ./start_codis_ha.sh

1.10 将从库提升为新主库(即使上面已有启动ha了,但无法自动切换)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=1 --addr=192.168.30.105:6380

若提升报错,先手工断开主从关系:

127.0.0.1:6380> slaveof no one 

1.11 启动codis 6379

 sh ./start_codis_server_6379.sh

1.12 增加原主库和同步操作

---1添加原主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=1 --addr=192.168.30.103:6379

---将原主库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.103:6379

---将原主库提升为新主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=1 --addr=192.168.30.103:6379

---2添加从库(由于提升新主库后,从库自动剔除下线)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=1 --addr=192.168.30.105:6380

---将从库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.105:6380

 

2.节点1主机或OS异常,重启主机恢复正常

2.1 主机修复后开机

2.2 启动zookper(若没有启动的话)

  cd /codisapp/sh/codis

  sh ./start_zookeeper.sh

2.3 启动codis 6380

  sh ./start_codis_server_6380.sh

2.4 启动面板

异常关机后,无法启动dashboard,日志报下错:

2016/11/15 21:41:05 topom.go:121: [ERROR] store: acquire lock of codis_gls_prd failed

[error]: zk: node already exists

先执行:/codisapp/svr/codis/bin/codis-admin --remove-lock --product=test_prod --zookeeper=127.0.0.1:2181

再执行启动:sh ./start_codis_dashboard.sh 

2.5 移除报错proxy

   查看proxy状态:

  /codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --proxy-status

[ ] proxy-3 [T] 92db83aa55e8dacb6cdc358a98a9433d [A] 192.168.30.105:11080 [P] 192.168.30.105:19000

[ ] proxy-6 [T] 8bf57fb21f04f13495c216f04ba8ce1c [A] 192.168.30.104:11080 [P] 192.168.30.104:19000

[E] proxy-8 [T] 833951d2b6486c071f7359eeeebd4ec3 [A] 192.168.30.103:11080 [P] 192.168.30.103:19000

[ ] proxy-9 [T] c8413117f94d98663eb6375daccbaab3 [A] 192.168.30.103:11080 [P] 192.168.30.103:19000

强制删除报错的proxy:

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --remove-proxy --token=f985ac7d54f4e6c6bb2a7daf5c98c6f2 --force

2.6 启动proxy和其它组件

  sh ./start_codis_proxy.sh

  sh ./start_codis_fe.sh

  sh ./start_codis_ha.sh

2.7 将从库提升为新主库(即使上面已有启动ha了,但无法自动切换)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=1 --addr=192.168.30.105:6380

若提升报错,先手工断开主从关系:

127.0.0.1:6380> slaveof no one

2.8 启动codis 6379

 sh ./start_codis_server_6379.sh

 2.9 增加原主库和同步操作

---1添加原主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=1 --addr=192.168.30.103:6379

---将原主库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.103:6379

---将原主库提升为新主库

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --promote-server --gid=1 --addr=192.168.30.103:6379

---1添加从库(由于提升新主库后,从库自动剔除下线)

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --group-add --gid=1 --addr=192.168.30.105:6380

---将从库同步

/codisapp/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --sync-action --create --addr=192.168.30.105:6380 

3.节点1主机或OS损坏,主机或OS无法修复

3.1采用备用主机,将主机名和IP分别改成m2579192.168.30.103

3.2配置好备份恢复客户端

3.3安装相应包

3.3.1安装编译环境前的一些依赖安装(三台主机上执行)

yum install -y gcc make gcc-c++ automake lrzsz openssl-devel zlib-* bzip2-* readline* zlib-* bzip2-* git

yum install -y nmap unzip wget lsof xz net-tools mercurial

修改:

vi /etc/sysctl.conf

vm.overcommit_memory = 1

sysctl vm.overcommit_memory=1

手工执行:echo never > /sys/kernel/mm/transparent_hugepage/enabled

并加到:/etc/rc.local

3.3.2 配置dns解析:

vi /etc/resolv.conf

nameserver 192.168.1.1

3.3.3 安装jdk

  root 操作

  cd /tmp

  tar -C /codisapp/svr/ -xzf /tmp/jdk-7u71-linux-x64.gz

  chown -R codisapps:apps /codisapp/svr/jdk1.7.0_71

  alternatives  --install /usr/bin/java  java /codisapp/svr/jdk1.7.0_71/bin/java 300;alternatives --set java /codisapp/svr/jdk1.7.0_71/bin/java

  alternatives  --install /usr/bin/javac  javac /codisapp/svr/jdk1.7.0_71/bin/javac 300;alternatives --set javac /codisapp/svr/jdk1.7.0_71/bin/javac

  alternatives  --install /usr/bin/jstat  jstat /codisapp/svr/jdk1.7.0_71/bin/jstat 300;alternatives --set jstat /codisapp/svr/jdk1.7.0_71/bin/jstat 

3.4建立apps用户和组

groupadd -g 802 apps

useradd -g apps -u 500 -d /codisapp apps 

3.5从备份中恢复codis相关组件的备份

recover -s m713 -c m2579

recover> cd /       

recover> ls

apps   root

recover> cd apps

recover> ls

conf    dbdat   sh      svr

recover>add *

recover>relocate /codisapp

recover>recover

cd /codisapp/dbdat

mkdir redis_data_6379

chown –R codisapps:apps /codisapp/dbdat

chown –R codisapps:apps /codisapp/svr

chown –R codisapps:apps / codisapp/conf

cd /codisapp/svr

ln -s zookeeper-3.4.8 zookeeper 

3.6 从备份中将6380aof文件恢复(可选)

mount xxxx /ls_codis_back

NAS目录/ls_codis_back/是用于存放每5分钟copyaof文件,将最新的aof文件copy回。

假如最新的aof备份文件为appendonly6380.aof_20161103_14:40:01,那么操作为:

cd /ls_codis_back/104

cp  –p               

appendonly6380.aof_20161103_14:40:01 /codisapp/dbdat/redis_data_6380/appendonly6380.aof 

3.7    接下来,按2.12.9的步骤处理。

 

场景三:103104主机挂掉,105主机正常 

1.节点1和节点2主机正常关闭维护操作

1.1参考场景一的正常停机步骤

1.2参考场景二的正常停机步骤

1.3 server 1server 2启动zookper

1.4 server 1server 2启动6380 codis

1.5 server 1启动dashboardproxyFEHA

1.6 server 2启动proxy

1.7 参考场景二的1.101.12步骤

1.8 server 2启动6379 codis

1.9 参考场景一的1.10步骤 

2.节点1和节点2主机异常关机,重启主机恢复正常

2.1 参考场景二的2.12.3步骤

2.2 server 2主机启动zookper6380 codis

2.3 参考场景二的2.42.9步骤

2.4 参考场景一的2.1步骤和启动proxy

2.5 参考场景一的2.42.7步骤 

3.节点1和节点2主机或OS损坏,主机或OS无法修复

恢复方法参考场景一和场景二的第3步。 

 

场景四:三台主机同时挂掉

参考场景三的处理方法,区别在于启动顺序:

启动面板后,移除三台proxy-->启动三台codis 6380-->启动三台proxy 

 

场景五:主库所有键值被清空的恢复 

当主库执行了flushallflushdbredis的缓存被清空,并自动同步到从库,从而从库也被清空,利用备份来恢复。

恢复步骤:

1.关闭6379 codis

2.提升6380为主库

3.关闭6380 codis

4.NAS中的备份copy回数据目录下,并改名为appendonly6380.aof

5.启动6380 codis

6.手工断开主从关系:

127.0.0.1:6380> slaveof no one

7.启动6379 codis

8.增加6379server group

9.同步6379 codis

10.提升6379为主库

12.增加6380server group

13.同步6380 codis

发布了197 篇原创文章 · 获赞 23 · 访问量 48万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览