• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 嘉6148 | 发布时间: 2025-6-20 09:05| 查看数: 55| 评论数: 0|帖子模式

    手动部署ob三副本集群


    1. IP地址和机器规划

    机器os :centos 7.5 8c12g
    IP地址主机名机器角色说明192.168.32.111obce01observer+obproxy192.168.32.112obce02observer192.168.32.113obce03observer+obproxy192.168.32.114obce04observer新增,扩容192.168.32.115obce05observer+obproxy新增,扩容注意:机器只有一块磁盘,只演示在单盘上部署observer。

    2. 初始化机器

    2.1 修改内核参数
    1. cat << EOF >> /etc/sysctl.conf

    2. net.core.somaxconn = 2048
    3. net.core.netdev_max_backlog = 10000
    4. net.core.rmem_default = 16777216
    5. net.core.wmem_default = 16777216
    6. net.core.rmem_max = 16777216
    7. net.core.wmem_max = 16777216

    8. net.ipv4.ip_local_port_range = 3500 65535
    9. net.ipv4.ip_forward = 0
    10. net.ipv4.conf.default.rp_filter = 1
    11. net.ipv4.conf.default.accept_source_route = 0
    12. net.ipv4.tcp_syncookies = 0
    13. net.ipv4.tcp_rmem = 4096 87380 16777216
    14. net.ipv4.tcp_wmem = 4096 65536 16777216
    15. net.ipv4.tcp_max_syn_backlog = 16384
    16. net.ipv4.tcp_fin_timeout = 15
    17. net.ipv4.tcp_max_syn_backlog = 16384
    18. net.ipv4.tcp_tw_reuse = 1
    19. net.ipv4.tcp_tw_recycle = 1
    20. net.ipv4.tcp_slow_start_after_idle=0

    21. vm.swappiness = 0
    22. vm.min_free_kbytes = 2097152
    23. vm.max_map_count=655360
    24. fs.aio-max-nr=1048576
    25. EOF
    复制代码
    然后执行
    1. sysctl -p
    复制代码
    使环境生效。

    2.2 修改会话变量
    将会话级别的最大栈空间大小设置为
    1. unlimited
    复制代码
    ,最大文件句柄数设置为 655350,Core 文件大小设置为
    1. unlimited
    复制代码

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

    2. cat << EOF >> /etc/security/limits.conf

    3. * soft nofile 655360
    4. * hard nofile 655360
    5. * soft nproc 655360
    6. * hard nproc 655360
    7. * soft core unlimited
    8. * hard core unlimited
    9. * soft stack unlimited
    10. * hard stack unlimited
    11. EOF
    复制代码
    2.3 关闭防火墙和selinux
    1. systemctl disable firewalld
    2. systemctl stop firewalld
    3. systemctl status firewalld

    4. vi /etc/selinux/config

    5. SELINUX=disabled

    6. # 立即生效
    7. setenforce 0
    8. # 查看
    9. getenforce
    复制代码
    2.4 配置时钟源
    1. yum -y install chrony
    复制代码
    直接套用官方文档的配置:
    1. vi /etc/chrony.conf

    2. # server 后面跟时间同步服务器
    3. # 使用pool.ntp.org 项目中的公共服务器。按 server 配置,理论上您想添加多少时间服务器都可以。
    4. # 或者使用 阿里云的 ntp 服务器
    5. # Please consider joining the pool (http://www.pool.ntp.org/join.html).
    6. server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
    7. server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
    8. server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
    9. server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
    10. server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

    11. # 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。
    12. # 如果选中的是本机,则取消下面 server 注释
    13. #server 127.127.1.0

    14. # 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
    15. driftfile /var/lib/chrony/drift

    16. # chronyd 根据需求减慢或加速时间调整,
    17. # 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。
    18. # 该指令强制 chronyd 调整时期,大于某个阀值时步进调整系统时钟。
    19. # 只有在因 chronyd 启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。
    20. makestep 1.0 3

    21. # 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
    22. rtcsync

    23. # Enable hardware timestamping on all interfaces that support it.
    24. # 通过使用hwtimestamp指令启用硬件时间戳
    25. #hwtimestamp eth0
    26. #hwtimestamp eth1
    27. #hwtimestamp *

    28. # Increase the minimum number of selectable sources required to adjust
    29. # the system clock.
    30. #minsources 2

    31. # 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器
    32. #allow 192.168.0.0/16
    33. #deny 192.168/16

    34. # 即使没有同步到时间源,也要服务时间
    35. local stratum 10

    36. # 指定包含NTP验证密钥的文件。
    37. #keyfile /etc/chrony.keys

    38. # 指定日志文件的目录。
    39. logdir /var/log/chrony

    40. # Select which information is logged.
    41. #log measurements statistics tracking
    复制代码
    启动服务
    1. systemctl start chronyd.service
    2. systemctl status chronyd.service
    复制代码

    查看时间信息
    1. 查看时间同步活动
    2. chronyc activity

    3. 查看时间服务器
    4. chronyc sources

    5. 查看同步状态
    6. chronyc sources -v

    7. 校准时间服务器:
    8. chronyc tracking
    复制代码



    连同时区一起配置了
    1. timedatectl set-timezone Asia/Shanghai
    2. chronyc -a makestep
    复制代码
    2.5 创建用户并初始化目录
    注意配置admin用户sudo权限
    1. groupadd -g 500 admin
    2. useradd -g 500 -u 500 admin
    3. echo 'admin:admin' | chpasswd
    4. sudo vi /etc/sudoers
    5. # 新增一行
    6. admin   ALL=(ALL)       ALL

    7. mkdir /data
    8. mkdir /redo
    9. chown -R admin:admin /data
    10. chown -R admin:admin /redo
    11. su - admin
    12. mkdir -p /home/admin/oceanbase/store/obcluster  /data/obcluster/{sstable,etc3} /redo/obcluster/{clog,ilog,slog,etc2}
    13. for f in {clog,ilog,slog,etc2}; do ln -s /redo/obcluster/$f /home/admin/oceanbase/store/obcluster/$f ; done
    14. for f in {sstable,etc3}; do ln -s /data/obcluster/$f /home/admin/oceanbase/store/obcluster/$f; done
    复制代码
    3. 安装observer

    下载rpm包并上传安装(从官网找下载链接)
    1. yum install lrzsz -y
    2. rpm -ivh oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm
    3. rpm -ivh oceanbase-ce-3.1.1-4.el7.x86_64.rpm

    4. su - admin
    5. echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib' >> ~/.bash_profile
    6. . ~/.bash_profile

    7. # 注意:zone的名称要根据机器不同而改变,下面是zone1的启动命令
    8. 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
    复制代码
    启动之后,
    1. ps -ef| grep observer
    复制代码
    检查进程是否运行正常,使用
    1. netstat -ntlp
    复制代码
    检查端口开启情况
    有兴趣的可以查看日志,看一下observer在初始化启动过程中都做了哪些操作‘。
    1. cd /home/admin/oceanbase/log
    2. tail -f observer.log
    3. # 查看warning级别以上的日志
    4. tail -n 20 observer.log.wf
    复制代码
    安装obclient
    安装包从官网下载并上传到机器上。
    1. rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm
    2. rpm -ivh obclient-2.0.0-2.el7.x86_64.rpm
    复制代码
    4. 集群初始化(bootstrap)

    在新部署的机器上是没有密码的,输密码直接回车即可,或者去掉
    1. -p
    复制代码
    参数
    1. obclient -h 127.0.0.1 -u root -P 2881 -p -c -A

    2. 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用户登录数据库并设置密码:
    1. obclient -h 127.0.0.1 -u root@sys -P 2881 -c -A
    2. alter user root identified by 'root123';
    复制代码

    在其他机器上测试:

    测试成功。

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

    从官网下载并安装obproxy软件包
    1. rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm
    复制代码
    启动obproxy
    1. 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
    复制代码

    尝试连接,又出现了经典报错:
    (官方文档给了解释,此处只为模拟问题)
    1. ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11
    复制代码

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

    说明问题出在obproxy与observer间的通信上。
    需要设置root@proxysys的密码。

    1. obclient -h 127.0.0.1 -u root@proxysys -P 2883
    2. # 设置管理obproxy的root用户密码
    3. alter proxyconfig set obproxy_sys_password = 'root123' ;
    4. # 设置与observer连接的用户的密码
    5. alter proxyconfig set observer_sys_password = 'root123' ;
    复制代码
    设置之后,还需要修改observer里proxyro用户的密码。
    登录observer,查看用户
    1. obclient -h 127.0.0.1 -u root@sys -P 2881 -c -A -proot123 -Doceanbase
    2. select user_id,user_name from __all_user;
    复制代码

    发现并没有这个用户,需要创建出来并授权(只读用户,select即可):
    1. create user proxyro identified by 'root123';
    2. grant select on *.* to proxyro;
    复制代码
    再次测试发现可以连接了!


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

    6.1 创建unit和资源池、租户
    1. create resource unit lcxunit max_cpu=2,max_memory='2G',max_iops=10000,max_disk_size='2G',max_session_num=2000;
    2. create resource pool lcxpool unit='lcxunit',unit_num=1;
    3. 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='%';

    4. #删除租户
    5. DROP TENANT tenant_name [FORCE]
    复制代码

    查看租户信息:

    查看资源分配情况和
    1. 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;
    2. 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生成数据

    查看生成结果



    总结

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

    来源:https://www.jb51.net/database/318857jsh.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表