• docker跨网段搭建gp测试环境


    (1)制作docker镜像:
    
    #docker run -i -d --name sdw1 -h sdw1 centos  #拉取一个基础镜像,然后在此基础上修改
    

     

    容器里面操作:
    
    #yum install vim wget compat-openssl10 langpacks-en glibc-all-langpacks readline-devel bzip2 krb5-devel perl rsync libevent apr apr-util openssl passwd libnsl net-tools which openssh-clients openssh-server less zip unzip iproute -y
    #ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
    #ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
    #ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" #/usr/sbin/sshd
    
    vi /etc/security/limits.conf
    # End of file
    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 131072
    * hard nproc 131072
    vi /etc/sysctl.conf
    #等一些简单设置以后,上传镜像到harbor仓库: 

    然后拉取镜像开始测试:

    申请2台ec2,ip为:
    
    a机器  10-10-70-186     docker0 : 172.19.1.1
    
    b机器 10-10-77-42       docker0 : 172.19.2.1
    2台ec2的vpc网络放通,避免不必要的麻烦
    
    (3)修改2台ec2默认docker0网卡ip地址(个人习惯)
    
    修改/etc/docker/daemon.json文件,没有就编辑,修改后如下:
    
    root@ip-10-10-70-186:~# cat /etc/docker/daemon.json
    {"bip":"172.19.1.1/24"}
    root@ip-10-10-77-42:~# cat /etc/docker/daemon.json
    {"bip":"172.19.2.1/24"}
    
    systemctl restart docker.service
    
    (4)创建docker,写docker-compse.yaml配置文件:
    
    root@ip-10-10-70-186:~# cat docker-compose.yml
    version: '3'
    services:
    sdw3:
    image: xxxx/ops/gpdb:v1.2
    hostname: sdw3
    container_name: db_sdw3
    ports:
    - "1225:22"
    - "15435:5432"
    stdin_open: true
    tty: true
    networks:
    mynet1:
    ipv4_address: 172.19.3.3
    sdw4:
    image: xxxx/ops/gpdb:v1.2
    hostname: sdw4
    container_name: db_sdw4
    ports:
    - "1226:22"
    - "15436:5432"
    stdin_open: true
    tty: true
    networks:
    mynet1:
    ipv4_address: 172.19.3.4
    sdw5:
    image: xxxx/ops/gpdb:v1.2
    hostname: sdw5
    container_name: db_sdw5
    ports:
    - "1227:22"
    - "15437:5432"
    stdin_open: true
    tty: true
    networks:
    mynet1:
    ipv4_address: 172.19.3.5
    networks:
    mynet1:
    ipam:
    config:
    - subnet: 172.19.3.0/24
    
    
    
    root@ip-10-10-77-42:~# cat docker-compose.yml
    version: '3'
    services:
    mdw:
    image: xxxx/ops/gpdb:v1.2
    hostname: mdw
    container_name: db_mdw
    ports:
    - "1222:22"
    - "15432:5432"
    stdin_open: true
    tty: true
    networks:
    mynet1:
    ipv4_address: 172.19.4.2
    sdw1:
    image: xxxx/ops/gpdb:v1.2
    hostname: sdw1
    container_name: db_sdw1
    ports:
    - "1223:22"
    - "15433:5432"
    stdin_open: true
    tty: true
    networks:
    mynet1:
    ipv4_address: 172.19.4.3
    sdw2:
    image: xxxx/ops/gpdb:v1.2
    hostname: sdw2
    container_name: db_sdw2
    ports:
    - "1224:22"
    - "15434:5432"
    stdin_open: true
    tty: true
    networks:
    mynet1:
    ipv4_address: 172.19.4.4
    networks:
    mynet1:
    ipam:
    config:
    - subnet: 172.19.4.0/24
    
    2台ec2启动docker-compose正常启动docker:
    
    
    然后配置互信,进入db_mdw容器:
    
    root@10-10-77-42:~# docker exec -ti db_mdw /bin/bash
    [root@mdw /]# su - gpadmin
    Last login: Thu Apr  8 14:52:59 UTC 2021 on pts/2
    [gpadmin@mdw ~]$ ssh-keygen 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/gpadmin/.ssh/id_rsa): 
    
    ...
    
    配置mdw主机host文件:
    
    [gpadmin@mdw ~]$ cat /etc/hosts
    127.0.0.1       localhost
    
    172.19.4.2 mdw
    172.19.4.3 sdw1
    172.19.4.4 sdw2
    172.19.3.3 sdw3
    172.19.3.4 sdw4
    172.19.3.5 sdw5
    
    然后再2台宿主机添加路由使2个宿主机内部docker能互访:
    
    
    
    实现: 路由表方式:
    a机器添加路由:route add -net 172.19.2.0/24 gw 10.10.77.42
    b机器添加路由:route add -net 172.19.1.0/24 gw 10.10.70.186
    
    
    a机器添加转发:iptables -t nat -A POSTROUTING -s 172.19.1.0/24 -d 172.19.2.0/16 -j MASQUERADE
    iptables -t nat -I PREROUTING -s 172.19.3.0/24 -d 172.19.4.0/24 -j DNAT --to 172.19.1.1
    
    b机器添加转发:iptables -t nat -A POSTROUTING -s 172.19.2.0/24 -d 172.19.1.0/16 -j MASQUERADE
    iptables -t nat -I PREROUTING -s 172.19.4.0/24 -d 172.19.3.0/24 -j DNAT --to 172.19.2.1
    
    操作以后,6个docker能互访,当时a机器内部docker与b机器的docker互信始终不行,折腾了许久没搞定,于是换了一种方法达到这6个docker互访没有问题。
    
    使用https://github.com/weaveworks/weave这个工具充当路由器的功能。实现6个docker互访。
    
    2台ec2分别安装weave工具:
    curl -L git.io/weave -o /usr/local/bin/weave
    
    root@10-10-70-186:~#
    
    weave connect 10.10.77.42 to ## 连接另外一台ec2
    weave attach 172.19.44.5/24 cd9754fd68b0 #db_sdw3
    weave attach 172.19.44.6/24 ff2bddf34119 #db_sdw4
    weave attach 172.19.44.6/24 ff2bddf34119 #db_sdw5
    
    root@10-10-77-42:~#
    
    weave connect to 10.10.70.186 ## 连接另外一台ec2
    weave attach 172.19.44.2/24 ac3077ebfd0a #db_mdw
    weave attach 172.19.44.3/24 b6349ed1305d #db_sdw1
    weave attach 172.19.44.4/24 d51d1cbd7658 #db_sdw2
    
    这样6个docker就实现了互访。
    
    (5) 开始安装greenplum数据库:
    
    root@10-10-77-42:~# docker exec -ti db_mdw /bin/bash
    [root@mdw /]# su - gpadmin
    ##ssh-keygen设置ssh配置
    ##配置host文件
    [gpadmin@mdw ~]$ cat /etc/hosts
    127.0.0.1 localhost
    172.19.44.2 mdw
    172.19.44.3 sdw1
    172.19.44.4 sdw2
    172.19.44.5 sdw3
    172.19.44.6 sdw4
    172.19.44.7 sdw5
    
    因为已经用weave改变了6个docker的ip,才能互访,所以用修改后的ip地址,之前docker-compse.yaml里面的ip可保留也可以丢弃。
    
    [gpadmin@mdw ~]$ cat seg_hosts # 我暂时用4个docker搭建机器,留2个用来添加删除segment 

    然后开始安装gp数据库

    确保6个docker互信没有问题才可以安装数据库。
    
    gp初始化参数如下:
    
    [gpadmin@mdw ~]$ cat gpinitsystem_config
    ARRAY_NAME="Greenplum"
    MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
    # Segment 的名称前缀
    SEG_PREFIX=gpseg
    # Primary Segment 起始的端口号
    PORT_BASE=33000
    # 指定 Primary Segment 的数据目录
    declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
    # Master 所在机器的 Hostname
    MASTER_HOSTNAME=mdw
    # 指定 Master 的数据目录
    MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
    # Master 的端口
    MASTER_PORT=5432
    # 指定Bash的版本
    TRUSTED_SHELL=/usr/bin/ssh
    # Mirror Segment起始的端口号
    MIRROR_PORT_BASE=43000
    # Primary Segment 主备同步的起始端口号
    REPLICATION_PORT_BASE=34000
    # Mirror Segment 主备同步的起始端口号
    MIRROR_REPLICATION_PORT_BASE=44000
    # Mirror Segment 的数据目录
    declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)
    
    [gpadmin@mdw ~]$ gpssh -f seg_hosts
    
    =>
    
    mkdir -p /home/gpadmin/gpdata/gpmaster/gpseg-1
    mkdir -p /home/gpadmin/gpdata/gpdatap1
    mkdir -p /home/gpadmin/gpdata/gpdatam1
    mkdir -p /home/gpadmin/gpdata/gpdatam2
    mkdir -p /home/gpadmin/gpdata/gpdatap2
    
    chmod 777 -R /home/gpadmin/gpdata
    chown gpadmin.gpadmin -R /home/gpadmin/gpdata
    
    echo 'export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1' >> /home/gpadmin/.bashrc
    
    这样在4个docker均已创建好相应目录已经设置好权限。
    
    for i in $(docker ps -a -q);do docker exec -ti $i ip a|grep inet|awk '{print $2}'|grep -vE '^fe80|^::|^127'|awk -F '/' '{print $1}';done  # 2台ec2宿主机执行,检查docker ip地址
    
    [gpadmin@mdw ~]$ gpinitsystem -c gpinitsystem_config
    
    。。。。
    
    最后完成。
    
    
    
    最大的坑,安装的时候报错,排查安装日志报错提示:
    
    /usr/local/greenplum-db-6.15.0/bin/psql: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
    
    
    解决方法:
    ls -la /usr/lib64 |grep libreadline
    [gpadmin@660f628171a7 gpAdminLogs]$ ldd /usr/local/greenplum-db-6.15.0/bin/psql
    linux-vdso.so.1 (0x00007ffde69ca000)
    libpq.so.5 => /usr/local/greenplum-db-6.15.0/lib/libpq.so.5 (0x00007fab0fbb4000)
    libssl.so.10 => /lib64/libssl.so.10 (0x00007fab0f945000)
    libreadline.so.6 => not found
    libc.so.6 => /lib64/libc.so.6 (0x00007fab0f582000)
    libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fab0f11f000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fab0eeca000)
    libldap_r-2.4.so.2 => /lib64/libldap_r-2.4.so.2 (0x00007fab0ec73000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fab0ea53000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fab0e84f000)
    libz.so.1 => /lib64/libz.so.1 (0x00007fab0e638000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fab0fdea000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fab0e34f000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fab0e138000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fab0df34000)
    
    ln -s /usr/lib64/libreadline.so.7.0 /usr/lib64/libreadline.so.6
    

      

    业余经济爱好者
  • 相关阅读:
    [SCM]软件配置管理
    Jenkins入门总结
    Linux sh/bash[精华]
    [BRE]软件构建发布自动化
    python总结
    代码质量第 3 层 可读的代码
    记一次 WinDbg 分析 .NET 某工厂MES系统 内存泄漏分析
    记一次 .NET 某消防物联网 后台服务 内存泄漏分析
    Covariant(协变)与 Contravariant(逆变)
    三藩市湾区一周游
  • 原文地址:https://www.cnblogs.com/5sdba-notes/p/14650394.html
Copyright © 2020-2023  润新知