欢迎投稿

今日深度:

手动部署OceanBase三副本集群方式,

手动部署OceanBase三副本集群方式,


目录
  • 手动部署ob三副本集群
    • 1. IP地址和机器规划
    • 2. 初始化机器
    • 3. 安装observer
    • 4. 集群初始化(bootstrap)
    • 5. 部署obproxy(以单节点为例)
    • 6. 创建租户并生成一些数据
  • 总结

    手动部署ob三副本集群

    1. IP地址和机器规划

    机器os :centos 7.5 8c12g

    IP地址主机名机器角色说明
    192.168.32.111obce01observer+obproxy
    192.168.32.112obce02observer
    192.168.32.113obce03observer+obproxy
    192.168.32.114obce04observer新增,扩容
    192.168.32.115obce05observer+obproxy新增,扩容

    注意:机器只有一块磁盘,只演示在单盘上部署observer。

    2. 初始化机器

    2.1 修改内核参数

    cat << EOF >> /etc/sysctl.conf
    
    net.core.somaxconn = 2048
    net.core.netdev_max_backlog = 10000
    net.core.rmem_default = 16777216
    net.core.wmem_default = 16777216
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    
    net.ipv4.ip_local_port_range = 3500 65535
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.tcp_syncookies = 0
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_fin_timeout = 15
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_slow_start_after_idle=0
    
    vm.swappiness = 0
    vm.min_free_kbytes = 2097152
    vm.max_map_count=655360
    fs.aio-max-nr=1048576
    EOF
    

    然后执行sysctl -p 使环境生效。

    2.2 修改会话变量

    将会话级别的最大栈空间大小设置为 unlimited,最大文件句柄数设置为 655350,Core 文件大小设置为 unlimited

    修改 /etc/security/limits.conf 配置文件,如果已有设置值低于这个设置值

    /etc/security/limits.conf
    
    cat << EOF >> /etc/security/limits.conf
    
    * soft nofile 655360
    * hard nofile 655360
    * soft nproc 655360
    * hard nproc 655360
    * soft core unlimited
    * hard core unlimited
    * soft stack unlimited
    * hard stack unlimited
    EOF
    

    2.3 关闭防火墙和selinux

    systemctl disable firewalld 
    systemctl stop firewalld
    systemctl status firewalld
    
    vi /etc/selinux/config
    
    SELINUX=disabled
    
    # 立即生效
    setenforce 0
    # 查看
    getenforce
    

    2.4 配置时钟源

    yum -y install chrony

    直接套用官方文档的配置:

    vi /etc/chrony.conf
    
    # server 后面跟时间同步服务器
    # 使用pool.ntp.org 项目中的公共服务器。按 server 配置,理论上您想添加多少时间服务器都可以。
    # 或者使用 阿里云的 ntp 服务器
    # Please consider joining the pool (http://www.pool.ntp.org/join.html).
    server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
    server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
    server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
    server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
    server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
    
    # 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。
    # 如果选中的是本机,则取消下面 server 注释
    #server 127.127.1.0
    
    # 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
    driftfile /var/lib/chrony/drift
    
    # chronyd 根据需求减慢或加速时间调整,
    # 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。
    # 该指令强制 chronyd 调整时期,大于某个阀值时步进调整系统时钟。
    # 只有在因 chronyd 启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。
    makestep 1.0 3
    
    # 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
    rtcsync
    
    # Enable hardware timestamping on all interfaces that support it.
    # 通过使用hwtimestamp指令启用硬件时间戳
    #hwtimestamp eth0
    #hwtimestamp eth1
    #hwtimestamp *
    
    # Increase the minimum number of selectable sources required to adjust
    # the system clock.
    #minsources 2
    
    # 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器
    #allow 192.168.0.0/16
    #deny 192.168/16
    
    # 即使没有同步到时间源,也要服务时间
    local stratum 10
    
    # 指定包含NTP验证密钥的文件。
    #keyfile /etc/chrony.keys
    
    # 指定日志文件的目录。
    logdir /var/log/chrony
    
    # Select which information is logged.
    #log measurements statistics tracking
    

    启动服务

    systemctl start chronyd.service
    systemctl status chronyd.service
    

    查看时间信息

    查看时间同步活动
    chronyc activity
    
    查看时间服务器
    chronyc sources
    
    查看同步状态
    chronyc sources -v
    
    校准时间服务器:
    chronyc tracking
    

    连同时区一起配置了

    timedatectl set-timezone Asia/Shanghai
    chronyc -a makestep
    

    2.5 创建用户并初始化目录

    注意配置admin用户sudo权限

    groupadd -g 500 admin
    useradd -g 500 -u 500 admin
    echo 'admin:admin' | chpasswd
    sudo vi /etc/sudoers
    # 新增一行
    admin   ALL=(ALL)       ALL
    
    mkdir /data
    mkdir /redo
    chown -R admin:admin /data
    chown -R admin:admin /redo
    su - admin
    mkdir -p /home/admin/oceanbase/store/obcluster  /data/obcluster/{sstable,etc3} /redo/obcluster/{clog,ilog,slog,etc2}
    for f in {clog,ilog,slog,etc2}; do ln -s /redo/obcluster/$f /home/admin/oceanbase/store/obcluster/$f ; done
    for f in {sstable,etc3}; do ln -s /data/obcluster/$f /home/admin/oceanbase/store/obcluster/$f; done
    

    3. 安装observer

    下载rpm包并上传安装(从官网找下载链接)

    yum install lrzsz -y
    rpm -ivh oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm
    rpm -ivh oceanbase-ce-3.1.1-4.el7.x86_64.rpm
    
    su - admin
    echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib' >> ~/.bash_profile
    . ~/.bash_profile
    
    # 注意:zone的名称要根据机器不同而改变,下面是zone1的启动命令
    cd /home/admin/oceanbase && bin/observer -i ens33 -p 2881 -P 2882 -z zone1 -d /home/admin/oceanbase/store/obcluster -r '192.168.32.111:2882:2881;192.168.32.112:2882:2881;192.168.32.113:2882:2881' -c 16384 -n obcluster -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=8,datafile_size=10G,stack_size=1536K,config_additional_dir=/data/obcluster/etc3;/redo/obcluster/etc2" -d /home/admin/oceanbase/store/obcluster
    

    启动之后,ps -ef| grep observer检查进程是否运行正常,使用netstat -ntlp检查端口开启情况

    有兴趣的可以查看日志,看一下observer在初始化启动过程中都做了哪些操作‘。

    cd /home/admin/oceanbase/log
    tail -f observer.log
    # 查看warning级别以上的日志
    tail -n 20 observer.log.wf
    

    安装obclient

    安装包从官网下载并上传到机器上。

    rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm
    rpm -ivh obclient-2.0.0-2.el7.x86_64.rpm
    

    4. 集群初始化(bootstrap)

    在新部署的机器上是没有密码的,输密码直接回车即可,或者去掉-p参数

    obclient -h 127.0.0.1 -u root -P 2881 -p -c -A
    
    set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '192.168.32.111:2882', ZONE 'zone2' SERVER '192.168.32.112:2882', ZONE 'zone3' SERVER '192.168.32.113:2882' ;
    

    使用root@sys用户登录数据库并设置密码:

    obclient -h 127.0.0.1 -u root@sys -P 2881 -c -A
    alter user root identified by 'root123';
    

    在其他机器上测试:

    测试成功。

    5. 部署obproxy(以单节点为例)

    从官网下载并安装obproxy软件包

    rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm

    启动obproxy

    cd /home/admin/obproxy-3.2.0 && bin/obproxy -r "192.168.32.111:2881;192.168.32.112:2881;192.168.32.113:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obcluster

    尝试连接,又出现了经典报错:

    (官方文档给了解释,此处只为模拟问题)

    ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11

    此时使用2881端口是连得上的:

    说明问题出在obproxy与observer间的通信上。

    需要设置root@proxysys的密码。

    obclient -h 127.0.0.1 -u root@proxysys -P 2883
    # 设置管理obproxy的root用户密码
    alter proxyconfig set obproxy_sys_password = 'root123' ;
    # 设置与observer连接的用户的密码
    alter proxyconfig set observer_sys_password = 'root123' ;
    

    设置之后,还需要修改observer里proxyro用户的密码。

    登录observer,查看用户

    obclient -h 127.0.0.1 -u root@sys -P 2881 -c -A -proot123 -Doceanbase
    select user_id,user_name from __all_user;
    

    发现并没有这个用户,需要创建出来并授权(只读用户,select即可):

    create user proxyro identified by 'root123';
    grant select on *.* to proxyro;
    

    再次测试发现可以连接了!

    6. 创建租户并生成一些数据

    6.1 创建unit和资源池、租户

    create resource unit lcxunit max_cpu=2,max_memory='2G',max_iops=10000,max_disk_size='2G',max_session_num=2000;
    create resource pool lcxpool unit='lcxunit',unit_num=1;
    CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=1, zone_list=('zone1'), primary_zone='zone1', resource_pool_list=('lcxpool') SET ob_tcp_invited_nodes='%';
    
    #删除租户
    DROP TENANT tenant_name [FORCE]
    

    查看租户信息:

    查看资源分配情况和

    SELECT a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status   FROM __all_virtual_server_stat a JOIN __all_server b ON (a.svr_ip=b.svr_ip AND a.svr_port=b.svr_port)   ORDER BY a.zone, a.svr_ip;
    SELECT t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, round(t2.max_memory/1024/1024/1024) max_mem_gb, round(t2.min_memory/1024/1024/1024) min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name   FROM __all_resource_pool t1 JOIN __all_unit_config t2 ON (t1.unit_config_id=t2.unit_config_id)    JOIN __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)    LEFT JOIN __all_tenant t4 on (t1.tenant_id=t4.tenant_id) ORDER BY t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;
    

    同样新创建的租户root用户没有密码,登录后创建数据库生成一些数据

    使用sysbench生成数据

    查看生成结果

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。

    您可能感兴趣的文章:
    • docker部署OceanBase-ce cluster方式
    • 部署OceanBase-ce全过程
    • OceanBase建表分区数超限报错解决分析
    • Docker安装部署分布式数据库 OceanBase的详细过程

    www.htsjk.Com true http://www.htsjk.com/shujukunews/47677.html NewsArticle 手动部署OceanBase三副本集群方式, 目录 手动部署ob三副本集群 1. IP地址和机器规划 2. 初始化机器 3. 安装observer 4. 集群初始化(bootstrap) 5. 部署obproxy(以单节点为例) 6. 创建租户并生...
    评论暂时关闭