1.安装JDK、Zookeeper、Kafka单机版
-
安装准备
# 切换为命令模式 systemctl set-default multi-user.target reboot # 配置域名映射 vim /etc/hosts 192.168.88.10 node1 # 关闭防火墙,并开机禁用 systemctl stop firewalld.service systemctl disable firewalld.service
-
JDK的搭建
# 卸载自带的JDK rpm -qa | grep java | xargs rpm -e --nodeps # 创建目录,并上传JDK到software指定目录 mkdir -p /export/server /export/software && cd /export/software rz # 解压并安装JDK tar xf jdk-8u65-linux-x64.tar.gz -C ../server/ && cd /export/server/ vim /etc/profile # 添加以下内容 # JAVA_HOME export JAVA_HOME=/export/server/jdk1.8.0_65 export PATH=$JAVA_HOME/bin:$PATH # 加载环境变量,并验证是否配置成功 source /etc/profile && java -version
-
Zookeeper的搭建
# 上传Zookeeper到software目录,并解压 cd /export/software/ && rz tar xf zookeeper-3.4.6.tar.gz -C ../server/ # 修改配置 cd /export/server/zookeeper-3.4.6/conf/ mv zoo_sample.cfg zoo.cfg # 配置环境变量 vim /etc/profile # ZOOKEEPER_HOME export ZOOKEEPER_HOME=/export/server/zookeeper-3.4.6 export PATH=$ZOOKEEPER_HOME/bin:$PATH # 加载环境变量 source /etc/profile
-
Kafka的搭建
# 上传Kafka到software目录,并解压 cd /export/software/ && rz tar xf kafka_2.12-2.4.1.tgz -C ../server/ # 配置环境变量 vim /etc/profile # KAFKA_HOME export KAFKA_HOME=/export/server/kafka_2.12-2.4.1 export PATH=$KAFKA_HOME/bin:$PATH # 加载环境变量 source /etc/profile
-
启动测试
# 启动ZK和Kafka zkServer.sh start cd /export/server/kafka_2.12-2.4.1/ kafka-server-start.sh -daemon config/server.properties
2.本地安装MySQL
-
下载官网yum源并安装MySQL
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm yum -y install mysql80-community-release-el7-3.noarch.rpm
-
修改默认安装源为MySQL5.7,并下载启动
# 使用下面命令,可以看到默认安装源为mysql80-community版本 yum repolist all | grep mysql # 取消mysql80-community的默认安装 yum-config-manager --disable mysql80-community # 设置mysql57-community成为yum默认安装版本 yum-config-manager --enable mysql57-community # 执行安装 yum -y install mysql-community-server # 安装完成后启动mysql服务 systemctl start mysqld # 因为安装了yum repository所以会自动更新,所以卸载掉repo包 yum -y remove mysql80-community-release-el7-3.noarch
-
登录MySQL
# 查看mysql临时密码 grep "temporary password" /var/log/mysqld.log # 登录MySQL mysql -uroot -p # 取消mysql密码规范限制 set global validate_password_policy=0; set global validate_password_length=1; # 重设密码为123456,并赋予访问权限 alter user 'root'@'localhost' identified by '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges; exit
-
开启MySQL的Binlog日志
vim /etc/my.cnf # 在[mysqld]下面,添加以下三行 log-bin=mysql-bin # 开启 binlog binlog-format=ROW # 选择 ROW 模式 server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复 # 修改my.cnf需要重启MySQL服务 systemctl restart mysqld
3.Docker安装MySQL
-
安装MySQL
# 拉取镜像 docker pull mysql:5.7 # 创建容器 docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-
开启MySQL的Binlog日志
# 进入MySQL容器 docker exec -it mysql bash # 安装vim命令 apt-get update apt-get install -y vim vim /etc/mysql/my.cnf # 普通模式下输入以下内容保证可以右键粘贴 :set mouse-=a # 到最后粘贴以下6行内容 [mysqld] log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复 expire_logs_days=7 # binlog文件保存7天 max_binlog_size=500m # 每个binlog日志文件大小 # 重启容器 docker restart mysql
3.本机单机Canal安装
-
授权canal链接 MySQL 账号具有作为 MySQL slave 的权限
# 登录MySQL并授权canal账号权限 mysql -uroot -p123456 CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; exit
-
安装Canal
# 创建Canal目录,并上传解压 mkdir -p /export/server/canal cd /export/software/ && rz tar xf canal.deployer-1.1.4.tar.gz -C ../server/canal/ # 修改配置文件 cd /export/server/canal vim conf/canal.properties # 第25行和第116行 canal.serverMode = kafka canal.mq.servers = node1:9092 # 修改实例 vim conf/example/instance.properties # 第9行 canal.instance.master.address=node1:3306 # 启动Canal bin/startup.sh # 报错日志查看 less logs/example/example.log
4.Docker单机Canal安装
-
授权canal链接 MySQL 账号具有作为 MySQL slave 的权限
# 登录MySQL并授权canal账号权限 mysql -uroot -p123456 CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; exit
-
安装Docker
# 安装yum工具包和存储驱动 yum install -y yum-utils device-mapper-persistent-data lvm2 # 设置安装Docker的yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装Docker yum install docker-ce docker-ce-cli containerd.io # 启动docker,并设置开机启动 systemctl start docker systemctl enable docker # 配置镜像加速 vim /etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] } # 加载和重启docker systemctl daemon-reload systemctl restart docker # 查看镜像加速是否配置成功 docker info
-
拉取镜像
# 拉取镜像 docker pull canal/canal-server:v1.1.4 # 创建容器 docker run -d --name canal-server \ -e canal.instance.master.address=192.168.88.10:3306 \ -e canal.instance.dbUsername=canal \ -e canal.instance.dbPassword=canal \ -add-host node1:192.168.88.10 \ -p 11111:11111 \ -d canal/canal-server:v1.1.4
-
修改容器canal配置
# 进入容器 docker exec -it canal-server bash # 修改配置 cd /home/admin/canal-server vi conf/canal.properties # 第25行和第116行 canal.serverMode = kafka canal.mq.servers = 192.168.88.10:9092 # 修改实例,第9行 vi conf/example/instance.properties canal.instance.master.address=192.168.88.10:3306 # 启动 bin/startup.sh
5.测试
-
使用Kafka创建一个example的Topic
-
连接MySQL进行测试
CREATE DATABASE test; use test; CREATE TABLE test.user( id int(11) NOT NULL, name varchar(255) DEFAULT NULL, age int(11) DEFAULT NULL, PRIMARY KEY (id) )ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO test.user (id, name,age) VALUES (1, 'aa',10); UPDATE test.user SET name = 'bb' WHERE id = 1; DELETE FROM test.user WHERE id = 1;
-
测试多种方案搭配,遇到canal的position问题
# 进入canal的目录删除对应实例的meta.dat文件,从新启动 rm rf conf/example/meta.dat