本实践练习实现手动部署单副本单节点集群、多副本多节点集群和集群扩容。
一、手动部署OB单副本集群
本实验手动部署单节点单副本集群。
1、部署环境
服务器信息
IP地址 | 10.0.14.22 |
网卡名 | enp0s8 |
OS | CentOS Linux release 7.8.2003 (Core) |
CPU | 16C |
内存 | 20G |
磁盘1 | 本地盘/dev/sdd(300G ) (sdd盘lvm /data、/redo) |
机器和角色划分
角色 | 机器 | 备注 |
OBPROXY | 10.0.14.22 | OceanBase反向代理访问 |
OBSERVER | 10.0.14.22 | OceanBase数据库 |
OBCLIENT | 10.0.14.22 | OceanBase命令行客户端 |
2、服务器初始化
执行OceanBase数据库软件部署前对服务器的相关初始化配置。
内核参数修改
vim /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
让配置生效
sysctl -p
修改会话变量设置
vi /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
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭SELinux
vi /etc/selinux/config
SELINUX=disabled
创建安装用户
# 新增普通用户 admin
useradd admin
# 改用户密码
passwd admin
# 配置用户admin sudo权限
vi /etc/sudoers
磁盘目录配置
模拟生产环境中使用LV进行数据存储。
# 创建pv
pvcreate /dev/sdd
# 创建vg
vgcreate vg /dev/sdd
# 创建lv
lvcreate -L 200G -n data1 vg
lvcreate -L 20G vg -n datalog1 vg
# 格式化文件系统
mkfs.ext4 /dev/mapper/vg-data1
mkfs.ext4 /dev/mapper/vg-datalog1
# 挂载文件系统
mkdir -p /redo
mkdir -p /data
vi /etc/fstab
/dev/mapper/vg-data1 /data ext4 defaults 0 0
/dev/mapper/vg-datalog1 /redo ext4 defaults 0 0
mount -a
初始化目录
# 创建相关目录
mkdir -p /home/admin/oceanbase/store/obdemo
mkdir -p /data/obdemo/{sstable,etc2}
mkdir -p /redo/obdemo/{clog,ilog,slog,etc3}
# 建立目录链接
for f in {sstable,etc2}; do ln -s /data/obdemo/$f /home/admin/oceanbase/store/obdemo/$f; done
for f in {clog,ilog,slog,etc3}; do ln -s /redo/obdemo/$f /home/admin/oceanbase/store/obdemo/$f ; done
# 修改目录所有者权限
chown -R admin:admin /data
chown -R admin:admin /redo
# 查看目录结构
tree /data/obdemo
tree /redo/obdemo
tree /home/admin/oceanbase/store/
3、部署OceanBase集群
本实验手动部署单节点单副本OceanBase集群,包括代理服务obproxy和obclient。
下载安装程序包文件
使用如下命令下载相关程序包文件:
安装oceanbase数据库程序
#执行如下命令
su - admin
cd software
sudo rpm -ivh oceanbase-ce-libs-3.1.3-10000292022032916.el7.x86_64.rpm
sudo rpm -ivh oceanbase-ce-3.1.3-10000292022032916.el7.x86_64.rpm
安装obclient客户端程序
#执行如下命令
sudo rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm
sudo rpm -ivh obclient-2.0.1-2.el7.x86_64.rpm
安装obproxy代理程序
#执行如下命令
sudo rpm -ivh obproxy-ce-3.2.3-2.el7.x86_64.rpm
启动节点observer
#执行如下命令启动单节点单副本observer进程
su - admin
cd oceanbase
cd ~/oceanbase && bin/observer -i enp0s8 -p 2881 -P 2882 -z zone1 -d ~/oceanbase/store/obdemo -r '10.0.14.22:2882:2881' -c 20220712 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=10,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"
初始化集群
#执行如下命令初始化集群(初始密码为空)
obclient -h 10.0.14.22 -P 2881 -uroot -p -c -A
set session ob_query_timeout=1000000000;
alter system bootstrap ZONE 'zone1' SERVER '10.0.14.22:2882';
# 退出重新登录(租户sys),执行如下命令:
obclient -h 10.0.14.22 -P 2881 -uroot@sys -p -c -A oceanbase
# 并查看当前server列表
select zone, svr_ip, svr_port, with_rootserver, status from __all_server order by zone, with_rootserver desc;
设置相关密码
主要是修改管理员root的密码,以及创建obproxy代理用户。
#集群管理员(root@sys)密码默认集群管理员(root@sys)的密码是空的,这里需要设置一个密码。
alter user root identified by 'rootroot';
#OBPROXY用户(proxyro)密码默认OBPROXY连接OceanBase集群使用用户proxyro,这个用户不存在需要创建。
grant select on oceanbase.* to proxyro identified by 'proxyro';
启动obproxy进程
启动OBPROXY进程也推荐在软件安装目录,进程obproxy会在该目录下生成目录etc保存OBPROXY的运行参数,以及目录log保存运行日志。
# 执行如下命令启动obproxy进程
bin/obproxy -r "10.0.14.22:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo
# 登录obproxy,查看系统管理员密码参数
obclient -h10.0.14.22 -P 2883 -u root@proxysys -p
show proxyconfig like '%sys_password%';
# 设置相关密码
修改OBPROXY用户密码是通过修改参数的方式,命令是:alter proxyconfig set
alter proxyconfig set obproxy_sys_password = 'obproxy';
同时还需要修改OBPROXY连接OceanBase集群用户proxyro的密码。这样OBPROXY才能跟 OceanBase集群正常连接。这个密码就是前面 OceanBase 集群初始化后创建的用户proxyro的密码。
alter proxyconfig set observer_sys_password = 'proxyro';
4、验证OceanBase集群
部署成功oceanbase集群、客户端和obproxy代理之后,验证相关功能时直接登录obproxy代理访问数据库。
登录测试OceanBase集群
登录使用命令:obclient -h 10.0.14.22 -P 2883 -uroot@sys -p -c -A oceanbase
创建租户
#查看当前资源规格及资源池配置:
select unit_config_id, name from __all_unit_config;
select resource_pool_id, name from __all_resource_pool;
#创建租户所需的资源规格和资源池
create resource unit my_unit1 max_cpu=1, max_memory='1g', max_iops=128, max_disk_size='5g', max_session_num=64, min_cpu=1, min_memory='1g', min_iops=128;
create resource pool my_pool1 unit='my_unit1', unit_num=1, zone_list=('zone1');
#再次查看资源规格及资源池配置
#执行如下命令创建一个租户对象
create tenant my_tenant1 resource_pool_list=('my_pool1');
创建业务数据库
重新登录数据库,连接新建业务租户:my_tenant1
执行命令:obclient -h 127.0.0.1 -P 2883 -u root@my_tenant1 -p -c -A oceanbase
注:新建租户下默认管理员密码为空
# 修改管理员密码
alter user root identified by 'rootroot';
# 创建数据库 userdb
create database userdb;
创建业务数据表
create table user(id int(4) primary key, name varchar(20));
#新增数据表记录
insert into user(id, name) values(1, '张三');
insert into user(id, name) values(2, '李四');
insert into user(id, name) values(3, '王五');