您的位置:首页 > 运维架构 > 网站架构

安装canal 高可用集群

2020-07-14 06:15 344 查看

目录

背景

研发伙伴的需求,需要监控mysql增量数据,想通过canal-client发送到java flink上。

  • canal是什么
    canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

  • canal 工作原理
    canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议 MySQL master 收到 dump 请求,开始推送 binary log 给slave (即 canal ) canal 解析 binary log 对象(原始为 byte 流)

参考文档:https://github.com/alibaba/canal/

环境

均为Centos7.2,配置:内存4G,磁盘40G,2CPU。

服务名 IP/域名 端口(均默认)
mysql 10.10.11.141 3306
canal admin 172.16.16.108 8090
zookeeper 172.16.16.108 2181
canal01 172.16.16.108 11110
canal02 10.10.11.142 11110

NOTE:

  1. IP地址是自己瞎写的,为了方便看。
  2. 个人觉得zookeeper和canal admin都是可选的,不影响canal server的运行,只是配置了canal admin可以从网页上登录,zookeeper有canal server HA 状态日志,看起来方便。
  3. 在这里是把canal admin、canal、zookeeper安装在一台机器上了,其实这几个服务可以分别安装在任何联网机器上的哈。

本地安装

一、安装mysql

参考文档:安装mysql
对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下
(阿里云RDS默认都配置好了,可以直接跳过这一步)

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant

CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

NOTE:这里可能会报错提示密码强度太低,可以降低mysql密码强度(全局的,不建议)或者改为复杂密码。

二、安装canal server

  1. 访问 release 页面,下载canal server
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz

  1. 解压
mkdir /opt/canal.deployer
tar zxvf canal.deployer-1.1.4.tar.gz -C /opt/canal.deployer
cd /opt/canal.deployer;ll

  1. 修改配置文件
    这里的canal.properties可以理解为canal server配置,example即instance配置,可以理解为配置多个(无关联的)mysql
cp -ra conf/example/ conf/iris-mysql-141
vi conf/iris-mysql-141/instance.properties

修改如下:

## mysql serverId
canal.instance.mysql.slaveId = 1234
#position info,需要改成自己的数据库信息
canal.instance.master.address = xxxx.com:3306
#username/password,需要改成自己的数据库信息
canal.instance.dbUsername = <远程登录mysql的账号>
canal.instance.dbPassword = <密码>
canal.instance.defaultDatabaseName =
canal.instance.connectionCharset = UTF-8
#table regex
canal.instance.filter.regex = .\*\\\\..\*
canal.instance.filter.black.regex=mysql..*

canal.instance.mysql.slaveId,如果想配置canal server HA(即主从两台,高可用模式)取值要不同
canal.instance.connectionCharset 代表数据库的编码方式对应到 java 中的编码类型,比如 UTF-8,GBK , ISO-8859-1

  1. 启动
cd bin
./startup.sh

启动成功后会自动生成“canal.pid”文件,记录canal server进程日志

  1. 验证
    1)查看配置
cd conf/iris-mysql-141/;ll

自动生成了“h2.mv.db”

2)查看日志

cd logs		#canal里会记录canal server 启动是否成功,iris-mysql-141记录我配置的instance日志
tail -f iris-mysql-141/iris-mysql-141.log


  1. 关闭
sh bin/stop.sh

踩坑记录:
当同样安装第二个canal server时,发现启动后没有生成“h2.mv.db”和日志文件,找了好半天,最后看日志发现它不认识主机名,即需要在/etc/hosts中配置本机IP和主机名
vi /etc/hosts

172.16.16.108 GEOTSTCANAL01

三、安装canal admin和zookeeper

1. 安装canal admin(UI)

参考官方文档即可:https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart

2.安装zookeeper

目前单机模式,后面会做集群

  1. Install java
yum -y install java
  1. Download zookeeper
    这里有个坑,官网给了两个,其中“apache-zookeeper-3.5.8.tar.gz ”是源码,我们要下载“apache-zookeeper-3.5.8-bin.tar.gz”这个
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/
tar zxvf apache-zookeeper-3.5.8-bin.tar.gz -C /opt/
mv zookeeper-3.5.8 zookeeper
ln -s /opt/zookeeper /usr/local/zookeeper
  1. 创建数据目录
mkdir -p /opt/zookeeper/data
  1. 修改配置文件
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
clientPort=2181
  1. 添加环境变量,vi /etc/profile
## zookeeper env
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH

使环境变量生效

source /etc/profile
  1. 启动zookeeper
zkServer.sh start
jps                                            ## 查看进程
zkServer.sh status                    ## 查看状态
zkServer.sh stop
  1. 设置开机启动,vi /etc/rc.d/rc.local
su - root -c zkServer.sh start

3. 配置canal admin 页面

登录:http://ip:8089/
默认账号/密码:admin/123456
PS:如果登录失败,有可能是canal admin中“”中配置的登录mysql的账号权限不够
吐槽一下:这个页面上的配置很鸡肋,有些必须填写,但又不生效(即使页面改了,也不会同步到服务器上)。

  1. 新建一个集群
    ZK地址:即zookeeper地址
  2. 新建server
    端口默认:11110
  3. 新建instance
    ⚠️这里instance名字要和canal server上的一致才行

    成功界面

    测试:如果停掉当前server,instance会先停止几秒,再跑到另外机器上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: