docker/Rancher快速搭建中间件,并持久化数据
背景
公司使用rancher搭建部分中间件过程中,遇到docker重启过程中数据会丢失的问题,解决方案如下
包含中间件:
DB:达梦、mysql、pg、oracle、hive
中间件:es、hadoop、redis、zookeeper
达梦数据库
环境变量
键 | 值 |
---|---|
UNICODE_FLAG | 1 |
PAGE_SIZE | 16 |
LOG_SIZE | 1024 |
LENGTH_IN_CHAR | 1 |
LD_LIBRARY_PATH | /opt/dmdbms/bin |
INSTANCE_NAME | dm8 |
EXTENT_SIZE | 32 |
BLANK_PAD_MODE | 1 |
存储卷
/opt/dmdbms/data
镜像
https://eco.dameng.com/download/
MYSQL
环境变量
存储卷
镜像
常见需求:
制作开启binlog的mysql镜像
准备文件
准备文件mysqld.cnf文件内容如下
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
准备文件Dockerfile文件内容如下
# 基于 mysql:5.7.44 镜像构建
FROM mysql:5.7.44
# 将自定义的 mysqld.cnf 文件复制到镜像中的指定位置
COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
制作镜像
docker build -t mysql-binlog:5.7.44 .
PG
环境变量
键 | 值 | 备注 |
---|---|---|
POSTGRES_PASSWORD | xxxxx | 密码 |
存储卷
容器路径 | 数据路径(RancherNFS数据卷路径,可修改) | 备注 |
---|---|---|
/var/lib/postgresql/data | pg_data | 数据存储路径 |
镜像
postgres:10.5
常见问题
增加数据库连接数
如果已经将文件映射到外部,那么在映射目录中可以查到postgresql.conf文件修改下面的max_connections就可以更改最大连接数了,需要重启服务!
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*'
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
max_connections = 5000 # (change requires restart)
ORACLE
环境变量
键 | 值 | 备注 |
---|---|---|
IMPORT_FROM_VOLUME | true | 在初始化数据库之后,第二次使用现有数据卷启动时应该修改为false |
存储卷
容器路径 | 数据路径(RancherNFS数据卷路径,可修改) | 备注 |
---|---|---|
/var/lib/postgresql/data | pg_data | 数据存储路径,需要有读写执行权限 |
镜像
truevoly/oracle-12c:latest
hive
环境变量
键 | 值 |
---|---|
SERVICE_OPTS | -Djavax.jdo.option.ConnectionDriverName=org.postgresql.Driver -Djavax.jdo.option.ConnectionURL=jdbc:postgresql://pg10:5432/hive_metadata -Djavax.jdo.option.ConnectionUserName=postgres -Djavax.jdo.option.ConnectionPassword=xxxxxx |
IS_RESUME | true |
DB_DRIVER | postgres |
存储卷
容器路径 | 数据路径(RancherNFS数据卷路径,可修改) | 备注 |
---|---|---|
/opt/hive/data/warehouse | es_data | 数据路径,需要有读写执行权限 |
镜像
apache/hive:3.1.3
常见问题
制作hive-postgre镜像
准备文件
# 使用官方的 Apache Hive 镜像作为基础镜像
FROM apache/hive:3.1.3
# 复制 PostgreSQL JDBC 驱动到 Hive 的 lib 目录并重命名
COPY /root/postgresql-42.6.0.jar /opt/hive/lib/postgres.jar
构建
docker build -t hive-with-postgresql .
hive为什么要和pg有关系?
hive中只存储了数据,结构信息(元数据)需要存储在db中
ES
环境变量
键 | 值 | 备注 |
---|---|---|
http.publish_port | 30294 | 映射端口,可不设置 |
http.publish_host | 10.4.44.16 | 映射IP,可不设置 |
ES_JAVA_OPTS | -Xms512m -Xmx512m | |
discovery.type | single-node |
存储卷
容器路径 | 数据路径(RancherNFS数据卷路径,可修改) | 备注 |
---|---|---|
/usr/share/elasticsearch/data | es_data | 数据路径,需要有读写执行权限 |
/usr/share/elasticsearch/plugins | es_plugins | 插件路径 |
/usr/share/elasticsearch/config | es_config | 配置路径 |
镜像
elasticsearch:7.16.2
常见需求:
设置密码
修改config目录elasticsearch.yml
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
设置好存储卷之后进入bin目录
执行下方命令,分别为elastic, kibana, logstash_system,beats_system设置密码
elasticsearch-setup-passwords interactive
hadoop
环境变量
无
存储卷
容器路径 | 数据路径(RancherNFS数据卷路径,可修改) | 备注 |
---|---|---|
/tmp/hadoop-root/dfs/data/current | hadoop_dataes/hadoop_data_folder | 需要有读写执行权限 |
/tmp/hadoop-root/dfs/name/current | hadoop_dataes/hadoop_name_folder | 需要有读写执行权限 |
/tmp/hadoop-root/dfs/namesecondary/current | hadoop_dataes/hadoop_namesecondary_folder | 需要有读写执行权限 |
静态文件,需要放到对应的存储上。
https://download.csdn.net/download/weixin_39919140/89569341
镜像
sequenceiq/hadoop-docker:2.7.1
常见问题
使用对应镜像但是无法启动服务,手动启动一个镜像,然后将对应这个目录下的内容拷贝到实际位置就可以启动了。