手动部署OceanBase三副本集群方式
作者:ReadVersion
手动部署ob三副本集群
1. IP地址和机器规划
机器os :centos 7.5 8c12g
IP地址 | 主机名 | 机器角色 | 说明 |
---|---|---|---|
192.168.32.111 | obce01 | observer+obproxy | |
192.168.32.112 | obce02 | observer | |
192.168.32.113 | obce03 | observer+obproxy | |
192.168.32.114 | obce04 | observer | 新增,扩容 |
192.168.32.115 | obce05 | observer+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生成数据
查看生成结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。